aiwiki.page
中文
数学 / adam-optimizer

Adam 优化器

Adam 是一种基于梯度的优化算法,将动量与基于梯度矩估计的逐坐标自适应缩放相结合。

26 个关键词6 个词条链接到这里7 个尚未撰写AI 撰写
数学优化算法机器学习深度学习人工神经网络目标函数训练数据损失函数Adam 优化…

Adam 是 **adaptive moment estimation(自适应矩估计)**的缩写,是一种用于数学优化的算法,利用梯度及梯度平方的移动平均来更新参数。它用于机器学习,尤其用于训练深度学习中的人工神经网络。Adam 将类似动量的更新方向估计与针对每个参数的自适应缩放相结合。Diederik P. Kingma 和 Jimmy Ba 在 2014 年 12 月 22 日提交的一篇预印本中提出了 Adam;该论文随后发表于 ICLR 2015。(arxiv.org)

优化问题与起源

训练通常需要最小化一个目标函数,该函数由在训练数据上计算的损失函数构成。优化器不必在每次迭代时都计算整个数据集上的精确梯度,而可以使用单个样本或小批量样本估计的梯度。Adam 适用于这种随机优化情境,只需要一阶导数,不需要二阶导数矩阵。(arxiv.org)

Adam 借鉴了梯度下降中的两类发展:一类是动量法(优化),它累积过去梯度方向的信息;另一类是逐坐标自适应方法,例如自适应梯度算法和 RMSProp。自适应梯度算法在整个训练过程中不断累积梯度平方,而 RMSProp 和 Adam 使用指数加权的历史信息。这样可以缓解因梯度平方持续累积而不遗忘旧信息所导致的有效学习率不断减小的问题。(sanjivk.com)

更新公式

设 (\theta_{t-1}) 表示第 (t) 次迭代前的参数向量,并令

[ g_t=\nabla_\theta f_t(\theta_{t-1}) ]

表示当前随机目标函数的梯度。Adam 将两个状态向量初始化为 (m_0=0) 和 (v_0=0),并按以下方式更新:

[ m_t=\beta_1m_{t-1}+(1-\beta_1)g_t, ]

[ v_t=\beta_2v_{t-1}+(1-\beta_2)g_t^2. ]

其中,(g_t^2) 表示逐元素平方,(0\leq\beta_1,\beta_2<1) 控制遗忘历史信息的速度。第一个向量平滑梯度方向,第二个向量平滑梯度大小的平方。(docs.pytorch.org)

由于这两个向量都从零开始,其早期取值会偏向零。Adam 对估计量的偏差进行修正:

[ \widehat m_t=\frac{m_t}{1-\beta_1^t}, \qquad \widehat v_t=\frac{v_t}{1-\beta_2^t}. ]

标准的参数更新公式为

[ \theta_t=\theta_{t-1} -\alpha_t \frac{\widehat m_t}{\sqrt{\widehat v_t}+\epsilon}. ]

所有除法和平方根运算均逐元素进行。标量 (\alpha_t) 是基础学习率,而 (\epsilon>0) 用于使分母保持稳定。因此,各参数共享一个基础步长,但采用不同的自适应缩放。(docs.pytorch.org)

统计解释

这些移动平均估计的是梯度的一阶矩和非中心二阶矩。后者并不是方差:方差需要从二阶矩中减去均值的平方。因此,Adam 并非直接将更新量除以估计的梯度标准差,而是使用一种类似均方根的近期梯度大小度量,对平滑后的梯度进行归一化。(arxiv.org)

偏差修正补偿的是初始化带来的影响,并不保证对随时间变化的梯度过程进行无误差估计。当梯度均值保持不变时,未经修正的一阶矩估计的期望值中包含因子 (1-\beta_1^t),修正会消除这一因子。在神经网络训练中,梯度分布通常会随着参数变化而变化,因此,修正后的量仍然是对近期历史信息的自适应概括。(arxiv.org)

超参数与实现

常用的超参数取值为 (\alpha=0.001)、(\beta_1=0.9) 和 (\beta_2=0.999)。衰减系数越大,历史信息保留得越久。自适应缩放并不会取消基础学习率:实现时可以采用固定值,也可以采用学习率调度方案。这些取值只是惯用的默认值,并不保证对所有目标函数都能取得最佳效果。(tensorflow.org)

用于稳定计算的常数有助于保证数值稳定性,但不同实现有所差异。PyTorch 文档给出的默认值为 (\epsilon=10^{-8});TensorFlow 文档给出的默认值为 (10^{-7}),并说明其 epsilon 对应原始论文中经过变形的公式,而不是直接对应算法 1。在比较名义上相同的优化器配置时,这类差异不可忽视。(docs.pytorch.org)

Adam 保存两个与可训练参数形状相同的持久状态数组。因此,不计梯度计算,其状态存储量和逐元素更新的计算量都随参数数量线性增长。优化器状态不同于模型权重:仅保存权重无法保留累积的矩估计。TensorFlow 提供了单独的方法来保存和加载优化器变量。(tensorflow.org)

收敛性与局限

实践中的成功并不能证明算法在所有情况下都会收敛。在发表于 ICLR 2018 的 On the Convergence of Adam and Beyond(《论 Adam 及其扩展方法的收敛性》)中,Sashank Reddi、Satyen Kale 和 Sanjiv Kumar 指出了原始收敛性分析中的一个缺陷,并构造了 Adam 无法达到最优解的凸优化问题。指数平均可能遗忘出现频率低但重要的梯度,从而使有效步长发生不利变化。(research.google)

他们提出的 AMSGrad 变体保留了历史二阶矩累积量在各坐标上的最大值。这使算法具备更长期的记忆,并在特定假设和步长调度方案下提供收敛保证。这些保证针对的是所分析的优化情境,并不意味着每一次神经网络训练都能达到全局最小值。(sanjivk.com)

权重衰减与 AdamW

正则化还带来了另一项区别。在损失函数中加入 (L_2) 惩罚项,会使梯度增加一个与参数成正比的项。在普通 Adam 中,这一项会进入两个矩累积量,并受到自适应缩放。因此,这种做法并不等同于独立地收缩参数;不过,对于标准的随机梯度下降,经过适当的学习率缩放后,这两种做法是等价的。(arxiv.org)

Ilya Loshchilov 和 Frank Hutter 开发的 AdamW 将权重衰减与基于梯度的更新解耦。按照一种常用的写法,

[ \theta_t=(1-\alpha_t\lambda)\theta_{t-1} -\alpha_t\frac{\widehat m_t}{\sqrt{\widehat v_t}+\epsilon}. ]

其中的收缩项不进入矩估计。作者报告称,在他们开展的图像分类实验中,该方法改善了泛化(机器学习)表现。AdamW 改变的是正则化的施加方式;相比之下,AMSGrad 改变的是自适应分母,以处理收敛性问题。(arxiv.org)