第3讲 · 优化器(一):不变性与超参数
Stanford CS312 深度学习炼金术(2026) 官方课堂幻灯片 · 中文重构
| 原始标题 | OPTIMIZERS 1: INVARIANCES (AND HYPERPARAMETERS) |
| 材料来源 | lecture_03.pdf(课程主页第 3 讲幻灯片) |
| 课程主页 | https://deep-learning-alchemy.github.io/ |
| 材料版权 | 课程材料版权归原课程方及授课教师所有,本书仅供学习 |
对应讲次:第3讲(Stanford CS312 深度学习炼金术)
制作模型:deepseek-flash(vb compose)
一、优化的中心地位与一阶方法
训练这件事,说到底是让 loss 降下去;而优化器正是让这件事真正发生的部件。也正因为如此,一个通用、鲁棒的优化器改进会有极高的价值:它不需要针对某个模型结构,而是能直接迁移到所有训练任务上。这是本讲反复出现的动机。
🖼️ 这一页把极简的 SGD 更新式和四个可调部件并列画出,是全讲的骨架图,后面每一节都在展开其中一格
讲义把视野主动收窄到一个经典设定:一阶预言机(first-order oracle)下的优化——我们只能访问函数值和梯度,别的什么都拿不到。在这个设定下有很多漂亮的方法:镜像下降(mirror descent)、Frank-Wolfe 等等,讲义明确表示这些我们都放弃,转而使用“丑陋的”minibatch 随机梯度下降(stochastic gradient descent, SGD)。参考阅读是 Duchi 的一阶方法讲义。
基本的 SGD 更新极端简单:
$$\theta_t = \theta_{t-1} - \eta\,\nabla \ell_t(\theta_{t-1})$$
但“简单”不等于“没有内容”。所有实际的区别都落在这四个可调部件上:
- 学习率(learning rate):$\eta$ 取多大;
- 批大小(batching):一次用多少样本估梯度;
- 预条件(preconditioners):是否在梯度前面乘一个矩阵;
- 动量(momentum):是否把历史更新累积起来。
后面的每一节,本质上都是在展开这四个部件中的某一个。
二、预条件:给梯度换一个坐标系
预条件梯度下降(preconditioned gradient descent)在梯度前乘一个矩阵 $A_t$:
🖼️ 这页把预条件 GD 的公式、‘换坐标’直觉和三条性质列在一起,是理解 Adam/Muon 一类方法的最小背景
$$\theta_t = \theta_{t-1} - \eta\, A_t \,\nabla \ell_t(\theta_{t-1})$$
预条件子的作用可以理解为一次换坐标:
- 它让每个参数拥有各自更快或更慢的学习率——高曲率方向被压小步,低曲率方向被放快步;
- 它让彼此相关联的参数被“去相关”(decorrelate),从而不必在一个被拉长的椭圆等高线上来回振荡;
- 它可以在训练过程中被学出来(learned on the go),这正是几乎所有现代优化器的共同基础。
约束条件是硬性的:预条件子必须是对称半正定(PSD)的,且最小/最大特征值有界。半正定保证更新方向不会与负梯度方向相反(否则就成了“上坡”),特征值有界保证不会在某个方向上一步迈到无穷远。
编者说明:预条件在凸优化里最经典的实例是牛顿法:取 $A = H^{-1}$,其中 $H$ 是 Hessian,此时更新直接消除曲率差异,在二次型上一两步就到了最优点。而 Adam 属于同一种做法:$A$ 只取对角,且用梯度平方的滑动平均来构造。两者的区别只在于“用真实曲率还是用梯度统计量逼近”,但它们属于同一种做法的不同近似。
三、动量:把对齐的梯度累积起来
动量梯度下降(momentum GD)在更新里额外加上一项“速度”:
🖼️ 动量公式与‘对齐梯度被累积’的解释在同一页上,是后文 NQM 动量分析(过阻尼/欠阻尼)的出发点
$$\theta_t = \theta_{t-1} - \eta\,\nabla \ell_t(\theta_{t-1}) + \mu\left(\theta_{t-1} - \theta_{t-2}\right)$$
直观效果是:当同一个方向的梯度连续若干步重复出现时,步长会被放大——动量让模型能够“适应”方向一致的梯度,把多步的小步累积成一步大步。相反地,如果梯度方向来回抖动,这些项就会互相抵消。
讲义提到的一个重要的理论结果:使用 Nesterov 加速动量(NAG),在光滑函数上可以把收敛率从 $1/T$ 提升到 $1/T^2$。动量在实践中的影响同样巨大;但它什么时候真正有用、什么时候纯属浪费,要等到噪声二次模型那一节才会给出明确的条件。
编者说明:这里的符号约定是“重球(heavy ball)”形式,$\mu(\theta_{t-1}-\theta_{t-2})$ 前面的加号表示加速。另一种常见的等价写法是先把动量项写成 $v_t = \mu v_{t-1} + \nabla\ell_t(\theta_{t-1})$、再令 $\theta_t = \theta_{t-1} - \eta v_t$——两者完全相同,只是把“速度”显式提了出来。看到负号版本时不要慌,那通常是把同一个式子移了项。
四、从 SGD 到 AdamW:现代默认优化器的形状
讲义给出一句非常凝练的概括:深度学习优化器 = 精心选择动量与预条件的 SGD。AdamW 就是这句话的完整展开形式($\beta$ 为动量/二阶矩的衰减系数,$g_t$ 为第 $t$ 步的随机梯度):
🖼️ 把 SGD 与 AdamW 的完整更新式并排给出,是全书唯一一处能一眼看清‘动量 + 预条件 + 解耦衰减’如何拼起来的地方
$$ \begin{aligned} m_{t+1} &= \beta_1 m_t + (1-\beta_1)\, g_t, \qquad v_{t+1} = \beta_2 v_t + (1-\beta_2)\, g_t^2 \\[2pt] \hat m_{t+1} &= \frac{m_{t+1}}{1-\beta_1^{\,t+1}}, \qquad \hat v_{t+1} = \frac{v_{t+1}}{1-\beta_2^{\,t+1}} \\[2pt] U_t &= \frac{\hat m_{t+1}}{\sqrt{\hat v_{t+1}} + \epsilon} \\[2pt] W_{t+1} &= W_t - \eta_t U_t - \eta_t \lambda W_t \end{aligned} $$
四个部分各司其职:$m$ 是一阶矩(动量),$v$ 是二阶矩(逐参数的曲率/尺度估计,也就是预条件),带帽的 $\hat m,\hat v$ 是偏差校正(因为两者都从 0 初始化,早期会被严重低估),$U_t$ 则是逐元素归一化后的更新方向。最后一行末尾多出来的 $-\eta_t\lambda W_t$ 就是权重衰减。
“W” 的含义:它指的是衰减项直接加在参数更新上,而不是加在 loss 里。这就是 AdamW 与 “Adam + L2 正则” 的实质差别。
编者拓展|为什么“加在 loss 里”和“加在更新里”不一样:如果写成 $\ell(\theta) + \tfrac{\lambda}{2}\|\theta\|^2$,那么正则项的梯度 $\lambda\theta$ 会和任务梯度一起进入 $m_t$ 与 $v_t$,再被 $1/\sqrt{\hat v}$ 逐坐标缩放。结果是:历史上梯度很大的参数,其衰减反而被压小;梯度很小的参数,其衰减被放大。这就使得 L2 正则的实际强度取决于梯度尺度,而不是一个干净的 $\lambda$。AdamW 把衰减挪到更新之外,使衰减强度与自适应缩放解耦(Loshchilov & Hutter, Decoupled Weight Decay Regularization)。请记住这张公式图——后面讲“有效学习率”和“范数控制”时,我们会反复回来对照其中每一项。
五、深度学习优化器为什么和凸优化教科书不一样
深度学习的优化器之所以长得不像教科书里的算法,是因为目标本身变了:
- 要的是“快速地拿到够用的解”,而不是“慢慢地拿到很好的解”(loose solutions fast, not great solutions slow)。传统优化理论关心一阶稳定点(first-order stationarity)和任意小的 $\epsilon$;深度学习优化器两样都不关心。
- 它不需要对所有目标函数都成立。我们只关心深度神经网络这一类函数上的快速优化,因此完全可以把适用范围收窄到目标函数集合里一个非常特殊的子集。
顺带一个有意思的事实:Adam 的原始收敛性证明是错的,并且已经被构造出显式的、不收敛的反例(Bock & Weiss, arXiv:2210.02070)。但讲义的态度是——我们也不在乎,因为我们从来不会把 LLM 训到收敛。
由此得到一个重要推论:优化器与架构需要协同设计(co-design)。架构负责让 loss 变得容易优化,优化器负责加速训练,两者是同一个问题的两面。
讲义还给了一份“心态指南”,用来对抗“优化器很复杂”这件事:
- 优化器不是关于“经典凸优化数学”的;
- 先获得一些自上而下(top-down)的、关于宏观尺度行为的理解;
- 再从下往上地工作,让“自上而下”和“自下而上”两种视角对上号。
那些“本不该奏效”的东西(比如 Adam)偏偏很奏效。但凸优化的直觉也并非无用,它至少能回答三个具体问题:优化器如何响应学习率?预条件子与 Hessian 如何相互作用?如何控制一步之内的特征学习(one-step feature learning)?
六、第一部分:噪声二次模型(NQM)为什么值得研究
上半场的核心问题是:把“世界是一个二次型”这个视角,能推到多远?
🖼️ 这张实验图是“为什么值得用 NQM”的唯一证据:理论虚线在临界批大小处开始偏离实测,说明模型不只是玩具
二次型视角有两个明确的好处:
- 许多重要量——例如最优批大小、临界批大小——都是可以精确解析求解的,不需要近似;
- 在凸的世界里,二次型是思考预条件这类问题最顺手的模型(因为 Hessian 是常数矩阵,换坐标一次就彻底对角化)。
讲义随后会带我们过一遍一篇相当有影响力的、正是采用这一路线的论文。
关键的经验证据在 CIFAR 上:理论对 batch 与学习率关系的预测出奇地准。图中的虚线是理论预测,它不仅在“线性区”对得上,还预测出了大 batch 处的偏离——也就是所谓“临界批大小”处曲线开始变平。
编者拓展|这篇论文是哪一篇:讲义的“fairly influential paper”一般认为是 McCandlish et al., An Empirical Model of Large-Batch Training(arXiv:1812.06162),它正是用噪声二次模型推出“临界批大小”并把预测画到 CIFAR 上的工作。后文把动量、预条件也塞进 NQM 的分析,通常归于 Zhang et al., Why are Adaptive Methods Good for Attention Models?——但讲义本身没有给出这两篇的标题,请以课程 reading 为准(见文末「已知疑点」)。
七、NQM 的定义与动力学
目标函数取一个(可对角化的)二次型:
🖼️ 单坐标递推式与期望风险的闭式解都在这一页,是后面所有结论(临界批大小、动量、预条件)的唯一推导起点
$$L(\theta) = \tfrac12\,\theta^\top H \theta = \sum_i h_i\,\theta_i^2$$
第二个等号来自对角化 + 变量替换;$h_i$ 可以理解为 $H$ 的特征值(可以把它想成每个坐标方向上的“陡峭程度”)。
梯度带噪声:
$$g(\theta) = H\theta + \epsilon, \qquad \epsilon \sim \mathcal N(0, C)$$
这里假设噪声协方差 $C$ 与 $H$ 可同时对角化——这一条纯技术性假设的作用是:换元之后每个坐标的噪声也互相独立,于是整个问题彻底解耦。
批大小在模型里的全部作用,就是把梯度噪声按独立同分布平均压小:
$$\epsilon_B \sim \mathcal N\!\left(0, \tfrac{C}{B}\right)$$
动力学因此完全可分:每个坐标独立演化,
$$\theta_i^{t+1} = (1 - \alpha h_i)\,\theta_i^{t} + \alpha\sqrt{c_i/B}\;\epsilon_i$$
($\alpha$ 是学习率,$c_i$ 是第 $i$ 个坐标的噪声方差。)期望风险以几何速度收敛到一个稳态:
$$\mathbb{E}\,\ell(\theta_i^t) = (1-\alpha h_i)^{2t}\,\mathbb{E}\,\ell(\theta_i^0) + \Big[1-(1-\alpha h_i)^{2t}\Big]\frac{\alpha c_i}{2B\,(2-\alpha h_i)}$$
注意这个式子的结构:第一项是暂态,以 $(1-\alpha h_i)^2$ 的速度几何衰减;第二项是稳态(不可约)误差,与初始点无关。后半部分就是“批大小—学习率”所有结论的唯一出处。
编者说明:幻灯片把目标函数写成 $\sum_i h_i\theta_i^2$(省掉了 $1/2$),这是把 $1/2$ 吸收进了 $h_i$ 的定义。本讲按“$h_i$ 就是 $H$ 的特征值”来用,此时等价写法是 $\tfrac12\sum_i h_i\theta_i^2$。两种写法的动力学完全一致,只是 $h_i$ 差一个因子 2,不影响任何结论。
编者拓展|稳态误差是怎么来的(补中间两步):令 $a = 1-\alpha h_i$、$\sigma = \alpha\sqrt{c_i/B}$,单坐标递推就是 $\theta_{t+1} = a\theta_t + \sigma\epsilon$。两边平方取期望,交叉项因 $\epsilon$ 零均值且与 $\theta_t$ 独立而消失:
$$\mathbb{E}[\theta_{t+1}^2] = a^2\,\mathbb{E}[\theta_t^2] + \sigma^2 \;\Longrightarrow\; \mathbb{E}[\theta_\infty^2] = \frac{\sigma^2}{1-a^2}.$$
再乘回单坐标风险 $\ell_i = \tfrac12 h_i\theta_i^2$,并注意 $1-a^2 = 1-(1-\alpha h_i)^2 = \alpha h_i(2-\alpha h_i)$:
$$\mathbb{E}[\ell_i^\infty] = \frac12 h_i\cdot\frac{\alpha^2 c_i/B}{\alpha h_i(2-\alpha h_i)} = \frac{\alpha c_i}{2B(2-\alpha h_i)},$$
正是讲义那个稳态项。这个推导还有两个直接推论:(i) 要让暂态项 $(1-\alpha h_i)^{2t}$ 衰减而不是发散,必须 $|1-\alpha h_i|<1$,即 $\alpha < 2/h_i$——这就是下一节“最大稳定学习率”的来源;(ii) 稳态误差 $\propto \alpha/B$,这就是“批大小与学习率可以互换”这一直觉的代数根源。
八、批大小与学习率:线性缩放与临界批大小
由上一节的闭式解可以立刻读出两件事:
🖼️ 临界批大小是本节的核心概念,这页的曲线把‘线性区—饱和区’的分界画出来了,纯文字很难替代
- 在一定范围内,学习率应当随批大小线性增长。因为稳态误差 $\propto \alpha/B$:把 $B$ 放大 $k$ 倍、同时把 $\alpha$ 放大 $k$ 倍,稳态误差的量级不变,但每一步迈得更大,所以达到同一 loss 所需的步数变少。这就是“线性缩放(linear scaling)”规则。
- 但学习率不能无限涨。对二次型来说,稳定性要求 $\alpha < 2/h_i$,因此 $\alpha_{\max} = 2/h_{\max}$($h_{\max}$ 是最大曲率/最陡方向)。一旦达到这个上限,再加大 $B$ 就不能再同步放大 $\alpha$ 了。
越过这一点之后,加大 batch 的收益迅速递减——这个转折点就是临界批大小(critical batch size)。用 $\alpha = \kappa B$ 的线性缩放规则来看,临界点出现在 $B^\star = \alpha_{\max}/\kappa$ 处:$BB^\star$ 时进入“饱和区”。
这条曲线正好解释了实践中的标准做法:先按线性规则放大 batch 与学习率,撞到上界之后,就得换用别的手段(动量、预条件、或者干脆不再加 batch)。
九、NQM 中的动量:过阻尼与欠阻尼
把动量更新代进 NQM,同样可以解析地导出期望风险(推导结构与上一节完全一样,只是单坐标从一阶递推变成二阶递推)。
🖼️ 过阻尼/欠阻尼这组概念是纯图像化的,这页的相图让读者一眼看懂‘为什么动量有时没用、有时很猛’
结论的物理图像非常漂亮:动量系统就是一个阻尼振子。
- 欠阻尼(underdamped):动量太强/步长太大,坐标在最优值附近来回振荡着收敛;
- 过阻尼(overdamped):动量相对弱/步长相对小,坐标单调地“爬”向最优值,没有振荡;
- 收敛速度被高曲率方向($h_i$ 最大的那些坐标)限制——因为最陡的方向最先失稳。
从阻尼行为可以直接读出三条对实践极重要的结论:
- 动量在阻尼相变点(临界阻尼)处收敛最快;
- 在过阻尼一侧,总存在一个学习率让普通 SGD 追上动量的收敛速度——也就是说,这种情况下动量的加速是“可以用调大学习率来代替的”;
- SGD 的学习率受 sharpness 上限约束($\alpha < 2/h_{\max}$),而动量加速可以让优化器拥有超过这个上限的有效学习率——这是 SGD 做不到的事。
最后一条还有一个更精细的结论:最优动量下,总有一个坐标恰好处于过阻尼状态,因此是过阻尼动力学决定了长期收敛行为。
编者拓展|把“阻尼”算出来:单坐标的动量更新 $\theta_{t+1} = (1+\mu-\alpha h)\theta_t - \mu\theta_{t-1} + \text{noise}$ 可以写成状态转移
$$\begin{pmatrix}\theta_{t+1}\\ \theta_t\end{pmatrix} = M\begin{pmatrix}\theta_{t}\\ \theta_{t-1}\end{pmatrix},\qquad M=\begin{pmatrix}1+\mu-\alpha h & -\mu\\ 1 & 0\end{pmatrix}.$$
特征方程是 $\lambda^2 - (1+\mu-\alpha h)\lambda + \mu = 0$,判别式
$$\Delta = (1+\mu-\alpha h)^2 - 4\mu .$$
$\Delta<0$ 就是欠阻尼(特征根为共轭复根,出现振荡),$\Delta\ge 0$ 就是过阻尼。令 $\Delta=0$ 得临界阻尼条件 $\alpha h = (1-\sqrt{\mu})^2$;令较大的根等于 1 得稳定上限 $\alpha h = (1+\sqrt{\mu})^2$。举例:$\mu=0.9$ 时上限约 $3.8$,远高于 SGD 的 $2$——这正是“动量可以突破 sharpness 上限”的定量含义。 而“最优动量下总有一个过阻尼坐标”也一目了然:把动量调到让最大曲率方向恰好临界阻尼,即 $\alpha h_{\max}=(1-\sqrt\mu)^2$,则所有 $h_i
它们全部是过阻尼的。收敛最慢的那个过阻尼坐标,于是决定了整体的长期收敛速度。
十、动量什么时候有用:小 batch 与大 batch 的分野
把上面的分析接到批大小上,会得到一个非常可操作的判据。
🖼️ 这页是上述判据的实验证据(低 batch 无收益、大 batch 显著增益),比只讲推导更有说服力
情形一:小 batch。 此时不可约误差(稳态项 $\propto \alpha c/(2B)$)很大,步长必须压小来补偿——否则你只是在噪声底噪上原地打转。在这种情况下,动量提供的“更大有效步长”是有害的,它放大了噪声而不是加速了信号。所以小 batch 下动量帮不上忙。
情形二:大 batch。 不可约误差低,于是可以用大步长。此时 SGD 的步长被 sharpness 上限卡住,而足够大的动量能够达到普通 SGD 根本达不到的有效步长——动量这时才真正兑现它的加速。
实验支持这一看法:低 batch 下动量几乎没有收益;大 batch 下 heavy ball 等方法收益显著(以及其它一些技巧)。所以结论是一条可以写进工程手册的判据:
动量是与大 batch 训练配套的技术。 在小 batch 上开动量,通常只是白烧算力。
编者说明:讲义在第 27 页还列出了“其它关于动量与批大小的论文”,但没有给出标题细节,这里不代为补充。
十一、预条件在 NQM 中的分析,以及优化器横向对比
预条件在 NQM 里同样可以解析处理。回忆预条件梯度下降在 NQM 下的形式,作者研究了一种非常弱的预条件模型:
🖼️ 这是全讲唯一一张多优化器横向对比图,把‘大 batch 才吃得到预条件红利’这句话落到了具体曲线上
$$P = H^{p}$$
它好在能立刻给出风险的简单闭式。关键观察是:第一项(暂态)随 $p$ 增大而下降(直到 $p=1.0$),第二项(稳态噪声)随之上升——因此存在一个最优的预条件强度 $p$。
优化器对比实验的结论与动量形状相同:
- 低 batch 下:Adam 相比其它方法没有优势;
- 大 batch 下:Adam(以及 KFAC 这类二阶近似方法)收益显著。
也就是说,预条件/自适应方法的价值,主要体现在大 batch 区间。
编者拓展|把 $P=H^p$ 代进第七节的闭式解:预条件后的单坐标递推是 $\theta_i^{t+1} = (1-\alpha h_i^{1+p})\theta_i^t + \alpha h_i^{p}\sqrt{c_i/B}\,\epsilon_i$。照抄第七节的稳态公式($a=1-\alpha h_i^{1+p}$,$\sigma=\alpha h_i^p\sqrt{c_i/B}$):
$$\mathbb{E}[\ell_i^\infty] = \frac{\alpha\, h_i^{2p}\, c_i}{2B\,(2-\alpha h_i^{1+p})}, \qquad \text{暂态因子} = \big(1-\alpha h_i^{1+p}\big)^{2t}.$$
于是 $p$ 的作用一目了然:$p$ 越大,有效曲率 $h_i^{1+p}$ 越大,暂态衰减越快(第一项变小);但同时分子上的 $h_i^{2p}$ 把噪声放大,稳态底噪越高(第二项变大)。$p=1$ 对应牛顿法方向,此时暂态可以被一步消灭,但噪声被放大得最厉害——这就是“$p$ 到 1.0 为止”的含义,也是“为什么不能无脑上二阶方法”的定量回答。
编者说明:讲义还提到 NQM 这一路线最近被推广到 scaling law 的研究(Li et al.),但只给了一句提示,没有公式细节,这里不作展开。
十二、二次模型的局限与 NQM 小结
但——不要盲目相信二次型。深度学习的很大一部分现象并不像二次型。讲义给出的具体反例是:
失败案例:高学习率下的全 batch 梯度下降,轨迹呈现出“噪声状”的模式。 全 batch 梯度下降按理说是确定性的:给定初始点,轨迹完全确定,不该有任何随机性。但在高学习率下实测轨迹却像是有噪声在推着走。二次型模型在结构上无法产生这种现象——因为在 NQM 里,唯一的不确定性来源是我们显式塞进去的梯度噪声 $\epsilon$,而全 batch 意味着 $B\to\infty$、$\epsilon\to 0$,轨迹必然是光滑的、单调地绕向最优点。真实的神经网络损失面不是二次型,高学习率下它会“跨过”陡峭的沟壑,于是轨迹看起来像噪声。这就是心智模型的边界,讲义表示这些细节会在后续讲次继续展开。
NQM 小结:
- 噪声二次模型对于思考优化非常有用;
- 它是一个极其方便的模型,各种性质都能解析求解;
- 它能给出“动量或预条件什么时候有帮助”的粗略但方向正确的直觉;
- 但我们知道世界不是二次型的,知道“正确的模型”以及它的适用边界,才是关键。
十三、第二部分:范数不变性与范数漂移
下半场换一个完全不同的角度:参数范数。
🖼️ RMSNorm 公式与‘loss 对 A 的尺度不变’这句话必须看着公式才能讲清,是第二部分全部论证的前提
起点是一个来自 Quiz 1 的观察:在课程那个小型 transformer “模式生物”(model organism)里,权重范数会随着训练不断变大。于是有两个问题:
- 为什么会涨?
- 涨了又怎样(who cares)?
预备知识:Transformer 里的范数不变性。 Transformer 里有很多“范数不变”的结构。回忆 RMSNorm 的操作:
$$\mathrm{Norm}(x) = \frac{x}{\sqrt{\|x\|_2^2 + \epsilon}}\,\gamma$$
这个操作(几乎)抹掉了 $x$ 的范数:分子分母同时随 $x$ 的尺度缩放,尺度被约掉,只剩下方向,再乘上可学习的逐元素缩放 $\gamma$。于是,对于
$$\mathrm{Loss}\big(\mathrm{Norm}(Ax)\big)$$
这个 loss 对 $A$ 的尺度是不变的:把 $A$ 乘上任意常数 $c$,$Ax$ 也乘上 $c$,进入 Norm 之后被完全抵消。
范数不变模型里的范数漂移。 对于范数不变的权重,可以预期下面这条链条:
- 梯度(近似)切于当前范数球面(对于严格不变的模型是严格相切);
- 切向的更新会把参数往球外推,从而增大范数,而且学习率越大,推得越快;
- 权重衰减则把范数往回拉,最终形成一个动态平衡(dynamic equilibrium)。
关于权重衰减与范数漂移的直观讨论,讲义指向 这篇博客。在一个二维的、范数不变的玩具损失上,可以把这个过程看得非常清楚。
编者说明:讲义里的 “model organism”(模式生物)是这门课对“小型、可控、可反复做实验的 transformer”的称呼,用来在便宜规模上研究训练现象。它不是某个公开数据集或库,讲义没有进一步定义。
十四、范数漂移的代价:有效学习率失控
范数漂了又怎样? 讲义给的答案很干脆:
🖼️ ‘有效步长 η/‖θ‖² 会失控地衰减’是这一部分的中心论点,这页把它写成一行式子并给出后果,是后面 hyperball 的动机
- 范数变大导致梯度变小;
- 于是真正起作用的量是有效步长 $\eta/\|\theta\|_2^2$,而它会不断衰减,且完全不受控制。
在一个二维的范数不变玩具损失上,可以清楚地看到“有效学习率”是如何变化的——它会随着训练一路下滑,而你手里的 $\eta$ 却纹丝不动。
换个角度看权重衰减。 讲义引用了另一条视角(Defazio 2025):
- 梯度与权重之比应当平衡到 $\Theta(2\lambda/\alpha)$ 的量级;
- 因此可以让权重衰减随时间变化:$\lambda_t = \lambda\,\alpha_t/\alpha_{\max}$,从而把这个比值维持成常数。
支持这一视角的实验证据有三组:
| 工作 | 结论 |
|---|---|
| van Laarhoven 2017 | 学习率与权重衰减联合控制范数 |
| Guodong et al. 2019 | 权重衰减是在操纵有效学习率 |
| D'Angelo et al. 2024 | 权重衰减在 one-pass SGD 中就能改善 loss |
注意:权重衰减还有别的影响,例如正则化 Jacobian 的范数——所以“WD 只是在调有效学习率”是一个有用的视角,但不是全部。
编者拓展|为什么偏偏是 $\eta/\|\theta\|^2$:对尺度不变的 loss,有 $\ell(cW)=\ell(W)$ 对任意 $c$ 成立。对 $c$ 求导并取 $c=1$,得
$$\nabla\ell(W)^\top W = 0,$$
即梯度永远与权重正交(这就是“梯度切于范数球面”的严格版本)。再对 $c$ 求一次导,可得梯度是 $-1$ 次齐次的:$\nabla\ell(cW) = \nabla\ell(W)/c$。于是当 $\|W\|=\rho$ 时,一次梯度更新的绝对大小是
$$\|\Delta W\| = \eta\|\nabla\ell(W)\| \;\propto\; \frac{\eta}{\rho},$$
而相对变化是
$$\frac{\|\Delta W\|}{\rho}\;\propto\;\frac{\eta}{\rho^2}.$$
这就是“有效学习率 $\eta/\|\theta\|_2^2$”的来源:$\rho$ 涨一倍,参数感受到的实际步长就只有原来的四分之一。同时,正交性也解释了范数为什么单调变大:$\|W+\Delta W\|^2 = \|W\|^2 + \|\Delta W\|^2$,每一步都严格加长。
十五、Hyperball:把范数约束包在任何优化器外面
想法非常直接:既然超参数耦合的根源是范数漂移,那就干脆把参数直接固定在固定半径的球面上,让它无处可漂。
🖼️ Hyperball 的算法只有三行伪代码,看图比读文字快得多,也便于读者自己实现
做法是把更新方向投影成单位范数,然后在球面上走一步,再投影回球面。即对任意基础优化器给出的更新方向 $g$:
- 归一化:$u \leftarrow g/\|g\|$,把更新方向变成单位范数(只保留方向,丢掉步长带来的尺度信息);
- 更新:沿 $u$ 走一步,步长按球半径 $R$ 缩放,即 $W \leftarrow W - \eta R\, u$;
- 投影回球面:$W \leftarrow R\cdot W/\|W\|$,把结果重新拉回半径 $R$。
一个合理的默认初始值是
$$R = \|W_0\|_F,$$
即初始化时的 Frobenius 范数——从“模型本来就在这个范数上”出发,是最不突兀的选择。
关键在于:这是一个包装器(wrapper)。它不改变优化器本身,只是把优化器的输出方向接过来、重新定标、再投影回去。所以 Adam、SGD、Muon 都能直接套。
flowchart TD
A["基础优化器输出更新方向 g<br/>(如 AdamW 的 U_t)"] --> B["归一化:u = g / ‖g‖"]
B --> C["沿 u 走一步,按球半径缩放:<br/>W ← W − η·R·u"]
C --> D["投影回半径 R 的球面:<br/>W ← R·W / ‖W‖"]
D --> E["进入下一步迭代"]
同类的相关想法很多,其中不少已经成功:
- 重参数化(reparametrization);
- 逐列权重归一化(columnwise weight norm);
- 激活归一化(activation norm);
- Stiefel 流形上的梯度下降(相对于球面情形);
- 球投影(ball projection),也就是 hyperball 这一类。
十六、Hyperball 的效果与超参数迁移
实验结果相当不错:loss 更低,而且范数由构造保证受控(Wen et al. '26)。
🖼️ 这是 hyperball 的主结果图:更低 loss + 构造性范数控制,是本节所有论断的直接证据
范数受控的直接后果是:有效学习率受控。而有效学习率受控,就意味着学习率与权重衰减的解耦成为可能——你不再需要靠 $\lambda$ 去和 $\eta$ 打配合来维持范数,因为范数已经被几何约束钉死了。
讲义还提出一个更有价值的可能:Hyperball 也许能改善超参数迁移(hyperparameter transfer)——在小模型上调好的学习率,能直接搬到更大的模型上。这一点会在作业里亲手验证。
其它工作的证据大致与之吻合(外加一些新东西),并且还有一个有意思的提示:Frobenius 范数(球面投影)是最好用的范数。
但要注意细节——讲义专门用一页强调这些微妙之处:
- 我们并不真的想要一个范数受限的模型。范数本身承载信息;
- 输出层的范数 = 置信度:把输出权重钉死,等于把模型的置信度上限钉死,这通常不是我们想要的;
- embedding 的范数可能有用(它可能编码词频、语义强度等信息);
- 因此更合理的做法是:只归一化“内部”权重——即 MLP 与 attention 的权重,而不是全部参数。
十七、优化器—架构协同设计与全讲小结
最后回到贯穿全讲的主线:优化器设计与架构设计是同一件事的两面。
- 架构与模型约束负责造出容易优化的 loss;优化器负责加速训练;
- 两者之间有三条互相咬合的线索:
- 用单位范数来控制“有效学习率”(第二部分的结论);
- 动量的设计(第一部分的结论:动量在什么条件下才值得开);
- 预条件子的设计(第一部分与第二部分都指向它)。
全讲小结(对应讲义的 NQM recap、Norms recap 与 Conclusion 三页):
- 优化(以及深度学习)很复杂;
- 但理论直觉是有用的:NQM 是研究训练动力学的“工作马(workhorse)”,能解析地给出临界批大小、动量收益、预条件最优强度这些具体答案;
- 心智模型(比如“世界是二次型”)的适用范围是有限的,而判断它“什么时候适用”本身就很微妙;
- 在 one-pass 的训练体制下,权重衰减实际上是在控制有效学习率;让有效学习率不受控地漂移通常不是好事;精确控制范数(进而控制学习率) 因此非常有价值;
- 一句话收束:优化与深度学习都很复杂,理论直觉有用,但不可迷信。
附:参考与延伸阅读
编者补充
- arXiv:1812.06162
- arXiv:2210.02070
- Decoupled Weight Decay Regularization
- Duchi 的一阶方法讲义
- Frank-Wolfe
- 这篇博客
已知疑点
- AdamW 偏差校正的笔误:讲义第 10 页把 $\hat v_{t+1}$ 的分母也写成了 $1-\beta_1^{\,t+1}$。按标准 Adam 应为 $1-\beta_2^{\,t+1}$,本书已按后者呈现。依据:同一页 $v_{t+1}$ 的递推用的是 $\beta_2$,且 $\beta_1/\beta_2$ 分工在上下文中明确。
- NQM 目标函数的 $1/2$:讲义第 18 页写 $L(\theta)=\tfrac12\theta^\top H\theta=\sum_i h_i\theta_i^2$,第二个等号省掉了 $1/2$(吸收进 $h_i$)。本书按“$h_i$ 是 $H$ 的特征值”理解,并在正文中标注了这一点;这会影响 $h_i$ 的数值因子 2,但不影响任何结论的形式。
- NQM 单坐标递推式的噪声系数:讲义第 19 页排成 $\alpha c_i/B\,\epsilon_i$,量纲上与同页的期望风险闭式不一致。按第七节编者拓展的推导,正确形式应为 $\alpha\sqrt{c_i/B}\,\epsilon_i$(与 $\mathbb{E}[\ell^\infty]=\alpha c_i/(2B(2-\alpha h_i))$ 自洽)。本书采用后者。这一条属于排版还原的不确定性,建议对照原始 PDF 图像确认。
- Defazio 2025 的“梯度/权重比”:讲义第 39 页写“应平衡到 $\Theta(2\lambda/\alpha)$”,其中常数与量纲(是否带根号)在幻灯片上无法确定;$\lambda_t=\lambda\alpha_t/\alpha_{\max}$ 的缩放关系也沿用原文、未作推导。这两处都没有把握,正文按原样转述。
- 文献对应关系不确定:第六节“fairly influential paper”与第九至十一节“动量/预条件放进 NQM 的分析”,我按领域常识分别对到了 McCandlish et al. 2018 与 Zhang et al. 2020,但讲义本身没有给出标题、作者或 arXiv 号;这部分是我在「编者拓展」中引入的外部信息,请以课程 reading 为准。
- 只被提及、没有细节的工作:muP(逐层学习率与初始化,下一讲)、Muon(预条件子选择,下一讲)、Li et al. 把 NQM 用于 scaling law、第 27 页“其它关于动量与批大小的论文”、第 40 页的 D'Angelo et al. 2024 等,讲义均未给出完整出处,本书未代为补充。
- “model organism” 的定义:讲义在第 33 页直接使用这一说法,未在本讲内定义。我按“课程内部的小型 transformer 实验体”解释,依据是 Quiz 1 的上下文;若与课程正式定义有出入,请以课程材料为准。
- Nesterov 的 $1/T\to1/T^2$:讲义只说“on smooth functions”,未说明是凸、强凸还是仅光滑。标准结论是光滑凸函数上 $O(1/T^2)$,光滑强凸上还有加速版本;本书未擅自补全假设。
- 与既有 sp26 讲次的重叠处理:本讲涉及的 SGD/Adam 基础、
pandas一类工具内容属于老书已覆盖的部分,本书按要求只作一两句带过;但我没有老书各讲的具体链接可引用,因此未插入交叉链接,只做了内容上的不重复处理。 - 材料形态:本讲材料是幻灯片逐页文字,没有 Jupyter notebook 代码 cell,因此全书没有任何可运行的演示代码;第十五节的流程图是我根据第 43 页的三行伪代码重绘的,不是讲义原图。