跳到主要内容

09 · 节奏:往哪走,走多快

1. 这一章讲什么

第 7 章解决了「算力够不够」,这一章解决「步子怎么迈」:优化器决定每个参数往哪个方向、挪多大一步;学习率调度决定这个步幅随训练进程怎么变。原书第 9 章讲两个优化器(管「每步往哪挪、挪多大」的部件:AdamW 与 LAMB)与一族调度策略(线性衰减、余弦退火——按波浪形缓降再回升——、Warmup、循环学习率,外加五种调度器清单)1

选它们的理由原书说得直白:AdamW 已是现代深度学习的主流优化器;LAMB 则是为超大批次的分布式训练而生——正好接上第 7 章攒大批次的铺垫。

2. 顶层全景:方向、步幅、变速

每一步更新 = 方向(梯度) × 步幅(学习率)
│ │
优化器管两件事: 调度器管一件事:
① 方向要不要修正 步幅随训练进程怎么变
② 步幅要不要缩放 (前期大步、后期小步、开局热身…)

AdamW:带记忆的自适应步长 + 权重衰减(防偏科)
LAMB :再按每层参数的模长定节奏(大批量不翻车)

图说:优化器管「每一步」,调度器管「全程曲线」;两层叠在一切训练之上。

3. 核心原理

3.1 AdamW:有记忆的助手,会定期清理

普通梯度下降(最朴素的调法:沿梯度方向挪一小步)每一步只看当前梯度;AdamW 多了两份「记忆」——过去梯度的平均方向和平均幅度,用它来给每个参数自适应地定步幅。原书的比喻:它「不仅考虑了当前数据带来的『即时冲动』,还记住了之前学到的信息」;面对陡坡慢行、平路快行,避免大幅振荡2

W 后缀是关键差异:权重衰减。模型会对少数特征过度依赖(偏科),泛化变差;AdamW 定期给权重打个小折扣,像「忘记系数」,逼模型别把宝押在个别特征上3。为什么重要?看原书的回归实验:跑满 200 个 epoch 后权重收敛到 1.98、偏置(另一个可调的数)3.07,目标是 2 和 34——参数停在了该停的地方,没有「冲过头」。这组数字的价值不在大小,在于它演示了「收敛」可验证:跑完看参数离真值多远。

3.2 LAMB:为超大批次而生的节奏控制器

第 7 章攒出的大批次带来新问题:批量越大,梯度越「平均」,单步该走多远越难定——Adam 在极大批量上会不稳。原书给的解释:Adam 对每个参数的调整「没有考虑每层参数的模长关系」,更新步幅容易过大或过小5

LAMB 的解法:看每一层参数的模长,按「梯度模长与权重模长的比值」动态定这一层的步幅。原书的比喻是马拉松教练——不管选手(参数)体能差异多大,都控制步速让整体节奏稳定,「跑得快的放慢,跑得慢的加快」6。同款回归实验,LAMB 跑满 200 个 epoch 收敛到权重 2.92、偏置 1.85(目标 3 和 2)7,与 AdamW 打平——它的价值要到超大批量场景才显现,原书如实没在小实验里吹它。

3.3 学习率调度:油门要换挡

固定学习率的毛病:大了在最优点附近来回跳,小了前期龟速。原书用开车打比方:训练初期踩大油门快速接近,后期松油门细调8。四种走法:

策略曲线何时用
线性衰减从 0.1 匀速降到 0.01(20 个 epoch,每个 epoch 约减 0.0045)9训练总量已知的最朴素选择
余弦退火按余弦曲线缓降,周期结束后重新升回再来一轮帮模型跳出局部最优10
Warmup开局从近零逐步升高到目标值,再交给别的策略大模型训练的标准开局11
循环学习率三角形:在低值与高值间反复横跳;Triangular2 变体每周期振幅减半12长时间训练,持续给「刺激」

主走查:Warmup 前 100 步在干什么。 原书 9.4.1 的输出:

Batch 1: lr = 0.0001 ← 几乎原地踏步(参数还是随机的,大步必跑偏)
Batch 2: lr = 0.0002
Batch 3: lr = 0.0003 …线性爬坡…
Batch 100: lr = 0.0100 ← 到达目标值
Batch 101 起:lr 恒定 0.01,交给后续阶段

走查说明:为什么开局要这么怂?原书说得直白——初始参数是随机的,一上来就用大学习率,「会让模型『跑偏』或者不稳定」13;Warmup 相当于热身运动,先小步试探方向,方向稳了再加速。100 步爬坡换一个不跑偏的开局,是今天所有大模型训练的默认开局。

3.4 五种调度器清单:按阶段对号入座

原书 9.4.3 收了一张实用的表,五种 PyTorch 调度器各有分工:

调度器规则关键参数
StepLR每 N 个 epoch 学习率乘一个固定比例step_size、gamma(0.1=砍到一成)14
ExponentialLR每个 epoch 都按指数衰减gamma(0 与 1 之间)15
ReduceLROnPlateau盯着验证指标,不动了才降mode、factor、patience(耐心值)16
CosineAnnealingLR余弦曲线降到 0T_max(一个周期的长度)17
CosineAnnealingWarmRestarts余弦降完重启回初值,周期可倍增T_0、T_mult18

选型直觉:知道总共要跑多少个 epoch,用余弦/线性;不知道训练什么时候该减速(比如数据情况复杂)用 ReduceLROnPlateau 让模型自己说;怕卡死在局部最优用带重启的两种。

4. 作者的判断与证据

  • 有演示数据的: AdamW 跑满 200 个 epoch 收敛到 1.98/3.07、LAMB 收敛到 2.92/1.85(9.1)、线性衰减每轮 −0.0045(9.3)、余弦退火 50 个 epoch 降到 0 再回升(9.3 输出)、Warmup 前 100 步爬坡(9.4.1)。
  • 是作者判断/比喻的: 「有记忆力的助手」「忘记系数」「马拉松教练」「油门」「热身运动」全部是比喻;「LAMB 在大规模预训练中表现尤为出色」是导语里的定性判断,正文的小实验验证不了它——原书没做大批量对照。
  • 原书的一处口误要点破: 9.3 写线性衰减「以一种线性方式(即等比下降)逐步降低学习率」——线性是等差(每步减固定量,书里的数字 0.1→0.01 每轮约减 0.0045 也自证了这一点),不是等比。读的时候按等差理解。

5. 边界与局限

  • 原书只做了「线性模型拟合 y=2x+3」级别的小实验;优化器真正的差距(大模型、大批量、不同噪声结构)没有实验支撑——LAMB 尤其如此。
  • 权重衰减只讲了「防偏科」的直觉,AdamW 与 Adam 在 L2 正则上的实现差异(解耦与否、为什么影响泛化)没有展开。补充(不在书里,来自通用知识):这正是「W」的来历——衰减量与自适应步长解耦,各参数衰减得均匀。
  • 调度器清单没有给「组合拳」的默认配方(Warmup+余弦是业界事实标准),只让读者按表自选;12.3 会补一次微调场景的实战配比(学习率 2e-5 + 权重衰减 0.01)。
  • 9.2(梯度累积)与 7.3 重复,已在 07 章合并处理,本章不再重复。

6. 可带走的

  1. 优化器两层职责:方向修正(动量/记忆)+步幅缩放(自适应);AdamW 两样都有,再加一个权重衰减。
  2. 权重衰减是「定期遗忘」,专治对个别特征的过度依赖;认准带 W 的名字。
  3. LAMB 的适用前提是超大批次;小实验里它和 AdamW 打平,别在小任务上硬选它。
  4. 学习率不是常数:开局 Warmup、中段大步、尾段细调,是三段式的常识结构。
  5. Warmup 的理由要能复述:初始参数随机,大步幅=高概率跑偏。
  6. 五种调度器按「知不知道总共要跑多少个 epoch、怕不怕局部最优」对号入座;ReduceLROnPlateau 是「让模型自己喊停」的那一个。
  7. 收敛可验证:回归任务看参数离真值多远,分类任务看困惑度/准确率——跑完必须回头看一眼。

7. 原文地图

主题原书章原文位置
章导语第9章text/55-ch09.txt:24(搜「AdamW和LAMB」)
AdamW 记忆与自适应9.1text/56-ch09-01-9-1.txt:38(搜「即时冲动」) · text/56-ch09-01-9-1.txt:44(搜「陡峭的」)
权重衰减=忘记系数9.1text/56-ch09-01-9-1.txt:41(搜「忘记系数」)
AdamW 收敛数字9.1text/56-ch09-01-9-1.txt:95(搜「1.9823」)
LAMB 模长与马拉松9.1text/56-ch09-01-9-1.txt:128(搜「模长」) · text/56-ch09-01-9-1.txt:125(搜「马拉松」) · text/56-ch09-01-9-1.txt:131(搜「模长关系」)
LAMB 收敛数字9.1text/56-ch09-01-9-1.txt:182(搜「2.9215」)
油门比喻与线性衰减9.3text/58-ch09-03-9-3.txt:33(搜「油门」) · text/58-ch09-03-9-3.txt:36(搜「等比下降」)
余弦退火9.3text/58-ch09-03-9-3.txt:115(搜「逃离局部最优解」) · text/58-ch09-03-9-3.txt:130(搜「T_max=50」)
Warmup 热身9.4text/59-ch09-04-9-4.txt:33(搜「热身运动」) · text/59-ch09-04-9-4.txt:85(搜「前100个batch」)
循环学习率两种模式9.4text/59-ch09-04-9-4.txt:105(搜「三角形(Triangular)」) · text/59-ch09-04-9-4.txt:108(搜「逐步减半」)
五种调度器9.4text/59-ch09-04-9-4.txt:159(搜「StepLR」) · text/59-ch09-04-9-4.txt:198(搜「不再改善时减少学习率」) · text/59-ch09-04-9-4.txt:277(搜「周期性重启相结合」)

Footnotes

  1. 出处:「第9章 自适应优化器与动态学习率调度」第 24 段(text/55-ch09.txt:24,搜「AdamW和LAMB」)。

  2. 出处:「9.1 AdamW优化器与LAMB优化器的实现」第 38 与 44 段(text/56-ch09-01-9-1.txt:38,搜「即时冲动」;text/56-ch09-01-9-1.txt:44,搜「陡峭的」)。

  3. 出处:「9.1 AdamW优化器与LAMB优化器的实现」第 41 与 47 段(text/56-ch09-01-9-1.txt:41,搜「忘记系数」;text/56-ch09-01-9-1.txt:47,搜「定期清理」)。

  4. 出处:「9.1 AdamW优化器与LAMB优化器的实现」第 95-99 与 109 段(text/56-ch09-01-9-1.txt:95,搜「1.9823」;text/56-ch09-01-9-1.txt:108,搜「接近目标值」)。

  5. 出处:「9.1 AdamW优化器与LAMB优化器的实现」第 131 段(text/56-ch09-01-9-1.txt:131,搜「模长关系」)。

  6. 出处:「9.1 AdamW优化器与LAMB优化器的实现」第 122-130 段(text/56-ch09-01-9-1.txt:125,搜「马拉松」;text/56-ch09-01-9-1.txt:128,搜「模长」)。

  7. 出处:「9.1 AdamW优化器与LAMB优化器的实现」第 183 与 196 段(text/56-ch09-01-9-1.txt:182,搜「2.9215」;text/56-ch09-01-9-1.txt:195,搜「接近真实值3和2」)。

  8. 出处:「9.3 动态学习率调度」第 33 段(text/58-ch09-03-9-3.txt:33,搜「油门」)。

  9. 出处:「9.3 动态学习率调度」第 36 段(text/58-ch09-03-9-3.txt:36,搜「0.0045」)。

  10. 出处:「9.3 动态学习率调度」第 112 与 115 段(text/58-ch09-03-9-3.txt:112,搜「波浪式」;text/58-ch09-03-9-3.txt:115,搜「逃离局部最优解」)。

  11. 出处:「9.4 Warmup与循环学习率调度」第 33 与 85 段(text/59-ch09-04-9-4.txt:33,搜「热身运动」;text/59-ch09-04-9-4.txt:85,搜「前100个batch」)。

  12. 出处:「9.4 Warmup与循环学习率调度」第 105-108 段(text/59-ch09-04-9-4.txt:105,搜「三角形(Triangular)」;text/59-ch09-04-9-4.txt:108,搜「逐步减半」)。

  13. 出处:「9.4 Warmup与循环学习率调度」第 33 段(text/59-ch09-04-9-4.txt:33,搜「跑偏」)。

  14. 出处:「9.4 Warmup与循环学习率调度」第 159 与 171-175 段(text/59-ch09-04-9-4.txt:159,搜「StepLR」;text/59-ch09-04-9-4.txt:174,搜「gamma」)。

  15. 出处:「9.4 Warmup与循环学习率调度」第 177-193 段(text/59-ch09-04-9-4.txt:177,搜「ExponentialLR」)。

  16. 出处:「9.4 Warmup与循环学习率调度」第 197-217 段(text/59-ch09-04-9-4.txt:195,搜「ReduceLROnPlateau」;text/59-ch09-04-9-4.txt:198,搜「不再改善时减少学习率」)。

  17. 出处:「9.4 Warmup与循环学习率调度」第 219-273 段(text/59-ch09-04-9-4.txt:219,搜「CosineAnnealingLR」;text/59-ch09-04-9-4.txt:271,搜「T_max」)。

  18. 出处:「9.4 Warmup与循环学习率调度」第 275-330 段(text/59-ch09-04-9-4.txt:274,搜「CosineAnnealingWarmRestarts」;text/59-ch09-04-9-4.txt:329,搜「倍增因子」)。