← 全部章节

P24 · 第 24 讲

Optimization for

54:36

本章目录(12 节)
  1. 1. 这半讲在讲什么
  2. 2. 记号(p6)
  3. 3. Online vs Off-line(p8–p9)
  4. 4. 五个基线优化器(p10–p16)
  5. 5. Adam vs SGDM:快与稳的取舍(p23–p28)
  6. 6. Adam 的三个病灶与补丁
  7. 7. SGDM 阵营:学习率调度(p34–p38)
  8. 8. Lookahead:\(k\) 步前进,1 步回看(p43–p44)
  9. 9. 讲义原例与页码
  10. 10. 易错对照
  11. 11. 自测
  12. 12. 30 秒速记

分P:P24 · BV1ou411N7X3?p=24 · 时长 54:36 · cid 1250616359 官方源:[TA 補充課] Optimization for Deep Learning (1/2)(YouTube 4pUmZ8hXlHM,2020-04-09,3275 s) 主讲:助教 簡仲明(Chung-Ming Chien)——不是李宏毅本人 课程版本:2020 Spring TA 補充課(ML2020),与 2021 的 optimizer 讲义不是同一份 讲义:ML2020/Optimization.pdf,64 页;PDF 无印刷页码,下文页码 = PDF 物理页 依据与边界:无字幕、未下载视频、未看画面。P24/P25 共用这一份 64 页 PDF;本文按章节顺序把 pp.1–44 划给 P24、pp.45–64 划给 P25。这是结构重建,不是从视频时间戳数出来的;若与实际上课切分有出入,以"章节归属"为准,不以分钟数为准。


1. 这半讲在讲什么

标题页 p1/p3/p4 写的是 "New Optimization / New Optimizers for Deep Learning",日期 2020/4/9–4/12。它不是从零教梯度下降,而是:

  1. 用统一记号把 SGD / SGDM / Adagrad / RMSProp / Adam 快速过一遍(p10–p16);
  2. 指出 Adam 在实际落地时的毛病(泛化间隙、不稳定、\(v\) 记忆过长),以及一串补丁:SWATS、AMSGrad、AdaBound、RAdam、warm-up;
  3. 给 SGDM 阵营配学习率调度:LR range test、cyclical、SGDR、one-cycle;
  4. 用 Lookahead 把任意优化器包一层。

一句话主线:Adam 快但泛化差、SGDM 稳但慢,中间所有工作都在试图同时拿到两者。


2. 记号(p6)

符号 含义 维度
\(\theta_t\) 第 \(t\) 步的模型参数 \(\mathbb{R}^{D}\)
\(g_t=\nabla L(\theta_t)\) 第 \(t\) 步梯度 \(\mathbb{R}^{D}\)
\(m_t\) 动量(梯度的滑动和) \(\mathbb{R}^{D}\)
\(v_t\) 梯度平方的滑动平均 \(\mathbb{R}^{D}\)
\(\eta\) 学习率 \(\mathbb{R}_{>0}\)
\(\beta_1,\beta_2\) 动量/平方梯度的衰减率 \([0,1)\)
\(\epsilon\) 防止除零的小常数 \(10^{-8}\)
\(t\) 更新步数 \(\mathbb{N}\)

注意:讲义里 \(\theta_t\) 用的是 \(g_{t-1}\),即"先算梯度再更新",与"先更新再算梯度"只差一个下标,读公式时不要混。


3. Online vs Off-line(p8–p9)

p9 明确写 "The rest of this lecture will focus on the off-line cases"。所以后面所有 \(g_t\) 都可理解成全量梯度;实际实现用 mini-batch 近似,这个差别本讲不展开。


4. 五个基线优化器(p10–p16)

SGD(p10)

$$\theta_t=\theta_{t-1}-\eta\,g_{t-1}.$$

SGDM(p11–p13)

$$m_t=\beta_1 m_{t-1}+(1-\beta_1)g_{t-1},\qquad \theta_t=\theta_{t-1}-\eta\,m_t .$$

p13 用"停下来!让我看看"的梗讲动量:走到谷底时梯度为 0,但历史动量还在,于是能冲过小坑/平台。\(m_t\) 是历史梯度的指数加权和。

Adagrad(p14)

$$\theta_t=\theta_{t-1}-\frac{\eta}{\sqrt{\sum_{i=0}^{t-1}g_i^2}}\,g_{t-1}.$$

分母单调增大 ⇒ 学习率单调递减。p14 的提问是 "What if the gradients at the first few time steps are extremely large…"——早期一个大梯度会把之后所有步的学习率永久压小。

RMSProp(p15)

$$v_1=g_0^2,\qquad v_t=\alpha v_{t-1}+(1-\alpha)g_{t-1}^2,\qquad \theta_t=\theta_{t-1}-\frac{\eta}{\sqrt{v_t}}\,g_{t-1}.$$

p15 的关键一句:"EMA of squared gradients is not monotonically increasing"——这就是它相对 Adagrad 的改进:旧梯度会被遗忘,学习率可以回升。

Adam(p16)= SGDM + RMSProp + 偏差修正:

$$m_t=\beta_1m_{t-1}+(1-\beta_1)g_{t-1},\qquad v_t=\beta_2v_{t-1}+(1-\beta_2)g_{t-1}^2,$$
$$\hat m_t=\frac{m_t}{1-\beta_1^t},\qquad \hat v_t=\frac{v_t}{1-\beta_2^t},\qquad \theta_t=\theta_{t-1}-\frac{\eta}{\sqrt{\hat v_t}+\epsilon}\hat m_t,$$

默认 \(\beta_1=0.9,\ \beta_2=0.999,\ \epsilon=10^{-8}\)。偏差修正不是可选技巧:\(m_0=v_0=0\),若不做修正,前几步的 \(m_t,v_t\) 都被 0 拉小,\(\hat m/\sqrt{\hat v}\) 会失真。除以 \(1-\beta^t\) 正好把它还原成无偏估计。


5. Adam vs SGDM:快与稳的取舍(p23–p28)

p27 的四条对比:

Adam SGDM
速度 快 慢
收敛 可能不收敛 更好
稳定性 不稳定 稳定
泛化间隙 大 小

p28 的 SWATS 是最直白的折中:先用 Adam 快速下降,满足某个判据后切到 SGDM 收尾。它的弱点是"判据"要人定。

【补充】"泛化间隙"指训练 loss 与测试 loss 的差距;Adam 常落到更尖的极小值,测试表现更差。这是经验结论(p27 引 Luo et al., ICLR'19),不是定理。


6. Adam 的三个病灶与补丁

(a)\(v\) 的记忆太长(p29–p30)。\(\beta_2=0.999\) ⇒ 有效记忆约

$$\frac{1}{1-\beta_2}=1000 \text{ 步}.$$

p29 的例子:前 1000 步梯度都是 1,某一小批突然给出 \(10^5\) 的大梯度。由于 \(v\) 被 1000 步的历史稀释,这个大梯度产生的位移只有约 \(10\eta\),随后迅速衰减;反过来,大量无信息的小梯度会持续贡献位移,反而压过偶尔出现的有信息大梯度。p30 给出单步位移的上界:

$$\text{movement}\lesssim \frac{\eta}{1-\beta_2}=1000\eta .$$

(b)AMSGrad(p31):把分母换成历史最大

$$\tilde v_t=\max(\tilde v_{t-1},v_t),\qquad \theta_t=\theta_{t-1}-\frac{\eta}{\sqrt{\tilde v_t}+\epsilon}m_t .$$

\(v\) 单调不减 ⇒ 学习率单调不增,压住"后期学习率又被小梯度抬回去"的问题。代价是它只处理了"学习率过大"这一侧。

(c)AdaBound(p33):直接把学习率夹在区间里

$$\theta_t=\theta_{t-1}-\mathrm{Clip}\Bigl(\frac{\eta}{\sqrt{\hat v_t}+\epsilon}\Bigr)\hat m_t,$$

上下界随时间收窄到约 \(0.1\),最终退化成固定学习率的 SGD。p33 的自评很刻薄:"That's not 'adaptive' at all…"。

(d)warm-up 与 RAdam(p39–p41)。p39–p40 说:训练前 10 步梯度分布是扭曲的,\(v\) 的 EMA 还没稳定,此时自适应学习率不可信;所以开头要把步长压小。RAdam 把它做成公式:记

$$\rho_\infty=\frac{2}{1-\beta_2}-1,\qquad \rho_t=\rho_\infty-\frac{2t\beta_2^t}{1-\beta_2^t}.$$

\(\rho_t\) 可理解为"当前 EMA 的有效记忆长度"。当 \(\rho_t\le 4\)(最初几步)时退化成 SGD 式更新(不带自适应分母);\(\rho_t>4\) 后按 \(\rho_t/\rho_\infty\) 的比例逐步放开。\(\beta_2=0.999\) 时 \(\rho_\infty=1999\),而 \(t=1\) 时 \(\rho_1=1\)、\(t=4\) 时 \(\rho_4\approx3.997\)——前四步都还在 warm-up 区(数值由 Python 复算)。


7. SGDM 阵营:学习率调度(p34–p38)

p35–p38 的幻灯片只有标题、曲线图与参考文献,没有文字定义;下面四条的具体做法是【补充】的通用解释。

p34 的问题设定很准:自适应方法逐参数调步长,SGD 类则所有参数共用一个 \(\eta\)——小了太慢,大了结果差。"是否存在一个最好的 \(\eta\)?"

p36 的口号是 "The more exploration the better!"——和 p52 的 gradient noise、p53 的 curriculum 是同一思路。


8. Lookahead:\(k\) 步前进,1 步回看(p43–p44)

$$\theta_{t,0}=\phi_{t-1};\quad \theta_{t,i}=\theta_{t,i-1}+\mathrm{Optim}(\cdot)\ (i=1..k);\quad \phi_t=\phi_{t-1}+\alpha(\theta_{t,k}-\phi_{t-1}).$$

内层用任意优化器走 \(k\) 步,外层只朝终点插值一步。p44 说它的作用是"避免一次太危险的探索"、找更平坦的极小值、更稳、泛化更好。因为不依赖内层细节,所以叫 universal wrapper(Ranger = RAdam + Lookahead)。


9. 讲义原例与页码

内容 页码 性质
记号与 \(g_t\) 定义 p6 讲义原文
Adagrad / RMSProp / Adam 公式 p14–p16 讲义原文
Adam vs SGDM 四条对比 p27 讲义原文(引 Luo et al.)
1000 步记忆与大梯度例子 p29–p30 讲义原文
AMSGrad / AdaBound p31、p33 讲义原文
RAdam 的 \(\rho_t\) 分段 p41 讲义原文
Lookahead 伪码 p43 讲义原文

第 6 节的 \(1000\)、\(693\)(EMA 半衰期)、\(\rho_\infty=1999\)、\(\rho_1=1\) 是我用 Python 复算的数值,讲义只给了 \(1/(1-\beta_2)\) 这个量级说法。


10. 易错对照

误区 正确
这是李宏毅的课 2020 TA 補充課,主讲助教簡仲明
P24 用 2021 的 optimizer 讲义 用 ML2020/Optimization.pdf;2021 那份是另一门课的内容
Adam 的 \(\hat m,\hat v\) 可省 不能;前几步偏差极大,必须除以 \(1-\beta^t\)
Adam 一定比 SGD 好 p27:Adam 快但泛化间隙大、可能不收敛
Adagrad 学习率一直降是优点 单调递减会让后期几乎不动,RMSProp 正是为此改成 EMA
AMSGrad 解决了所有问题 只压住学习率过大一侧(p33 明说)
warm-up 只是调参玄学 p40 给了机制:前几步 \(v\) 的 EMA 不可信
Lookahead 是某个具体优化器 它是 wrapper,内层可换任意优化器

11. 自测

Q1. 写出 Adam 的完整更新式,并解释 \(\hat m_t,\hat v_t\) 为什么要除 \(1-\beta^t\)。

参考答案

\(m_t=\beta_1m_{t-1}+(1-\beta_1)g_{t-1}\),\(v_t=\beta_2v_{t-1}+(1-\beta_2)g_{t-1}^2\),\(\hat m=m_t/(1-\beta_1^t)\),\(\hat v=v_t/(1-\beta_2^t)\),\(\theta_t=\theta_{t-1}-\eta\hat m/(\sqrt{\hat v}+\epsilon)\)。因为 \(m_0=v_0=0\),前几步的滑动平均被 0 拉低,期望偏小;除以 \(1-\beta^t\) 使其成为无偏估计,否则初期步长会被严重低估(\(v\) 侧尤其)。

Q2. \(\beta_2=0.999\),\(v\) 的"记忆"大约多长?为什么这会让罕见大梯度吃亏?

参考答案

约 \(1/(1-\beta_2)=1000\) 步。\(v\) 是 1000 步平方梯度的加权平均,单个大梯度只占约 \(1/1000\) 权重,被历史小梯度稀释;于是"偶尔出现的有信息大梯度"产生的位移,可能小于"长期存在的小梯度"累积的位移,单步位移上界约 \(1000\eta\)。

Q3. AMSGrad 与 AdaBound 分别在修什么?各自的局限?

参考答案

AMSGrad 用 \(\tilde v_t=\max(\tilde v_{t-1},v_t)\) 让分母不减,压住学习率反弹(过大一侧)。AdaBound 直接把学习率 clip 到随时间收窄的区间,最终近似固定学习率 SGD;它自评"根本不 adaptive",且只处理边界、不解决根因。两者都只覆盖 Adam 病灶的一部分。

Q4. RAdam 的 \(\rho_t\) 在 \(t=1\) 和 \(t=100\) 大约是多少?说明它的行为。

参考答案

\(\rho_\infty=1999\);\(\rho_1=1\),\(\rho_4\approx3.997\),\(\rho_{100}\approx98.3\)。\(\rho_t\le4\) 时用 SGD 式更新(前四步等于自动 warm-up),之后按 \(\rho_t/\rho_\infty\) 逐渐放开自适应分母。

Q5. Lookahead 的内层和外层各做什么?为什么说它"通用"?

参考答案

内层用任意优化器从 \(\phi_{t-1}\) 连续走 \(k\) 步得到 \(\theta_{t,k}\);外层只做 \(\phi_t=\phi_{t-1}+\alpha(\theta_{t,k}-\phi_{t-1})\) 的插值。因为它只调用 Optim 接口、不假设内层是 SGD 还是 Adam,所以可包任意优化器(如 Ranger)。


12. 30 秒速记

五个基线:SGD → SGDM(动量)→ Adagrad(累积平方梯度,单调降)→ RMSProp(改 EMA,可回升)→ Adam(两者 + 偏差修正)。Adam 快但泛化差、不稳;补丁分两路:压学习率(AMSGrad、AdaBound)、修初期(warm-up、RAdam);SGDM 侧靠调度(range test、cyclical、SGDR、one-cycle);Lookahead 是通用外壳。没有万能优化器。

与其他 P 的关系:P22/P23 是 GD 的直观演示;P17 讲梯度小/鞍点,是本节"为什么需要动量与自适应"的前置;P25 接着讲 NAG、Nadam、weight decay 与训练技巧;P16 的 optimization issue 一格靠这里的方法解决。

来源与说明

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