· 模型原理
梯度下降与优化器:从 SGD 到 Muon
把 θ ← θ − η∇L(θ) 这行公式拆开,看它落到工程里会分出哪四个问题,再按时间顺序看每一代优化器回答了哪一个。
θ ← θ − η∇L(θ) 这行公式拆开,看它落到工程里会分出哪四个问题,再按时间顺序看每一代优化器回答了哪一个。结论:Adam 之前的所有方法都在补自己的短板,Adam 之后的所有方法都在给它打补丁;2024 年的 Muon 是第一次换视角。| 时间 | 官方章节 | 这一章讲什么 |
|---|---|---|
| 00:00 | 训练本质:找最优参数 | 训练等价于求最小值;参数上亿、方程百亿维,只能迭代逼近 |
| 02:26 | 梯度下降原理与类比 | 蒙眼下山;用导数符号判断升降;多维时把偏导打包成梯度 |
| 05:12 | 梯度下降的朴素问题 | 用 f(x)=x²、x0=4、η=0.1 手算收敛过程,暴露四个问题 |
| 08:09 | 优化器演进:SGD 与动量 | Batch GD → SGD → Mini-batch → Momentum 的完整动机链 |
| 15:36 | 自适应与组合优化器 | AdaGrad → RMSProp → Adam → AdamW → Muon |
01 训练就是求一个最小值
数学上,训练神经网络等价于在参数空间里找一组让损失最小的参数:θ* = argmin L(θ)。θ 是所有参数的集合,L(θ) 衡量预测和真实值差多远。整个训练过程就是这么六步在循环——
六步里只有第 5 步会真正改变模型,而它只有一个式子:θ(k+1) = θ(k) − η·∇L(θ(k))。后面九代优化器的全部差异,都落在这一个式子上。
原片给了一个刻意的对照:这看起来像高中数学题——求导、令导数为 0、解出来。但现代大模型动辄上亿参数,那是一个百亿元规模的方程组,根本没有解析解。既然解不出来,就只能一步一步往下走——这就是梯度下降被请来当训练引擎的原因。
02 一步到底是怎么走的
先只考虑一维。最简单的抛物线 f(x)=x²,导数 f′(x)=2x 直接给出当前位置的坡度方向——这正是「蒙眼下山」里用脚感受坡度的那一步。
结论只有两句话:导数为负就往 x 增大的方向走,导数为正就往反方向走,导数为零就是最低点。推广到多维,把每个变量的偏导排成一个向量就是梯度 ∇L(θ):它指向 L 上升最快的方向,前面加个负号就是下降最快的方向。
用原片的例子手算一遍:f(x)=x²、x0=4、η=0.1,于是每一步 x(k+1) = x(k) − 0.1·2x(k) = 0.8·x(k),参数每步固定缩到 0.8 倍。
| 迭代 k | 参数 x(k) | f(x) = x² | 梯度 f′(x) = 2x | 说明 |
|---|---|---|---|---|
| 0 | 4.000 | 16.000 | 8.000 | 起点,梯度最大 |
| 1 | 3.200 | 10.240 | 6.400 | ×0.8 |
| 2 | 2.560 | 6.554 | 5.120 | ×0.8 |
| 3 | 2.048 | 4.194 | 4.096 | ×0.8 |
| 4 | 1.638 | 2.684 | 3.277 | ×0.8 |
| 5 | 1.311 | 1.718 | 2.621 | ×0.8 |
| ∞ | 0 | 0 | 0 | 只能无限接近,永远到不了 |
三个观察值得记住:梯度下降自带刹车(越靠近最优点梯度越小,步子自动变小);它是严格单调下降的;但它永远到不了 0,只能无限逼近——所以工程上必须有一个「差不多就停」的停止条件。
- Batch GD 里的 “Batch” 是老叫法,指「每步都要用上全部样本」,不是今天说的 batch size。
- 学习率 η 不是步长本身,它乘在梯度上:梯度多大、η 多大,共同决定实际迈出去多远。
03 四个问题,九次回答
把公式放回真实场景,立刻分成四个问题(见第 2 幅图)。整条优化器演化史,就是对这些问题的轮流作答——
| 优化器 | 年份 / 来源 | 核心更新式 | 它回答了哪个问题 |
|---|---|---|---|
| Batch GD | 1847 · 柯西 | θ ← θ − η·(1/N)Σ∇L_i(θ) | 立下框架:方向准,但一步要遍历全部样本 |
| SGD | 1951 · 随机逼近 | θ ← θ − η·∇L_i(θ), i ~ U(1,N) | 把每步 O(N) 降到 O(1),代价是方向抖 |
| Mini-batch | 90 年代 | θ ← θ − (η/B)Σ(i∈B)∇L_i(θ) | 在噪声与效率间取到甜点(噪声 ∝ 1/√B) |
| Momentum | 1964 · Polyak | v ← βv + ∇L(θ);θ ← θ − ηv | 让历史参与投票:抑制横跳、加速一致方向 |
| AdaGrad | 2011 · Duchi 等 | G ← G + ∇L²;θ ← θ − η∇L/(√G+ε) | 每个参数一个自己的自适应步长 |
| RMSProp | 2012 · Hinton | E ← βE + (1−β)∇L² | 把「累加」换成「滑动平均」,修掉衰减到 0 |
| Adam | 2014 · Kingma & Ba | 一阶矩 + 二阶矩 + 偏差校正 | 方向感与步长感合体 |
| AdamW | 2017 · Loshchilov 等 | θ ← θ − η(m* /(√v* + ε) + λθ) | 把权重衰减从梯度里解耦出来 |
| Muon | 2024 · Keller Jordan 等 | M ← βM + ∇L(W);W ← W − η·NS(M) | 换视角:参数是矩阵,对更新做正交化 |
原片还补了两条史料:SGD 的思想来自 1951 年两位统计学家研究小白鼠用药剂量(找 50% 反应剂量)时提出的随机逼近;而 RMSProp 其实没有正式论文——它出自 Hinton 2012 年 Coursera 课程的讲义幻灯片,被全世界引用后的规范写法是 Hinton, slides of lecture 6e, Coursera, 2012。
04 三个抓手:样本、方向、步长
先说样本。Mini-batch 的价值在于它给出了一个可计算的权衡:batch 内梯度取平均,噪声大约按 1/√B 下降。32~256 是工程甜点,B=N 就退化成 Batch GD。原片还提醒:batch 调大时必须配套更大的学习率,否则有效更新幅度太小——这正是大模型训练普遍使用学习率预热与线性缩放的原因。
再说方向。动量把「每步重新决策」改成「历史参与投票」:v ← βv + ∇L(θ)、θ ← θ − ηv,β 通常取 0.9。方向一致的更新被累计加速,来回震荡的在相反方向互相抵消。
最后说步长。自适应方向的核心是「按历史梯度大小给每个参数配一个步长」。AdaGrad 用梯度平方的累加和做分母——梯度大的参数步子自动收小,这在稀疏特征(比如 NLP 里的低频词)上特别有效。但它有个结构性缺陷:分母只增不减,训练越久有效学习率越接近 0,后期直接学不动。
RMSProp 的修补只有一处:把「累加」换成「指数滑动平均」。分母不再无限增长,而是收敛到一个常数,学习率因此稳定下来。此后它一度是循环神经网络训练的常用选择,直到 2015 年 Adam 出现。
05 合体与修补:Adam / AdamW / Muon
到 2014 年前后,优化方法已经形成两条清晰的思路:一条用一阶矩管方向,一条用二阶矩管步长。Adam 的出发点就是把它们合体——
偏差校正这一步最容易被忽略:m、v 都从 0 初始化,训练前几步会被严重低估,除以 (1−β^t) 才能抵消这个初始偏差,让起步就在合理速度上。β1=0.9、β2=0.999 是论文默认值。
AdamW(2017)修的是一个隐蔽的 bug:早期实现把 L2 正则直接加进梯度里,而 Adam 会按二阶矩对梯度做归一化——正则项因此被一起缩放,结果是梯度大的参数衰减不足、梯度小的衰减过度,正则化效果被稀释。AdamW 把权重衰减单独拆出来直接作用在参数上,不参与梯度归一化,此后 Transformer / BERT / ViT 以及今天的大模型训练几乎都以它为默认。
Muon(2024)换的是视角:Adam 系把每个参数当独立标量,Muon 承认权重是二维矩阵,对动量矩阵做 Newton–Schulz 迭代近似正交化,避免少数大奇异值方向主导更新。原片提到它在 nanoGPT speedrun、Moonlight / Kimi K2 等训练中跑出更高的样本效率。
06 今天该怎么选
把原片的判断压成一句话:参数尺度均匀、算力吃紧、追求极致精度 → SGD + Momentum 仍值得调参;大模型预训练 → AdamW 是事实默认,Muon 是 2024 年后的新变量;要快速拿到 baseline → Adam 最省心;数据稀疏 → AdaGrad 那一套依然有效。
取材与还原方式(可核对)
- 官方章节 5 段取自 B 站
view_points接口:0–146 / 146–312 / 312–489 / 489–936 / 936–1599 秒。 - 原片无 CC 字幕(subtitle_count = 0),因此画面内容按官方分镜雪碧图逐页还原:4 张 10×10 雪碧图、共 400 个槽位,末段 95 个纯黑填充帧,有效内容帧 305 个 → 每帧 ≈ 1600 ÷ 305 = 5.246 秒。
- 时间↔帧号映射用官方章节起点校准:第 2 / 3 / 4 章的边界分别落在第 27 / 59 / 93 帧附近,与 5.246 秒/帧互相吻合(误差 ≤ 1 帧)。未采用 duration ÷ 总槽位数的估算法(会偏小约 20%)。
- 按相邻帧差分(阈值 5.0)切分出 52 页幻灯片,逐页读取标题、公式与注释;含数字与公式的关键页额外放大 3~5 倍复核。字号极小的个别注释按上下文与数学关系补全,例如 x = +3 处的导数按 f′(x) = 2x 标为 +6。
- 正文所有配图都是按内容重绘的矢量 SVG(坐标由函数实时算出),未使用原视频任何画面;公式里的时间下标在原片中是真下标符号,这里统一改写成 m(t)、x(k) 这类括号写法,以免在部分中文字体下缺字形。
- 图中曲线(1/√B、AdaGrad 相对学习率、迭代轨迹)均由解析式实时计算,不是描摹截图。