【傻瓜攻略】深度学习之优化算法中(十)
上一篇博客中途去介绍了一下海森矩阵,牛顿法什么的,为了这一章打基础。
好吧,继续上上一篇博客的优化算法介绍:
1.7 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.****.net/qq_29061189/article/details/75230585
其算法为:
总结来说,动量的最主要的特征在于速度更新的式子中的α,这个α使得在方向改变时候减小了梯度下降的步长,而α在方向相同的时候增加了步长,加快了下降,使得收敛速度加快。
1.9 牛顿动量(Nesterov)
该算法是牛顿算法的一种变种。
用这个用烂了的图解释,就是如果蓝色是传统的动量梯度下降,即,很容易被当前的梯度影响走歪,然后发生震荡什么的。那么绿色的就是牛顿动量梯度下降,就相当于加了一个矫正项,使得它的大体方向不太容易变动。
这样就会导致两种收敛路径:
图片来自于:https://zhuanlan.zhihu.com/p/21475880
怎么说,这个博客写的很全,但是……╮(╯▽╰)╭,需要耐心看看,然后需要智商,懒得看的萌新们直接看我的总结吧,╮(╯▽╰)╭大神们可以看看这个博客。然后接着讲述。
第一个图是传统动量下降的路径图,第二个是牛顿动量下降的路径图。
可以看出,它的抖动明显小了很多,而且比较直接地冲向最低点。
ps:忘记写为什么要采用动量下降来优化梯度下降了!!
原因是hassian矩阵的病态问题。好了,知道这么官方的很难让萌新们看懂,下面解释一下:
首先,关于海森矩阵的问题可以看上一章,不想看的话,总结来说就是上面的gt化为多维时候的梯度矩阵
再者,病态问题指的是,当参数稍微变化的时候输出会变化很大。套用到这里就是,当梯度方向稍微有点误差的时候,下降的之后离最低点的误差变得非常大的问题。动量使用了α对于方向的误差进行了一定的矫正,而牛顿动量用更新θ的方法使得α与梯度也有关系了,更进一步进行了误差矫正。总的来说,就是使得梯度下降的方向大体是直接往最低点去的。
最后,感谢网络上各位大佬们的博客和耐心讲解,我可能列举的参考网页不多,有些遗漏的,欢迎大佬们指点。再次感谢大神们!!!✿✿ヽ(°▽°)ノ✿