参考资料: 吴恩达Coursera深度学习课程 deeplearning.ai (2-2) 优化算法–课程笔记

1. 指数加权平均(指数加权移动平均)

神经网络常见优化算法(Momentum, RMSprop, Adam)的原理及公式理解, 学习率衰减
指数加权平均是统计一个波动的指标在一段时间内的平均变化趋势, 具体公式为:vt=βvt1+(1β)θtv_t = \beta v_{t-1} + (1 - \beta)\theta_t其中β\beta是对过去的权重, (1β)(1-\beta)是对当前值的权重, 两者之和就是对一个变化指标的移动加权平均.
结果大体相当于平均了近1(1β)\frac{1}{(1-\beta)}天的值, 例如β=0.95\beta = 0.95相当于平均了近20天的值, β=0.9\beta = 0.9相当于平均了近10天的值.
解释: 如下图
神经网络常见优化算法(Momentum, RMSprop, Adam)的原理及公式理解, 学习率衰减
因为β1(1β)=1e13\beta ^{\frac{1}{(1-\beta)}} = \frac{1}{e} \approx \frac{1}{3}
所以权重小于0.1β1(1β)0.1 * \beta ^{\frac{1}{(1-\beta)}}的数据我们可以忽略不计, 得到的就是平均了近1(1β)\frac{1}{(1-\beta)}天的值.

偏差修正
由于加权平均的前期, 历史数据不足, 所以前期的数值会非常小, 需要进行偏差修正:
vt=βvt1+(1β)θtv_t = \beta v_{t-1} + (1 - \beta)\theta_tvt=vt1βtv_t = \frac{v_t}{1-\beta^t}经过修正后, 前期的值不再变得很小, 并且后期(1βt)(1-\beta^t)的值趋向于1, 从而使得修正值与原值重合.

2. 动量梯度下降(Momentum)

神经网络常见优化算法(Momentum, RMSprop, Adam)的原理及公式理解, 学习率衰减
梯度下降如上图蓝线所示,梯度下降过程中有纵向波动,由于这种波动的存在,我们只能采取较小的学习率,否则波动会更大。

而使用动量梯度下降法(指数加权平均)后,经过平均,相当于抵消了上下波动,使波动趋近于零(如图中红线所示),这样就可以采用稍微大点的学习率加快梯度下降的速度。

算法实现
vdW=βvdW+(1β)dWv_{dW} = \beta v_{dW} + (1-\beta)dWW:=WαvdWW := W - \alpha v_{dW}vdb=βvdb+(1β)dbv_{db} = \beta v_{db} + (1-\beta)dbb:=bαvdbb := b - \alpha v_{db}

3. RMSprop(root mean square prop)

另一种加快梯度下降的算法, 调整更新参数时的步伐大小, 在变化剧烈的方向上步伐会比较小, 在变化平缓的方向上步伐较大, 因此学习率可以设置比较大.
SdW=β2SdW+(1β2)dW2S_{dW} = \beta_2 S_{dW} + (1-\beta_2) dW^2W:=WαdWSdW+ϵW := W - \alpha \frac{dW}{\sqrt{S_{dW}} + \epsilon}Sdb=β2Sdb+(1β2)db2S_{db} = \beta_2 S_{db} + (1-\beta_2) db^2b:=bαdbSdb+ϵb := b - \alpha \frac{db}{\sqrt{S_{db}} + \epsilon}
神经网络常见优化算法(Momentum, RMSprop, Adam)的原理及公式理解, 学习率衰减

  • RMSprop的原理是对dW2dW^2db2db^2做加权移动平均, 假设纵轴方向为bb, 横轴方向为WW, 可以发现dbdb变化剧烈, dWdW平缓, 因此dW2dW^2的加权平均就会较小, db2db^2的加权平均较大, 对应的SdWS_{dW}的值就较小, SdbS_{db}的值较大.
  • 为了与 Momentum 的参数β(β1)\beta(\beta_1)相区分,这里使用β2\beta_2
  • ϵ\epsilon是为了防止除数为0, 一般ϵ=108\epsilon = 10^{-8}

4. Adam优化算法(Adaptive moment estimation)

Adam 是 Momentum 和 RMSprop 的结合
算法实现:
initialization:VdW=0,Vdb=0,SdW=0,Sdb=0initialization: V_{dW} = 0, V_{db} = 0, S_{dW} = 0, S_{db} = 0vdW=β1vdW+(1β1)dWv_{dW} = \beta_1 v_{dW} + (1-\beta_1)dWvdb=β1vdb+(1β1)dbv_{db} = \beta_1 v_{db} + (1-\beta_1)dbvdWcorrected=vdW1β1tv_{dW}^{corrected} = \frac{v_{dW}}{1-\beta_1^t}vdbcorrected=vdb1β1tv_{db}^{corrected} = \frac{v_{db}}{1-\beta_1^t}SdW=β2SdW+(1β2)dW2S_{dW} = \beta_2 S_{dW} + (1-\beta_2) dW^2Sdb=β2Sdb+(1β2)db2S_{db} = \beta_2 S_{db} + (1-\beta_2) db^2SdWcorrected=SdW1β2tS_{dW}^{corrected} = \frac{S_{dW}}{1-\beta_2^t}Sdbcorrected=Sdb1β2tS_{db}^{corrected} = \frac{S_{db}}{1-\beta_2^t}W:=WαVdWcorrectedSdWcorrected+ϵW := W - \alpha \frac{V_{dW}^{corrected}}{\sqrt{S_{dW}^{corrected}} + \epsilon}b:=bαVdbcorrectedSdbcorrected+ϵb := b - \alpha \frac{V_{db}^{corrected}}{\sqrt{S_{db}^{corrected}} + \epsilon}
超参的选择

  • α\alpha: 需要调试
  • β1\beta_1: 推荐0.9, dWdW的加权平均
  • β2\beta_2: 推荐0.999, dW2dW^2的加权平均
  • ϵ\epsilon: 推荐10810^{-8}

5. 学习率衰减

如果设置一个固定的学习率LR, 值较大的话, 很难收敛, 最后会在最低点附近波动; 值较小的话, 起初下降太慢. 因此, 为了下降快, 一开始学习率可以比较大; 为了能收敛, 学习率应该逐渐变小, 这就是学习率衰减
常用实现:
α=11+decay_rateepoch_numα0\alpha = \frac{1}{1+ decay\_rate * epoch\_num}\alpha_0α=0.95epoch_numα0\alpha = 0.95^{epoch\_num}\alpha_0α=kepoch_numα0\alpha = \frac{k}{epoch\_num}\alpha_0
或者固定几个epoch之后, 衰减为原来的0.1(指数级衰减)

相关文章:

  • 2022-01-24
  • 2021-09-30
  • 2022-12-23
  • 2022-12-23
  • 2022-01-11
  • 2021-12-24
  • 2021-10-31
  • 2021-11-02
猜你喜欢
  • 2021-11-07
  • 2022-12-23
  • 2021-11-12
  • 2022-12-23
  • 2022-01-29
  • 2021-05-26
  • 2021-05-22
相关资源
相似解决方案