AdaGrad、RMSProp和Adam

参考:

Per-parameter adaptive learning rate methods

lecture_slides_lec6.pdf

AdaGrad、RMSProp以及Adam都是逐元素的自适应学习率方法(per-parameter adaptive learning rate methods),根据每个神经元的梯度变化进行权重调整,能够有效的提高模型精度

AdaGrad

数学公式如下:

其中$w$是权重,$dw$是梯度,$lr$是学习率,使用$cache$累加梯度平方和

$eps$是常量,通常设为1e-8,用于保证数值稳定性

实现如下:

1
2
cache += dw**2
w += - learning_rate * dw / (np.sqrt(cache) + eps)

与原始$SGD$实现相比,有两点优势:

  1. 其学习率除以$cache$的平方根,起到了学习率退火的效果
  2. 如果得到了高梯度,则有效学习率下降,反之有效学习率提高,这样保证权重向量的变化更加稳定,不易被个别样本影响

其缺点在于变量$cache$是单调递增的,这导致学习率的单调递减,最终趋向于$0$,过早的停止学习

RMSProp

数学公式如下:

其中$w$是权重,$dw$是梯度,$lr$是学习率,$decay_{rate}$表示衰减率,通常设为[0.9, 0.99, 0.999]其中之一,使用$cache$累加梯度平方和

$eps$是常量,通常设为1e-8,用于保证数值稳定性

实现如下:

1
2
cache = decay_rate * cache + (1 - decay_rate) * dw**2
w += - learning_rate * dw / (np.sqrt(cache) + eps)

AdaGrad相比,其$cache$取值进行了弱化调整,通过指数移动平均值的方式,避免梯度平方和(二阶动量)的单调累积,根据梯度变化进行自主调整,有效延长学习过程

Adam

Adam方法集成了前两者,数学实现如下:

$t$表示迭代次数

$\beta_{1}$和$\beta_{2}$是常量,取值在[0,1]之间

$lr$是学习率

$\xi$是常量,用于数值稳定,保证不除以$0$,取值在[1e-4, 1e-8]之间

常用的取值组合为$lr=0.001, \beta_{1}=0.9, \beta_{2}=0.999, \xi=10^{-8}$

参考:

实现如下:

1
2
3
4
5
m = beta1*m + (1-beta1)*dw
mt = m / (1-beta1**t)
v = beta2*v + (1-beta2)*(dw**2)
vt = v / (1-beta2**t)
w += - learning_rate * mt / (np.sqrt(vt) + eps)

Adam方法计算了梯度的一阶动量(均值,mean)和二阶动量(方差,the uncentered variance),同时为了避免初始动量不趋向于$0$,进行了偏置校正(bias correction

RMSProp方法相比,Adam方法进一步平滑了权重更新过程

梯度下降流程

文章从 SGD 到 Adam —— 深度学习优化算法概览(一)总结了梯度下降方法的更新框架

  1. 计算梯度$dw$
  2. 计算梯度的一阶动量$m_{t}$和二阶动量$v_{t}$
  3. 更新权重$w_{t} = w_{t-1} - m_{t} / (\sqrt{v_{t} + \xi})$

小结

逐元素的自适应学习率方法能够更加有效的利用神经元的梯度变化,加速学习过程

坚持原创技术分享,您的支持将鼓励我继续创作!