Adam: A Method for Stochastic Optimization
Diederik P. Kingma, Jimmy Ba
cs.LG
2014-12-22
Adam把纠偏后的一阶矩和二阶原始矩做成对角自适应步长,默认步长千分之一、β为0.9与0.999;在MNIST和CIFAR上不慢于当时的AdaGrad与RMSProp。
2014 年底,随机目标函数的一阶优化已经有两条常用路。AdaGrad 按历史梯度平方和缩放,稀疏特征学得快,但分母只增不减,学习率会单调萎缩。RMSProp 用指数滑动的二阶矩,能跟上非平稳目标,却没有一套干净的偏差修正,也缺少和在线凸优化对接的遗憾界。Kingma 与 Ba 把两者拼成 Adam:Adaptive Moment Estimation,ICLR 2015。
目标很具体:只要一阶梯度、内存与参数同阶、对梯度的对角重缩放不变,超参最好有直观含义并且很少需要调。
Adam 维护两份指数滑动平均。mt 是梯度的一阶矩,衰减 β1,默认 0.9;vt 是梯度逐元素平方的二阶原始矩,衰减 β2,默认 0.999。两者从 0 起步,早期严重偏向零,尤其 β 接近 1 时。纠偏后用 m̂t = mt / (1-β1^t)、v̂t = vt / (1-β2^t),参数更新为 θ ← θ - α · m̂ / (√v̂ + ε),默认 α=0.001、ε=10^{-8}。
有效步长 Δt = α · m̂ / √v̂ 有上界,稀疏极端情形下约为 α·(1-β1)/√(1-β2),更常见时 |Δt| 大约不超过 α。这相当于在当前参数周围划了一块信任域,梯度再大也不会单步跳出。实现上可以把 α 的纠偏提前乘进去,少几次开方。
理论部分把问题放进在线凸优化:对一列凸函数 ft,遗憾界与当时最好的一阶自适应方法同阶,证明在附录。AdaMax 把二阶矩换成无穷范数,递推 ut = max(β2 · u{t-1}, |gt|),不必再做初始化纠偏,步长上界更干净,|Δt| ≤ α。文中还写了参数的指数滑动平均作为 Polyak 平均的廉价替代,但主实验用的是标准 Adam。
所有对照都在同一初始化上做,学习率和动量走密网格,报告最好一组。论文用曲线说话,正文几乎不给终点数字。
MNIST 多类 logistic(凸)上,Adam 与 Nesterov SGD 接近,都快于 AdaGrad。IMDB 的 1 万维 bag-of-words 稀疏 logistic 上,AdaGrad 大幅领先 Nesterov;Adam 跟上 AdaGrad,和「带 1/√t 的步长衰减时应匹配 AdaGrad」这条理论一致。两层各 1000 个 ReLU 的 MNIST MLP,dropout 下 Adam 快于 AdaGrad、RMSProp、Nesterov、AdaDelta;确定性目标上,对当时的准牛顿方法 SFO,Adam 迭代和墙钟都更快,SFO 每步更新曲率,单次迭代慢 5 到 10 倍,内存还随 minibatch 数线性涨,有 dropout 时 SFO 不收敛。CIFAR-10 的三阶段 5×5 卷积加 3×3 pooling、再接 1000 隐单元全连接,Adam 在有无 dropout 下都与对照相当或更快。
默认 α=0.001、β1=0.9、β2=0.999 后来成了深度学习的口头禅,很多训练日志里这组数十年不改。对角自适应让不同层、不同稀疏度的参数共用一个全局 α,卷积和全连接不必再手调两套学习率。代价是多存一份与参数同形状的一阶、二阶矩,内存大约是 SGD 的三倍。
遗憾界只覆盖在线凸问题,作者自己写明非凸没有理论,MLP 和 CNN 实验是经验性质。数据集停在 MNIST、IMDB、CIFAR-10,没有 ImageNet 尺度的终点精度。对照是当时的 AdaGrad / RMSProp / AdaDelta / SFO,不是后来的 AdamW 或带 warmup 的大模型训练。ε 的作用、β2 接近 1 时早期 v 过小导致的大步,正文只当实现细节,没有当成稳定性问题展开。AdaMax 和参数滑动平均写了算法,主结果没有单独成表。