← 全部章节

P25 · 第 25 讲

Optimization for

54:32

本章目录(10 节)
  1. 1. 这半讲的位置
  2. 2. 动量回顾(p45–p46)
  3. 3. NAG:先看一步再算梯度(p47–p48)
  4. 4. L2 正则 ≠ weight decay(p50–p51)
  5. 5. 训练技巧清单(p52–p54)
  6. 6. 总结与选型(p55–p58)
  7. 7. 讲义原例与页码
  8. 8. 易错对照
  9. 9. 自测
  10. 10. 30 秒速记

分P:P25 · BV1ou411N7X3?p=25 · 时长 54:32 · cid 1250616098 官方源:[TA 補充課] Optimization for Deep Learning (2/2)(YouTube e03YKGHXnL8,2020-04-09,3272 s) 主讲:助教 簡仲明——不是李宏毅本人 课程版本:2020 Spring TA 補充課 讲义:ML2020/Optimization.pdf,64 页;与 P24 共用,本文对应 pp.45–64 依据与边界:无字幕、未看画面。P24/P25 共用一份 PDF,pp.45–64 的归属是按章节顺序重建的,不是视频时间戳。讲义没有印刷页码,文中页码均为 PDF 物理页。


1. 这半讲的位置

P24 讲完了"优化器本身怎么改":Adam 的三个病灶、AMSGrad/AdaBound/RAdam、SGDM 的学习率调度、Lookahead。P25 换三个角度收尾:

  1. 动量的进阶:NAG、Nadam;
  2. 正则化与优化器的耦合:L2 与 weight decay 在 Adam 下不等价,引出 AdamW / SGDW;
  3. 训练技巧清单:shuffling、dropout、gradient noise、warm-up、curriculum、fine-tuning、normalization;
  4. 最后给"什么时候用 SGDM、什么时候用 Adam"的建议。

2. 动量回顾(p45–p46)

P24 已给过 SGDM。p45–p46 只用两张梗图复述一句话:更新方向 = 当前梯度 + 上一步的移动,所以在梯度为 0 的谷底/平台仍能靠惯性前进。这里不重复公式推导,只记住"动量是历史梯度的指数加权和"。


3. NAG:先看一步再算梯度(p47–p48)

SGDM:

$$\theta_t=\theta_{t-1}-m_t,\qquad m_t=\lambda m_{t-1}+\eta\nabla L(\theta_{t-1}).$$

NAG(Nesterov accelerated gradient)只改一处——梯度在"按动量预走一步之后"的位置算:

$$m_t=\lambda m_{t-1}+\eta\nabla L\bigl(\theta_{t-1}-\lambda m_{t-1}\bigr).$$

直觉:动量大的时候,先顺着惯性探出去,再在探到的位置看坡度,能更早刹车/转向。p47 的旁注是 "Math Warning",因为直接实现要维护一份"预走位置"的参数副本。

p48 做了一次换元:把"预走位置"吸收进动量的定义,得到一组只依赖当前参数与 \(m\) 的等价更新(讲义该页的推导有下标重排,OCR 后式子不完整,这里只保留结论,不硬凑中间步骤)。

结论(p48 原文):"No need to maintain a duplication of model parameters"。这就是深度学习框架里 NAG 的实际实现方式——看起来像"多减了一项 \(\lambda m_{t-1}\)",本质仍是同一条轨迹。

Nadam(p49)把 NAG 的"预看"塞进 Adam 的一阶矩:

$$\hat m_t=\frac{\beta_1 m_{t-1}}{1-\beta_1^t}+\frac{(1-\beta_1)g_{t-1}}{1-\beta_1^t},$$

即把偏差修正后的动量再向前推半步。它对 \(\beta_2\) 侧(分母)不做改动。


4. L2 正则 ≠ weight decay(p50–p51)

这是本讲最实用的一节。设

$$L_{l2}(\theta)=L(\theta)+\frac{\gamma}{2}\lVert\theta\rVert^2 .$$

在 SGD 下,两者等价:

$$\theta_t=\theta_{t-1}-\eta\bigl(\nabla L(\theta_{t-1})+\gamma\theta_{t-1}\bigr)=(1-\eta\gamma)\theta_{t-1}-\eta\nabla L(\theta_{t-1}),$$

每步把参数乘 \((1-\eta\gamma)\),就是"衰减"。

在 Adam 下不等价。若把 \(\gamma\theta\) 加进梯度,它会同时进入 \(m_t\) 与 \(v_t\);更新式里的 \(\eta/\sqrt{\hat v_t}\) 会把这个衰减项按每个参数的梯度尺度重新缩放——梯度小的参数反而被衰减得更狠。p50 末尾连打了三个问号,就是在质疑这件事。

AdamW(p51)把衰减解耦出去:

$$m_t=\beta_1m_{t-1}+(1-\beta_1)\nabla L(\theta_{t-1}),\qquad v_t=\beta_2v_{t-1}+(1-\beta_2)\bigl(\nabla L(\theta_{t-1})\bigr)^2,$$
$$\theta_t=\theta_{t-1}-\eta\Bigl(\frac{\hat m_t}{\sqrt{\hat v_t}+\epsilon}+\gamma\theta_{t-1}\Bigr).$$

SGDW 同理:\(\theta_t=\theta_{t-1}-m_t-\gamma\theta_{t-1}\),衰减不参与动量累积(注意这里 \(\gamma\) 未乘 \(\eta\),是讲义原式;不同框架的实现会差一个 \(\eta\),读代码时要对齐)。

【补充】数值对比(Python,\(\eta=10^{-3}\)、\(\gamma=0.01\)、\(\theta=1\)、\(\sqrt{\hat v}=0.01\)):

方式 单步收缩量 说明
Adam + L2 \(\eta\gamma\theta/\sqrt{\hat v}=10^{-3}\) 被 \(1/\sqrt{\hat v}=100\) 放大
AdamW \(\eta\gamma\theta=10^{-5}\) 与梯度尺度无关

同一组超参下差 100 倍。这就是"把 L2 直接塞进 Adam 的梯度里"经常训崩的原因:你以为在加 \(0.01\) 的衰减,实际在做 \(1\) 的衰减。


5. 训练技巧清单(p52–p54)

p52 的标题是 "Something helps optimization…",只给了三条并列的名词:

p53 是 "Teach your model patiently":warm-up、curriculum learning(先易后难,如先干净语音后噪声语音)、fine-tuning。

p54 只有两个词:Normalization / Regularization,没有任何展开。

边界说明:讲义在 p52 只把 dropout 作为一个条目列出,在 p54 只写了 "Normalization" 一词。BatchNorm 的公式、训练/推理差异、dropout 的缩放规则,这份 PDF 都没有讲。下面这段是我补的,不属于本课内容。

【补充·非讲义】训练与推理的两种模式,是读代码时最容易踩的坑:

这两条在 P24/P25 的讲义里找不到对应页,考试若按本课出题不会考;写代码时则需要。


6. 总结与选型(p55–p58)

p55 把方法分成三队:Team SGD(SGD、SGDM、LR scheduling、NAG、SGDWM)、Team Adam(Adagrad、RMSProp、Adam、AMSGrad、AdaBound、LR scheduling、RAdam、Nadam、AdamW)、以及跨队的 SWATS 与 Lookahead。

p56 的四行对比与 P24 一致:SGDM 慢、收敛好、稳、泛化间隙小;Adam 快、可能不收敛、不稳、间隙大。

p57 给的是领域经验,不是定理:

领域 首选
计算机视觉(分类/分割/检测) SGDM
NLP(QA、翻译、摘要) Adam
语音合成 Adam
GAN Adam
强化学习 Adam

p58 一句话收尾:"Universal Optimizer? No Way!!!"


7. 讲义原例与页码

内容 页码 性质
SGDM / NAG 公式与等价变形 p47–p48 讲义原文
Nadam 的 \(\hat m_t\) p49 讲义原文
L2 与 Adam 耦合的三个问号 p50 讲义原文
AdamW / SGDW p51 讲义原文
Shuffling / Dropout / Gradient noise p52 讲义原文(仅列条目)
Curriculum learning p53 讲义原文
Normalization / Regularization p54 讲义原文(仅两个词)
领域选型表 p57 讲义原文

第 4 节的 100 倍数值对比是【补充】计算;第 5 节关于 dropout/BatchNorm 训练推理差异整段是【补充】,讲义无对应内容。


8. 易错对照

误区 正确
L2 正则和 weight decay 永远等价 只在 SGD 下等价;Adam 下 L2 会被 \(1/\sqrt{\hat v}\) 缩放,故有 AdamW
AdamW 就是 Adam + L2 AdamW 把衰减解耦,不进入 \(m,v\);两者数值不同
NAG 要存两份参数 p48 的等价变形说明不需要,框架实现只用一份
Nadam 改了分母 只改一阶矩(动量),\(\beta_2\) 侧不变
dropout 在推理时也随机置零 推理时关闭;训练时用 inverted scaling 保持期望
BatchNorm 推理时用当前 batch 统计 推理用 running mean/var;训练才更新它们
讲义讲了 dropout 的机制 p52 只列了名字,没展开;机制是我补的
存在万能优化器 p58 明确否定;按领域与任务选

9. 自测

Q1. 写出 NAG 的两种等价形式,并说明为什么实际实现不需要额外参数副本。

参考答案

形式一:\(m_t=\lambda m_{t-1}+\eta\nabla L(\theta_{t-1}-\lambda m_{t-1})\),\(\theta_t=\theta_{t-1}-m_t\)。令 \(\theta'_t=\theta_t-\lambda m_t\) 可整理为 \(\theta_t=\theta_{t-1}-\lambda m_{t-1}-\eta\nabla L(\theta_{t-1})\)、\(m_t=\lambda m_{t-1}+\eta\nabla L(\theta_{t-1})\)。第二式只用当前 \(\theta\) 与 \(m\),所以不必维护"预走位置"的副本。

Q2. 为什么在 Adam 里直接把 \(\gamma\theta\) 加进梯度,效果会和 weight decay 不同?

参考答案

因为 Adam 的分母 \(\sqrt{\hat v_t}\) 会对每个坐标单独缩放整个更新(含衰减项)。梯度尺度小的参数,其 \(\sqrt{\hat v}\) 小,衰减被放大;而且 \(\gamma\theta\) 还进入 \(v_t\),改变了自适应尺度。AdamW 把 \(\gamma\theta\) 移到自适应项之外,衰减就只与 \(\theta\) 成正比。

Q3. 用 \(\eta=10^{-3},\gamma=0.01,\theta=1,\sqrt{\hat v}=0.01\) 估算 Adam+L2 与 AdamW 的单步收缩量。

参考答案

Adam+L2:\(\eta\gamma\theta/\sqrt{\hat v}=10^{-3}\times0.01\times1/0.01=10^{-3}\)。AdamW:\(\eta\gamma\theta=10^{-5}\)。相差 100 倍,前者远超预期。

Q4. 讲义对 dropout 和 BatchNorm 到底讲了多少?如果面试被问"BN 训练和推理有什么区别",能引用本课吗?

参考答案

讲义只在 p52 把 dropout 列为一条名词,在 p54 写了 "Normalization" 一个词,没有公式与训练/推理差异。不能声称本课讲过;BN 的 running statistics 与 eval 模式属于通用知识补充,需另找来源。

Q5. 为什么 CV 常用 SGDM、NLP 常用 Adam?这是定理吗?

参考答案

不是定理,是 p57 的经验总结。一种解释是 CV 的 batch 较大、梯度噪声较低,SGDM 的稳定与平坦解更有利;NLP/语音/GAN 参数稀疏、梯度尺度差异大,自适应步长更合适。属于领域惯例,换任务要实测。


10. 30 秒速记

动量进阶:NAG 在"预走一步"处取梯度,可等价变形为单副本实现;Nadam 把预看塞进一阶矩。L2 ≠ weight decay(Adam 下),因为自适应分母会缩放衰减 → AdamW 解耦。训练技巧讲义只给了清单(shuffling、dropout、gradient noise、warm-up、curriculum、fine-tuning、normalization),dropout/BN 的细节不在本课。选型:CV 用 SGDM,NLP/语音/GAN/RL 用 Adam,没有万能优化器。

与其他 P 的关系:P24 是本节的前半(Adam 病灶与补丁);P22/P23 提供 GD 的几何直观;P17 的鞍点/平台解释了动量为什么有用;P16 的 optimization issue 一格是这一切的诊断入口。

来源与说明

基于对应官方讲义整理,未取到完整视频字幕;不冒充逐字稿。