大家好,今天我们学习【马上学tensorflow 2.0】之 神经网络的“引擎”:梯度下降优化算法。
我们 马上学三点 ,
大家可以点击下面的“ 了解更多 ”,或搜索“ 马上学123 ”,在线观看PPT讲义。
上一节介绍过, 神经网络中每层对输入数据 所做的具体操作保存在该层的权重(weight)中, 其本质是一串数字。 用术语来说,每层实现的变换由其权重来参数化, 这些权重包含网络从观察训练数据中学到的信息。
一开始,这些权重取较小的随机值, 这一步叫作随机初始化。
下一步则是根据反馈信号逐渐调节这些权重, 这个逐渐调节的过程叫作训练, 也就是机器学习中的学习。
上述过程发生在一个训练循环内, 其具体过程如下, 必要时一直重复这些步骤:
最终得到的网络在训练数据上的损失非常小, 即预测值 y_pred 和预期目标 y 之间的距离非常小。 网络“学会”将输入映射到正确的目标。
我们重点看一下训练循环的第四步:更新网络的权重。
我们要更新网络中某个权重系数, 你怎么知道这个系数应该增大还是减小,以及变化多少?
一种比较好的方法是利用网络中所有运算都是可微的这一事实, 你可以计算出它的梯度, 沿着梯度的反方向更新权重, 损失每次都会变小一点。
我们这里介绍一种叫做小批量随机梯度下降(SGD)的方法, 这里的随机是指每批数据都是随机抽取的, 它的步骤:
先说一个概念, 导数可以看做斜率, 梯度是导数这一概念向多元函数导数的推广。
我们看一下一维的情况,网络只有一个参数,并且只有一个训练样本。
给定一个可微函数, 函数的最小值是导数为 0的点, 我们让导数不断下降, 就可以找到最低点。
如图, 沿着一维损失函数曲线的随机梯度下降, 为步长,也就是学习率选取合适的值是很重要的。
将链式法则应用于神经网络梯度值的计算, 得到的算法叫作反向传播。 反向传播从最终损失值开始, 从最顶层反向作用至最底层, 利用链式法则计算每个参数对损失值的贡献大小。
tensorflow等框架已经帮助我们实现了自动求微分, 给定一个运算链, 并且已知每个运算的导数, 这些框架就可以利用链式法则来计算这个运算链的梯度函数, 将网络参数值映射为梯度值。
对于这样的函数,反向传播就简化为调用这个梯度函数。 由于自动求微分的出现, 你无须手动实现反向传播算法。 因此,我们不会在本节浪费你的时间和精力来推导反向传播的具体公式。 你只需充分理解基于梯度的优化方法的工作原理。
这里讲了三点,关键词有哪几个?
问题:你还知道那些梯度下降方法?
欢迎回复评论!
马上学123,很简单!
留言与评论(共有 0 条评论) |