Momentum、RMSprop、Adam

吴恩达深度学习笔记

要说Momentum、RMSprop、Adam这三个优化器就要先讲讲指数加权平均

指数加权平均

Momentum、RMSprop、Adam_第1张图片
上图是一年中365天的温度变化
指数加权平均的等式是:Vt = βVt-1 + (1-β)θt
θt 代表第t天的温度,也就是纵轴的数值,那么这个等式得到的Vt 近似代表的就是近似是1/(1-β)天的平均温度。
当β = 0.9时,Vt 就近似10天的平均温度,
当β = 0.98时,Vt 就近似50天的平均温度,
当β = 0.5时,Vt 就近似2天的平均温度
当β取不同的值的时候可以画出不同的曲线,当β = 0.98时,画出的曲线最平滑,当β = 0.5时,画出的曲线最陡。
Momentum、RMSprop、Adam_第2张图片
如上图,当β = 0.9时,是红色曲线,当β = 0.98时是绿色曲线。

偏差修正

其实,在估计运算初期,不能很好的估计温度的值,产生的点会很低,所以需要进行偏差修正,具体就是用Vt/ (1-βt)代替 Vt
这样就在前期进行了修正,随着t增大βt接近于0,所以后边的数值基本一样。

Momentum

Momentum、RMSprop、Adam_第3张图片
在梯度下降过程中,我们希望在纵轴上震荡较小,在横轴上希望加快速度。那么我们应用上面的指数加权平均可以实现
循环:
在每个mini-batch上计算dw,db (代表导数)
Vdw = βVdw+(1-β)dw
Vdb = βVdb+(1-β)db ·
更新参数w和b
w= w-αVdw α是学习率
b = b-αVdb
当β = 0.9时,相当于10次迭代的平均,这样就可以使纵轴的震动较小,水平方向更快。
默认值β = 0.9

RMSprop

利用均方根
循环:
在每个mini-batch上计算dw,db(导数)
Sdw = βSdw + (1-β)dw2
Sdb = βSdb + (1-β)db2
更新参数w和b
w= w-αdw / [(Sdw) 1/ 2 + a]
b = b-α
db / [ (Sdb) 1/ 2 + a]

这里实际上我们用的是导数平方的加权操作,a一般为10-8 防止分母趋近于0。
根据这个更新参数的公式里面的,我们根据一开始说的目的,所以希望dw小,db大。
因为函数在垂直方向的斜率比在水平方向的斜率大(因为垂直方向比水平方向更抖),所以这是成立的。
所以我们还可以使用大一些学习率加快训练速度而不担心垂直方向的扩散。

Adam

Adam的主要思想就是把上面的两个方法结合起来
循环:
在每个mini-batch上计算dw,db(导数)
Vdw = β1Sdw+(1 - β1)dw , Vdb = β1Sdb + (1-β1)db (Momentum)
Sdw = β2Sdw+(1 - β2)dw2,Sdb = β2Sdb + (1 - β2)db2 (RMSprop)
偏差修正:
Vdw(correct) = Vdw / (1 - β1t),Vdb(correct) = Vdb / (1 - β1t)
Sdw(correct) = Sdw / (1 - β2t),Sdb(correct) = Sdb / (1 - β2t)
更新参数w和b
w= w - α* Vdw(correct) / [( Sdw(correct))1/2 + a]
b = b - α* Vdb(correct) / [( Sdb(correct))1/2 + a]

β1代表这个导数的平均值,称为一阶矩
β2用于计算平方数的指数加权平均,称为二阶矩

这里的超参数:
α :学习率,需要自己调整
β1:默认0.9(dw)
β2:默认0.999(dw2
a : 10-8

你可能感兴趣的:(深度学习,深度学习)