「马上学tensorflow 2.0」神经网络的“引擎”:梯度下降优化算法

大家好,今天我们学习【马上学tensorflow 2.0】之 神经网络的“引擎”:梯度下降优化算法。

我们 马上学三点

  1. 训练循环
  2. 随机梯度下降
  3. 反向传播算法

大家可以点击下面的“ 了解更多 ”,或搜索“ 马上学123 ”,在线观看PPT讲义。

训练循环

上一节介绍过, 神经网络中每层对输入数据 所做的具体操作保存在该层的权重(weight)中, 其本质是一串数字。 用术语来说,每层实现的变换由其权重来参数化, 这些权重包含网络从观察训练数据中学到的信息。

一开始,这些权重取较小的随机值, 这一步叫作随机初始化

下一步则是根据反馈信号逐渐调节这些权重, 这个逐渐调节的过程叫作训练, 也就是机器学习中的学习

上述过程发生在一个训练循环内, 其具体过程如下, 必要时一直重复这些步骤:

  1. 抽取训练样本 x 和对应目标 y 组成的数据批量
  2. 在 x 上运行网络,这一步叫作前向传播,得到预测值 y_pred。
  3. 计算网络在这批数据上的损失, 用于衡量预测值 y_pred 和 预期目标y 之间的距离
  4. 更新网络的所有权重, 使网络在这批数据上的损失略微下降

最终得到的网络在训练数据上的损失非常小, 即预测值 y_pred 和预期目标 y 之间的距离非常小。 网络“学会”将输入映射到正确的目标

随机梯度下降

我们重点看一下训练循环的第四步:更新网络的权重。

我们要更新网络中某个权重系数, 你怎么知道这个系数应该增大还是减小,以及变化多少?

一种比较好的方法是利用网络中所有运算都是可微的这一事实, 你可以计算出它的梯度, 沿着梯度的反方向更新权重, 损失每次都会变小一点。

我们这里介绍一种叫做小批量随机梯度下降(SGD)的方法, 这里的随机是指每批数据都是随机抽取的, 它的步骤:

  1. 抽取训练样本 x 和对应目标 y 组成的数据批量
  2. 在x上运行网络,得到预测值 y_pred。
  3. 计算网络在这批数据上的损失,用于衡量 y_pred 和 y 之间的距离。
  4. 计算损失相对于网络参数的梯度,一次反向传播
  5. 将参数沿着梯度的反方向移动一点, 从而使这批数据上的损失减小一点。

先说一个概念, 导数可以看做斜率, 梯度是导数这一概念向多元函数导数的推广。

我们看一下一维的情况,网络只有一个参数,并且只有一个训练样本。

给定一个可微函数, 函数的最小值是导数为 0的点, 我们让导数不断下降, 就可以找到最低点。

如图, 沿着一维损失函数曲线的随机梯度下降, 为步长,也就是学习率选取合适的值是很重要的。

  • 如果取值太小,则沿着曲线的下降需要很多次迭代, 而且可能会陷入局部极小点
  • 如果取值太大, 则更新权重值之后可能会出现在曲线上完全随机的位置。

反向传播算法

将链式法则应用于神经网络梯度值的计算, 得到的算法叫作反向传播。 反向传播从最终损失值开始, 从最顶层反向作用至最底层, 利用链式法则计算每个参数对损失值的贡献大小

tensorflow等框架已经帮助我们实现了自动求微分, 给定一个运算链, 并且已知每个运算的导数, 这些框架就可以利用链式法则来计算这个运算链的梯度函数, 将网络参数值映射为梯度值

对于这样的函数,反向传播就简化为调用这个梯度函数。 由于自动求微分的出现, 你无须手动实现反向传播算法。 因此,我们不会在本节浪费你的时间和精力来推导反向传播的具体公式。 你只需充分理解基于梯度的优化方法的工作原理。

总结

  • 学习是指找到一组模型参数, 使得在给定的训练数据样本和对应目标值上的损失函数最小化。
  • 学习的过程:随机选取包含数据样本及其目标值的批量,并计算批量损失相对于网络参 数的梯度。随后将网络参数沿着梯度的反方向稍稍移动。
  • 整个学习过程之所以能够实现,是因为神经网络是一系列可微分的张量运算,因此可以 利用求导的链式法则来得到梯度函数,这个函数将当前参数和当前数据批量映射为一个 梯度值。

这里讲了三点,关键词有哪几个?

问题:你还知道那些梯度下降方法?

欢迎回复评论!

马上学123,很简单!

发表评论
留言与评论(共有 0 条评论)
   
验证码:

相关文章

推荐文章

'); })();