参考资料: 吴恩达Coursera深度学习课程 deeplearning.ai (2-2) 优化算法–课程笔记
1. 指数加权平均(指数加权移动平均)

指数加权平均是统计一个波动的指标在一段时间内的平均变化趋势, 具体公式为:vt=βvt−1+(1−β)θt其中β是对过去的权重, (1−β)是对当前值的权重, 两者之和就是对一个变化指标的移动加权平均.
结果大体相当于平均了近(1−β)1天的值, 例如β=0.95相当于平均了近20天的值, β=0.9相当于平均了近10天的值.
解释: 如下图

因为β(1−β)1=e1≈31
所以权重小于0.1∗β(1−β)1的数据我们可以忽略不计, 得到的就是平均了近(1−β)1天的值.
偏差修正
由于加权平均的前期, 历史数据不足, 所以前期的数值会非常小, 需要进行偏差修正:
vt=βvt−1+(1−β)θtvt=1−βtvt经过修正后, 前期的值不再变得很小, 并且后期(1−βt)的值趋向于1, 从而使得修正值与原值重合.
2. 动量梯度下降(Momentum)

梯度下降如上图蓝线所示,梯度下降过程中有纵向波动,由于这种波动的存在,我们只能采取较小的学习率,否则波动会更大。
而使用动量梯度下降法(指数加权平均)后,经过平均,相当于抵消了上下波动,使波动趋近于零(如图中红线所示),这样就可以采用稍微大点的学习率加快梯度下降的速度。
算法实现
vdW=βvdW+(1−β)dWW:=W−αvdWvdb=βvdb+(1−β)dbb:=b−αvdb
3. RMSprop(root mean square prop)
另一种加快梯度下降的算法, 调整更新参数时的步伐大小, 在变化剧烈的方向上步伐会比较小, 在变化平缓的方向上步伐较大, 因此学习率可以设置比较大.
SdW=β2SdW+(1−β2)dW2W:=W−αSdW+ϵdWSdb=β2Sdb+(1−β2)db2b:=b−αSdb+ϵdb

- RMSprop的原理是对dW2和db2做加权移动平均, 假设纵轴方向为b, 横轴方向为W, 可以发现db变化剧烈, dW平缓, 因此dW2的加权平均就会较小, db2的加权平均较大, 对应的SdW的值就较小, Sdb的值较大.
- 为了与 Momentum 的参数β(β1)相区分,这里使用β2
-
ϵ是为了防止除数为0, 一般ϵ=10−8
4. Adam优化算法(Adaptive moment estimation)
Adam 是 Momentum 和 RMSprop 的结合
算法实现:
initialization:VdW=0,Vdb=0,SdW=0,Sdb=0vdW=β1vdW+(1−β1)dWvdb=β1vdb+(1−β1)dbvdWcorrected=1−β1tvdWvdbcorrected=1−β1tvdbSdW=β2SdW+(1−β2)dW2Sdb=β2Sdb+(1−β2)db2SdWcorrected=1−β2tSdWSdbcorrected=1−β2tSdbW:=W−αSdWcorrected+ϵVdWcorrectedb:=b−αSdbcorrected+ϵVdbcorrected
超参的选择
-
α: 需要调试
-
β1: 推荐0.9, dW的加权平均
-
β2: 推荐0.999, dW2的加权平均
-
ϵ: 推荐10−8
5. 学习率衰减
如果设置一个固定的学习率LR, 值较大的话, 很难收敛, 最后会在最低点附近波动; 值较小的话, 起初下降太慢. 因此, 为了下降快, 一开始学习率可以比较大; 为了能收敛, 学习率应该逐渐变小, 这就是学习率衰减
常用实现:
α=1+decay_rate∗epoch_num1α0α=0.95epoch_numα0α=epoch_numkα0
或者固定几个epoch之后, 衰减为原来的0.1(指数级衰减)