2-7 Adam 优化算法
Adam 优化算法(Adam optimization algorithm)
Adam 优化算法基本上就是将 Momentum 和 RMSprop 结合在一起。
使用 Adam 算法,首先你要初始化,${v_{dW}} = 0$,${S_{dw}} = 0$,${v_{db}} = 0$,${S_{db}} = 0$,在第t次迭代中,你要计算微分,用当前的 mini-batch 计算dW,db。一般你会用 mini-batch 梯度下降法。接下来计算 Momentum 指数加权平均数,所以:
${v_{dW}} = {\beta _1}{v_{dW}} + (1 - {\beta _1})dW$;
${v_{db}} = {\beta _1}{v_{db}} + (1 - {\beta _1})db$。
接着你用 RMSprop 进行更新,即用不同的超参数${\beta _2}$:
${S_{dW}} = {\beta _2}{S_{dW}} + (1 - {\beta _2}){(dW)^2}$;
${S_{db}} = {\beta _2}{S_{db}} + (1 - {\beta _2}){(db)^2}$。
相当于 Momentum 更新了超参数${\beta _1}$,RMSprop 更新了超参数${\beta _2}$一般使用 Adam 算法的时候,要计算偏差修正,$v_{_{dW}}^{corrected}$,修正也就是在偏差修正之后:
$v_{_{dW}}^{corrected} = \frac{{{v_{dW}}}}{{1 - \beta _1^t}}$
$v_{_{db}}^{corrected} = \frac{{{v_{db}}}}{{1 - \beta _1^t}}$
S也使用偏差修正,也就是:
$S_{_{dW}}^{corrected} = \frac{{{S_{dW}}}}{{1 - \beta _2^t}}$
$S_{_{db}}^{corrected} = \frac{{{S_{db}}}}{{1 - \beta _2^t}}$
最后更新权重,所以W更新后是:
$W: = W - \alpha \frac{{v_{_{dW}}^{corrected}}}{{\sqrt {S_{_{dW}}^{corrected}} + \varepsilon }}$
$b: = b - \alpha \frac{{v_{_{db}}^{corrected}}}{{\sqrt {S_{_{db}}^{corrected}} + \varepsilon }}$
所以 Adam 算法结合了 Momentum 和 RMSprop 梯度下降法,并且是一种极其常用的学习算法,被证明能有效适用于不同神经网络,适用于广泛的结构。
本算法中有很多超参数:
超参数学习率a很重要,也经常需要调试,你可以尝试一系列值,然后看哪个有效。 ${\beta _1}$常用的缺省值为 0.9,这是dW的移动平均数,也就是dW的加权平均数,这是 Momentum 涉及的项。
${\beta _2}$ Adam 算法的发明者,推荐使用 0.999,这是在计算${(dW)^2}$以及${(db)^2}$的移动加权平均值。
$\varepsilon $的选择其实没那么重要, Adam 论文的作者建议$\varepsilon $为${10^{ - 8}}$,但你并不需要设置它,因为它并不会影响算法表现。
但是在使用 Adam 的时候,人们往往使用缺省值即可,${\beta _1}$,${\beta _2}$ 和$\varepsilon $都是如此,我觉得没人会去调整$\varepsilon $,然后尝试不同的a值,看看哪个效果最好。你也可以调整${\beta _1}$和${\beta _2}$,但我认识的业内人士很少这么干。