对应: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 学完本讲,你应该能够
- 说出规模化训练中最麻烦的三件事:模型形状、优化器超参数(学习率、批次)、Chinchilla 分析的计算成本。
- 解释 WSD 学习率调度为什么能把 Chinchilla 分析的代价从”n²”降到”n”,并亲手验证。
- 描述 DeepSeek 的做法:在小规模上网格搜索学习率和批次、取”接近最优”的区域、对计算量拟合幂律。
- 推导 μP 的两个条件和对应的初始化、学习率缩放规则,解释为什么标准参数化下”越宽的模型要用越小的学习率”。
- 复现 μP 的学习率迁移实验,并说出 μP 在实践中对哪些设计不稳健。
- 说出 Muon 优化器的核心操作(正交化更新矩阵)以及比较优化器时的常见陷阱。
- 读懂 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 课件指出:**初始化、优化器、各种超参数(学习率、批次大小)都可能对规模敏感。**在小模型上调好的值,放到大模型上可能不再是最优的。
规模化训练的三大挑战(课件的最后总结):
- 设定模型架构的超参数(宽度、深度等);
- 设定优化器的超参数(学习率、批次);
- 拟合 Chinchilla 规模定律所需的大量计算。
对应的解决办法:
- 假设这些超参数”稳定”(与规模无关),或者用 μP 让它们变得稳定(第 5 节);
- 在小规模上搜索最优的学习率 / 批次,然后保持不变或预测它们怎么随规模变化(第 4 节);
- 用 WSD 之类的调度(第 3 节)。
3. 学习率调度与 Chinchilla 分析的代价:WSD
3.1 问题:从 n 到 n²
Chinchilla 式分析需要”模型大小 、训练 个 token 之后的损失”。CS336 课件指出:要拟合规模定律,必须从头训练,不能只是提前停下来。
原因在学习率调度。余弦调度的形状取决于总训练长度:学习率在最后一步才降到最低。用一次长训练的中间检查点,那时学习率还没降下来,损失偏高(第 9 讲 7.4 节提到,Kaplan 就吃过这个亏)。所以要知道训练 1000、2000、4000、8000 步的结果,就得从头训练 4 次。每个模型大小都要这样做——拟合规模定律的代价从 变成了 。
3.2 解决办法:WSD(预热 - 稳定 - 衰减)
MiniCPM 的(部分)解决办法:不用余弦,而把学习率分成三段:
- 预热(warmup):从 0 升到最大值,很短;
- 稳定(stable):保持最大值,占大部分时间;
- 衰减(decay):最后约 10% 的步数,迅速降到接近 0。
稳定阶段与”最终要训练多长”无关。要得到训练长度 的结果,只需在第 步从稳定阶段”分叉”,做 步的衰减。所有长度共享同一个稳定阶段。
DeepSeek 用了类似的多步调度:快速预热,训练到 80% 时把学习率降到 31.6%,到 90% 时降到 10%(两次衰减各占 10% 的训练)。它的效果与余弦调度相当。
3.3 亲手验证
03_wsd_schedule.py 在第 9 讲的玩具任务上(宽度 128 的学生模型)比较。
损失曲线(8000 步,测试可约损失):
| 步数 | 余弦 | WSD |
|---|---|---|
| 2000 | 0.0721 | 0.0787 |
| 5000 | 0.0398 | 0.0581 |
| 7000 | 0.0309 | 0.0574 |
| 7500 | 0.0303 | 0.0460(第 7200 步开始衰减) |
| 8000 | 0.0302 | 0.0314 |
稳定阶段,WSD 的学习率一直很大,损失明显高于余弦;最后 10% 的衰减阶段,损失”断崖式”下降(CS336 课件:“稳定阶段下降较慢,衰减阶段损失迅速降低”),最终与余弦相当。
直觉:大学习率让参数在”山谷”里快速前进,但步子大,在谷底两侧来回震荡,损失看起来不低;降低学习率就是让它”落到谷底”。什么时候落都可以,所以衰减可以最后再决定。
分叉技巧:想知道训练 1000、2000、4000、8000 步各能达到多少损失:
| 训练长度 | 余弦(各自从头训练) | WSD 分叉前(稳定阶段) | WSD 分叉 + 衰减 |
|---|---|---|---|
| 1000 | 0.0716 | 0.0821 | 0.0652 |
| 2000 | 0.0517 | 0.0701 | 0.0530 |
| 4000 | 0.0399 | 0.0612 | 0.0410 |
| 8000 | 0.0302 | 0.0515 | 0.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,直接估计最优的批次和学习率。
- 在小规模上训练大量模型,网格搜索学习率和批次;
- 收集所有”接近最优”的配置(损失在最小值 0.25% 以内);
- 对计算量 拟合幂律:
计算量每增大 10 倍,最优学习率乘以约 0.75,最优批次乘以约 2.1。04_lr_batch_grid.py 演示 4 代入不同的 : 时,学习率约 ,批次约 2070 万 token,与 DeepSeek 67B 的实际设置(批次约 1900 万 token、学习率 )很接近。CS336 课件也提醒,学习率的拟合”看起来有点可疑”(点比较散)。
StepFun(2025)用更大规模的网格搜索研究了同一个问题,观察到:
- 预训练损失关于学习率、批次是凸的,最优点可以被清楚地找出来;
- 在 Chinchilla 式的联合规模分析中,最优批次主要取决于数据量;
- 固定模型大小时,数据越多,最优学习率越高。但 CS336 课件提醒,这一点在换成 WSD 调度时可能不稳健。
Qwen 2.5 和 Qwen 3 也报告做了批次和学习率的规模拟合,但细节很少。
4.3 亲手做一个缩小版
04_lr_batch_grid.py 在玩具任务上做了三个数据预算 × 5 个批次 × 6 个学习率的网格。一个工程小技巧:把 6 个不同学习率的模型叠成一个张量同时训练(einsum 一次算完 6 个模型的矩阵乘法,手写 Adam 让每个模型用自己的学习率),总耗时只比训练一个模型多一点。文件先验证了叠起来训练与分开训练的结果完全相同。
以 = 100 万条样本为例(测试可约损失,* 为最优):
| 批次 \ 学习率 | 0.001 | 0.002 | 0.004 | 0.008 | 0.016 | 0.032 |
|---|---|---|---|---|---|---|
| 64 | 0.0546 | 0.0435 | 0.0392 | 0.0423 | 0.0492 | 0.1001 |
| 128 | 0.0660 | 0.0477 | 0.0404 | 0.0397 | 0.0458 | 0.0587 |
| 256 | 0.0861 | 0.0558 | 0.0440 | 0.0392* | 0.0423 | 0.0477 |
| 512 | 0.1241 | 0.0729 | 0.0503 | 0.0417 | 0.0404 | 0.0428 |
| 1024 | 0.1989 | 0.1098 | 0.0649 | 0.0480 | 0.0418 | 0.0422 |
观察:
- 每一行都是一个”碗”:损失随学习率先降后升,最优点清楚(与 StepFun 一致);
- 批次越大,最优学习率越大(沿着表的对角线):大批次的梯度噪声小,可以走更大的步子;
- 接近最优的区域可以很宽:三个预算下,在最优值 2% 以内的配置分别有 1、2、3 个。所以要找一个”安全的区域”,而不是追求单个最优点。DeepSeek 用”0.25% 以内的所有配置”来拟合,也是这个道理;
- 数据越多,最优批次越大:用接近最优区域的批次几何平均估计,三个预算下分别约 64、91、128(,只有 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 课件,随网络宽度 变化):
- A1:初始化时,激活值(的每个坐标)应该保持 ;
- A2:做一步梯度更新之后,激活值的变化(的每个坐标)也应该是 。
注意:每个坐标是 ,意味着整个向量的范数是 。
A1 保证前向传播不爆炸也不消失;A2 保证每一层都在学习,而且学习的幅度不随宽度变——太大会不稳定,太小等于没学。“最大更新”的意思就是:在不爆炸的前提下,让更新尽可能大。
5.2 推导(简化版,来自 Yang, Simon & Bernstein 2023 的”谱条件”)
考虑一个深度线性网络 , 是 的矩阵。
条件 A1(初始化)。若 ,由随机矩阵的集中性,谱范数(最大奇异值),而 (这是”最坏情况”的上界估计)。取
则 。归纳假设 ,就得到 。✓
条件 A2(更新)。一步更新 后:
假设主要项不相互抵消:(由归纳假设和 A1);而梯度更新是一个”秩一”矩阵,与 方向对齐,所以 。要让它也是 ,需要:
怎么选学习率满足它?
- SGD:。假设损失的变化是 ,推得 ,进而 。
- Adam:更新量的每个元素约为 (与梯度大小无关,Adam 第一步恰好就是 )。一个 、元素都是 的秩一矩阵,谱范数是 。令它等于 ,得到 。
小结(CS336 课件的”简化版 μP”):
| μP | 标准参数化(SP) | |
|---|---|---|
| 初始化标准差 | ||
| 学习率(SGD) | ||
| 学习率(Adam) |
两者的区别:用 Adam 时的学习率;以及输出维度小于输入维度时(例如输出层: 是宽度, 是固定的词表)的初始化——μP 的输出层初始化随宽度按 变小,比 SP 的 小得多。
亲手验证(01_mup_basics.py):3 个隐藏层的 MLP,宽度从 64 到 4096,做一步 Adam 更新(学习率 )后,测量激活值的变化量(均方根):
| 宽度 | SP 隐藏层 | SP logits | μP 隐藏层 | μP logits |
|---|---|---|---|---|
| 64 | 0.0136 | 0.0175 | 0.0136 | 0.0175 |
| 256 | 0.0536 | 0.0958 | 0.0137 | 0.0151 |
| 1024 | 0.1969 | 0.5731 | 0.0138 | 0.0148 |
| 4096 | 0.8876 | 5.1350 | 0.0143 | 0.0154 |
宽度增加 64 倍:SP 的隐藏层变化量变成 65 倍,logits 的变化量变成 294 倍,违反 A2;μP 基本不变。所以在 SP 下,模型每宽一倍,同样的学习率就相当于”踩得更猛”,最优学习率只能跟着减小。(初始化时两者的隐藏层都是 ,都满足 A1。)
5.3 学习率迁移实验
02_mup_lr_transfer.py 做 μP 论文的核心实验:5 种宽度 × 10 个学习率,在玩具任务上训练 3 个隐藏层的 MLP(每个配置 300 步),记录可约损失。μP 的”基准宽度”取 64(在这个宽度上 μP 与 SP 完全相同)。
每个宽度的最优学习率:
| 宽度 | 64 | 128 | 256 | 512 | 1024 |
|---|---|---|---|---|---|
| SP | |||||
| μP |
- SP:宽度翻倍,最优学习率减半,正是 5.2 节预言的”Adam 下 “。沿用小模型的最优学习率(),各宽度的可约损失是 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 学习率 ;
- 输出层:初始化更小(或乘一个 的系数),学习率也要缩放;
- 注意力的缩放:用 代替 (因为训练后 Q、K 会相关,点积按 而不是 增长)。
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 课件列出几个问题:
- 基线的超参数常常没调好:不同的优化器需要不同的超参数(它们的最优超参数随规模的变化也可能不同)。新优化器”打败 AdamW”的结论,常常是因为 AdamW 没调好;
- 明显的规模依赖:在小模型上的大幅加速,到大模型上可能缩小很多。开发新算法时,一定要检查它相对于计算量、相对于”数据 / 参数比”的规模化——这些往往是影响结论的主要混杂因素;
- 建立规模化本身就不容易:有时一条看起来很好的规模曲线,会在更大的规模上突然崩掉(需要更仔细的参数化、缩放规则或优化器修改才能修好)。
6.2 Muon
Muon(Keller Jordan et al. 2024)是专门为矩阵参数设计的优化器。核心操作:把更新矩阵(动量) 近似”正交化”为 ——所有奇异值都换成 1。
- 为什么:梯度 / 动量矩阵通常被少数几个大方向主导,奇异值可能相差好几个数量级;直接用它更新,小方向几乎学不动。正交化让所有方向都走一样大的步子;
- 怎么算:真正做 SVD 太慢,Muon 用几步 Newton–Schulz 迭代 ,只需要矩阵乘法,每一步相当于对每个奇异值作用一个多项式 。
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 比较,各自扫描学习率:
| 优化器 | 最好的学习率 | 可约损失 |
|---|---|---|
| Adam | 0.003 | 0.0771 |
| Muon(隐藏层)+ Adam(其余) | 0.005 | 0.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 K2 | MoE 的稀疏度规模定律 |
| Llama 3 / Hunyuan | 只报告了 IsoFLOP(没有其他规模化细节) |
| MiniMax | 用规模定律做架构选择 |
8. 本讲小结
- 三大挑战:模型形状、优化器超参数(学习率、批次)、拟合 Chinchilla 规模定律的计算成本。
- WSD 调度:稳定阶段与训练长度无关,一次训练 + 多个短衰减分支就能得到所有长度的结果,把 Chinchilla 分析的代价从 降到约 ;最终损失与余弦相当。
- 学习率与批次:损失关于它们是”碗”形的,接近最优的区域可以很宽;批次越大,最优学习率越大;数据越多,最优批次越大。DeepSeek 用网格搜索 + 幂律拟合(,)。
- μP:两个条件(激活值和它的变化量都是 )推出初始化和学习率的缩放规则(Adam:学习率 ,输出层初始化 )。它让最优学习率在不同宽度之间迁移;但对可学习的归一化增益、符号类优化器、强权重衰减不稳健。
- 优化器:比较优化器要调好基线、检查规模依赖。Muon 把更新矩阵正交化,在大规模下也表现良好。
- 案例: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 的公式,计算量从 增加到 ,最优学习率和最优批次分别变成原来的几倍?
参考答案
学习率: 倍。批次: 倍。
练习 3(μP 的学习率):用 Adam、μP,基准宽度 256 时隐藏层学习率调好为 。(a) 宽度 4096 时,隐藏层的学习率应该是多少?输入层呢?(b) 如果用 SGD 呢?
参考答案
(a) 隐藏层 :;输入层的 fan-in 是固定的输入维度,学习率不变,仍是基准值。(b) SGD 下 :隐藏层 ,学习率不变;输入层 随宽度增大,学习率按 增大;输出层 固定,学习率按 减小。
练习 4(Adam 第一步):为什么 Adam 的第一步更新约为 ?这对 μP 的推导有什么意义?
参考答案
第一步 ,,偏差修正后 ,,更新 。更新量的大小与梯度的大小无关,每个元素都约为 。于是一个 的秩一更新的谱范数约为 ,只能靠让 来控制——这就是 Adam 版 μP 学习率规则的来源(01 号文件演示 2 的机制)。
练习 5(μP 与输出层):为什么 μP 的输出层初始化要比 SP 小( 而不是 )?如果输出层用 SP 的初始化会怎样?
参考答案
用 5.2 节的公式:输出层 = 词表大小(固定), = 宽度 ,,标准差 。直觉:训练中输出层的更新会与隐藏层的激活方向对齐,按 改变 logits;初始值如果已经是 的随机噪声,宽模型的 logits 会过大。用 SP 初始化,宽模型在训练初期的 logits 更”随机”、更大,最优学习率也会漂移。
练习 6(近最优区域):为什么 DeepSeek 用”损失在最小值 0.25% 以内的所有配置”来拟合,而不是只用损失最低的那一个?
参考答案
损失曲面在最优点附近很平,单个最低点的位置受随机噪声影响很大(换个种子可能跳到相邻的格点)。用一个区域(例如取区域的中心或几何平均)更稳定;同时区域的大小也告诉你”选错一点有多大代价”。
练习 7(Newton–Schulz):对单个奇异值 ,迭代 。从 出发,手算(或写几行代码)迭代 5 次的结果。从 出发呢?
参考答案
小的 近似每步乘以 3.4445:0.01 → 0.034 → 0.118 → 0.400 → 1.093 → 0.699(后两步非线性项起作用)。:,之后 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。