赞
踩
转载地址:https://zhuanlan.zhihu.com/p/32488889
优化算法框架:
最核心的区别就是第三步所执行的下降方向,在这个式子中,前半部分是实际的学习率(也即下降步长),后半部分是实际的下降方向。不同优化算法也就是不断地在这两部分上做文章。
最朴素的优化算法就是SGD了,没有动量和自适应学习率的概念,但还是有很多人在用着。
SGD
梯度更新规则:
SGD的形式最简单
存在问题:
因为更新比较频繁,会造成 cost function 有严重的震荡,最终停留在Local Minima或者Saddle Point处。
为了能够跳出Local Minima和Saddle Point,提出了动量的概念。
SGD with Momentum
梯度更新规则:
Momentum在梯度下降的过程中加入了惯性,使得梯度方向不变的维度上速度变快,梯度方向有所改变的维度上的更新速度变慢,这样就可以加快收敛并减小震荡。
一阶动量是移动平均值,这里 的经验值为0.9,也就是说时刻t的主要下降方向是由t-1时刻的下降方向再加一点点t时刻的偏向决定的。
存在问题:
SGD with Nesterov Acceleration
NAG改进了SGDM的第一个存在问题,在计算梯度时,不是在当前位置,而是未来的位置上。因此这里的梯度是跟着累积动量走了一步后的梯度,即
我们希望能够根据参数的重要性而对不同的参数进行不同程度的更新,学习率是自适应的。对于经常更新的参数,我们已经积累了大量关于它的知识,不希望被单个样本影响太大,希望学习速率慢一些;对于偶尔更新的参数,我们了解的信息太少,希望能从每个偶然出现的样本身上多学一些,即学习速率大一些。
AdaGrad
梯度更新规则:
二阶动量为该维度上迄今为止所有梯度值的平方和
为了避免分母为0,加了一项随机扰动
存在问题:
分母会不断积累,这样学习率就会收缩并最终会变得非常小。
RMSProp
梯度更新规则:
解决Adagrad学习率急剧下降的问题,RMSProp改变了二阶动量计算方法,即用窗口滑动加权平均值计算二阶动量。
Hinton 建议设定 为 0.9, 学习率 为 0.001。
集成动量+自适应学习率的优化算法应该是目前最好的。
Adam
梯度更新规则:
Adam = Adaptive + Momentum,顾名思义Adam集成了SGD的一阶动量和RMSProp的二阶动量。
优化算法里最常见的两个超参数 就都在这里了,前者控制一阶动量,后者控制二阶动量。
若在Adam基础上再加一个Nesterov加速,是不是更牛逼了,这就是Nadam。 5.34c-.314.314-.3.846.03 1.177z” fill-rule=”evenodd”>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。