Adam:自适应矩估计.

本文提出了Adam,即自适应矩估计(adaptive moment estimation),是一种基于低阶矩估计的一阶随机优化方法。

1. Adam的算法流程

AdammomentumRMSProp这两种优化算法的结合。momentum使用了梯度的一阶矩估计,适用于在线学习和非平稳环境;RMSProp使用了梯度的二阶矩估计,适用于稀疏梯度的情况。

记更新参数为$\theta$,目标函数为$f(\theta)$,在第$t$轮更新中计算梯度值$g_t = \nabla_{\theta}f_t(\theta)$。 Adam在更新过程中计算梯度和平方梯度的指数滑动平均值:

\[m_t = \beta_1 \cdot m_{t-1} + (1-\beta_1) \cdot g_t\] \[v_t = \beta_2 \cdot v_{t-1} + (1-\beta_2) \cdot g_t^2\]

其中$m_t$是一阶矩(均值)的估计,$v_t$是二阶矩(未中心化的方差)的估计。由于这些滑动平均值初始化为$0$,因此矩估计是有偏的,在训练的初始阶段尤其是衰减率$\beta_1,\beta_2$接近$1$时矩估计接近$0$,会使更新步长很小。因此进行偏差修正:

\[\hat{m}_t = \frac{m_t}{1-\beta_1^t}\] \[\hat{v}_t = \frac{v_t}{1-\beta_2^t}\]

参数的更新步骤为:

\[\theta_t = \theta_{t-1} - \alpha \cdot \frac{\hat{m}_t}{\sqrt{\hat{v}_t}+\epsilon}\]

该算法的计算效率可以通过改变计算顺序来提高:

\[\alpha_t = \alpha \cdot \frac{\sqrt{1-\beta_2^t}}{1-\beta_1^t}\] \[\theta_t = \theta_{t-1} - \alpha_t \cdot \frac{m_t}{\sqrt{v_t}+\hat{\epsilon}}\]

Adam的算法流程如下:

2. Adam的性质

① 初始化偏差修正 Initialization Bias Correction

Adam对梯度和平方梯度的指数滑动平均值$m_t$和$v_t$进行了偏差修正。下面以二阶矩估计$v_t$的修正为例。

假设训练过程中的梯度序列为$g_1,…,g_T$,对平方梯度的指数滑动平均值初始化为$v_0=0$,根据$v_t$的更新规则:

\[v_t = \beta_2 \cdot v_{t-1} + (1-\beta_2) \cdot g_t^2 \\ = \beta_2 \cdot (\beta_2 \cdot v_{t-2} + (1-\beta_2) \cdot g_{t-1}^2) + (1-\beta_2) \cdot g_t^2 \\ = \beta_2^tv_0 + \beta_2^{t-1} (1-\beta_2) g_{1}^2 + ... + \beta_2 (1-\beta_2) g_{t-1}^2 + (1-\beta_2) g_t^2 \\ = (1-\beta_2)\sum_{i=1}^{t}\beta_2^{t-i}g_{i}^2\]

我们用指数滑动平均的期望值$\Bbb{E}[v_t]$估计真实的二阶矩$\Bbb{E}[g_t^2]$,两者的差异如下:

\[\Bbb{E}[v_t] = \Bbb{E}[(1-\beta_2)\sum_{i=1}^{t}\beta_2^{t-i}g_{i}^2] \\ =\Bbb{E}[g_{t}^2] \cdot (1-\beta_2)\sum_{i=1}^{t}\beta_2^{t-i}+\zeta \\ = \Bbb{E}[g_{t}^2] \cdot (1-\beta_2^t)+\zeta\]

当真实的二阶矩$\Bbb{E}[g_t^2]$是固定值时$\zeta=0$,否则可以通过选择合适的$\beta_1$使其保持较小的值。因此$\Bbb{E}[v_t]$和$\Bbb{E}[g_t^2]$之间存在$(1-\beta_2^t)$倍数的差异,进行修正:

\[\hat{v}_t = \frac{v_t}{1-\beta_2^t}\]

② 收敛性分析 Convergence Analysis

给定一个未知的凸代价函数序列$f_1(\theta),f_2(\theta),…,f_T(\theta)$,在$t$时刻的目标是预测参数$\theta_t$,并在代价函数$f_t$上评估。由于代价函数序列是未知的,因此使用regret进行评估,即每一轮的在线预测结果$f_t(\theta_t)$与理论最佳参数结果$f_t(\theta^*)$的差值之和:

\[R(T) = \sum_{t=1}^{T} [f_t(\theta_t)-f_t(\theta^*)]\]

对于Adam算法,有如下结论:

\[\frac{R(T)}{T} = O(\frac{1}{\sqrt{T}})\]

因此Adam算法具有遗憾上界$O(\sqrt{T})$。当$T \to ∞$时,$R(T) \to 0$。

3. 实验结果

作者展示了在逻辑回归模型、多层感知机和卷积神经网络这三个模型上使用不同优化器的损失曲线。实验证明Adam具有和带动量的SGD相似的收敛速度,能实现更高的精度。

作者比较了不进行偏差修正(绿色曲线)和进行偏差修正(红色曲线)后损失函数的变化情况。实验证明使用偏差修正能够使训练更稳定。

4. 扩展:Adamax

Adam算法使用梯度的L2范数缩放梯度。作者将其推广到Lp范数,特别地,当$p \to ∞$时得到一个简单而稳定的算法,称之为Adamax

Lp范数梯度的指数滑动平均值计算为:

\[v_t = \beta_2^p \cdot v_{t-1} + (1-\beta_2^p) \cdot |g_t|^p \\ = (1-\beta_2^p)\sum_{i=1}^{t}\beta_2^{p(t-i)}|g_i|^p\]

注意衰减率使用的是$\beta_2^p$。当$p \to ∞$时:

\[u_t = \mathop{\lim}_{p \to ∞} (v_t)^{1/p} = \mathop{\lim}_{p \to ∞} ((1-\beta_2^p)\sum_{i=1}^{t}\beta_2^{p(t-i)}|g_i|^p)^{1/p} \\ = \mathop{\lim}_{p \to ∞} (1-\beta_2^p)^{1/p}(\sum_{i=1}^{t}\beta_2^{p(t-i)}|g_i|^p)^{1/p} \\ = \mathop{\lim}_{p \to ∞} (\sum_{i=1}^{t}(\beta_2^{(t-i)}|g_i|)^p)^{1/p} \\= \max(\beta_2^{(t-1)}|g_1|,\beta_2^{(t-2)}|g_2|,...,\beta_2 |g_{t-1}|,|g_t|)\]

上式也可以写成递归的形式:

\[u_t = \max(\beta_2 \cdot u_{t-1},|g_t|)\]