1. 动量梯度下降
为了解决随机梯度梯度下降存在的震荡问题,通过添加动量,平滑动量变化。
什么是指数加权平均
当前步的函数值不仅取决于当前的输入,还取决于之前的函数值,公式如下
通过不断带入展开,可得只包含 的表达式为
由于 在n趋向于无穷时等于 。当 趋向于1时, 同样等于 ,如果将 看作一个可以忽略的数字,则展开式中含有阶数大于等于 的相可以忽略。
- 当 时, ,所以所有系数包含 n>=20的均省略,原式子等价于前20个的加权平均和,即当前梯度等于前20个梯度的加权平均和
动量梯度下降公式
假设第 次训练的输入为 ,学习率为,计算得到梯度为 ,并定义速度向量 ,初始化为0;动量系数为m
其中 ,当 时等价于随机梯度下降
通过对历史梯度进行指数加权平均,实现了梯度的平滑变换,确保了相邻梯度方向的一致性,解决了梯度下降的震荡问题。
2. AdaGrad算法
为解决不同方向梯度大小变化不同,导致学习率设置的问题,adagrad算法根据每个方向梯度大小,不断更新学习率
AdaGrad公式
首先定义向量 ,初始化为0,每次迭代累加梯度的内积,递归公式为
更新目标参数是,使用 更新学习率大小,其中 为为保持数值稳定性添加的常数
AdaGrad算法能够根据梯度大小设置学习率,梯度越大,学习率越小,但是由于 $s_t$ 为累加形式,学习率随着训练会不断减小,到后期学习速率可能过慢
3. RMSprop算法
为了解决AdAGrad算法后期,学习率过小可能无法找到最优解的问题,在计算 $s_t$ 时引入加权平均
RMSprop公式
引入加权平均后的 $s_t$ 计算公式如下,避免了学习率的不断减小
4. AdaDelta算法
舍弃了学习率这一参数,从另一个角度解决AdaGrad后期学习率变小,难以找到最优解的问题
AdaDelta公式
$s_t$递推公式与RMSprop一致
增加了状态 $\Delta x_t$,计算梯度 $g’_t$
使用 $g’_t$ 更新参数
其中状态 $\Delta x_t$ 的递推公式为
与RMSprop算法区别点在于学习率也通过指数加权平均递归计算
5. Adam算法
Adam算法结合了动量法和RMSprop法,对梯度和$s_t$ 均进行了指数加权平均
$s_t$递推公式($\theta_1$ 建议为0.999)
$v_t$ 递推公式($\theta_2$ 建议为0.9)
由于 $s_t$ 和 $v_t$ 在递推初始化时初始化为0,根据递推公式中 $\theta_1$ 和 $\theta_2$ 均为接近于1的数,导致在训练初期, $s_t$ 和 $v_t$ 取值与梯度关系不大,更加趋向于0,因此需要增加 误差修正(bias correction) 操作
使用修正后的两个参数计算新梯度
更新参数公式为