学习率是深度学习中最重要的超参,但它的理论起点其实很朴素:梯度下降假设损失函数局部上是个平面,这个假设只在离当前点不远的范围内成立。这个范围多大、步长超过它会怎样,泰勒展开能给出定量的回答。这篇从二次模型推出 $\eta<2/L$ 的硬界,再把"近似只在邻域内可信"这件事推广成可信域方法——学习率调度、warmup、乃至 PPO 的 clip 都是这个原则的后代。
一阶模型在哪里失效
在 $\theta$ 处对损失做泰勒展开:
$$ L(\theta+\delta)=L(\theta)+g^\top\delta+\frac12\delta^\top H\delta+o(\|\delta\|^2),\qquad g=\nabla L(\theta),\ H=\nabla^2 L(\theta). $$
梯度下降只用前两项:在球 $\|\delta\|\le r$ 内极小化线性模型 $g^\top\delta$,Cauchy-Schwarz 给出唯一解 $\delta^*=-r\,g/\|g\|$,即"沿负梯度走 $r$"。把 $\eta=r/\|g\|$ 叫作学习率,就是 SGD 那一行。
值得把这个推导的顺序记牢:先有"在邻域内极小化线性模型"这个决策问题,负梯度方向是它的解——不是先验地"梯度方向好",而是它在欧氏几何下是决策问题的唯一答案。换一个范数,答案立刻变(内积那篇的清单),这解释了为什么 Adam 之后还有那么多几何改装的空间。
注意这里同时诞生了"梯度方向"与"学习率"两个概念:方向来自一阶项的极小化(内积视角那篇说过,它依赖范数选择),步长来自"我们愿意相信线性模型多远"。后文会看到,这两件事可以分别改进——预条件改方向,调度与可信域改步长——现代优化器几乎全部工作都在这两个自由度上做文章。
但这个步长的全部依据是"扔掉二阶项没多大影响"。定量地说:沿 $\delta=-\eta g$ 走,二阶项与一阶项的比值是
$$ \frac{\frac12\delta^\top H\delta}{g^\top\delta}\approx-\frac{\eta}{2}\cdot\frac{g^\top H g}{g^\top g}, $$
其中 $\frac{g^\top H g}{g^\top g}$ 是 $g$ 方向上的瑞利商,被最大特征值 $L=\lambda_{\max}(H)$ 控制。于是近似失效的尺度清晰可见:当 $\eta L$ 接近 1 时,二阶项与一阶项同量级,线性模型的预言不再可信。曲率越大(山谷越窄),可信步长越小——学习率的尺度不是猜出来的,是海森的谱尺度倒数。
二次问题上的精确答案
把话说死:对二次损失 $L=\frac12\theta^\top H\theta$($H$ 对称正定,特征值 $0
$$ e_{t+1}=(I-\eta H)e_t\ \Rightarrow\ \|e_t\|\le\rho^t\|e_0\|,\qquad \rho=\max_i|1-\eta\lambda_i|. $$
收敛当且仅当所有 $|1-\eta\lambda_i|<1$,即
$$ \boxed{\ 0<\eta<\frac{2}{L}\ } $$
越过 $2/L$ 就振荡发散;在 $1/L$ 附近最优,精确最优固定步长 $\eta^*=\frac{2}{L+m}$,收缩因子 $\frac{L-m}{L+m}=\frac{\kappa-1}{\kappa+1}$,$\kappa=L/m$ 是条件数。这个公式解释了训练中两个日常现象:
- 条件数决定训练难度:$\kappa$ 大(山谷狭长)时,稳定步长被 $L$ 卡住,而沿缓坡方向的收敛速度由 $m$ 决定,两者不可兼得——梯度下降在病态问题上必然慢,这是预条件方法(Adam 的对角缩放、自然梯度)存在的理由。
- $\eta$ 贴近 $2/L$ 时的振荡:loss 曲线不降反振、grad norm 上下跳,是步长顶到稳定性边界的典型症状。
还有一个由误差迭代式直接读出的结论:不同特征方向以不同速率 $|1-\eta\lambda_i|^t$ 收缩。取 $\eta\approx1/L$ 时,大特征值方向一步收缩近半,而 $\lambda_i\approx m$ 的缓坡方向收缩因子是 $1-m/L=1-1/\kappa$——训练后期 loss 的缓慢拖尾,就是少数缓坡方向在龟速收敛。loss 曲线的"先快后慢"形态不需要任何深度学习特异性来解释,一个病态二次型就够了。
可信域:把"局部可信"做成算法
二次问题的分析只适用于理想情形,但原则可以带走:优化器每步只应在近似模型可信的范围内移动。可信域方法把它写成约束优化:
$$ \min_{\delta}\ m(\delta):=L+g^\top\delta+\frac12\delta^\top B\delta\qquad\text{s.t.}\ \|\delta\|\le\Delta, $$
约束里的范数选择承接内积那篇的主题:$\|\cdot\|$ 取欧氏得球形可信域,取 Mahalanobis 得椭球(自然梯度版可信域),取 KL 散度就滑向 TRPO。可信域的"形状"与"大小"是两个独立旋钮,下面只拧大小。
$B$ 是海森或其近似,$\Delta$ 是可信半径。解的结构(KKT 条件)是 $\delta^*=-(B+\lambda I)^{-1}g$,其中乘子 $\lambda\ge0$ 随 $\Delta$ 收紧而增大——可信域方法自动在"梯度下降"($\lambda$ 大)与"牛顿步"($\lambda$ 小)之间插值,Levenberg-Marquardt 阻尼就是它的特例。半径本身按预测-实际吻合度自适应调整:定义
$$ \rho=\frac{L(\theta)-L(\theta+\delta)}{m(0)-m(\delta)}, $$
$\rho$ 接近 1 说明模型预测准,下一步放大 $\Delta$;$\rho$ 小甚至为负(这步把 loss 走高了),缩半径并重做这步。学习率在这里不再是常数,而是"模型可信度"的在线测量值。
$\rho$ 的判读还有一层:它的分母是模型预言的下降量,总是非负的($\delta^*$ 是模型的极小点);分子可正可负,是真实世界的回执。$\rho<0$ 意味着这步实际让 loss 上升——模型在这个邻域已经失真,任何基于它的外推都该作废。把每个训练 step 想成一次 $\rho$ 检验,"什么时候敢迈大步"就有了可操作的答案。
下降引理:L-光滑给出的免费保证
"$\eta L\sim1$ 失效"的估计可以再压缩成一条可直接用的定理。若 $L$ 是 $L_f$-光滑的($\nabla L$ 以 $L_f$ 为 Lipschitz 常数,二次情形下 $L_f=\lambda_{\max}(H)$),泰勒余项被二次上界控制,代入 $\delta=-\eta g$ 得下降引理:
$$ L(\theta-\eta g)\le L(\theta)-\eta\Big(1-\frac{\eta L_f}{2}\Big)\|g\|^2. $$
$0<\eta\le1/L_f$ 时右端严格小于 $L(\theta)$——每一步保证下降,且下降量至少 $\frac{\eta}{2}\|g\|^2$。这条不等式是收敛性证明的真正起点:对它求和可得 $\sum_t\|g_t\|^2<\infty$,即梯度范数必然趋于零。它还顺手回答了"精确线搜索 vs 固定步长":二次问题上沿 $-g$ 方向的最优步长是 $\eta^*=\frac{g^\top g}{g^\top Hg}$(对一维二次函数求导置零即得),而固定 $1/L_f$ 是它的保守下界——前者每步要算 $Hg$(一次 HVP 的代价,海森那篇的 Pearlmutter trick 在这里出场),所以实践用后者。
下降引理也给"loss 为什么会卡住"一个定量说法:每步保证的下降量正比于 $\|g\|^2$,梯度趋零时保证的下降也趋零——不是优化器偷懒,是这台机器的动力就来自梯度本身。高原区(梯度小但离极小点还远)因此是梯度下降的天然软肋,动量类方法正是为这种地形准备的改装。
实战中 $L_f$ 未知且随位置变化,backtracking 线搜索(Armijo 规则:步长减半直到实际下降量达到模型预测的固定比例)就是下降引理的自适应版本——它做的事与可信域的 $\rho$ 检验一脉相承,只是一个改步长、一个改半径。
这套框架解释的日常决策
可信域视角把一堆学习率经验收编进同一原则:
- Warmup:训练初期梯度统计与曲率估计都不准,相当于 $\Delta$ 的初始值不明——用小学习率起步就是在小半径内试探,等优化器状态收敛再放开。
- lr decay:接近极小值时噪声主导(SGD 的稳态游荡半径正比于 $\eta$),缩小 $\eta$ 等价于主动收紧可信域,换取更精细的定位。
- 梯度裁剪:全局范数裁剪把 $\|\delta\|$ 硬压在阈值内,本质是给每步更新套一个球形可信域,应对突发的大曲率区域(loss spike 时最先做的就是它)。
- PPO 的 clip 与 KL 惩罚:策略更新限制新旧策略的偏差,是可信域原则在策略空间(而非参数空间)的版本——TRPO 论文的标题里就写着 trust region。
数值演示:$\eta$ 跨过 $2/L$ 的临界行为
理论界可以在 50 行代码里亲眼看到。构造特征值已知的二次问题,取 $\eta$ 分别等于 $0.9/L$、$1.0/L$、$2.1/L$:
import numpy as np
rng = np.random.default_rng(0)
d = 50
Q, _ = np.linalg.qr(rng.normal(size=(d, d)))
lam = np.logspace(0, 2, d) # 特征值 1..100,L=100, κ=100
H = Q @ np.diag(lam) @ Q.T
Lmax = lam.max()
for factor in (0.9, 1.0, 2.1):
eta = factor / Lmax
x = rng.normal(size=d)
losses = []
for _ in range(200):
g = H @ x
x = x - eta * g
losses.append(0.5 * x @ H @ x)
print(factor, f"{losses[-1]:.3e}")
# 0.9 → ~1e-2(慢但稳);1.0 → ~1e-5 量级;2.1 → 1e+13(发散)
$\eta=0.9/L$ 稳定但慢,$\eta=1/L$ 快了近三个数量级,$\eta=2.1/L$ 在几十步内爆炸——临界边界的两侧就是这个画风。条件数 $\kappa=100$ 决定了即使最优步长,收缩因子也只有 $99/101\approx0.98$,两百步才收敛到 $10^{-5}$:病态问题的慢是结构性的。
小结
泰勒展开把学习率从黑盒超参变成可计算的量:一阶模型在 $\eta L\sim1$ 处失效,二次问题给出硬界 $\eta<2/L$ 与条件数决定的收敛率 $\frac{\kappa-1}{\kappa+1}$。可信域方法把"近似可信范围"提升为自适应步长的通用算法,warmup、衰减、梯度裁剪、PPO 全是这个原则的实例化。
当然,非凸世界里这些界只是参照系而非保证书:深度网络的 $L$ 随位置变化,鞍点附近的负曲率方向甚至让二次模型本身都不可信。但参照系的价值恰在于此——实测行为偏离二次预言多少,本身就是损失曲面性质的探针。第一章的矩阵求导工具箱到此闭环,下一章进入概率与信息论:训练语言模型到底在最小化什么,要从交叉熵、KL 散度与最大似然的等价关系说起。