从0训练LLM · 现代大模型体系 阅读 + 实验 ≈ 35 分钟 页内实验 ×3
C8 稳定性:放大后为什么会炸 第 5 课

小模型上调好的学习率,大模型能用吗?

μP:让学习率不随宽度变
标准参数化下,Adam 第 1 步每个权重都走 ±η,而梯度的符号与输入同号相关,于是隐层输出的变化是 n 个同号项相加,∝ 宽度 × η:宽度从 256 到 5,120,同一个学习率每一步的相对改动大 20 倍。μP 按宽度缩放每层的初始化与学习率(Adam 下隐层学习率 ∝ 1/fan_in,注意力改用 1/d),让「每一步改多少」与宽度无关;Tensor Programs V 从 40M 的代理模型迁移到 GPT-3 6.7B,调参成本只占预训练的 7%。
❓

本课一问:在一个宽度 256 的小模型上仔细扫出了最好的学习率。把模型放宽到 5,120,这个学习率还能直接用吗?如果不能,能不能换一种写法,让它能用?

这一课先不碰:batch 与训练步数怎么随规模变(C6 第 4 课);跨深度的迁移(只在 Dig 里提一句)。

从已有出发

从已有出发 · 训练的一步(点任一环节看它在 Qwen/Qwen3.8-27B 上有多大) 本课本章后面的课
从已有出发 · 累计数据流 点已学环节看形状与参数
解码层

两条旧线索:C5 第 2 课——Adam 做完偏置修正,第 1 步每个参数恰好走 ±η,与梯度大小无关;C6 第 4 课——按 DeepSeek LLM 拟出的超参缩放律,从 10¹⁷ FLOPs 的小实验到 67B 那一档,最优学习率该小 7.5 倍,那一课把「直接搬」列为朴素方案,并说另一条路(μP)在这里兑现。

这一课的例句用法:把「小明把苹果给了小王」5 个 token 在某个隐层的输入当成一个 batch(B = 5,向量用随机数代替),看 Adam 的第 1 步让这一层的输出变了多少。

先自己设计:标准参数化,直接搬学习率

标准参数化(SP)就是我们一直在用的写法:权重按 1/fan_in 的方差初始化(第 1 课),所有矩阵共用一个学习率。宽度 256 上调好的 η = 3×10⁻³(我们项目的基线),原样用到更宽的层:

  1. ① 朴素方案
  2. ② 它在哪失败
  3. ③ 改进方案
朴素方案SP:所有矩阵共用小模型上调好的学习率
Adam 的第 1 步,隐层输出变了多少:宽度 × 学习率

计算中……

为什么是「∝ 宽度」,而不是「∝ √宽度」?看这一层的一个输出:

锚点 Qwen3.8 的 gate_proj 第 1 步更新:Δh = x · ΔWᵀ(行向量写法)
Δh = x · ΔWT
输入参数(可学习)输出
边长按对数比例缩放,块边上的数字是真实值;同一维度符号的边在全图等长。
维度含义 真实规模 小规模
T 这里只看一个 token 1 1
d 输入宽度 hidden_size = fan_in 5120 4
I FFN 中间维 intermediate_size 17,408 6
梯度 G = δᵀ·x,它的第 (i, j) 个元素与 x_j 同号(B = 1 时恰好同号或恰好反号)。所以 Δh_i = −η·sign(δ_i)·Σ_j |x_j|:d 个同号项相加,∝ η·d。初始化时 h 本身只有 1 的量级(第 1 课的 1/fan_in),相对变化就 ∝ η·d。

这一步推导在 B = 1 时是恒等式 ;组件里 B = 1 与 B = 5 两种情况的 log-log 斜率都约为 1。μP 的论文把同一件事说成:在 SP 下,「一步更新之后,网络输出随宽度爆开」 。

改进:μP——按宽度缩放每一层

μP(Maximal Update Parametrization)的思路:既然每一步的改动 ∝ 学习率 × 宽度,那就让每一类参数的学习率(和初始化)按宽度缩放,把宽度约掉。Adam 下的规则逐项看:

μP 的 Adam 规则(Tensor Programs V 表 3 与定义 4.1)
; ; ;
👆 公式里带下划线的每一项都可以点——点哪项,讲哪项。
表 3 是不带乘子的写法;论文另给了等价、更容易实现的表 8 / 表 9。这些规则在无限宽极限下推导出来(Tensor Programs IV / V 附录 J),有限宽度上的效果靠实验验证。
SP 与 μP:Adam 下每一类参数怎么随宽度缩放

计算中……

结果:Tensor Programs V 在 40M 参数的代理模型上调参,迁移到 GPT-3 6.7B,效果超过原版 6.7B,调参成本只占预训练的 7%;在 13M 上调参迁移到 BERT-large(350M),调参成本约等于预训练 BERT-large 一次 。论文里还有一个和本章前几课直接相关的用法——「反向 μTransfer」:宽度 8,192 的模型训到一半发散,把同一组超参迁移到宽度 256 的小模型上复现出同样的发散,在小模型上查出原因是注意力 logit 爆开,再回头确认大模型也是它。小模型成了大模型的调试器,这正是 Wortsman 2023 做「小模型代理」的思路(第 3 课)。

我们自己的模型上:SP 下最优学习率漂不漂

真训练日志 · 宽度 × 学习率扫描(C6 实验导出)

这组扫描是在标准参数化下做的(C6 的 lr_width 实验):如果最优学习率随宽度往小的方向移,就是本课「∝ 宽度」的实测;我们只有 4 层、宽度 64 到 512,规模小,读图时看趋势,不看具体数值。项目本轮没有实现 μP 版本的对照,这是一个空缺(见章首页的项目推进)。

⚠

常见误解一:「μP 找到了最优学习率。」μP 不回答「最优是多少」,只保证「最优点不随宽度移动」;你仍然要在小代理模型上扫一遍。

常见误解二:「μP 能迁移所有超参。」TP-V 表 1 写明:优化类超参、初始化、乘子可以迁移;正则化(dropout、weight decay)不能——它依赖模型大小和数据量,μP 不知道数据有多少。跨宽度有理论保证,跨深度、batch、训练时长、序列长度只在 Transformer 上有实验。

常见误解三:「用了 μP,就不需要 QK-Norm、warmup 了。」μP 解决的是「随宽度变」;固定宽度下,第 2–4 课的不稳定照样会发生。Wortsman 2023 把 μParam 当作降低学习率敏感度的手段之一,与 qk-layernorm、z-loss、warmup 放在一起比较,而不是替代它们。

🔍 两条路:μP 与超参缩放律,各家怎么选?

C6 第 4 课的路是拟合:在一串规模上扫出最优学习率与 batch,拟合成随算力变化的幂律(DeepSeek LLM、Qwen3、Qwen3.8、Kimi K3 都这样做)。本课的路是改写参数化,让最优点不动(MiniCPM 使用了 Tensor Program 系的缩放技术;EleutherAI 与 Cerebras 2024 年发布了面向实践者的 μP 指南)。前者不改模型、要多跑实验;后者要改初始化与每层学习率,换来的是小模型结论可以直接搬。另外,Muon 把每个更新矩阵的 RMS 缩放到固定值(C5 第 7 课、Moonlight 的做法),也是在「让每一步改多少与形状无关」这件事上做文章——苏剑林《初探 MuP》专门推导了 Adam 版与 Muon 版的缩放规则。跨深度的迁移(depth-μP)是后来的工作,本课不展开。

证据三问

问本课的回答
① 它解决什么问题?让小代理模型上调好的学习率(与初始化)直接用到宽得多的模型上,不必在大模型上重扫
② 数学上为什么可能有效?SP 下一步更新的改动 ∝ 宽度,B = 1 时是恒等式 ;μP 的规则在无限宽极限下推出,保证每层的特征变化与宽度无关
③ 实验上为什么被采用?TP-V:40M → GPT-3 6.7B,调参成本 7%;我们的组件里 μP 那条线斜率约 0;SP 下的项目扫描见上

一句话

📌
标准参数化下,Adam 每一步让隐层输出变化 ∝ 宽度 × η,宽模型只能用更小的学习率;μP 按宽度缩放每层的初始化与学习率,让「每一步改变多少」与宽度无关,小模型上调好的学习率就能直接搬。
🚦

先停在这里:记住「改动 ∝ 宽度 × η」和「μP 管的是随宽度变,不管固定宽度下的不稳定」。
再深一层:读苏剑林《初探 MuP》,再对照 C6 第 4 课的超参缩放律,想一想两条路各自要多少次实验。

下一个缺口

训得稳了:训练一个参数,到底要几字节?logit 漂到上千时,BF16 还分得清吗? → C9 第 1 课:训练一个参数,要几字节?

第 4 课的 z-loss 组件已经算过:logit 在 1,000 附近时,BF16 相邻两个可表示数相差 4。数值格式能表示什么、表示不了什么,C9 从字节账算起。

你可能会问