优化器在训练深度神经网络 (neural network)时处理复杂的损失情况方面发挥着重要作用。虽然标准随机梯度下降 (gradient descent)(SGD)提供了初始方法,但其固定的学习率对于Transformer模型的规模和复杂性来说往往不够用。自适应学习率算法能够动态调整每个参数 (parameter)的步长,已成为不可或缺的工具。在这些算法中,Adam及其改进版AdamW是训练Transformer时普遍采用的优化器。
Adam: 自适应矩估计
Adam是自适应矩估计的简称,它结合了动量方法和RMSprop的思路。它根据梯度的一阶和二阶矩的估算值,为不同的参数 (parameter)计算各自的自适应学习率。
-
一阶矩(动量): Adam维持着过去梯度的一个指数衰减平均值。这起到了动量的作用,帮助优化器在损失曲面浅平的山谷中更快地前进,并减缓高曲率方向的振荡。时间步 t 时的一阶矩估算值 mt 使用梯度 gt 计算:
mt=β1mt−1+(1−β1)gt
超参数 (hyperparameter) β1 决定了指数衰减率,通常设为0.9这样的值。
-
二阶矩(方差自适应): Adam还维持着过去梯度平方的一个指数衰减平均值。这作为每个参数梯度变化程度的估算(更精确地说,是未中心化的二阶矩)。该估算值被用来反向调整学习率;梯度历史值波动较大的参数更新步长较小,而梯度较小或稀疏的参数更新步长较大。二阶矩估算值 vt 计算方式如下:
vt=β2vt−1+(1−β2)gt2
超参数 β2 决定此衰减率,通常设为0.999。
-
偏差修正: 由于矩估算值 mt 和 vt 初始化为零,它们在训练初期存在偏向零的偏差。Adam引入了偏差修正项来抵消这种影响:
m^t=1−β1tmt
v^t=1−β2tvt
这些修正后的估算值 m^t 和 v^t 提供了对真实矩更准确的估算,尤其是在训练初期。
-
参数更新: 最后,使用偏差修正后的矩估算值来更新参数 w。更新规则通过修正后的一阶矩与修正后的二阶矩的平方根的比值,来调整基础学习率 α:
wt+1=wt−αv^t+ϵm^t
小常数 ϵ (例如 10−8) 被添加到分母中,以防止数值异常,从而避免除以零。
Adam在多种深度学习 (deep learning)任务中常表现出快速的初期收敛和良好性能。然而,当Adam与标准L2正则化 (regularization)(权重 (weight)衰减)结合使用时,会浮现一个不明显的问题。L2正则化旨在通过在损失函数 (loss function)中添加惩罚项 2λ∣∣w∣∣2 来减少过拟合 (overfitting)。这导致梯度 gt 中增加一个额外的项 −λwt。在传统的Adam实现方式中,这个梯度组成部分 gt=∇L(wt)+λwt 被用于计算 mt 和 vt。这使得权重衰减作用与自适应学习率机制耦合在一起。具体来说,更新过程中施加的实际权重衰减 (αv^t+ϵλwt) 会受到自适应分母 v^t 的调整。这意味着与历史梯度大小(较大的 v^t)相关的权重,其实际衰减作用会减弱,可能阻碍正则化作用。
AdamW: 带有解耦权重 (weight)衰减的Adam
AdamW被提出是为了解决原始Adam算法中权重衰减与自适应学习率之间不理想的配合问题。Loshchilov & Hutter (2019) 提出的主要思路简单而有效:将权重衰减更新与Adam执行的基于梯度的更新分离开来。
AdamW没有将L2惩罚纳入用于矩估算的梯度 gt 中,而是仅使用来自主要损失函数 (loss function) ∇L(wt) 的梯度来计算矩估算值和主要的自适应更新步骤。权重衰减随后在自适应步骤 之后 单独且直接施加到权重上。
该过程可概括为:
- 仅根据任务损失计算梯度 gt=∇L(wt)。
- 使用 gt 更新一阶和二阶矩估算值(mt, vt),并计算它们的偏差修正版本(m^t, v^t),与标准Adam中相同。
- 计算主要的Adam更新步长(尚未考虑学习率):
Δwt′=v^t+ϵm^t
- 通过施加缩放后的自适应步长和解耦的权重衰减来更新权重。使用 ηt 作为时间步 t 的调度学习率:
wt+1=wt−ηt(Δwt′+λwt)
或者,更接近原始论文的表达,衰减可以在更新前以乘法形式施加:wt+1=(1−ηtλ)wt−ηtΔwt′。主要观察点是,衰减项 λwt 不再受 1/(v^t+ϵ) 的影响。
通过解耦,AdamW保证了权重衰减在所有参数 (parameter)上施加得更一致,仅与权重大小 wt 和学习率 ηt 成比例,不受 v^t 中捕获的梯度历史影响。这一修改常能带来更好的模型泛化能力和最终表现,相比使用L2正则化 (regularization)的标准Adam而言,特别是对于Transformer这类有效正则化非常有益的复杂模型。因此,AdamW已成为训练现代Transformer的事实标准优化器。
超参数 (parameter) (hyperparameter)与考量
有效运用Adam或AdamW需要设定多个超参数:
- 学习率 (α 或 ηt): 这依然是一个非常敏感的超参数。对于Transformer而言,它几乎从不固定;相反,包含一个初始“预热”阶段,随后是衰减阶段的学习率调度十分重要(将在后续章节中讨论)。通常的峰值学习率处于 10−5 到 10−3 的范围,受模型大小、批量大小以及所用具体调度等因素影响。
- β1: 一阶矩估算值的指数衰减率。默认值0.9在多数情况下效果良好。
- β2: 二阶矩估算值的指数衰减率。虽然默认值0.999普遍使用,但一些研究表明略低的值(例如0.98、0.99)偶尔可能带来一些好处。
- ϵ: 一个小值,用于防止数值异常。像 10−8 或 10−6 这样的默认值通常足够。
- 权重 (weight)衰减 (λ): 可直接用于AdamW,或者在标准Adam中作为L2惩罚系数。这是一个重要的正则化 (regularization)超参数,需要通过实验调整。常见的起始值在0.01或0.1左右,但最佳值取决于数据集和模型。将 λ=0 设为0实际等于关闭权重衰减。
总而言之,尽管Adam在优化方面取得了显著进展,但AdamW提供了一种更优化的方法来纳入权重衰减,在训练大型语言模型时带来了明显的改进。对于Transformer架构,它通常是推荐的选择,总是与仔细调整的学习率调度和正则化参数配合使用。