淘优惠

淘优惠

教程 | Keras+OpenAI强化学习实践:行为-评判模型

热门文章 0

淘宝搜:【天降红包222】领超级红包,京东搜:【天降红包222】
淘宝互助,淘宝双11微信互助群关注公众号 【淘姐妹】


选自Medium

作者:Yash Patel

机器之心编译

参与:乾树、黄小天

本文先给出行为-评判模型(actor-critic model)的基本原理,包括链式求导法则等,随后再从模型的参数、模型的训练和模型的测试等方面用代码段解释行为-评判模型,最后,文章给出了该教程的全部代码。

像之前的教程一样,我们首先快速了解一下已取得的惊人成果:在一个连续的输出空间场景下,从完全不明白「胜利」的含义开始,现在我们可以探索环境并「完成」试验。

将自身置身于模拟环境中。这就相当于要求你在没有游戏说明书和特定目标的场景下玩一场游戏,且不可中断,直到你赢得整个游戏(这有些近乎残忍)。不仅如此:一系列动作可能产生的结果状态是无穷无尽的(即连续观测空间)!然而,DQN 通过调控并缓慢更新各动作内部参数的值可以快速解决这个看似不可能的任务。

更复杂的环境

从以前的 MountainCar 环境向 Pendulum 环境的升级与 CartPole 到 MountainCar 的升级极其相似:我们正在从一个离散的环境扩展到连续的环境。Pendulum 环境具有无限的输入空间,这意味着你在任何给定时间可以进行不限次数的动作。为何 DQN 不再适用此类环境了?DQN 的实现不是完全独立于环境动作的结构吗?

不同于 MountainCar-v0,Pendulum-v0 通过给我们提供了无穷大的输入空间而构成了更大的挑战。

虽然它与动作无关,但 DQN 的基本原理是拥有有限的输出空间。毕竟,我们要考虑该如何构建代码:预测会在每个时间步长(给定当前环境状态)下为每个可能的动作分配一个分数,并简单地采用得分最高的动作。我们之前已经简化了强化学习的问题,以便高效地为每个动作分配分数。但是,如果我们输入空间无限大,这还有可能吗?我们需要一个无限大的表格来记录所有的 Q 值!

无限大的数据表听起来很不靠谱!

我们该如何着手解决这个看似不可能的任务呢?毕竟,我们现在要做比以前更加疯狂的事:不仅仅只是赢下一场没有攻略的游戏,现在我们还要应对一个被无数条指令控制的游戏!让我们来看看为什么 DQN 只接收有限数量的动作输入。

我们从模型的搭建方式来分析。我们必须能够在每个时间步迭代更新特定的动作位置的改变方式。这正是为什么我们让模型预测 Q 值,而不是直接预测下一步的动作。如果选择了后者,我们不知道如何更新模型以更好地预测,以及从对未来的预测中获利。

因此,本质问题源于一个事实――类似于模型已经输出与所有可能发生的行动相关的奖励的列表运算结果。如果我们把这个模型拆解开会怎样?如果我们有两个独立的模型:一个输出期望的动作(在连续空间中),另一个以它的输出作为输入,以产生 DQN 的 Q 值?这貌似解决了我们的问题,而且这正是行为-评判模型(actor-critic model)的基本原理!

行为-评判模型原理

不同于 DQN 算法,行为-评判模型(如名字所示)有两个独立的网络:一个基于当前的环境状态预测出即将被采用的动作,另一个用于计算状态和动作下的价值。

正如上节所述,整个行为―评判(AC)方法可行的前提是有两个交互模型。多个神经网络之间相互关联的主题在强化学习和监督学习(即 GAN、AC、A3C、DDQN(升级版 DQN)等)中越发凸显。初次了解这些架构可能有些困难,但这绝对值得去做:你将能够理解和编程实现一些现代领域研究前沿的算法!

回到主题,AC 模型有两个恰如其分的名字:行为和评判。前者接受当前的环境状态,并决定从哪个状态获得最佳动作。它以非常类似于人类自身的行为方式来实现 DQN 算法。评判模块通过从 DQN 中接受环境状态和动作并返回一个表征动作状态的分数来完成评判功能。

把这想象成是一个孩子(「行为模块」)与其父母(「评判模块」)的游乐场。孩子正在环顾四周,探索周边环境中的所有可能选择,例如滑动幻灯片,荡秋千,在草地上玩耍。父母会照看孩子并基于其所为,对孩子给出批评或补充。父母的决定依赖于环境的事实无可否认:毕竟,如果孩子试图在真实的秋千上玩耍,相比于试图在幻灯片上这样做,孩子更值得表扬!

简介:链式法则(可选)

你需要理解的主要理论在很大程度上支撑着现代机器学习:链式法则。毫不夸张的说链式法则可能是掌握理解实用机器学习的最关键的(即使有些简单)的想法之一。事实上,如果只是直观地了解链式法则的概念,你并不需要很深厚的数学背景。我会非常快速地讲解链式法则,但如果你已了解,请随意跳到下一部分,下一部分我们将看到开发 AC 模型的实际概述,以及链条法则如何适用于该规划。

一个看似可能来自你第一节微积分课堂上的简单概念,构成了实用机器学习的现代基础,因为它在反向推算和类似算法中有着令人难以置信的加速运算效果。

这个等式看起来非常直观:毕竟只是「重写了分子/分母」。这个「直观的解释」有一个主要问题:等式中的推导完全是倒退的!关键是要记住,数学中引入直观的符号是为了帮助我们理解概念。因此,由于链式法则的计算方式非常类似于简化分数的运算过程,人们才引入这种「分数」符号。那么试图通过符号来解释概念的人正在跳过关键的一步:为什么这些符号可以通用?如同这里,为什么要像这样进行求导?

可以借助经典的弹簧实例可视化运动中的链条规则

基本概念实际上并不比这个符号更难理解。想象一下,我们把一捆绳子一根根地系在一起,类似于把一堆弹簧串联起来。假设你固定了这个弹簧系统的一端,你的目标是以 10 英尺/秒的速度摇晃另一端,那么你可以用这个速度摇动你的末端,并把它传播到另一端。或者你可以连接一些中间系统,以较低的速率摇动中间连接,例如,5 英尺/秒。也就是说,在 5 英尺/秒的情况下,你只需要以 2 英尺/秒的速度摇动末端,因为你从开始到终点做的任何运动都会被传递到终点位置。这是因为物理连接迫使一端的运动被传递到末端。注意:和其它类比一样,这里有一些不当之处,但这主要是为了可视化。

类似地,如果我们有两个系统,其中一个系统的输出是另一个系统的输入,微调「反馈网络」的参数将会影响其输出,该输出会被传播下去并乘以任何进一步的变化值并贯穿整个网络。

AC 模型概述

因此,我们必须制定一个 ActorCritic 类,它包含一些之前实现过的 DQN,但是其训练过程更复杂。因为我们需要一些更高级的功能,我们必须使用包含了基础库 Keras 的开源框架:Tensorflow。注意:你也可以在 Theano 中实现这一点,但是我以前没有使用过它,所以没有包含其代码。如果你选择这么做,请随时向 Theano 提交此代码的扩展。

模型实现包含四个主要部分,其直接并行如何实现 DQN 代理:

  • 模型参数/配置
  • 训练代码
  • 预测代码

AC 参数

第一步,导入需要的库

参数与 DQN 中的参数非常类似。毕竟,这个行为-评判模型除了两个独立的模块之外,还要做与 DQN 相同的任务。我们还继续使用我们在 DQN 报告中讨论的「目标网络攻击」,以确保网络成功收敛。唯一的新参数是「tau」,并且涉及在这种情况下如何进行目标网络学习的细微变化:

在以下的训练部分中,详细解释了 tau 参数的准确用法,它的作用其实就是推动预测模型向目标模型逐步转换。现在,我们找到了主要的关注点:定义模型。正如我们所描述的,我们有两个独立的模型,每个模型都与它自己的目标网络相关联。

我们从定义行为模型开始。行为模型的目的是根据当前环境状态,得出应当采取的最佳动作。再次,这个模型需要处理我们提供的数字数据,这意味着没有空间也没有必要在网络中添加任何比我们迄今为止使用的密集/完全连接层更复杂的层。因此,行为模型只是一系列全连接层,将环境观察的状态映射到环境空间上的一个点:

主要的区别是我们返回了一个对输入层的引用。本节结尾对此原因的解释十分清楚,但简而言之,这解释了我们为什么对行为模型的训练过程采取不同的处理。

行为模型中的棘手部分是决定如何训练它,这就是链式法则发挥作用的地方。但在讨论之前,让我们考虑一下为什么它与标准评论/ DQN 网络的训练不同。毕竟,我们不是简单地去适应在 DQN(根据当前状态拟合模型)的情况下,基于当前的和打折的未来奖励得出接下来采用的最佳动作是哪一个?问题在于:如果我们能够按照要求去做,那么这个问题将会解决。问题在于我们如何确定「最佳动作」是什么,因为 Q 值现在是在评判网络中单独计算出来的。

所以,为了解决这个问题,我们选择了一种替代方法。不同于找到「最佳选择」和拟合,我们实际上选择了爬山算法(梯度上升)。对于不熟悉这个算法的人来说,登山是一个形象的比喻:从你当地的 POV,找到斜率最大的倾斜方向,并沿着该方向逐步移动。换句话说,爬山正试图通过原始的冲动并沿着局部斜率最大的方向来达到全局最大值。可以想象在某些情况下,该方法大错特错,但通常情况下,它具备很好的实用性。

因此,我们想使用该算法来更新我们的行为模型:我们想确定(行为模型中的)参数的什么变化会导致 Q 值最大幅度的增加(由评判模型预测得出)。由于行为模型的输出是动作,评判模型通过环境状态+动作对来评估,我们在此可以看到链式法则如何发挥作用。我们想看看如何改变行为模型的参数才会改变最终的 Q 值,使用行为网络的输出作为我们的「中间链接」(下面的代码全部在「__init __(self)」方法中):

我们看到在这里我们持有模型权重和输出(动作)之间的梯度。我们还通过负的 self.actor_critic_grad(因为我们想在这种情况下使用梯度上升)来放缩它,梯度由占位符持有。对于那些不熟悉 Tensorflow 或首次接触的读者,你只需要知道运行 Tensorflow 会话时,占位符将扮演「输入数据」的角色。我不会详细介绍它的工作原理,因为 tensorflow.org 教程的材料相当全面。

再来看看评判网络,基本上我们面临着相反的问题。即,网络定义稍微复杂一些,但是训练比较简单。评判网络旨在将环境状态和动作作为输入,并计算出相应的估值。我们通过合并一系列全连接层以及得出最终的 Q 值预测之前的中间层来实现这一点:

需要注意的是如何处理输入和返回的不对称性。对于第一点,我们在环境状态输入中有一个额外的 FC(全连接)层。我这样做是因为这是推荐 AC 网络使用的结构,但它可能与处理两个输入的 FC 层效果差不多(或稍差)。至于后面一点(我们正在返回的值),我们需要保留输入状态和动作的引用,因为我们需要使用它们更新行为网络:

我们在这里设置要计算的缺失梯度:关于动作权重的输出 Q。这是训练代码中直接调用的,我们现在来深入探讨。

AC 模型训练

该代码的最后一个主要与 DQN 不同的部分是实际的训练代码。然而,我们使用了从记忆(LSTM 结构)中吸取教训和学习的基本结构。由于我们有两种训练方法,我们将代码分成不同的训练函数,并将它们称为:

现在我们定义两种训练方法。不过,与 DQN 非常相似:我们只是简单地找到未来打折的奖励和训练方法。唯一的区别是,我们正在对状态/动作对进行训练,并使用 target_critic_model 来预测未来的奖励,而不是仅使用行为来预测:

对于行为模型,我们幸运地解决了所有难题!我们已经设置了梯度如何在网络中运作,现在只需传入当前的动作和状态并调用该函数:

如上所述,我们利用了目标模型。所以我们必须在每个时间步更新其权重。但是,更新过程太慢了。具体说,我们将目标模型的估值保持在一个分数 self.tau 上,并将其更新为余数(1-self.tau)分数的相应模型权重。行为/评判模型均如此处理,但下面只给出行为模型的代码(你可以在文章底部的完整代码中看到评判模型代码):

AC 模型预测

这与我们在 DQN 中的做法一样,所以没有什么好说的:

预测代码

预测代码也与之前的强化学习算法相同。也就是说,我们只需反复试验,并对代理进行预测、记忆和训练:

完整代码

这是使用 AC(Actor-Critic)对「Pendulum-v0」环境进行训练的完整代码!

原文地址:https://medium.com/towards-data-science/reinforcement-learning-w-keras-openai-actor-critic-models-f084612cfd69

本文为机器之心编译,转载请联系本公众号获得授权。



教程 | 听说你了解深度学习最常用的学习算法:Adam优化算法?


原标题:教程 | 听说你了解深度学习最常用的学习算法:Adam优化算法?

选自arXiv

机器之心编译

参与:蒋思源

深度学习常常需要大量的时间和机算资源进行训练,这也是困扰深度学习算法开发的重大原因。虽然我们可以采用分布式并行训练加速模型的学习,但所需的计算资源并没有丝毫减少。而唯有需要资源更少、令模型收敛更快的最优化算法,才能从根本上加速机器的学习速度和效果,Adam 算法正为此而生!

Adam 优化算法是随机梯度下降算法的扩展式,近来其广泛用于深度学习应用中,尤其是计算机视觉和自然语言处理等任务。本文分为两部分,前一部分简要介绍了 Adam 优化算法的特性和其在深度学习中的应用,后一部分从 Adam 优化算法的原论文出发,详细解释和推导了它的算法过程和更新规则。我们希望读者在读完两部分后能了解掌握以下几点:

  • Adam 算法是什么,它为优化深度学习模型带来了哪些优势。

  • Adam 算法的原理机制是怎么样的,它与相关的 AdaGrad 和 RMSProp 方法有什么区别。

  • Adam 算法应该如何调参,它常用的配置参数是怎么样的。

  • Adam 的实现优化的过程和权重更新规则

  • Adam 的初始化偏差修正的推导

  • Adam 的扩展形式:AdaMax

什么是 Adam 优化算法?

Adam 是一种可以替代传统随机梯度下降过程的一阶优化算法,它能基于训练数据迭代地更新神经网络权重。Adam 最开始是由 OpenAI 的 Diederik Kingma 和多伦多大学的 Jimmy Ba 在提交到 2015 年 ICLR 论文(Adam: A Method for Stochastic Optimization)中提出的。本文前后两部分都基于该论文的论述和解释。

首先该算法名为「Adam」,其并不是首字母缩写,也不是人名。它的名称来源于适应性矩估计(adaptive moment estimation)。在介绍这个算法时,原论文列举了将 Adam 优化算法应用在非凸优化问题中所获得的优势:

  • 直截了当地实现

  • 高效的计算

  • 所需内存少

  • 梯度对角缩放的不变性(第二部分将给予证明)

  • 适合解决含大规模数据和参数的优化问题

  • 适用于非稳态(non-stationary)目标

  • 适用于解决包含很高噪声或稀疏梯度的问题

  • 超参数可以很直观地解释,并且基本上只需极少量的调参

Adam 优化算法的基本机制

Adam 算法和传统的随机梯度下降不同。随机梯度下降保持单一的学习率(即 alpha)更新所有的权重,学习率在训练过程中并不会改变。而 Adam 通过计算梯度的一阶矩估计和二阶矩估计而为不同的参数设计独立的自适应性学习率。

Adam 算法的提出者描述其为两种随机梯度下降扩展式的优点集合,即:

  • 适应性梯度算法(AdaGrad)为每一个参数保留一个学习率以提升在稀疏梯度(即自然语言和计算机视觉问题)上的性能。

  • 均方根传播(RMSProp)基于权重梯度最近量级的均值为每一个参数适应性地保留学习率。这意味着算法在非稳态和在线问题上有很有优秀的性能。

Adam 算法同时获得了 AdaGrad 和 RMSProp 算法的优点。Adam 不仅如 RMSProp 算法那样基于一阶矩均值计算适应性参数学习率,它同时还充分利用了梯度的二阶矩均值(即有偏方差/uncentered variance)。具体来说,算法计算了梯度的指数移动均值(exponential moving average),超参数 beta1 和 beta2 控制了这些移动均值的衰减率。

移动均值的初始值和 beta1、beta2 值接近于 1(推荐值),因此矩估计的偏差接近于 0。该偏差通过首先计算带偏差的估计而后计算偏差修正后的估计而得到提升。如果对具体的实现细节和推导过程感兴趣,可以继续阅读该第二部分和原论文。

Adam 算法的高效性

Adam 在深度学习领域内是十分流行的算法,因为它能很快地实现优良的结果。经验性结果证明 Adam 算法在实践中性能优异,相对于其他种类的随机优化算法具有很大的优势。

在原论文中,作者经验性地证明了 Adam 算法的收敛性符合理论性的分析。Adam 算法可以在 MNIST 手写字符识别和 IMDB 情感分析数据集上应用优化 logistic 回归算法,也可以在 MNIST 数据集上应用于多层感知机算法和在 CIFAR-10 图像识别数据集上应用于卷积神经网络。他们总结道:「在使用大型模型和数据集的情况下,我们证明了 Adam 优化算法在解决局部深度学习问题上的高效性。」

Adam 优化算法和其他优化算法在多层感知机模型中的对比

事实上,Insofar、RMSprop、Adadelta 和 Adam 算法都是比较类似的优化算法,他们都在类似的情景下都可以执行地非常好。但是 Adam 算法的偏差修正令其在梯度变得稀疏时要比 RMSprop 算法更快速和优秀。Insofar 和 Adam 优化算法基本是最好的全局选择。同样在 CS231n 课程中,Adam 算法也推荐作为默认的优化算法。

虽然 Adam 算法在实践中要比 RMSProp 更加优秀,但同时我们也可以尝试 SGD+Nesterov 动量来作为 Adam 的替代。即我们通常推荐在深度学习模型中使用 Adam 算法或 SGD+Nesterov 动量法。

Adam 的参数配置

  • alpha:同样也称为学习率或步长因子,它控制了权重的更新比率(如 0.001)。较大的值(如 0.3)在学习率更新前会有更快的初始学习,而较小的值(如 1.0E-5)会令训练收敛到更好的性能。

  • beta1:一阶矩估计的指数衰减率(如 0.9)。

  • beta2:二阶矩估计的指数衰减率(如 0.999)。该超参数在稀疏梯度(如在 NLP 或计算机视觉任务中)中应该设置为接近 1 的数。

  • epsilon:该参数是非常小的数,其为了防止在实现中除以零(如 10E-8)。

另外,学习率衰减同样可以应用到 Adam 中。原论文使用衰减率 alpha=alpha/sqrt(t) 在 logistic 回归每个 epoch(t) 中都得到更新。

Adam 论文建议的参数设定:

测试机器学习问题比较好的默认参数设定为:alpha=0.001、beta1=0.9、beta2=0.999 和 epsilon=10E?8。

我们也可以看到流行的深度学习库都采用了该论文推荐的参数作为默认设定。

  • TensorFlow:learning_rate=0.001, beta1=0.9, beta2=0.999, epsilon=1e-08.

  • Keras:lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-08, decay=0.0.

  • Blocks:learning_rate=0.002, beta1=0.9, beta2=0.999, epsilon=1e-08, decay_factor=1.

  • Lasagne:learning_rate=0.001, beta1=0.9, beta2=0.999, epsilon=1e-08

  • Caffe:learning_rate=0.001, beta1=0.9, beta2=0.999, epsilon=1e-08

  • MxNet:learning_rate=0.001, beta1=0.9, beta2=0.999, epsilon=1e-8

  • Torch:learning_rate=0.001, beta1=0.9, beta2=0.999, epsilon=1e-8

在第一部分中,我们讨论了 Adam 优化算法在深度学习中的基本特性和原理:

  • Adam 是一种在深度学习模型中用来替代随机梯度下降的优化算法。

  • Adam 结合了 AdaGrad 和 RMSProp 算法最优的性能,它还是能提供解决稀疏梯度和噪声问题的优化方法。

  • Adam 的调参相对简单,默认参数就可以处理绝大部分的问题。

而接下来的第二部分我们可以从原论文出发具体展开 Adam 算法的过程和更新规则等。

论文:Adam: A Method for Stochastic Optimization

论文链接:https://arxiv.org/abs/1412.6980

我们提出了 Adam 算法,即一种对随机目标函数执行一阶梯度优化的算法,该算法基于适应性低阶矩估计。Adam 算法很容易实现,并且有很高的计算效率和较低的内存需求。Adam 算法梯度的对角缩放(diagonal rescaling)具有不变性,因此很适合求解带有大规模数据或参数的问题。该算法同样适用于解决大噪声和稀疏梯度的非稳态(non-stationary)问题。超参数可以很直观地解释,并只需要少量调整。本论文还讨论了 Adam 算法与其它一些相类似的算法。我们分析了 Adam 算法的理论收敛性,并提供了收敛率的区间,我们证明收敛速度在在线凸优化框架下达到了最优。经验结果也展示了 Adam 算法在实践上比得上其他随机优化方法。最后,我们讨论了 AdaMax,即一种基于无穷范数(infinity norm)的 Adam 变体。

如上算法所述,在确定了参数α、β1、β2 和随机目标函数 f(θ) 之后,我们需要初始化参数向量、一阶矩向量、二阶矩向量和时间步。然后当参数θ没有收敛时,循环迭代地更新各个部分。即时间步 t 加 1、更新目标函数在该时间步上对参数θ所求的梯度、更新偏差的一阶矩估计和二阶原始矩估计,再计算偏差修正的一阶矩估计和偏差修正的二阶矩估计,然后再用以上计算出来的值更新模型的参数θ。

2. 算法

上图伪代码为展现了 Adam 算法的基本步骤。假定 f(θ) 为噪声目标函数:即关于参数θ可微的随机标量函数。我们对怎样减少该函数的期望值比较感兴趣,即对于不同参数θ,f 的期望值 E[f(θ)]。其中 f1(θ), ..., , fT (θ) 表示在随后时间步 1, ..., T 上的随机函数值。这里的随机性来源于随机子样本(小批量)上的评估和固有的函数噪声。而表示 ft(θ) 关于θ的梯度,即在实践步骤 t 下 ft 对θ的偏导数向量。

该算法更新梯度的指数移动均值(mt)和平方梯度(vt),而参数 β1、β2 ∈ [0, 1) 控制了这些移动均值(moving average)指数衰减率。移动均值本身使用梯度的一阶矩(均值)和二阶原始矩(有偏方差)进行估计。然而因为这些移动均值初始化为 0 向量,所以矩估计值会偏差向 0,特别是在初始时间步中和衰减率非常小(即β接近于 1)的情况下是这样的。但好消息是,初始化偏差很容易抵消,因此我们可以得到偏差修正(bias-corrected)的估计 mt hat 和 vt hat。

注意算法的效率可以通过改变计算顺序而得到提升,例如将伪代码最后三行循环语句替代为以下两个:

2.1 Adam 的更新规则

Adam 算法更新规则的一个重要特征就是它会很谨慎地选择步长的大小。假定ε=0,则在时间步 t 和参数空间上的有效下降步长为有效下降步长有两个上确界:即在情况下,有效步长的上确界满足和其他情况下满足 |?t| ≤ α。第一种情况只有在极其稀疏的情况下才会发生:即梯度除了当前时间步不为零外其他都为零。而在不那么稀疏的情况下,有效步长将会变得更小。当

时,我们有,因此可以得出上确界 |?t| < α。在更通用的场景中,因为 |E[g]/ p E[g^2]| ≤ 1,我们有。每一个时间步的有效步长在参数空间中的量级近似受限于步长因子α,即。这个可以理解为在当前参数值下确定一个置信域,因此其要优于没有提供足够信息的当前梯度估计。这正可以令其相对简单地提前知道α正确的范围。

对于许多机器学习模型来说,我们知道好的最优状态是在参数空间内的集合域上有极高的概率。这并不罕见,例如我们可以在参数上有一个先验分布。因为α确定了参数空间内有效步长的量级(即上确界),我们常常可以推断出α的正确量级,而最优解也可以从θ0 开始通过一定量的迭代而达到。我们可以将称之为信噪比(signal-to-noise ratio/SNR)。如果 SNR 值较小,那么有效步长?t 将接近于 0,目标函数也将收敛到极值。这是非常令人满意的属性,因为越小的 SNR 就意味着算法对方向是否符合真实梯度方向存在着越大的不确定性。例如,SNR 值在最优解附近趋向于 0,因此也会在参数空间有更小的有效步长:即一种自动退火(automatic annealing)的形式。有效步长?t 对于梯度缩放来说仍然是不变量,我们如果用因子 c 重缩放(rescaling)梯度 g,即相当于用因子 c 重缩放和用因子 c^2 缩放,而在计算信噪比时缩放因子会得到抵消:

3 初始化偏差修

群接龙教程


阿迪达 著

小说主角: 依丽 罗汉 黄成林 依贝 庄子 迈克尔 查尔斯 章纲 黄帝 杜甫

相关标签: 校园 对话 自己看 教程 小说

最后更新:2022/3/15 0:00:00

最新章节:教程群最新章节 各个国家的纸币称呼 2022-03-15

小说简介:发布各种我自己看的书里面的教程,不喜勿喷

内容摘要:[依贝导师]:今天讲的是PPT卷,希望各位认真听讲,拿出来小本本记住了。[依贝导师]:word、PowerPoint(简称PPT)、Excel,不知何时,这些林林总总的办公软件已经成为当代职场工作人员的必备技能。[依贝导师]:但是这些你会吗?你是否经常加班工作到深夜,文案改了一遍又一遍,最终却因为搞不定一个小小的办公软件而功亏一篑。入职时间越来越长,新人越来越多,感觉自己永远也跟不上时代的步伐,常被复杂的图表搞得晕头转向,怎么也搞不懂那些需要测算的数据,新人信手拈来的软件工作技巧,自己却苦苦摸不到头绪,特别是向领导汇报工作时,经常被批“懒人一个”“做的太差了”。最终,只能看着新人一个个地高升,被后浪一次次地拍在沙滩上。[依贝导师]:如何是好?[依贝导师]:其实,只要搞定常用的办公软件,就会变得很简单。提升工作效率,得到领导赏识,升职加薪,一切都不是梦。本套丛书将以用好最常用的办公组件Word、Excel和PPT为目标,采用图文并茂的方式,不仅介绍这些软件的基本功能,给出提高效率的方法,更重要的是,结合现代办公和职场的要求,教会读者优化和美化文稿、表格或者演讲幻灯片,使文稿、表格或者演讲

TXT下载:电子书《教程群》.txt

MP3下载:有声小说《教程群》.mp3

开始阅读第1章 介绍办公软件之从入门到精通PPT卷 有声小说第1章 介绍办公软件之从入门到精通PPT卷 下载APP绿色免费APP 相似小说类似小说换源