· 模型原理

梯度下降与优化器:从 SGD 到 Muon

把 θ ← θ − η∇L(θ) 这行公式拆开,看它落到工程里会分出哪四个问题,再按时间顺序看每一代优化器回答了哪一个。

模型原理 · 图文笔记
26:40原片时长
5官方章节
9代优化器 / 里程碑
52页幻灯片(实测读取)
全片只做一件事:把 θ ← θ − η∇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(θ) 衡量预测和真实值差多远。整个训练过程就是这么六步在循环——

图 1 · 神经网络训练循环的六个步骤(按原片总览图重绘)
1初始化参数给所有权重和偏置赋一组随机小值2前向传播输入逐层向前算,得到模型预测 ŷ3计算损失用损失函数量出预测与真实值的差距4反向传播链式法则从输出层倒推,算出每个参数的梯度5更新参数新参数 = 旧参数− 学习率 × 梯度6重复迭代损失不再下降就停,否则回到第 2 步循环直到收敛六个步骤里第 5 步是全片主角:新参数 = 旧参数 − 学习率 × 梯度

六步里只有第 5 步会真正改变模型,而它只有一个式子:θ(k+1) = θ(k) − η·∇L(θ(k))。后面九代优化器的全部差异,都落在这一个式子上。

原片给了一个刻意的对照:这看起来像高中数学题——求导、令导数为 0、解出来。但现代大模型动辄上亿参数,那是一个百亿元规模的方程组,根本没有解析解。既然解不出来,就只能一步一步往下走——这就是梯度下降被请来当训练引擎的原因。

图 2 · 一行公式落到工程里立刻分出的四个问题
更新公式只有一行,落到工程里立刻分成四个问题1用多少样本?一次更新只用 1 个样本、一小批,还是全部 N 个?2方向怎么走?在窄长山谷里梯度来回横跳,横向分量互相抵消怎么办?3步长怎么分配?不同参数的梯度尺度差几个数量级,还要共用一个 η 吗?4η 要不要变?训练过程中该不该调整学习率,又该怎么调?接下来的八代优化器,就是在这四个问题上轮流作答
上亿参数量级(原片口径)
百亿需要求解的方程组规模
1 个式子贯穿全部 9 代优化器
177 年1847 柯西 → 2024 Muon

02 一步到底是怎么走的

先只考虑一维。最简单的抛物线 f(x)=x²,导数 f′(x)=2x 直接给出当前位置的坡度方向——这正是「蒙眼下山」里用脚感受坡度的那一步。

图 3 · 抛物线上三个位置的导数符号与下降方向
051015-3-2-10123xf(x)f(x) = x²x = −3:f′ = −6 < 0导数为负 → 沿 x 增大的方向,函数值在下降x = 0:f′ = 0导数为零 → 这一步往哪走都不再下降,已经到了最低点x = +3:f′ = +6 > 0导数为正 → 要沿 x 减小的方向,函数值才下降导数只回答「往哪边走」;走多远由步长 η 决定,这是两件独立的事

结论只有两句话:导数为负就往 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 倍。

图 4 · x0 = 4、η = 0.1 时的收敛轨迹与三个观察
01234024681012迭代步 k参数 x(k)x(k) = 4 · 0.8^k4.0002.0481.049自动刹车越靠近最低点梯度越小,步长自动变小单调下降每一步都严格靠近 0,函数值单调下降永远逼近永远到不了 0,只能无限接近→ 工程上要设「差不多就停」f(x) = x²、x0 = 4、η = 0.1 → x(k+1) = 0.8 · x(k),每步固定缩到 0.8 倍
迭代 k参数 x(k)f(x) = x²梯度 f′(x) = 2x说明
04.00016.0008.000起点,梯度最大
13.20010.2406.400×0.8
22.5606.5545.120×0.8
32.0484.1944.096×0.8
41.6382.6843.277×0.8
51.3111.7182.621×0.8
000只能无限接近,永远到不了

三个观察值得记住:梯度下降自带刹车(越靠近最优点梯度越小,步子自动变小);它是严格单调下降的;但它永远到不了 0,只能无限逼近——所以工程上必须有一个「差不多就停」的停止条件。

两个容易记错的点:
  • Batch GD 里的 “Batch” 是老叫法,指「每步都要用上全部样本」,不是今天说的 batch size。
  • 学习率 η 不是步长本身,它乘在梯度上:梯度多大、η 多大,共同决定实际迈出去多远。

03 四个问题,九次回答

把公式放回真实场景,立刻分成四个问题(见第 2 幅图)。整条优化器演化史,就是对这些问题的轮流作答——

图 5 · 从 1847 年的最速下降到 2024 年的 Muon
1847柯西最速下降1951随机逼近样本1964Polyak惯性90 年代Mini-batch批大小2011AdaGrad自适应步长2012RMSProp滑动平均2014Adam合体2017AdamW解耦衰减2024Muon矩阵视角同一行公式 θ ← θ − η∇L(θ),被 177 年里的九次修改逐项补全
优化器年份 / 来源核心更新式它回答了哪个问题
Batch GD1847 · 柯西θ ← θ − η·(1/N)Σ∇L_i(θ)立下框架:方向准,但一步要遍历全部样本
SGD1951 · 随机逼近θ ← θ − η·∇L_i(θ), i ~ U(1,N)把每步 O(N) 降到 O(1),代价是方向抖
Mini-batch90 年代θ ← θ − (η/B)Σ(i∈B)∇L_i(θ)在噪声与效率间取到甜点(噪声 ∝ 1/√B)
Momentum1964 · Polyakv ← βv + ∇L(θ);θ ← θ − ηv让历史参与投票:抑制横跳、加速一致方向
AdaGrad2011 · Duchi 等G ← G + ∇L²;θ ← θ − η∇L/(√G+ε)每个参数一个自己的自适应步长
RMSProp2012 · HintonE ← βE + (1−β)∇L²把「累加」换成「滑动平均」,修掉衰减到 0
Adam2014 · Kingma & Ba一阶矩 + 二阶矩 + 偏差校正方向感与步长感合体
AdamW2017 · Loshchilov 等θ ← θ − η(m* /(√v* + ε) + λθ)把权重衰减从梯度里解耦出来
Muon2024 · 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 调大时必须配套更大的学习率,否则有效更新幅度太小——这正是大模型训练普遍使用学习率预热与线性缩放的原因。

图 6 · batch size 与梯度噪声:1/√B 的量化关系
0.000.250.500.751.001248163264128256batch size B(2 的幂,对数刻度)相对梯度噪声1 / √BB = 1 · 纯 SGD噪声最大、方向最抖,但每步开销最小B = 32 ~ 256 · 甜点噪声约按 1/√B 下降,既快又保留随机性B = N · Batch GD方向最准,但一步要遍历全部样本,代价最高batch 内梯度取平均 → 噪声大约按 1/√B 下降,这是 Mini-batch 被称为工程甜点的量化依据

再说方向。动量把「每步重新决策」改成「历史参与投票」:v ← βv + ∇L(θ)θ ← θ − ηv,β 通常取 0.9。方向一致的更新被累计加速,来回震荡的在相反方向互相抵消。

图 7 · 窄长山谷里朴素 GD 与动量的路径对比
谷底起点无动量:横向来回横跳,相互抵消有动量:累积一致方向,直冲谷底朴素 GD每走一步都把球停下、重新测坡度;窄谷里横向分量反复抵消,前进极慢Momentum · β = 0.9把过去几步的移动趋势也考虑进来:方向一致的被强化,来回震荡的被抵消动量解决的是「方向」问题:把每步都重新决策,换成让历史参与投票
动量也有代价:参数接近最优点时速度仍然很大,容易冲过头再折返,表现为最优点附近的小幅震荡;β 太小累积不足,太大则难以控制。实践中 0.9(或 0.99)是最稳的选择。

最后说步长。自适应方向的核心是「按历史梯度大小给每个参数配一个步长」。AdaGrad 用梯度平方的累加和做分母——梯度大的参数步子自动收小,这在稀疏特征(比如 NLP 里的低频词)上特别有效。但它有个结构性缺陷:分母只增不减,训练越久有效学习率越接近 0,后期直接学不动。

图 8 · AdaGrad 与 RMSProp 的有效学习率演化对比
0.010.0320.100.321.0020406080100迭代步 t有效学习率(对数轴)AdaGrad:分母只增不减,一路衰减到 0RMSProp:分母收敛到常数,学习率不再衰减AdaGrad · 2011G(t) = G(t−1) + g²(分母只增不减)→ 有效学习率单调衰减到 0,后期学不动RMSProp · 2012E(t) = β·E(t−1) + (1−β)·g²(滑动平均)→ 只保留近期梯度,分母收敛到常数以常数梯度 g = 1、β = 0.9 归一化绘制:纵轴是 η 除以分母后的相对值,展示「趋势」而非绝对值

RMSProp 的修补只有一处:把「累加」换成「指数滑动平均」。分母不再无限增长,而是收敛到一个常数,学习率因此稳定下来。此后它一度是循环神经网络训练的常用选择,直到 2015 年 Adam 出现。

05 合体与修补:Adam / AdamW / Muon

到 2014 年前后,优化方法已经形成两条清晰的思路:一条用一阶矩管方向,一条用二阶矩管步长。Adam 的出发点就是把它们合体——

图 9 · Adam = 一阶矩 + 二阶矩 + 偏差校正
Momentum 路线用历史梯度的一阶矩 m(t):方向感 ——一致方向加速,震荡方向减速AdaGrad / RMSProp 路线用梯度平方的二阶矩 v(t):步长感 ——每个参数一个自适应步长Adam · 2014(Kingma & Ba)m(t) = β1·m(t−1) + (1−β1)·∇L(θ)v(t) = β2·v(t−1) + (1−β2)·∇L(θ)²m*(t) = m(t)/(1−β1^t) v*(t) = v(t)/(1−β2^t)θ ← θ − η · m*(t) / (√v*(t) + ε)带 * 的两个量是偏差校正结果:m、v 都从 0 出发,前几步会被严重低估,除以 (1−β^t) 抵消初始偏差。β1 = 0.9、β2 = 0.999 是论文默认值:一条路线管方向,一条路线管步长

偏差校正这一步最容易被忽略: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 今天该怎么选

图 10 · 不同任务类型下的默认选择
不同领域,今天的默认答案并不相同CV / 卷积网络SGD + Momentum 配精心设计的学习率调度,最终精度往往仍优于 Adam 系NLP / 大模型AdamW 长期是默认(BERT / GPT / LLaMA);2024 起 Muon 在 nanoGPT speedrun、Kimi K2 上刷出新成绩快速试验 / 原型Adam 对初始学习率最不挑剔,默认参数往往就能跑出一个像样的 baseline稀疏 / 在线 / CTRAdaGrad 并未退出舞台,广告、CTR、传统 NLP 场景仍有实际价值选型不看「谁最新」,而看参数尺度是否均匀、数据是否稀疏、算力是否吃紧

把原片的判断压成一句话:参数尺度均匀、算力吃紧、追求极致精度 → SGD + Momentum 仍值得调参;大模型预训练 → AdamW 是事实默认,Muon 是 2024 年后的新变量;要快速拿到 baseline → Adam 最省心;数据稀疏 → AdaGrad 那一套依然有效。

视频结尾的指向是下一讲:优化器选好了,但 η 仍是那个最敏感的超参——Warmup、Step Decay、Cosine、OneCycle 等学习率调度方案,是把 η 管住的下一层工具。
取材与还原方式(可核对)
  • 官方章节 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 相对学习率、迭代轨迹)均由解析式实时计算,不是描摹截图。

出处:B 站 BV1XbLh6mEru《梯度下降:神经网络是怎么找到一组好参数的》,UP 主 谦行AIing,《深度学习》系列(共 33 集),时长 26:40。

原视频未标记禁止转载(no_reprint = 0)。本笔记为个人学习用途的结构化整理与图解重绘,未使用原视频画面、未转载原片文字稿;所有配图均为程序化生成的自绘矢量图。

分享:
返回文章列表

相关文章

全部文章 »

前向传播与反向传播概述

微调场景下的前向产物、反向传播机制,以及冻结参数与 LoRA 等不同策略对反向计算图的实际影响。