1. 简介

Adam 算法可以看作动量法和 RMSprop 算法的结合,不但使用动量作为参数更新方向,而且可以自适应调整学习率。

2. 原理

tt 次迭代时:

  • 一方面计算梯度平方的指数加权平均:

Gt=β2Gt1+(1β2)LWt1LWt1\begin{array}{c} \boldsymbol{G}_t = \beta_2 \boldsymbol{G}_{t-1} + (1-\beta_2) \frac{\partial L}{\partial \boldsymbol{W}_{t-1}} \odot \frac{\partial L}{\partial \boldsymbol{W}_{t-1}} \end{array}

  • 另一方面计算梯度的指数加权平均:

Mt=β1Mt1+(1β1)LWt1\begin{array}{c} \boldsymbol{M}_t = \beta_1 \boldsymbol{M}_{t-1} + (1-\beta_1) \frac{\partial L}{\partial \boldsymbol{W}_{t-1}} \end{array}

一般参数取值为:β1=0.9,β2=0.99 \beta_1 = 0.9, \beta_2 = 0.99 Mt\boldsymbol{M}_tGt\boldsymbol{G}_t 可以分别看作是梯度的一阶矩和二阶矩,其初始化取值为 Mt=0,Gt=0 \boldsymbol{M}_t = 0, \boldsymbol{G}_t = 0 ;但这样会导致迭代初期 Mt\boldsymbol{M}_tGt\boldsymbol{G}_t 的值会比真实的一阶矩和二阶矩要小,因此要对偏差进行修正:

M^t=Mt1β1G^t=Gt1β2\begin{array}{c} \hat{\boldsymbol{M}}_t = \frac{\boldsymbol{M}_t}{1-\beta_1} \\ \hat{\boldsymbol{G}}_t = \frac{\boldsymbol{G}_t}{1-\beta_2} \end{array}

  • Adam 算法的参数更新公式为:

ΔWt=ηGt^+εMt^\begin{array}{c} \Delta \boldsymbol{W}_t = - \frac{\eta}{\sqrt{\hat{\boldsymbol{G}_t}+\boldsymbol{\varepsilon}}} \hat{\boldsymbol{M}_t} \end{array}

其中,η\eta 为学习率,通常取值为 0.0010.001