Incorporating Nesterov Momentum into Adam/paper/zh
| Research Paper | |
|---|---|
| Authors | Dozat, T. |
| Year | 2016 |
| Venue | ICLR Workshop |
| Topic area | Machine Learning |
| Difficulty | Research |
| Source | View paper |
Workshop track — ICLR 2016
摘要
本工作旨在改进近期被提出并迅速流行起来的优化算法 Adam (Kingma 与 Ba, 2014)。Adam 有两个主要组成部分——一个 momentum 组件和一个自适应学习率组件。然而,可以从概念上和经验上证明,常规 momentum 不如一种类似的算法——Nesterov 加速梯度(NAG)。我们展示如何修改 Adam 的 momentum 组件以利用 NAG 的洞见,并随后给出初步证据表明这种替换可以提升收敛速度并改善所学模型的质量。
引言
在试图提升深度学习系统的性能时,可以采取若干种方法——改善模型结构,例如让其更深;改善模型的初始化,使误差信号能够均匀地分布到模型参数中;收集更多数据或尝试不同的正则化技术以防止过拟合;以及使用更强大的优化算法,使得能够在合理的时间内达到更好的解。本工作旨在通过提供一种更强大的学习算法来提升所学模型的质量。
许多用于优化非凸目标的流行学习算法都使用某种 stochastic gradient descent (SGD) 的变体;本工作将在其分析中考虑此类算法的一个子集。算法 1 以本文使用的记号给出 SGD——后续所有算法都将在此基础模板上进行扩展或修改:
算法 1:stochastic gradient descent
Require: $ \alpha_0, \dots, \alpha_T $:每个 timestep 的学习率(通常会进行退火)。
Require: $ f_i(\theta) $:由 $ \theta $ 参数化、按 timestep $ i $ 索引的随机目标函数。
Require: $ \theta_0 $:初始参数。
当 $ \theta_t $ 尚未收敛时:
- $ t \leftarrow t + 1 $
- $ g_t \leftarrow \nabla_{\theta_{t-1}} f_t(\theta_{t-1}) $
- $ \theta_t \leftarrow \theta_{t-1} - \alpha_t g_t $
循环结束;返回 $ \theta_t $。
相关工作
经典 momentum (Polyak, 1964) 将先前更新的衰减和(衰减因子为 $ \mu $)累积到一个 momentum 向量 $ m $ 中,并用该向量替换算法 1 中原本的梯度步。也就是说,我们对算法做如下修改,使其在每个 timestep 包含:
- $ m_t \leftarrow \mu m_{t-1} + \alpha_t g_t \qquad (1) $
- $ \theta_t \leftarrow \theta_{t-1} - m_t \qquad (2) $
直觉上,这使得算法在低曲率维度上能够更快地移动——这些维度上更新虽然始终很小但方向一致——而在湍动的维度上更慢,这些维度上更新的方向显著振荡 (Sutskever 等人, 2013)。
Sutskever 等人 (2013) 证明 Nesterov 加速梯度(NAG)(Nesterov, 1983)——在凸的、非随机目标上具有可证明优于 gradient descent 的界——可以被改写为一种改进的 momentum。如果我们在第 2 行原始 momentum 表述中展开 $ m_t $,就会看到该更新等价于在前一 momentum 向量方向上走一步,以及在当前梯度方向上走一步:
- $ \theta_t = \theta_{t-1} - (\mu m_{t-1} + \alpha_t g_t) \qquad (3) $
然而,momentum 步 $ \mu m_{t-1} $ 并不依赖当前梯度 $ g_t $,因此我们可以先用 momentum 步更新参数再计算梯度,从而得到一个质量更高的梯度步方向。Sutskever 等人 (2013) 提出按照下面的第 4 行修改算法 1 循环中的梯度计算行以实现这一点:
- $ g_t \leftarrow \nabla_{\theta_{t-1}} f_t(\theta_{t-1} - \mu m_{t-1}) \qquad (4) $
- $ m_t \leftarrow \mu m_{t-1} + \alpha_t g_t \qquad (5) $
- $ \theta_t \leftarrow \theta_{t-1} - m_t \qquad (6) $
作者还提供了经验证据,表明在传统上较为困难的优化目标上,该算法优于 SGD、经典 momentum 和 Hessian-Free (Martens, 2010)。
经典 momentum 和 NAG 都将 $ m $ 定义为对先前更新的衰减和;然而 Adaptive moment estimation (Adam) (Kingma 与 Ba, 2014) 将其改为对先前梯度的衰减均值(该算法还包含此处未讨论的自适应学习率组件;参见 Duchi 等人 (2011) 与 Tieleman 与 Hinton (2012))。
- $ m_t \leftarrow \mu m_{t-1} + (1 - \mu) g_t \qquad (7) $
- $ \theta_t \leftarrow \theta_{t-1} - \alpha_t \frac{m_t}{1 - \mu^t} \qquad (8) $
用过去的梯度而非过去的更新,使算法在训练接近尾声、学习率已显著退火时仍能持续改变方向,从而获得更精细的收敛。它还使算法能够直接校正由 momentum 向量初始化为零所导致的 "初始化偏差"(这正是第 8 行分母中 $ (1 - \mu^t) $ 项的作用)。Kingma 与 Ba (2014) 证明其算法在一小批基准上优于包括 NAG 在内的若干其他算法。
修改 Adam 的 momentum
为清晰起见,在下文中我们将允许 $ \mu $ 按 timestep 取不同的值 $ \mu_1, \dots, \mu_T $。在修改 Adam 的更新规则之前,我们先展示如何把 NAG 改写得更易实现(代价是损失部分直觉性)。我们不必先用 momentum 步更新参数以计算梯度、再撤销该步以恢复原始参数状态、然后在实际更新时再次执行 momentum 步,而可以只在前一时间步 $ t $ 的更新中应用一次 timestep $ t+1 $ 的 momentum 步,而不是在 $ t+1 $ 中再做:
- $ g_t \leftarrow \nabla_{\theta_{t-1}} f_t(\theta_{t-1}) \qquad (9) $
- $ m_t \leftarrow \mu_t m_{t-1} + \alpha_t g_t \qquad (10) $
- $ \theta_t \leftarrow \theta_{t-1} - (\mu_{t+1} m_t + \alpha_t g_t) \qquad (11) $
请注意,第 11 行几乎与第 3 行相同——唯一区别是更新中使用的是 $ \mu_{t+1} m_t $ 而不是 $ \mu_t m_{t-1} $。同样不难看出,与经典 momentum 不同,这里的 momentum 步和梯度步都依赖当前的梯度。
现在,我们可以把同样的技巧用在 Adam 的 momentum 上:先把 Adam 的更新步以 $ m_{t-1} $ 和 $ g_t $ 表示,如第 12 行所示,然后用下一步的 momentum 步替换当前的 momentum 步,如第 13 行所示(相应地处理初始化偏差)。
- $ \theta_t \leftarrow \theta_{t-1} - \alpha_t \left( \frac{\mu_t m_{t-1}}{1 - \prod_{i=1}^{t} \mu_i} + \frac{(1 - \mu_t) g_t}{1 - \prod_{i=1}^{t} \mu_i} \right) \qquad (12) $
- $ \theta_t \leftarrow \theta_{t-1} - \alpha_t \left( \frac{\mu_{t+1} m_t}{1 - \prod_{i=1}^{t+1} \mu_i} + \frac{(1 - \mu_t) g_t}{1 - \prod_{i=1}^{t} \mu_i} \right) \qquad (13) $
以这种方式修改 Adam 之后,我们得到算法 2。然而,这种形式的 momentum 原则上还可以与其他使用自适应学习率的算法结合,例如 Adamax (Kingma 与 Ba, 2014) 或 Equilibrated gradient descent (EGD) (Dauphin 等人, 2015)。
算法 2:Nesterov 加速的自适应矩估计 (Nadam)
Require: $ \alpha_0, \dots, \alpha_T $;$ \mu_0, \dots, \mu_T $;$ \nu $;$ \epsilon $:超参数。
$ m_0, n_0 \leftarrow 0 $(一阶 / 二阶矩向量)。
当 $ \theta_t $ 尚未收敛时:
- $ g_t \leftarrow \nabla_{\theta_{t-1}} f_t(\theta_{t-1}) $
- $ m_t \leftarrow \mu_t m_{t-1} + (1 - \mu_t) g_t $
- $ n_t \leftarrow \nu n_{t-1} + (1 - \nu) g_t^2 $
- $ \hat{m} \leftarrow \frac{\mu_{t+1} m_t}{1 - \prod_{i=1}^{t+1} \mu_i} + \frac{(1 - \mu_t) g_t}{1 - \prod_{i=1}^{t} \mu_i} $
- $ \hat{n} \leftarrow \frac{\nu n_t}{1 - \nu^t} $
- $ \theta_t \leftarrow \theta_{t-1} - \frac{\alpha_t \hat{m}_t}{\sqrt{\hat{n}_t} + \epsilon} $
循环结束;返回 $ \theta_t $。
实验
为了测试 Nesterov 加速 Adam (Nadam) 的性能,我们训练了一个卷积 autoencoder(改编自 Jones (2015)),其编码器与解码器各包含三层卷积加两层全连接层,用以将 MNIST 数据集 (LeCun 等人, 1998) 中的图像压缩到 16 维向量空间,然后再重建原始图像(已知为一项困难任务)。我们测试了六种优化算法:SGD、momentum、NAG、RMSProp、Adam 和 Nadam,所有这些算法在适用之处都使用了初始化偏差校正和衰减均值(而非衰减和)。SGD 找到的最佳学习率为 $ 0.2 $,momentum / NAG 为 $ 0.5 $,RMSProp 为 $ 0.001 $,Adam / Nadam 为 $ 0.002 $。$ \mu $、$ \nu $ 和 $ \epsilon $ 分别被设为 $ 0.975 $、$ 0.999 $ 与 $ 10^{-8} $(带有不同程度的任意性),并未做调优。图 1 的结果表明,尽管 Nadam 与 Adam 拥有最多的超参数,它们在除学习率(通常无法避免)之外不做任何调优的情况下也能取得最佳结果。关键的是,Nadam 在降低训练损失和验证损失方面明显优于其他算法——包括其父算法 Adam。
图 1:不同优化器在 MNIST 数据集上的训练损失和验证损失。
结论
Kingma 与 Ba (2014) 实质上展示了如何以一种干净优雅的方式将经典 momentum 与 RMSProp 或 EGD 等自适应学习率相结合。本工作在此研究基础上更进一步,在不显著增加复杂度的情况下改进了其算法的一个核心组件。
参考文献
- Yann Dauphin, Harm de Vries, 与 Yoshua Bengio. Equilibrated adaptive learning rates for non-convex optimization. 见 Advances in Neural Information Processing Systems, 第 1504–1512 页, 2015 年.
- John Duchi, Elad Hazan, 与 Yoram Singer. Adaptive subgradient methods for online learning and stochastic optimization. The Journal of Machine Learning Research, 12:2121–2159, 2011 年.
- Mike Swarbrick Jones. Convolutional autoencoders in python/theano/lasagne. 博客文章(于 2016 年 2 月 17 日检索), 2015 年 4 月. 网址 https://swarbrickjones.wordpress.com/2015/04/29/convolutional-autoencoders-in-pythontheanolasagne/.
- Diederik Kingma 与 Jimmy Ba. Adam: a method for stochastic optimization. arXiv preprint arXiv:1412.6980, 2014 年.
- Yann LeCun, Corinna Cortes, 与 Christopher J. C. Burges. The MNIST database of handwritten digits, 1998 年.
- James Martens. Deep learning via Hessian-free optimization. 见 Proceedings of the 27th International Conference on Machine Learning (ICML-10), 第 735–742 页, 2010 年.
- Yurii Nesterov. A method of solving a convex programming problem with convergence rate $ O(1/k^2) $. 见 Soviet Mathematics Doklady, 第 27 卷, 第 372–376 页, 1983 年.
- Boris Teodorovich Polyak. Some methods of speeding up the convergence of iteration methods. USSR Computational Mathematics and Mathematical Physics, 4(5):1–17, 1964 年.
- Ilya Sutskever, James Martens, George Dahl, 与 Geoffrey Hinton. On the importance of initialization and momentum in deep learning. 见 Proceedings of the 30th International Conference on Machine Learning (ICML-13), 第 1139–1147 页, 2013 年.
- Tijmen Tieleman 与 Geoffrey Hinton. Lecture 6.5 — RMSprop: divide the gradient by a running average of its recent magnitude. COURSERA: Neural Networks for Machine Learning, 4, 2012 年.