【傻瓜攻略】深度学习之优化算法中(十)

xiaoxiao2021-02-28  24

上一篇博客中途去介绍了一下海森矩阵,牛顿法什么的,为了这一章打基础。

好吧,继续上上一篇博客的优化算法介绍:

1.7  Adadelta算法

论文 《ADADELTA: An Adaptive Learning Rate Method 》 为了解决adagrad算法自身所携带的分母随着迭代次数增加,越来越大,梯度趋向于0,提前结束训练的问题。提出了adadelta算法。该算法只使用了累加项中离当前时间点较近的项。即:

令:,表示梯度的均方根误差的意思。

则增量为:

该算法的伪代码为:

参考:https://www.cnblogs.com/neopenx/p/4768388.html

这里涉及一个概念,一阶的梯度更新使用的是SGD,更新的公式为

但是涉及到二阶的时候,使用的牛顿法:

emmmm,我会有一章专门介绍海森矩阵的……现在就先这样吧,(#^.^#)

以下是该算法的效果展示:

50次迭代进行MNIST数据的分类

1.8 Momentum(动量)算法

模拟物理里动量的概念,用积累的动量来代替真正的梯度。其公式如下:

    其中u为动量因子

优点:

初期u可以做到很好的家族,中后期gt->0,但是u不为0可以使得梯度下降跳过局部最低点,同时当梯度方向改变的时候,u可以用于减小步长,抑制震荡从而加快收敛。

参考:https://blog.csdn.net/qq_29061189/article/details/75230585

其算法为:

总结来说,动量的最主要的特征在于速度更新的式子中的α,这个α使得在方向改变时候减小了梯度下降的步长,而α在方向相同的时候增加了步长,加快了下降,使得收敛速度加快。

1.9 牛顿动量(Nesterov)

该算法是牛顿算法的一种变种。

总结来说,就是在计算梯度之前先更新一下θ值,这样,梯度就与动量有关了。这样,梯度就会有一个矫正项,相当于一种大体的预测能力。

用这个用烂了的图解释,就是如果蓝色是传统的动量梯度下降,即,很容易被当前的梯度影响走歪,然后发生震荡什么的。那么绿色的就是牛顿动量梯度下降,就相当于加了一个矫正项,使得它的大体方向不太容易变动。

这样就会导致两种收敛路径:

图片来自于:https://zhuanlan.zhihu.com/p/21475880

怎么说,这个博客写的很全,但是……╮(╯▽╰)╭,需要耐心看看,然后需要智商,懒得看的萌新们直接看我的总结吧,╮(╯▽╰)╭大神们可以看看这个博客。然后接着讲述。

第一个图是传统动量下降的路径图,第二个是牛顿动量下降的路径图。

可以看出,它的抖动明显小了很多,而且比较直接地冲向最低点。

ps:忘记写为什么要采用动量下降来优化梯度下降了!!

原因是hassian矩阵的病态问题。好了,知道这么官方的很难让萌新们看懂,下面解释一下:

首先,关于海森矩阵的问题可以看上一章,不想看的话,总结来说就是上面的gt化为多维时候的梯度矩阵

再者,病态问题指的是,当参数稍微变化的时候输出会变化很大。套用到这里就是,当梯度方向稍微有点误差的时候,下降的之后离最低点的误差变得非常大的问题。动量使用了α对于方向的误差进行了一定的矫正,而牛顿动量用更新θ的方法使得α与梯度也有关系了,更进一步进行了误差矫正。总的来说,就是使得梯度下降的方向大体是直接往最低点去的。

最后,感谢网络上各位大佬们的博客和耐心讲解,我可能列举的参考网页不多,有些遗漏的,欢迎大佬们指点。再次感谢大神们!!!✿✿ヽ(°▽°)ノ✿

转载请注明原文地址: https://www.6miu.com/read-2350040.html

最新回复(0)