要解决的问题
训练机器学习模型,多数时候是在解一个优化问题:不断调整模型的参数,让损失函数(loss function)变小。最基本的工具是梯度下降(gradient descent)——算出损失对参数的梯度,也就是损失上升最快的方向,然后朝相反方向走一步。论文《Adam:一种随机优化方法》于 2014 年 12 月 22 日首次提交到 arXiv,编号 1412.6980,作者是 Diederik P. Kingma 和 Jimmy Ba。[1]论文把 Adam 定位为一种针对随机目标函数、基于梯度的一阶优化算法,其基础是对低阶矩的自适应估计。[1]
这几个限定词对应着真实的约束。「一阶」意味着算法只使用梯度,不使用二阶导数那样的曲率信息——对大型模型来说,后者往往算不动或存不下。「随机」意味着目标函数是用随机样本估计出来的,实践中就是一小批一小批的训练数据,所以每一次算出的梯度只是一个带噪声的近似值,而不是精确值。「对低阶矩的自适应估计」则是指:算法持续维护梯度的滑动平均值(一阶矩)和梯度平方的滑动平均值(二阶矩),并用它们来决定每一个参数各自该走多大一步。
怎么做
直观地说,这个方法是用梯度自身的典型幅度去给梯度做归一化。对每个参数,算法一方面保留近期梯度的衰减平均,用来平滑噪声、指示比较一致的方向;另一方面保留近期梯度平方的衰减平均,用来衡量这个参数上的梯度平时有多大。参数实际走的步长,大致等于平滑后的梯度除以平滑后梯度平方的平方根。于是,梯度长期很大的参数,步子会被压小;梯度很小或者很少非零的参数,步子相对会变大。结果是:一个全局设定的步长,被按参数分别调整,而不是所有参数一视同仁。
论文指出,这一更新规则对梯度的对角缩放(diagonal rescaling)是不变的:如果把某个坐标上的梯度整体乘上一个常数,该坐标的更新量并不改变,因为这个常数会同时出现在分子和分母上。作者特别强调,这一性质对数据量大和/或参数量大的问题有用,因为这类问题中不同坐标的尺度可能天然相差很大。[1]同样的构造也是作者论证该方法适用于非平稳目标、以及梯度噪声很大或非常稀疏的问题的理由——在稀疏情形下,很多梯度是零或接近零。[1]
在工程层面,作者称该方法实现直接、计算高效、内存需求小:每个参数只需要存几个滑动平均值,而不需要存参数两两之间的关系矩阵。[1]他们同时表示,超参数(hyper-parameter)具有直观的解释,通常不需要太多调整。[1]
结果
除算法本身,论文还分析了理论上的收敛性质,并给出了收敛速度的遗憾界(regret bound),与在线凸优化(online convex optimization)下已知的最好结果相当。[1]遗憾界比较的是算法累计损失与事后回看时最优固定选择之间的差距;它描述的是在一串目标函数上的最坏情形行为,并不保证训练某个具体模型一定能得到好的解。
为什么重要
arXiv 记录显示,这篇论文发表于 2015 年在圣迭戈举行的第三届国际学习表征会议(ICLR)。[1]论文提供的东西不是一种新的模型结构,而是一个每次训练模型都要用到的通用工具。它自述的设计目标——内存占用低、单步计算便宜、对噪声大和稀疏的梯度稳健、超参数不太需要调——恰好决定了某个优化器能否被日常用于大规模问题。按参数自适应加上轻量的内存占用这一组合,正是论文把它描述为适用范围广的原因,人们讨论这项工作的重要性时通常也落在这些点上。
注释与来源
- Adam: A Method for Stochastic Optimizationhttps://arxiv.org/abs/1412.6980
引用本页: Adam:一种随机优化方法. TellWorld, https://www.tellworld.net/zh/papers/adam-2014. 更新于 2026-11-07