第08章:训练的艺术——Warmup、Label Smoothing与Adam的共谋

0 阅读7分钟

第08章:训练的艺术——Warmup、Label Smoothing与Adam的共谋

论文链接:Attention Is All You Need (Vaswani et al., NIPS 2017) 本章对应:Section 5.3 (Optimizer), Section 5.4 (Regularization)

核心困惑

为什么Transformer需要学习率warmup?Label Smoothing为什么有效?

前面七章讲了Transformer的架构设计,但一个好的架构还需要好的训练策略。原论文用了几个关键的训练技巧:

  1. Adam优化器: β1=0.9,β2=0.98
  2. 学习率warmup:前4000步线性增长,之后按 1/step 衰减
  3. Label Smoothing: ϵls=0.1

这些技巧不是随便选的,每一个都有数学动机。

前置知识补给站

1. 梯度下降与学习率

梯度下降的更新公式:

θt+1=θt−η∇θL

学习率 η 的作用:

  • 太大:训练不稳定,可能发散
  • 太小:训练太慢,可能陷入局部最优

2. 动量(Momentum)

动量是指利用历史梯度信息:

vt=βvt−1+∇θL

θt+1=θt−ηvt

作用:

  • 加速收敛
  • 减少震荡

3. 自适应学习率

不同参数可能需要不同的学习率。自适应优化器(如Adam)为每个参数维护独立的学习率。

论文精读:Adam优化器

Adam的公式

Section 5.3:

“We used the Adam optimizer with , and .”

Adam的完整公式:

参数说明:

  • :当前梯度
  • :梯度的指数移动平均(一阶矩)
  • :梯度平方的指数移动平均(二阶矩)
  • :衰减率
  • :数值稳定性常数

为什么而不是0.999?

标准Adam:

Transformer:

区别:

  • 越大,二阶矩估计越”长记忆”
  • 意味着对梯度二阶矩的估计更”激进”

从半衰期角度理解:

  • 的半衰期:步
  • 的半衰期:步
  • 两者的”记忆窗口”相差20倍

可能的原因:

  • Transformer的梯度分布变化较快
  • 更小的让优化器更快适应梯度变化
  • 短窗口更适合快速变化的梯度分布

第一性原理推导:学习率Warmup

学习率调度公式

Section 5.3:

参数设置:

公式解读

分段函数:

第一阶段(前4000步):

这是一个线性增长的函数:

第二阶段(4000步之后):

这是一个inverse square root衰减。

峰值学习率

在时,学习率达到峰值:

代入数值:

为什么需要Warmup?

问题:如果一开始就用大学习率会怎样?

答案:训练不稳定,可能发散。

原因:

  1. 参数初始化:模型参数是随机初始化的,梯度分布不稳定
  2. Adam的二阶矩估计:训练初期, (梯度平方的移动平均)还没有准确估计
  3. 归一化层的输入分布不稳定:训练初期,模型参数的分布剧烈变化,导致LayerNorm的输入分布不稳定。LayerNorm的和参数(可学习的缩放和平移)需要时间来适应这个变化

Warmup的作用:

  • 让模型在训练初期”慢慢来”
  • 给Adam的二阶矩估计足够的时间收敛
  • 让归一化层的输入分布逐渐稳定

注:原论文用的是Post-LN架构(见第05章)。Post-LN的梯度流不稳定,Warmup是缓解这个问题的手段之一。后续模型改用Pre-LN后,对Warmup的依赖大大降低——有些Pre-LN模型甚至不需要Warmup。

学习率曲线可视化

添加图片注释,不超过 140 字(可选)

Label Smoothing:让模型”不那么自信”

Label Smoothing的公式

Section 5.4:

“During training, we employed label smoothing of value . This hurts perplexity, as the model learns to be more unsure, but improves accuracy and BLEU score.”

标准的交叉熵损失:

其中是one-hot标签(正确类别为1,其他为0)。

Label Smoothing:

原论文设置:

为什么Label Smoothing有效?

视角1:正则化

Label Smoothing防止模型过度自信。

标准训练:模型会尽量让正确类别的概率接近1,其他类别接近0。

Label Smoothing:模型被鼓励给错误类别分配一些小概率。

效果:

  • 防止过拟合
  • 提高泛化能力

视角2:熵正则化

Label Smoothing等价于在损失函数中加入熵正则项:

其中是输出分布的熵。

直观理解:鼓励模型的输出分布有更高的熵(更”不确定”)。

Label Smoothing的权衡

原论文的观察:

“This hurts perplexity, as the model learns to be more unsure, but improves accuracy and BLEU score.”

Perplexity vs BLEU:

  • Perplexity衡量模型的”确定性”(越低越好)
  • BLEU衡量翻译质量(越高越好)

Label Smoothing的效果:

  • Perplexity变差(模型更”不确定”)
  • BLEU变好(翻译质量提高)

结论:过度自信不一定是好事。

Dropout:随机失活

Section 5.4:

“We apply dropout to the output of each sub-layer, before it is added to the sub-layer input and normalized. In addition, we apply dropout to the sums of the embeddings and the positional encodings in both the encoder and decoder stacks. For the base model, we use a rate of .”

Dropout的位置(关键细节):

Dropout作用于子层输出,在残差加和之前。这样残差路径()不受Dropout影响,只有子层的贡献被随机屏蔽。

具体位置:

  1. 每个子层的输出(Attention、FFN)→ 在Add之前
  2. Embedding + Positional Encoding → 输入Encoder/Decoder之前

Dropout率:

注:Base模型使用。Big模型在不同任务上使用不同的Dropout率(EN-DE任务可能使用0.3,EN-FR任务使用0.1)——更大的模型需要更强的正则化。

作用:

  • 防止过拟合
  • 相当于集成学习(训练时随机dropout,推理时用全部神经元)

2026年的批判性视角

1. Warmup的理论解释

原论文的局限:

  • Warmup是经验性的,缺乏理论解释
  • 为什么是4000步而不是2000或8000?

后续研究的发现(Zhang et al., “Why Gradient Clipping Accelerates Training”, NeurIPS 2020):

  • Warmup的作用是控制训练初期的梯度范数
  • 从梯度范数的角度给出了理论依据

2. Label Smoothing的适用性

原论文的发现:Label Smoothing在翻译任务上有效。

后续研究的发现(Müller et al., “When Does Label Smoothing Help?”, NeurIPS 2019):

  • Label Smoothing在某些任务上反而降低性能
  • 特别是在类别不平衡的任务上

结论:Label Smoothing不是万能的,需要根据任务调整。

3. 学习率调度的替代方案

原论文的调度:Warmup + Inverse Square Root Decay

现代模型的选择:

  • Cosine Annealing:学习率按余弦函数衰减
  • Linear Decay:学习率线性衰减到0
  • Constant with Warmup:Warmup后保持恒定

GPT-3的选择:Cosine Annealing with Warmup

4. AdamW:Adam的改进

Adam的问题:权重衰减(weight decay)的实现不正确。

AdamW(Loshchilov & Hutter, 2019):

  • 修正了权重衰减的实现
  • 效果比Adam更好
  • 现代模型(GPT、BERT)使用

训练配置总结

配置项说明
优化器Adam\beta_1=0.9, \beta_2=0.98, \epsilon=10^{-9}
学习率调度Warmup + Inverse SqrtWarmup 4000步,峰值 7 \times 10^{-4}
Dropout0.1应用于子层输出和embedding
Label Smoothing0.1防止过度自信
Batch Size~25000 tokens每个batch约25000个token
训练步数100K (base) / 300K (big)Base模型12小时,Big模型3.5天

面试追问清单

⭐ 基础必会

  1. 为什么Transformer需要学习率warmup?
  • 提示:训练初期梯度不稳定、Adam的二阶矩估计
  1. Label Smoothing是什么?为什么有效?
  • 提示:防止过度自信、正则化
  1. Adam优化器的和分别控制什么?
  • 提示:一阶矩(梯度)和二阶矩(梯度平方)

⭐⭐ 进阶思考

  1. 计算Transformer的峰值学习率。
  • 提示:
  1. 为什么原论文的而不是标准的0.999?
  • 提示:更快适应梯度变化
  1. Label Smoothing为什么会”hurt perplexity”但”improve BLEU”?
  • 提示:模型更不确定,但泛化能力更强

⭐⭐⭐ 专家领域

  1. 从梯度范数的角度解释为什么需要warmup。
  • 提示:训练初期梯度范数很大,需要小学习率控制
  1. AdamW和Adam有什么区别?为什么AdamW更好?
  • 提示:权重衰减的实现方式
  1. 如何设计一个比原论文更好的学习率调度策略?
  • 提示:Cosine Annealing、Linear Decay、根据验证集动态调整

第一部分完结:前8章完成了原论文的硬核拆解。第09-11章将分析现代架构的演进(Decoder-only、MoE、长文本)。

论文原文传送门: