第 11 讲:规模定律 II —— 超参数怎样随规模变化(案例与细节)

Language Modeling from Scratch · Lecture 11。个人学习讲义与配套实验,按主题整理并持续修订。

课程源码 ZIP ↓

个人整理的学习笔记,非官方讲义;课程来源与整理说明见课程介绍。配套示例未逐一运行验证。

本篇目录

对应:Stanford CS336 Spring 2026 Lecture 11(Scaling – case study and details,Tatsunori Hashimoto 的幻灯片)。Spring 2025 的第 11 讲内容相近,有公开录像。 配套代码:code/lecture11/ 预计阅读时间:3 小时 硬件说明:普通电脑即可。配套代码在第 9 讲的玩具任务上做了 μP、WSD、学习率 / 批次网格、Muon 四组小实验。


0. 本讲导航

0.1 学完本讲,你应该能够

  1. 说出规模化训练中最麻烦的三件事:模型形状、优化器超参数(学习率、批次)、Chinchilla 分析的计算成本。
  2. 解释 WSD 学习率调度为什么能把 Chinchilla 分析的代价从”n²”降到”n”,并亲手验证。
  3. 描述 DeepSeek 的做法:在小规模上网格搜索学习率和批次、取”接近最优”的区域、对计算量拟合幂律。
  4. 推导 μP 的两个条件和对应的初始化、学习率缩放规则,解释为什么标准参数化下”越宽的模型要用越小的学习率”。
  5. 复现 μP 的学习率迁移实验,并说出 μP 在实践中对哪些设计不稳健。
  6. 说出 Muon 优化器的核心操作(正交化更新矩阵)以及比较优化器时的常见陷阱。
  7. 读懂 MiniCPM、DeepSeek、Llama 3、Hunyuan、MiniMax、Kimi K2 等模型报告中的规模化”配方”。

0.2 先修知识

知识点用在哪里最低要求
第 9 讲全文幂律、Chinchilla 的三种方法、IsoFLOP、临界批量、玩具任务 toy_task.py
第 2 讲第 3、5 节学习率调度(余弦)、Adam 的更新规则、初始化的尺度
线性代数第 5、6 节矩阵的谱范数(最大奇异值)、秩一矩阵、奇异值分解

0.3 本讲地图

第1节 动机:规模定律在实践中怎么用?
第2节 哪些超参数对规模敏感
第3节 学习率调度与 Chinchilla 分析的代价:WSD
第4节 学习率与批次:DeepSeek 式的网格搜索
第5节 μP:让最优学习率不随宽度变
第6节 优化器与规模:Muon
第7节 案例:各家模型的规模化配方

1. 动机:规模定律在实践中怎么用?

第 9 讲讲了规模定律的”原理”:幂律、Chinchilla 的计算最优配比。这一讲关心实践。CS336 课件提出三个问题:

  • Chinchilla 的做法在实践中真的管用吗?
  • 训练和拟合规模定律能不能省点计算?
  • 该不该选用某些特定的架构 / 参数化方式,让模型”规模化得更好”?

第 9 讲讨论的最新模型(Chinchilla)是 2022 年的。从那以后,很多模型报告了规模化的细节:MiniCPM(2024)、DeepSeek(2024)、Llama 3(2024)、Hunyuan-Large(2024)、MiniMax-01(2025)、Qwen、Kimi K2、StepFun(2025)……这一讲从中提炼”最佳实践”。


2. 哪些超参数对规模敏感

CS336 课件指出:**初始化、优化器、各种超参数(学习率、批次大小)都可能对规模敏感。**在小模型上调好的值,放到大模型上可能不再是最优的。

规模化训练的三大挑战(课件的最后总结):

  1. 设定模型架构的超参数(宽度、深度等);
  2. 设定优化器的超参数(学习率、批次);
  3. 拟合 Chinchilla 规模定律所需的大量计算。

对应的解决办法:

  1. 假设这些超参数”稳定”(与规模无关),或者用 μP 让它们变得稳定(第 5 节);
  2. 在小规模上搜索最优的学习率 / 批次,然后保持不变或预测它们怎么随规模变化(第 4 节);
  3. 用 WSD 之类的调度(第 3 节)。

3. 学习率调度与 Chinchilla 分析的代价:WSD

3.1 问题:从 n 到 n²

Chinchilla 式分析需要”模型大小 NN、训练 DD 个 token 之后的损失”。CS336 课件指出:要拟合规模定律,必须从头训练,不能只是提前停下来。

原因在学习率调度。余弦调度的形状取决于总训练长度:学习率在最后一步才降到最低。用一次长训练的中间检查点,那时学习率还没降下来,损失偏高(第 9 讲 7.4 节提到,Kaplan 就吃过这个亏)。所以要知道训练 1000、2000、4000、8000 步的结果,就得从头训练 4 次。每个模型大小都要这样做——拟合规模定律的代价从 nn 变成了 n2n^2。

3.2 解决办法:WSD(预热 - 稳定 - 衰减)

MiniCPM 的(部分)解决办法:不用余弦,而把学习率分成三段:

  • 预热(warmup):从 0 升到最大值,很短;
  • 稳定(stable):保持最大值,占大部分时间;
  • 衰减(decay):最后约 10% 的步数,迅速降到接近 0。

稳定阶段与”最终要训练多长”无关。要得到训练长度 TT 的结果,只需在第 0.9T0.9T 步从稳定阶段”分叉”,做 0.1T0.1T 步的衰减。所有长度共享同一个稳定阶段。

DeepSeek 用了类似的多步调度:快速预热,训练到 80% 时把学习率降到 31.6%,到 90% 时降到 10%(两次衰减各占 10% 的训练)。它的效果与余弦调度相当。

3.3 亲手验证

03_wsd_schedule.py 在第 9 讲的玩具任务上(宽度 128 的学生模型)比较。

损失曲线(8000 步,测试可约损失):

步数余弦WSD
20000.07210.0787
50000.03980.0581
70000.03090.0574
75000.03030.0460(第 7200 步开始衰减)
80000.03020.0314

稳定阶段,WSD 的学习率一直很大,损失明显高于余弦;最后 10% 的衰减阶段,损失”断崖式”下降(CS336 课件:“稳定阶段下降较慢,衰减阶段损失迅速降低”),最终与余弦相当。

直觉:大学习率让参数在”山谷”里快速前进,但步子大,在谷底两侧来回震荡,损失看起来不低;降低学习率就是让它”落到谷底”。什么时候落都可以,所以衰减可以最后再决定。

分叉技巧:想知道训练 1000、2000、4000、8000 步各能达到多少损失:

训练长度余弦(各自从头训练)WSD 分叉前(稳定阶段)WSD 分叉 + 衰减
10000.07160.08210.0652
20000.05170.07010.0530
40000.03990.06120.0410
80000.03020.05150.0311

余弦共需 15000 步;WSD 只要 8700 步(稳定阶段 7200 + 四个衰减分支 1500),节省 42%,各长度的最终损失与余弦相当。要测的长度越多,节省越多。注意第三列:分叉前的损失不能直接当结果用,它比衰减后高得多。


4. 学习率与批次:DeepSeek 式的网格搜索

4.1 两种思路

学习率和批次怎么随规模变化?CS336 课件列出几种观点:

  • 临界批量(OpenAI,Kaplan / McCandlish):批次是损失的函数,损失越低,批次越大(第 9 讲 5.4 节);
  • 计算量的幂律(DeepSeek):学习率、批次都是计算量的多项式函数;
  • ……或者别的什么。

MiniCPM 沿用 Kaplan 的分析:在 9M、30M、170M 三种模型大小下扫描批次,找出每个”模型大小 × 数据量”组合的最优批次,画出”最优批次 vs 最终损失”——一个相当干净的趋势:损失降低时,批次按多项式增大。

4.2 DeepSeek 的做法

DeepSeek(2024,7B 和 67B 模型)的策略:不用 μP,直接估计最优的批次和学习率。

  1. 在小规模上训练大量模型,网格搜索学习率和批次;
  2. 收集所有”接近最优”的配置(损失在最小值 0.25% 以内);
  3. 对计算量 CC 拟合幂律:
ηopt=0.3118⋅C−0.1250,Bopt=0.2920⋅C0.3271 (以 token 计)\eta_{\text{opt}} = 0.3118 \cdot C^{-0.1250},\qquad B_{\text{opt}} = 0.2920 \cdot C^{0.3271}\ \text{(以 token 计)}

计算量每增大 10 倍,最优学习率乘以约 0.75,最优批次乘以约 2.1。04_lr_batch_grid.py 演示 4 代入不同的 CC:C=1024C = 10^{24} 时,学习率约 3.1×10−43.1\times10^{-4},批次约 2070 万 token,与 DeepSeek 67B 的实际设置(批次约 1900 万 token、学习率 3.2×10−43.2\times10^{-4})很接近。CS336 课件也提醒,学习率的拟合”看起来有点可疑”(点比较散)。

StepFun(2025)用更大规模的网格搜索研究了同一个问题,观察到:

  1. 预训练损失关于学习率、批次是凸的,最优点可以被清楚地找出来;
  2. 在 Chinchilla 式的联合规模分析中,最优批次主要取决于数据量;
  3. 固定模型大小时,数据越多,最优学习率越高。但 CS336 课件提醒,这一点在换成 WSD 调度时可能不稳健。

Qwen 2.5 和 Qwen 3 也报告做了批次和学习率的规模拟合,但细节很少。

4.3 亲手做一个缩小版

04_lr_batch_grid.py 在玩具任务上做了三个数据预算 × 5 个批次 × 6 个学习率的网格。一个工程小技巧:把 6 个不同学习率的模型叠成一个张量同时训练(einsum 一次算完 6 个模型的矩阵乘法,手写 Adam 让每个模型用自己的学习率),总耗时只比训练一个模型多一点。文件先验证了叠起来训练与分开训练的结果完全相同。

以 DD = 100 万条样本为例(测试可约损失,* 为最优):

批次 \ 学习率0.0010.0020.0040.0080.0160.032
640.05460.04350.03920.04230.04920.1001
1280.06600.04770.04040.03970.04580.0587
2560.08610.05580.04400.0392*0.04230.0477
5120.12410.07290.05030.04170.04040.0428
10240.19890.10980.06490.04800.04180.0422

观察:

  1. 每一行都是一个”碗”:损失随学习率先降后升,最优点清楚(与 StepFun 一致);
  2. 批次越大,最优学习率越大(沿着表的对角线):大批次的梯度噪声小,可以走更大的步子;
  3. 接近最优的区域可以很宽:三个预算下,在最优值 2% 以内的配置分别有 1、2、3 个。所以要找一个”安全的区域”,而不是追求单个最优点。DeepSeek 用”0.25% 以内的所有配置”来拟合,也是这个道理;
  4. 数据越多,最优批次越大:用接近最优区域的批次几何平均估计,三个预算下分别约 64、91、128(∝D0.30\propto D^{0.30},只有 3 个点,只看趋势),与第 9 讲的临界批量一致。

5. μP:让最优学习率不随宽度变

5.1 目标

μP(Maximal Update Parametrization,最大更新参数化;Yang & Hu 2021,Yang et al. 2022)的承诺很诱人:与尺度无关的超参数调优——在小模型上调好学习率,直接用到任意宽度的大模型上。它怎么做到的?在实践中管用吗?

Cerebras-GPT(0.1B 到 13B,按 Chinchilla 配方训练)的核心发现之一:使用 μP 参数化,规模化更稳定、更可预测。

μP 基于这样的主张(CS336 课件,随网络宽度 nln_l 变化):

  • A1:初始化时,激活值(的每个坐标)应该保持 Θ(1)\Theta(1);
  • A2:做一步梯度更新之后,激活值的变化(的每个坐标)也应该是 Θ(1)\Theta(1)。

注意:每个坐标是 Θ(1)\Theta(1),意味着整个向量的范数是 Θ(nl)\Theta(\sqrt{n_l})。

A1 保证前向传播不爆炸也不消失;A2 保证每一层都在学习,而且学习的幅度不随宽度变——太大会不稳定,太小等于没学。“最大更新”的意思就是:在不爆炸的前提下,让更新尽可能大。

5.2 推导(简化版,来自 Yang, Simon & Bernstein 2023 的”谱条件”)

考虑一个深度线性网络 hl=Wlhl−1h_l = W_l h_{l-1},WlW_l 是 nl×nl−1n_l \times n_{l-1} 的矩阵。

条件 A1(初始化)。若 Wl∼N(0,σ2)W_l \sim N(0, \sigma^2),由随机矩阵的集中性,谱范数(最大奇异值)∥Wl∥∗≈σ(nl−1+nl)\|W_l\|_* \approx \sigma(\sqrt{n_{l-1}} + \sqrt{n_l}),而 ∥hl∥2≈∥Wl∥∗∥hl−1∥2\|h_l\|_2 \approx \|W_l\|_* \|h_{l-1}\|_2(这是”最坏情况”的上界估计)。取

σ=Θ ⁣(1nl−1min⁡ ⁣(1,nlnl−1))\sigma = \Theta\!\left(\frac{1}{\sqrt{n_{l-1}}}\min\!\left(1, \sqrt{\frac{n_l}{n_{l-1}}}\right)\right)

则 ∥Wl∥∗=Θ(nl/nl−1)\|W_l\|_* = \Theta(\sqrt{n_l / n_{l-1}})。归纳假设 ∥hl−1∥2=Θ(nl−1)\|h_{l-1}\|_2 = \Theta(\sqrt{n_{l-1}}),就得到 ∥hl∥2=Θ(nl)\|h_l\|_2 = \Theta(\sqrt{n_l})。✓

条件 A2(更新)。一步更新 ΔWl\Delta W_l 后:

Δhl=WlΔhl−1+ΔWl(hl−1+Δhl−1)\Delta h_l = W_l \Delta h_{l-1} + \Delta W_l (h_{l-1} + \Delta h_{l-1})

假设主要项不相互抵消:WlΔhl−1=Θ(nl)W_l \Delta h_{l-1} = \Theta(\sqrt{n_l})(由归纳假设和 A1);而梯度更新是一个”秩一”矩阵,与 hl−1h_{l-1} 方向对齐,所以 ∥ΔWlhl−1∥2=∥ΔWl∥∗nl−1\|\Delta W_l h_{l-1}\|_2 = \|\Delta W_l\|_* \sqrt{n_{l-1}}。要让它也是 Θ(nl)\Theta(\sqrt{n_l}),需要:

∥ΔWl∥∗=Θ ⁣(nl/nl−1)\|\Delta W_l\|_* = \Theta\!\left(\sqrt{n_l / n_{l-1}}\right)

怎么选学习率满足它?

  • SGD:ΔWl=−ηl∇hlℓ  hl−1⊤\Delta W_l = -\eta_l \nabla_{h_l}\ell\; h_{l-1}^\top。假设损失的变化是 Θ(1)\Theta(1),推得 ∥∇Wlℓ∥∗=Θ(nl−1/nl)\|\nabla_{W_l}\ell\|_* = \Theta(\sqrt{n_{l-1}/n_l}),进而 ηl=Θ(nl/nl−1)\eta_l = \Theta(n_l / n_{l-1})。
  • Adam:更新量的每个元素约为 ±ηl\pm\eta_l(与梯度大小无关,Adam 第一步恰好就是 η⋅sign(g)\eta \cdot \mathrm{sign}(g))。一个 nl×nl−1n_l \times n_{l-1}、元素都是 ±η\pm\eta 的秩一矩阵,谱范数是 ηnlnl−1\eta\sqrt{n_l n_{l-1}}。令它等于 nl/nl−1\sqrt{n_l/n_{l-1}},得到 ηl=Θ(1/nl−1)\eta_l = \Theta(1/n_{l-1})。

小结(CS336 课件的”简化版 μP”):

μP标准参数化(SP)
初始化标准差1nl−1min⁡ ⁣(1,nlnl−1)\frac{1}{\sqrt{n_{l-1}}}\min\!\left(1, \sqrt{\frac{n_l}{n_{l-1}}}\right)1nl−1\frac{1}{\sqrt{n_{l-1}}}
学习率(SGD)nl/nl−1n_l / n_{l-1}Θ(1)\Theta(1)
学习率(Adam)1/nl−11 / n_{l-1}Θ(1)\Theta(1)

两者的区别:用 Adam 时的学习率;以及输出维度小于输入维度时(例如输出层:nl−1n_{l-1} 是宽度,nln_l 是固定的词表)的初始化——μP 的输出层初始化随宽度按 1/n1/n 变小,比 SP 的 1/n1/\sqrt{n} 小得多。

亲手验证(01_mup_basics.py):3 个隐藏层的 MLP,宽度从 64 到 4096,做一步 Adam 更新(学习率 10−310^{-3})后,测量激活值的变化量(均方根):

宽度SP 隐藏层SP logitsμP 隐藏层μP logits
640.01360.01750.01360.0175
2560.05360.09580.01370.0151
10240.19690.57310.01380.0148
40960.88765.13500.01430.0154

宽度增加 64 倍:SP 的隐藏层变化量变成 65 倍,logits 的变化量变成 294 倍,违反 A2;μP 基本不变。所以在 SP 下,模型每宽一倍,同样的学习率就相当于”踩得更猛”,最优学习率只能跟着减小。(初始化时两者的隐藏层都是 Θ(1)\Theta(1),都满足 A1。)

5.3 学习率迁移实验

02_mup_lr_transfer.py 做 μP 论文的核心实验:5 种宽度 × 10 个学习率,在玩具任务上训练 3 个隐藏层的 MLP(每个配置 300 步),记录可约损失。μP 的”基准宽度”取 64(在这个宽度上 μP 与 SP 完全相同)。

每个宽度的最优学习率:

宽度641282565121024
SP2−62^{-6}2−72^{-7}2−82^{-8}2−92^{-9}2−102^{-10}
μP2−62^{-6}2−72^{-7}2−72^{-7}2−72^{-7}2−72^{-7}
  • SP:宽度翻倍,最优学习率减半,正是 5.2 节预言的”Adam 下 η∝1/n\eta \propto 1/n“。沿用小模型的最优学习率(2−62^{-6}),各宽度的可约损失是 0.192 → 0.179 → 0.194 → 0.308 → 0.427,最宽的模型反而比最窄的还差。
  • μP:最优学习率几乎不动。沿用小模型的最优学习率,可约损失是 0.192 → 0.158 → 0.134 → 0.122 → 0.113,越宽越好(μP 的另一个保证)。
  • μP 在大学习率下也更稳:SP 在宽模型、大学习率下损失迅速变差甚至发散,μP 没有。

5.4 Transformer 中的 μP

μP 是一整套”超参数如何随宽度缩放”的规则。CS336 课件列出了 Transformer 中需要分别处理的部分:注意力参数、嵌入层、MLP 的输入 / 输出矩阵、最后的 softmax 线性层(输出层)。几个常见的规则(Yang et al. 2022):

  • 嵌入层:输入维度(词表)固定,初始化和学习率都不随宽度变;
  • 隐藏层矩阵(注意力的 Q、K、V、O,MLP 的矩阵):Adam 学习率 ∝1/宽度\propto 1/\text{宽度};
  • 输出层:初始化更小(或乘一个 1/宽度1/\text{宽度} 的系数),学习率也要缩放;
  • 注意力的缩放:用 1/dhead1/d_{\text{head}} 代替 1/dhead1/\sqrt{d_{\text{head}}}(因为训练后 Q、K 会相关,点积按 dd 而不是 d\sqrt{d} 增长)。

MiniCPM 的 μP 设置(CS336 课件):scale_emb = 12、scale_depth = 1.4、init_std = 0.1、lr = 0.01。它们的规模化策略:用 μP 初始化,固定深宽比,整体放大模型;最优批次、学习率、数据 / 模型比都通过规模分析直接拟合。CS336 课件还提醒,拟合用的最大模型与实际训练的模型之间差了约 5 倍。

5.5 μP 在实践中稳不稳?

现代语言模型有很多组件偏离了 μP 的理论假设。CS336 课件引用的复现研究(Lingle 2024,A Large-Scale Exploration of μ-Transfer)检查了这些偏离:

  • 大多数情况下 μP 依然有效:SwiGLU、平方 ReLU 等激活函数;大 / 小批次;各种初始化变体(例如把注意力的查询初始化为 0);
  • 会破坏 μP 的:
    • RMSNorm 的可学习增益:会破坏迁移,但去掉这些增益,性能几乎没有损失;
    • “奇特”的优化器:只用梯度符号的优化器(如 Lion),最优学习率不能迁移;
    • 较强的权重衰减(0.1):大概是唯一一个显著的失败。

CS336 课件的结论:μP 总体上是有用的,至少在”标准参数化更不稳定”这个意义上。现有证据表明,μP 的参数化 / 初始化可能更容易调。


6. 优化器与规模:Muon

6.1 比较优化器很难

优化是训练语言模型的核心部分,但因为对规模的依赖,它也很棘手。CS336 课件列出几个问题:

  1. 基线的超参数常常没调好:不同的优化器需要不同的超参数(它们的最优超参数随规模的变化也可能不同)。新优化器”打败 AdamW”的结论,常常是因为 AdamW 没调好;
  2. 明显的规模依赖:在小模型上的大幅加速,到大模型上可能缩小很多。开发新算法时,一定要检查它相对于计算量、相对于”数据 / 参数比”的规模化——这些往往是影响结论的主要混杂因素;
  3. 建立规模化本身就不容易:有时一条看起来很好的规模曲线,会在更大的规模上突然崩掉(需要更仔细的参数化、缩放规则或优化器修改才能修好)。

6.2 Muon

Muon(Keller Jordan et al. 2024)是专门为矩阵参数设计的优化器。核心操作:把更新矩阵(动量)Bt=USV⊤B_t = U S V^\top 近似”正交化”为 UV⊤U V^\top——所有奇异值都换成 1。

  • 为什么:梯度 / 动量矩阵通常被少数几个大方向主导,奇异值可能相差好几个数量级;直接用它更新,小方向几乎学不动。正交化让所有方向都走一样大的步子;
  • 怎么算:真正做 SVD 太慢,Muon 用几步 Newton–Schulz 迭代 X←aX+b(XX⊤)X+c(XX⊤)2XX \leftarrow aX + b(XX^\top)X + c(XX^\top)^2X,只需要矩阵乘法,每一步相当于对每个奇异值作用一个多项式 s↦as+bs3+cs5s \mapsto as + bs^3 + cs^5。

05_muon.py 演示 1:一个奇异值跨越 3 个数量级(1 到 0.001)的矩阵,Newton–Schulz 迭代 5 步后,中位数从 0.03 升到 0.79,82% 的奇异值 ≥ 0.5。

演示 2:玩具任务上(3 个隐藏层、宽度 256、1000 步),隐藏层矩阵用 Muon、其余参数用 Adam,与全部用 Adam 比较,各自扫描学习率:

优化器最好的学习率可约损失
Adam0.0030.0771
Muon(隐藏层)+ Adam(其余)0.0050.0546

在这个小实验里,Muon 的可约损失低了约 29%。但请记住 6.1 节的提醒:这只是一个任务、一个随机种子、每种优化器只扫描了几个学习率。

Muon 与规模(CS336 课件):它在 NanoGPT speedrun(非常小规模的训练竞速)中显著加速;Moonshot 的扩展研究和 Kimi K2(万亿参数的 MoE,用 Muon 的变体 MuonClip 训练)表明它在大规模下也能工作。规模化的收益很难测准,但 Muon 显然在大规模下”管用”。


7. 案例:各家模型的规模化配方

7.1 MiniCPM(2024,清华)

小而高性能的模型(1–2.5B),在 2024 年能打败大多数 2B 模型,接近很多 7B 模型。它不算当时最先进的,但在规模化方面有很多值得学习的地方:

  • 用 μP 稳定、简化规模化(5.4 节的设置);
  • 固定深宽比,整体放大模型;最优批次、学习率、token / 参数比都直接用规模分析拟合;
  • 在 μP 下,最优学习率(大致)稳定;最优批次随损失降低按多项式增大(4.1 节);
  • 用 WSD 调度(衰减约占 10%)让 Chinchilla 分析变便宜;用方法 1(下包络)和方法 3(联合拟合),主要依靠联合拟合,得到的最优数据 / 模型比远高于 Chinchilla 的 20。

7.2 DeepSeek(2024)

7B、67B 模型,在当时的开源模型中表现很好。配方:

  • 不用 μP,假设大部分 Transformer 超参数与规模无关;
  • 对学习率、批次做规模分析(4.2 节的网格搜索与幂律拟合);
  • 用多步学习率调度(3.2 节)让 Chinchilla 分析变便宜;
  • 用 IsoFLOP(第 9 讲方法 2)确定模型大小;
  • 拟合出的规模定律(大体上)准确地预测了最终模型的损失。

7.3 其他模型(细节较少)

  • Llama 3(2024):IsoFLOP 式的规模分析,得到约 40 个 token / 参数的最优配比(课件写作 39:1),比 Chinchilla 的 20 高;还做了”计算量 → 下游任务”的两步预测:先从计算量预测模型在基准上正确答案的负对数似然,再把它映射到准确率;
  • Hunyuan-Large(2024,MoE):又一个 IsoFLOP 式分析,这次针对 MoE 的激活参数量,得到的最优比例约为 96 个 token / 激活参数;
  • MiniMax-01(2025):用规模定律做架构选择(例如线性注意力与 softmax 注意力的混合),加上 Chinchilla 方法 1;
  • Kimi K2:很多近期论文用稀疏度规模定律寻找合适的 MoE 稀疏程度;
  • Qwen 2.5 / Qwen 3:学习率、批次的规模拟合(细节很少)。

7.4 配方总结

配方做法
DeepSeek假设大部分 Transformer 超参数与规模无关;对批次 / 学习率做规模分析找最优缩放;IsoFLOP 确定模型大小;分段线性(多步)调度让 Chinchilla 分析变便宜
MiniCPM用 μP 让 Transformer 和学习率与规模无关;用分段线性(WSD)调度获取 Chinchilla 方法 3(曲线拟合)的数据
Qwen学习率 / 批次的拟合(细节很少)
Kimi K2MoE 的稀疏度规模定律
Llama 3 / Hunyuan只报告了 IsoFLOP(没有其他规模化细节)
MiniMax用规模定律做架构选择

8. 本讲小结

  1. 三大挑战:模型形状、优化器超参数(学习率、批次)、拟合 Chinchilla 规模定律的计算成本。
  2. WSD 调度:稳定阶段与训练长度无关,一次训练 + 多个短衰减分支就能得到所有长度的结果,把 Chinchilla 分析的代价从 n2n^2 降到约 nn;最终损失与余弦相当。
  3. 学习率与批次:损失关于它们是”碗”形的,接近最优的区域可以很宽;批次越大,最优学习率越大;数据越多,最优批次越大。DeepSeek 用网格搜索 + 幂律拟合(η∝C−0.125\eta \propto C^{-0.125},B∝C0.327B \propto C^{0.327})。
  4. μP:两个条件(激活值和它的变化量都是 Θ(1)\Theta(1))推出初始化和学习率的缩放规则(Adam:学习率 ∝1/fan-in\propto 1/\text{fan-in},输出层初始化 ∝1/n\propto 1/n)。它让最优学习率在不同宽度之间迁移;但对可学习的归一化增益、符号类优化器、强权重衰减不稳健。
  5. 优化器:比较优化器要调好基线、检查规模依赖。Muon 把更新矩阵正交化,在大规模下也表现良好。
  6. 案例:DeepSeek 与 MiniCPM 代表两条路线:“假设稳定 + 拟合”与”μP 让它稳定”。

9. 与作业 3 的关系

作业 3(规模定律)通过一个”训练 API”查询损失,API 的参数通常包括模型形状(层数、宽度等)、学习率、批次大小和训练计算量,而且查询预算有限。本讲直接帮得上忙:

  • 先在小预算上找学习率 / 批次的”安全区域”(第 4 节):损失关于它们是碗形的,接近最优的区域可能相当宽;不要把大量预算花在精确定位最优点上;
  • 想清楚哪些超参数可以视为与规模无关(DeepSeek 的假设),哪些需要随规模调整(批次通常要随计算量增大,学习率通常要减小,除非使用 μP 式的参数化);
  • 然后用第 9 讲的 IsoFLOP 流程确定模型大小,并对最终损失做带误差范围的预测。

10. 练习

练习 1(WSD 的节省):你要为 5 种模型大小各得到 6 个训练长度(1、2、4、8、16、32 × 10⁹ token)的损失。(a) 用余弦调度,总共要训练多少 token?(b) 用 WSD(衰减占 10%)呢?

参考答案

每种模型:长度之和 = 63 × 10⁹。(a) 余弦:5 × 63 × 10⁹ = 315 × 10⁹。(b) WSD:每种模型只需一次稳定阶段(到 0.9 × 32 = 28.8 × 10⁹),加上 6 个衰减分支(0.1 × 63 = 6.3 × 10⁹),共 35.1 × 10⁹;5 种共约 176 × 10⁹,节省约 44%。长度越多、越分散,节省越多。

练习 2(DeepSeek 公式):用 DeepSeek 的公式,计算量从 102110^{21} 增加到 102310^{23},最优学习率和最优批次分别变成原来的几倍?

参考答案

学习率:100−0.125=10−0.25≈0.56100^{-0.125} = 10^{-0.25} \approx 0.56 倍。批次:1000.3271=100.654≈4.5100^{0.3271} = 10^{0.654} \approx 4.5 倍。

练习 3(μP 的学习率):用 Adam、μP,基准宽度 256 时隐藏层学习率调好为 3×10−33\times10^{-3}。(a) 宽度 4096 时,隐藏层的学习率应该是多少?输入层呢?(b) 如果用 SGD 呢?

参考答案

(a) 隐藏层 ∝1/nl−1\propto 1/n_{l-1}:3×10−3×256/4096≈1.9×10−43\times10^{-3} \times 256/4096 \approx 1.9\times10^{-4};输入层的 fan-in 是固定的输入维度,学习率不变,仍是基准值。(b) SGD 下 η∝nl/nl−1\eta \propto n_l/n_{l-1}:隐藏层 nl=nl−1n_l = n_{l-1},学习率不变;输入层 nln_l 随宽度增大,学习率按 nln_l 增大;输出层 nln_l 固定,学习率按 1/nl−11/n_{l-1} 减小。

练习 4(Adam 第一步):为什么 Adam 的第一步更新约为 η⋅sign(g)\eta\cdot\mathrm{sign}(g)?这对 μP 的推导有什么意义?

参考答案

第一步 m1=(1−β1)gm_1 = (1-\beta_1)g,v1=(1−β2)g2v_1 = (1-\beta_2)g^2,偏差修正后 m^=g\hat m = g,v^=g2\hat v = g^2,更新 η g/(∣g∣+ϵ)≈η sign(g)\eta\, g/(|g| + \epsilon) \approx \eta\,\mathrm{sign}(g)。更新量的大小与梯度的大小无关,每个元素都约为 η\eta。于是一个 n×nn \times n 的秩一更新的谱范数约为 ηn\eta n,只能靠让 η∝1/n\eta \propto 1/n 来控制——这就是 Adam 版 μP 学习率规则的来源(01 号文件演示 2 的机制)。

练习 5(μP 与输出层):为什么 μP 的输出层初始化要比 SP 小(∝1/n\propto 1/n 而不是 1/n1/\sqrt{n})?如果输出层用 SP 的初始化会怎样?

参考答案

用 5.2 节的公式:输出层 nln_l = 词表大小(固定),nl−1n_{l-1} = 宽度 nn,min⁡(1,nl/nl−1)=V/n\min(1, \sqrt{n_l/n_{l-1}}) = \sqrt{V/n},标准差 ∝1/n\propto 1/n。直觉:训练中输出层的更新会与隐藏层的激活方向对齐,按 Θ(1)\Theta(1) 改变 logits;初始值如果已经是 Θ(1)\Theta(1) 的随机噪声,宽模型的 logits 会过大。用 SP 初始化,宽模型在训练初期的 logits 更”随机”、更大,最优学习率也会漂移。

练习 6(近最优区域):为什么 DeepSeek 用”损失在最小值 0.25% 以内的所有配置”来拟合,而不是只用损失最低的那一个?

参考答案

损失曲面在最优点附近很平,单个最低点的位置受随机噪声影响很大(换个种子可能跳到相邻的格点)。用一个区域(例如取区域的中心或几何平均)更稳定;同时区域的大小也告诉你”选错一点有多大代价”。

练习 7(Newton–Schulz):对单个奇异值 ss,迭代 s←3.4445s−4.7750s3+2.0315s5s \leftarrow 3.4445s - 4.7750s^3 + 2.0315s^5。从 s=0.01s = 0.01 出发,手算(或写几行代码)迭代 5 次的结果。从 s=1s = 1 出发呢?

参考答案

小的 ss 近似每步乘以 3.4445:0.01 → 0.034 → 0.118 → 0.400 → 1.093 → 0.699(后两步非线性项起作用)。s=1s = 1:3.4445−4.7750+2.0315=0.7013.4445 - 4.7750 + 2.0315 = 0.701,之后 1.114 → 0.721 → 1.090 → 0.696,在 0.7~1.1 之间来回。这个多项式的设计目标是”把 (0, 1] 里的值很快推到 1 附近”,而不是精确收敛到 1。

练习 8(动手): (a) 在 02_mup_lr_transfer.py 的 MLP 里加入带可学习增益的 RMSNorm,看 μP 的迁移是否被破坏。 (b) 在 03_wsd_schedule.py 中比较线性衰减与指数衰减(MiniCPM 的做法)。 (c) 在 05_muon.py 中把模型换成更宽(512)或更深的,Muon 的优势还在吗?


11. 延伸阅读

  • CS336 Spring 2026 Lecture 11(stanford-cs336/lectures 中的 lecture_11.pdf)。
  • Hu et al.,MiniCPM: Unveiling the Potential of Small Language Models with Scalable Training Strategies(2024):μP、WSD、规模分析。
  • DeepSeek-AI,DeepSeek LLM: Scaling Open-Source Language Models with Longtermism(2024):学习率 / 批次的规模拟合、多步调度、IsoFLOP。
  • Yang et al.,Tensor Programs V: Tuning Large Neural Networks via Zero-Shot Hyperparameter Transfer(2022):μP 与 μTransfer。
  • Yang, Simon & Bernstein,A Spectral Condition for Feature Learning(2023):本讲 5.2 节推导的来源。
  • Lingle,A Large-Scale Exploration of μ-Transfer(2024):μP 在现代架构中的复现与失败情形。
  • Dey et al.,Cerebras-GPT(2023)。
  • Jordan et al.,Muon 优化器(2024 博客);Liu et al.,Muon is Scalable for LLM Training(2025)。
  • Meta,The Llama 3 Herd of Models(2024)第 3.2.1 节:IsoFLOP 与下游任务预测。
  • Wen et al.,Fantastic Pretraining Optimizers and Where to Find Them(2025):公平比较优化器的方法。

12. 下一讲预告

到目前为止,我们已经讲完了训练一个语言模型所需的几乎一切:架构、训练、系统、规模化。还缺一块:**用什么数据训练?**数据塑造了模型的行为(会不会写代码?懂不懂多种语言?)。可是在讨论数据之前,得先回答一个问题:我们想要模型有什么样的行为?怎么判断一个模型”好不好”?

下一讲(评估)会讨论:

  • 困惑度:为什么它仍然是模型开发中最常用的指标,又为什么”不够用”;为什么要按字节归一化;
  • 考试式基准(MMLU、GPQA、HLE)、对话评估(Chatbot Arena 的 Elo、LLM 当评委)、智能体评估(SWE-Bench、Terminal-Bench)、纯推理(ARC-AGI)、安全;
  • 评估的真实性与有效性:测试集污染怎么检测?

下一讲之前,建议你:跑通 code/lecture11/ 下的 5 个脚本,完成练习 1、3、4、6。

← 返回课程目录