1η0需要实现给定一个固定的初始学习率因子η0。
优点:解决了 SGD 中学习率不能自适应调整的问题
缺点:学习率单调递减,在迭代后期可能导致学习率变得特别小而导致收敛及其缓慢
AdaDelta/RMSprop
AdaDelta 是在 Adagrad 提出的后一年提出,它解决了 Adagrad 面临的两个问题,即迭代后期可能导致学习率变得特别小而导致收敛及其缓慢的问题,以及初始学习率需要人为设定的问题。
在 AdaGrad 的实际算法中,可以通过中间变量r 来对此前的梯度进行累计,即每一次迭代都可以通过r←r+g2,η←1/η+ϵ⋅η0 实现。而 AdaDelta 主要是在这个累计过程中引入参数γ 实现用梯度平方的指数加权平均代替了至今全部梯度的平方和,避免了后期更新时更新幅度逐渐趋近于0的问题。
r←γr+(1−γ)g2
其中,0≤γ≤1.
也可以如下表示:
定义第k 次迭代的中间变量E[g2]k=γE[g2]k−1+(1−γ)gk2 ,新的均方根就表示为:
RMS[g]k=E[g2]k+ϵ
RMSprop 方法则是之间做如下更新:
θ←θ−RMS[g]η0⊙g
其中每次的增量也就是Δθ=−RMS[g]η0⊙g 。
AdaDelta 方法在此基础上,尝试利用增量Δθ 的信息,通过对其也做一个累加贡献计算:
RMS[Δθ]k−1=E[Δθ2]k−1+ϵ
将其作为动态的因子替换原本的初始学习率η0,从而有第k 次迭代的增量:
Δθk=−RMS[g]k−1RMS[Δθ]k−1⊙gk
Adam|Adaptive Moment Estimation
Adam 是 Momentum 和 AdaDelta 的结合体,将梯度的方向信息v 和学习率的累计r 都运用了起来。
vkrk=αvk−1+(1−α)gk=βrk−1+(1−β)gk2
事实上,他们都可以用前面的符号E 来表示,分别表示g 的一阶矩和二阶矩估计E[g],E[g2] .
此外,Adam为了解决衰减率(decay rate)很小时矩估计结果最终都会趋于0的问题,对其进行校正:
vk^=1−αkvkrk^=1−βkrk
最终得到:
ηk=rk^+ϵvk^η0
优点:结合 Momentum 和 Adagrad,稳定性好,收敛速度很快。同时相比于 Adagrad ,不用存储全局所有的梯度,适合处理大规模数据。有一说是Adam是世界上最好的优化算法,无脑用它就对了。
缺点:收敛速度虽快,但实际运用时往往没有 SGD 的解更优 ,因为进入局部最小值之后会反复在局部最小值附近抖动。
附录:PyTorch中的优化器
待更:
参考
- 梯度下降法 —— 经典的优化方法 - 知乎
- 最优化问题——梯度下降法 - Christina_笔记
- 批量梯度下降法、随机梯度下降法、小批量梯度下降法 - Wechat~Y466551
- 机器学习 · 总览篇 VIII 三要素之算法 - 梯度下降法及其变种
- 深度学习中的优化算法 - 知乎