第 5 周 · Day 1:Lecture 9——回顾、Transformer 之外的用法、扩散语言模型与前沿

Transformers and Large Language Models · Week 5 · Day 1。个人学习讲义与配套实验,按主题整理并持续修订。

课程源码 ZIP ↓

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

本篇目录

时长 6–7 小时:§1 九讲一条线(0.5h)· §2 Transformer 看图:ViT 与视觉语言模型(1.5h)· §3 扩散语言模型(2h)· §4 回到基础(1h)· §5 效率与交叉(0.5h)· §6 应用、挑战与怎么跟上(0.5h)· §A–§C(1h)

对应正课 Lecture 9:回顾(九讲)、超越”基于 Transformer 的 LLM”(Transformer 用于图像:ViT;视觉语言模型的两种接法;DiT 等)、扩散语言模型(自回归的局限、图像扩散的直觉、掩码扩散、更少的前向次数、优势与挑战)、结语(模态之间的交叉借鉴、回到基础的研究问题、质量–成本前沿、硬件、应用、仍未解决的问题、怎么跟上进展)。学习计划说这一讲”轻松,重点是建立自己的追踪机制”。我们在它的基础上把两个最有技术含量的点讲透:ViT 和掩码扩散。

配套代码 w5day1_checks.py(纯 numpy):ViT 的 token 数与参数量、patch 嵌入 = 步长卷积、视觉 token 的上下文预算、掩码扩散的目标恰好等于所有生成顺序的自回归损失、并行解码的独立性误差、模型坍缩、Muon 的 Newton–Schulz 迭代、解码注意力的算术强度

§B 参考实现(code/ 目录):w5d1_vit_mdm.py(在合成图形上训练一个小 ViT;在一个有”禁止转移”的马尔可夫链语言上对比掩码扩散模型与自回归模型;用前向–后向算出的”神谕模型”检验损失与解码的实现)。

今天的目标:能说清 ViT 怎么把图变成 token、为什么需要大数据;能画出视觉语言模型的两种接法并比较代价;能推出掩码扩散的训练目标(为什么是 1/t)并说清它和 BERT、和自回归的关系;能解释并行解码为什么要用步数换质量;能说出 Lecture 9 列出的几个开放问题;建立一个每周能坚持的论文追踪流程。


§0 这一周在做什么

第 5 周是收尾周:

Day 1  Lecture 9:前沿趋势        九讲回顾 · ViT 与视觉语言模型 · 掩码扩散语言模型 · 回到基础的问题 · 硬件 · 怎么跟上
Day 2  期末考试与错题溯源          2025 期末真题(Lecture 5–8)· 错题溯源表 · 补漏 · 自编模拟卷与详解
Day 3  系统复习(一):全景图       从一个 token 到一个助手 · 一个模型的全部数字 · 官方大纲逐条核对
Day 4  系统复习(二):推导默写     25 个核心推导的提纲、坑与数值验证 · 代码默写练习
Day 5  面试冲刺                   答题结构 · 分层题库 · 估算题 · 系统设计题:公司内部知识库问答
Day 6  Capstone 与延伸阶段         三个方向的项目计划 · 实验方法论(种子、误差棒、多重比较)· 四条支线 · 全课总结

这一周的主线:前四周是”学进去”,这一周是”拿出来”:考得出(Day 2)、画得出(Day 3)、推得出(Day 4)、讲得出(Day 5)、做得出(Day 6)。

今天要用到的旧结论:自注意力的置换等变(Week 1 Day 1 §1.5);BERT 的 MLM 与”为什么不能直接生成”(Week 1 Day 6 §4.2、§4.7);自回归分解(Week 0 Day 5 §1.1);KV Cache 与 roofline(Week 1 Day 4 §1.4–1.5);“尺子”视角的优化器(Week 0 Day 2 §1.5);Chinchilla 与数据用完(Week 2 Day 1 §4.3);拒绝采样与可验证奖励(Week 3 Day 5 §2);质量–成本前沿(Week 4 Day 5 §4.5)。


§1 九讲一条线

Lecture 9 用一条时间线把九讲串了起来。下表是它的内容,以及我们在哪里学的:

讲主题回答的问题我们的周 / 天
1Transformer怎么让每个词看见整句话?(注意力、Q/K/V、多头、编码器–解码器)Week 0 全周;Week 1 Day 1–3
2基于 Transformer 的模型与技巧怎么编码位置、怎么省显存、怎么做理解任务?(RoPE、MQA/GQA、BERT 家族、高效注意力)Week 1 Day 4–6
3大语言模型为什么是 decoder-only、怎么把模型做大又不贵、怎么用?(MoE、解码、提示、CoT)Week 2 Day 1–3
4LLM 训练规模怎么分配、硬件怎么用、怎么微调?(缩放律、FlashAttention、预训练 → 微调 → 偏好调优、量化、LoRA)Week 2 Day 1、4–6;Week 1 Day 6
5LLM 调优怎么让模型的回答”更好”而不只是”像示范”?(奖励模型、RLHF / PPO、DPO)Week 3 Day 2–4
6LLM 推理怎么让模型”想得更好”?(CoT → R1、GRPO、测试时缩放)Week 3 Day 5–6
7智能体化的 LLM怎么让模型用外部知识、调用工具、自己完成任务?(RAG、工具、ReAct、MCP、A2A)Week 4 Day 1–4
8LLM 评测怎么知道它好不好?(评委、偏差、基准)Week 4 Day 5–6
9前沿还能往哪里走?今天

一条线串起来:Lecture 9 的回顾图是这样读的:一个 token 进入模型(L1–L2 的架构),模型被做大、被训练(L3–L4),被调成人喜欢的样子(L5),学会想(L6),学会用工具和行动(L7),最后被评测(L8)。Day 3 会把这条线画成一张全景图。


§2 Transformer 看图:ViT 与视觉语言模型

2.1 为什么 Transformer 能迁移

Lecture 9 列出 Transformer 的几个特点:2017 年为机器翻译提出;基于自注意力;有查询、键、值的概念;归纳偏置弱;因此通用性强。

归纳偏置是模型结构里预先写死的假设。CNN 假设”相邻的像素相关”(局部性)和”同一个图案在哪里出现都一样”(平移等变);RNN 假设”按顺序处理”。这些假设在对的场景下让模型用更少的数据学得更好,但也限制了它能学什么。自注意力几乎没有这种假设:它不知道谁和谁相邻(没有位置编码时甚至是置换等变的,Week 1 Day 1 §1.5),每个 token 可以直接看任何 token,关系完全从数据里学。只要能把输入切成一串 token,Transformer 就能处理:文字、图像块、音频帧、蛋白质序列、推荐系统里的用户行为……

2.2 ViT:一张图就是 16×16 个词

ViT(Vision Transformer,Dosovitskiy et al. 2020,论文标题就是”一张图值 16×16 个词”)的做法(Lecture 9 的端到端例子):

一张 H×W×C 的图
  │  切成 P×P 的小块(patch),共 N = (H/P)·(W/P) 块
  ▼
每块拉平成 P·P·C 维 ──线性映射──> D 维          ← 就是 token 嵌入
  │
  ▼
前面加一个可学习的 [CLS] token(和 BERT 一样,Week 1 Day 6 §4.3)
加上可学习的位置嵌入(N+1 个)                    ← 位置感知的嵌入
  │
  ▼
标准的 Transformer 编码器(双向注意力,L 层)
  │
  ▼
取 [CLS] 位置的输出 ──> 前馈网络 ──> 类别("泰迪熊")

w5day1_checks.py 第 1 组算了 ViT-B/16(224×224 的图,patch 16,D = 768,12 层):196 个 patch + 1 个 [CLS] = 197 个 token,参数 86.57M(论文报告 86M)。一个 16×16×3 的 patch 拉平后是 768 维,恰好等于 D:一个 patch 就像一个”词”。

patch 嵌入就是一个卷积:对每个不重叠的 P×P 块做同一个线性映射,等价于”D 个 P×P×C 的卷积核、步长为 P”。第 2 组数值上验证了两者完全相等(最大差 2.5×10−142.5\times10^{-14}),所以很多实现直接写 Conv2d(C, D, kernel_size=P, stride=P)。

分辨率的代价:token 数 N=(H/P)2N=(H/P)^2,注意力的计算量按 N2N^2 增长:

分辨率 / patchtoken 数注意力矩阵(相对 224/16)
224 / 161961×
336 / 145768.6×
448 / 14102427×
1024 / 164096437×

这就是 ViT 用 16×16 这么”粗”的 patch 的原因,也是高分辨率图像(文档、截图、图表)对多模态模型来说很贵的原因。

2.3 归纳偏置与数据量

弱归纳偏置是一把双刃剑。ViT 论文的发现:只在 ImageNet(约 130 万张图)上训练时,ViT 比同等大小的 ResNet 差几个百分点;在更大的数据集(1400 万张的 ImageNet-21k、3 亿张的 JFT-300M)上预训练后,ViT 追上并超过了 CNN。直觉:CNN 的”局部性、平移等变”是免费的先验,数据少时很有用;ViT 必须从数据里自己学出这些规律,数据多了之后,它学到的比人写死的先验更好。这和 Week 2 Day 1 缩放律的精神一致:足够的数据和算力,会让通用的结构胜过精心设计的结构。

w5d1_vit_mdm.py --vit 在合成的”圆 / 方 / 三角”图片上训练一个 15 万参数的小 ViT(32×32 的图、8×8 的 patch、16 个 token),各跑 3 个种子:有位置嵌入 0.887 ± 0.015,没有位置嵌入 0.890 ± 0.015(随机猜是 0.333)。两者分不出差别:在这个任务上,局部的边缘(弧线、直角、斜边)已经携带了大部分信息,“一袋 patch”也能分类。位置信息有多重要,取决于任务(数物体、读文字就离不开它)。

2.4 视觉语言模型:两种接法

问题(Lecture 9):“这只泰迪熊有多可爱?“加上一张图,怎么让 LLM 看懂图?

方法 1:复用 decoder-only 结构(LLaVA,Liu et al. 2023)。图像编码器(CLIP 的 ViT)把图变成一串 patch 向量,经过一个投影层映射到 LLM 的词嵌入空间,直接当作 token 插进输入序列:

[图像 token × 576] [文字 token:这只泰迪熊有多可爱?] ──> 普通的 LLM ──> 很可爱!

LLaVA 的训练分两步:先只训练投影层,让图像特征和词嵌入对齐(图文对数据);再端到端地在视觉指令数据上微调(Week 2 Day 6 的 SFT)。好处:LLM 一点不改,所有 LLM 的技巧(KV Cache、量化、LoRA)照用。代价:图像占上下文。第 3 组:LLaVA-1.5(336×336、patch 14)一张图 576 个 token;高分辨率切 4 块再加一张缩略图就是 2880 个 token;以 Llama 3 8B 的 KV Cache(每 token 128 KiB)计,一张 2880 token 的图就占 360 MiB。多图、视频很快就是几万个 token。

方法 2:插入交叉注意力层(Flamingo,Alayrac et al. 2022;Llama 3 的视觉版本)。图像特征不进入 LLM 的序列,而是在 LLM 的层之间插入新的交叉注意力层,让文字 token 去”读”图像特征(这就是 Week 1 Day 2 §4.2 编码器–解码器里的交叉注意力)。Llama 3 的做法是训练这些新层(以及图像编码器),不更新原来的语言模型参数,保证纯文本的能力不受影响。好处:图像不占上下文;文本能力不变。代价:新增大量参数;和原模型的推理栈耦合更深。

方法 1:图像当 token方法 2:交叉注意力
改动加一个投影层在 LLM 中间插入新层
图像占上下文占(几百到几千 token)不占
文本能力微调时可能受影响冻结 LLM,不受影响
代表LLaVA 系列;很多开源 VLMFlamingo;Llama 3 视觉版本

2.5 其他领域

Lecture 9 的小结:“Transformer 实际上被用在很多地方”:文本生成(这门课)、视觉理解(ViT)、图像生成(DiT:把扩散模型里的 U-Net 换成 Transformer,Peebles & Xie 2022;MM-DiT 让文字和图像 token 在同一个 Transformer 里做联合注意力),还有语音、推荐系统等。


§3 扩散语言模型

3.1 自回归的瓶颈

Lecture 9 从一个熟悉的画面开始:[BOS] → “A” → “A teddy” → “A teddy bear” → …… 这就是自回归建模(ARM):一次生成一个 token,每个 token 都依赖前面所有的 token(Week 0 Day 5 §1.1)。

问题:推理不能并行(虽然训练可以,Week 1 Day 1 §5.4)。生成 LL 个 token 就要 LL 次前向,而每次前向(batch 小时)都是访存瓶颈:把几十 GB 的权重和整个 KV Cache 从显存读一遍,只为了算出一个 token(Week 1 Day 4 §1.5;第 8 组:解码时注意力的算术强度只有 1–4 FLOP/字节,而 H100 的拐点在 295)。推测解码(Week 3 Day 1 §3.2)是在自回归框架内的一种补救;扩散语言模型是换一个框架。

3.2 图像扩散的直觉

Lecture 9 用了米开朗基罗的比喻:“雕像本来就完整地在大理石里,我只是凿去多余的部分。“图像生成模型的目标是:学一个从噪声到数据分布的变换。选择噪声作为起点,是因为它容易采样、而且这个变换在数学上有良好的定义。

扩散的两个过程(DDPM,Ho et al. 2020):

  1. 前向过程(固定的,不用学):一步步往图里加噪声,直到变成纯噪声。
  2. 反向过程(要学的):训练一个网络,从加了噪声的图预测”原来的图”(或加进去的噪声),一步步去噪。

生成时从纯噪声出发,反复去噪,得到一张新图。关键在于:每一步去噪都同时作用于所有像素,生成不是一个像素一个像素地来的。

3.3 从图像到文本:掩码扩散

问题:文字是离散的,没法”加一点高斯噪声”。Lecture 9 的类比:图像的”噪声”对应文本的 [MASK]。

  1. 前向过程:每个 token 以概率 tt 被独立地换成 [MASK],tt 从 0(原句)到 1(全是 [MASK])。
  2. 反向过程:训练一个双向的 Transformer,看着部分被遮住的句子,预测被遮住的 token。

这就是掩码扩散模型(MDM;SEDD,Lou et al. 2023;MDLM,Sahoo et al. 2024;LLaDA,Nie et al. 2025 做到了 8B 参数)。

训练目标:

LMDM=Et∼U(0,1) Ext[1t∑i: xti=[MASK]−log⁡pθ(x0i∣xt)].\mathcal L_{MDM}=\mathbb E_{t\sim U(0,1)}\ \mathbb E_{x_t}\Big[\frac1t\sum_{i:\ x_t^i=[\text{MASK}]}-\log p_\theta\big(x_0^i\mid x_t\big)\Big].

看起来就是 BERT 的 MLM(Week 1 Day 6 §4.2),只有两个区别:掩码率 tt 不是固定的 15%,而是在 0 到 1 之间随机;损失要除以 tt。这两个区别让它从一个”理解模型”变成了一个”生成模型”。

为什么是 1/t1/t,推导:

(a) 量级。tt 小时遮得少,每个样本只有少数位置有损失;除以 tt 把它放大回整条序列的量级:E[(1/t)⋅被遮住的个数]=E[(1/t)⋅Lt]=L\mathbb E[(1/t)\cdot\text{被遮住的个数}]=\mathbb E[(1/t)\cdot Lt]=L,与 tt 无关。第 4 组的蒙特卡洛是 3.980(应为 4);但这个估计量的方差其实是无穷大:E[(1−t)/t]\mathbb E[(1-t)/t] 在 t→0t\to0 处发散。实践中会把 tt 限制在 [ε,1][\varepsilon,1](参考代码用 ε=10−3\varepsilon=10^{-3})。

(b) 更深一层:它恰好等于负对数似然。假设模型给出的正好是真实的条件分布 p(xi∣xV)p(x^i\mid x_V)(VV 是没被遮住的位置)。遮住的集合 MM(大小 kk)出现的概率是 tk(1−t)L−kt^k(1-t)^{L-k},乘上 1/t1/t 再对 tt 积分:

∫01tk−1(1−t)L−k dt=(k−1)! (L−k)!L!.\int_0^1 t^{k-1}(1-t)^{L-k}\,dt=\frac{(k-1)!\,(L-k)!}{L!}.

这个数正是”在一个均匀随机的生成顺序里,轮到位置 ii 时,已经生成的恰好是集合 V=McV=M^c“的概率:位置 ii 前面恰好是 VV 里的 L−kL-k 个位置(任意顺序,(L−k)!(L-k)! 种),后面是 MM 里除 ii 之外的 k−1k-1 个((k−1)!(k-1)! 种),除以总的排列数 L!L!。所以

LMDM=E随机顺序 σ[∑j=1L−log⁡p(xσj∣xσ<j)]=−log⁡p(x),\mathcal L_{MDM}=\mathbb E_{\text{随机顺序 }\sigma}\Big[\sum_{j=1}^L-\log p\big(x^{\sigma_j}\mid x^{\sigma_{<j}}\big)\Big]=-\log p(x),

最后一步是因为每一种顺序的自回归分解都等于 −log⁡p(x)-\log p(x)(链式法则)。掩码扩散 = 对所有生成顺序做平均的自回归。第 4 组在一个 4 token 的随机联合分布上逐位验证了这个等式:

序列−log⁡p(x)-\log p(x)掩码扩散目标(精确)不加 1/t1/t固定 15% 掩码(BERT 式)
(0, 0, 2, 0)2.34202.34201.36121.4931
(1, 2, 2, 0)3.24833.24831.94021.6847

不加 1/t1/t 或用固定的掩码率,得到的数和似然对不上:BERT 的目标不是一个生成模型的训练目标,这正是 Week 1 Day 6 §4.7 说 BERT 不能直接生成的数学原因。真实训练中模型的条件分布不完美、彼此也不一定自洽,这时目标是 −log⁡p(x)-\log p(x) 的上界(负 ELBO)。

3.4 解码:更少的步数,以及代价

生成(Lecture 9 的图):从全是 [MASK] 开始,每一步让模型预测所有被遮住的位置,揭开一部分(其余继续遮住),重复,直到没有 [MASK]。LL 个 token 用 S<LS<L 步生成,前向次数更少。

代价:同一步揭开的 token 彼此独立。模型给的是每个位置各自的条件分布。第 5 组的最小例子:训练数据里 “New York” 和 “San Francisco” 各占一半。两个位置都被遮住时,第一个位置 New / San 各 0.5,第二个 York / Francisco 各 0.5;同一步独立地揭开两个,一半的概率拼出 “New Francisco”。损失的信息量正是两个位置的互信息(log 2)。

一个更真实的例子(第 5 组):一个有 50% “禁止转移”的马尔可夫链语言,长 16;每个位置的条件分布用前向–后向算法精确地算出(相当于一个完美的模型)。生成合法序列的比例:

步数 SS每步揭开随机挑位置挑最有把握的位置
1611.0001.000
820.7420.514
440.3360.168
280.0470.285
1160.0000.000

读法:

  • 每步只揭开 1 个 token 时,采样是精确的(这就是自回归,只是顺序不固定)。一步揭开得越多,依赖越容易被破坏。步数是质量与速度之间的旋钮,即使模型是完美的也逃不掉。
  • “先揭开最有把握的位置”并不总是更好:在这条链上,刚被揭开的位置的邻居最有把握,于是它倾向于同时揭开相邻的位置,而相邻位置恰恰相关性最强(SS = 8、4 时反而更差)。实际的扩散语言模型常把”按置信度挑”和分块、从左到右的半自回归顺序结合起来。挑哪些位置一起揭开,要和数据的依赖结构一起设计。

3.5 在小模型上试一试

w5d1_vit_mdm.py --mdm 在同一个马尔可夫链语言上训练两个一样大的小 Transformer(约 34 万参数):一个用掩码扩散目标(双向注意力),一个用自回归目标(因果注意力)。

先检验实现(--selftest):把”神谕模型”(前向–后向算出的精确条件分布)代入 mdm_loss,30 次平均得到每 token 0.5414,真实 NLL 是 0.5411;用神谕模型每步揭开一个 token,生成的序列全部合法;一步揭开全部 16 个,合法率 0.000。损失函数和解码循环都写对了。

再看训练:

这次用的语言是 6 个词、长 16、64% 的转移被禁止的马尔可夫链,真实分布下每个 token 的 NLL 是 0.5378(code/logs/w5d1_mdm.txt,单个种子):

模型训练步数测试 NLL(扩散模型是上界)生成 2000 条的合法率
自回归15000.53890.997
掩码扩散15001.07590.014(每步揭开 1 个)
掩码扩散30000.55040.940
掩码扩散45000.54510.976
掩码扩散60000.54090.988

训练完的扩散模型,换不同的解码步数:

挑位置的方式SS=168421
随机0.9900.5890.1580.0020.000
最有把握0.9900.6610.0710.0110.000

读法:

  • 扩散模型学得慢得多。自回归 1500 步就几乎贴到真实 NLL(差 0.001);扩散模型 1500 步时 NLL 上界还是 1.08、几乎生成不出合法序列,到 3000 步才突然学会,6000 步(4 倍于自回归)时上界 0.5409,仍然比自回归差一点。每步的计算量两者差不多(模型一样大),所以同样的训练算力,扩散模型更差。原因有两个:它要学的是”任意遮挡模式下”的条件分布,比”只看左边”的任务大得多(§3.3 的”任意顺序自回归”);1/t 加权的损失在 t 很小时被放大,梯度方差大。这是 §3.6 “同等规模下质量仍在追赶”在玩具尺度上的一个缩影。
  • 学会以后,规律和神谕模型一样:每步揭开 1 个(SS = 16)时合法率 0.990,接近自回归;步数越少越快,合法率越低,一步全揭开时为 0。步数仍然是质量与速度之间的旋钮。
  • 两种挑法谁好,随步数变:SS = 8 时挑最有把握的更好,SS = 4 时反而更差。这里的链和 §3.4 不是同一条(禁止比例不同),具体排序不能直接对比,但结论相同:没有一种挑法在所有步数上都占优。
  • 诚实地说:这是单个种子的结果。训练有随机性,你重跑一次,具体数字(尤其是 SS = 8、4 两列,以及扩散模型在哪一步”突然学会”)会有出入;先看趋势。在我的机器(CPU)上自回归 1500 步约 150 秒,扩散 6000 步约 630 秒,你的机器上会不同。

3.6 现状与挑战

已经发生的(Lecture 9 引用的新闻):Google 在 2025 年 5 月的 I/O 上展示了 Gemini Diffusion;字节跳动 7 月发布了 Seed Diffusion;Inception Labs 的 Mercury 系列商业化了扩散语言模型。

优势(Lecture 9):

  • 更适合某些任务:比如代码编辑、补全中间的内容(双向注意力天然能看到两边);LLaDA 报告它在”反向”任务(已知下一句写上一句)上不受自回归模型的”反转诅咒”影响。
  • 速度:Lecture 9 给出的量级是输出 token 速度约为自回归的 10 倍(前向次数少得多)。

挑战与正在进行的工作:

  • 把自回归的技巧搬过来:KV Cache 不能直接用(双向注意力下,揭开一个 token 会改变所有位置的表示);RLHF、GRPO 需要序列的对数概率,而扩散模型只给出一个上界(§3.3);变长生成要额外设计。
  • 性能:同等规模下整体质量仍在追赶自回归模型;§3.5 的小实验也显示它更难训练。

§4 回到基础

4.1 设计选择仍无定论

Lecture 9 指出:基础研究仍在进行,微观层面的设计选择在不同论文之间仍然差异很大:

设计选择现状我们在哪里学过
优化器AdamW 仍是主流;Muon / MuonClip(Kimi K2)等新方法出现Week 0 Day 2 §2
归一化LayerNorm vs RMSNorm;放在哪里(Pre-LN 等)Week 0 Day 2 §4;Week 1 Day 2 §2
注意力MHA / MQA / GQA(以及更激进的压缩 KV 的做法)Week 1 Day 4 §2
激活函数ReLU → GELU → SwiGLUWeek 1 Day 2 §1.4
MoE 与否前沿大模型多为 MoE,但不是全部Week 2 Day 2
层数深而窄 vs 浅而宽Week 2 Day 1

以 Muon 为例看”优化器还在演化”。Muon(Jordan 2024)对每个权重矩阵的动量 G=UΣV⊤G=U\Sigma V^\top 做正交化:用 UV⊤UV^\top 代替 GG 作为更新方向,即把所有奇异值都换成 1。直觉(Week 0 Day 2 §1.5 的”尺子”):Adam 在每个坐标上各自缩放(对角的尺子);Muon 在谱范数这把尺子下找最陡的方向,结果就是 UV⊤UV^\top:每个奇异方向走一样大的步,不让少数几个大奇异值主导更新。SVD 在 GPU 上很慢,Muon 用只含矩阵乘法的 Newton–Schulz 迭代逼近 UV⊤UV^\top。第 7 组(奇异值跨 3.9 个数量级的矩阵):

方法步数奇异值落在 [0.5, 1.3] 的比例与 UV⊤UV^\top 的相对误差
三次迭代 X←1.5X−0.5XX⊤XX\leftarrow1.5X-0.5XX^\top X528.1%0.794
三次迭代30100.0%0.000
Muon 的五次迭代575.0%0.446

三次迭代精确但慢;Muon 的五次迭代(系数 3.4445、−4.7750、2.0315)5 步就把大部分奇异值推进 1 附近,极小的奇异值只被放大约 490 倍、仍没到 1:它要的是”各方向步长大致相当”,而不是精确的 UV⊤UV^\top。Kimi K2(1 万亿总参数、320 亿激活参数的 MoE)用的 MuonClip 在此基础上加了”QK-clip”,限制注意力 logit 的增长以避免训练不稳定。

4.2 燃料:高质量数据还够吗

Lecture 9 问:“未来还有高质量数据的来源吗?”

  • 公开的人类文本是有限的。Epoch AI(Villalobos et al.)估计,按目前的训练规模增长趋势,公开的人类文本存量可能在 2020 年代后半到 2030 年代初被用完(Week 2 Day 1 §4.3 讨论过”数据用完了怎么办”)。
  • 合成数据是自然的补充:第 3 周的拒绝采样、R1 的 80 万条推理数据、蒸馏都是在用模型生成训练数据。
  • 但只用生成的数据会”坍缩”(Shumailov et al. 2023,后发表于 Nature):一代代地在上一代模型生成的数据上训练,模型会逐渐忘掉原始分布的尾部。第 6 组的最简单版本:数据 ~ N(0, 1),每一代从上一代拟合的高斯里抽 100 个样本、重新拟合:
第几代σ 的中位数σ < 0.5 的比例混入一半真实数据时 σ 的中位数
100.9010.0070.998
1000.3660.6530.995
10000.0001.0000.990

机制:最大似然的方差估计有偏(E[σ^2]=n−1nσ2\mathbb E[\hat\sigma^2]=\frac{n-1}n\sigma^2),而且每一代的估计误差会累积成随机游走;罕见的样本(尾部)最先消失。混入真实数据后分布保持稳定。现实的对策:保留人类数据、记录数据的来源(区分人写的和模型生成的)、合成数据要经过筛选和验证(可验证奖励、评委、拒绝采样都是在做筛选)。

4.3 Transformer 是最好的架构吗

Lecture 9 退后一步问了这个问题,没有给答案,我们也不给,但可以列出正在被探索的方向:

  • 状态空间模型与线性 RNN(如 Mamba,Gu & Dao 2023):推理时每步是常数计算和常数内存,没有随长度增长的 KV Cache。Week 1 Day 6 §2.3 推过”因果线性注意力就是一个 RNN”,它们是同一个家族;代价也相同:固定大小的状态”记不住”任意长的精确信息(Week 1 Day 6 §2.5)。
  • 混合架构:大部分层用线性注意力或 SSM,少数层保留全注意力。
  • 扩散语言模型(§3):换的不是网络结构,而是生成范式。

判断标准回到缩放律(Week 2 Day 1):一个新架构要证明的,不是在小规模上赢一次,而是它的缩放曲线在大算力下仍然更好。


§5 效率与交叉

5.1 从”最强”到”性价比”

Lecture 9:“到目前为止,关注点是最好的性能;越来越多地,关注点是最好的质量–成本权衡”:也就是 Week 4 Day 5 §4.5 的 Pareto 前沿。量化、蒸馏、MoE、推测解码、小模型的”过度训练”(Week 2 Day 1 §4),都是在推这条前沿。

5.2 硬件

Lecture 9 的观察:现有的 GPU 为矩阵–向量、矩阵–矩阵运算优化;而 Transformer 有特殊的需求:注意力要频繁地读写 KV Cache,数据搬运主导了成本。第 8 组:

注意力解码时的算术强度能用上 H100 峰值算力的
MHA1 FLOP/字节0.34%
GQA(Llama 3 8B)41.35%
MQA3210.8%

(H100 的拐点约 295 FLOP/字节。)一个研究方向(Leroux et al. 2025):在硬件上”原生”支持注意力:把 KV Cache 存在专用的存储单元里,用模拟信号就地计算,论文报告相对 H100 延迟最多降低约 100 倍、能耗降低约 7 万倍。这是研究原型,但方向很清楚:把计算搬到数据旁边,而不是把数据搬到计算旁边。

5.3 模态之间的交叉借鉴

Lecture 9 的”趋势”:不同模态在互相借鉴行之有效的想法:

  • 架构:文本借用了图像的”扩散”训练(§3);图像借用了 Transformer(ViT、DiT,§2)。
  • 输入表示:DeepSeek-OCR(Wei et al. 2025)反过来”用图片压缩文字”:把长文本渲染成图片,用视觉 token 表示。论文报告视觉 token 约为文字 token 的 1/10 时,OCR 精度约 97%(压缩到 1/20 时约 60%)。token 少 10 倍,注意力的计算量(∝ 长度²)就少 100 倍、KV Cache 少 10 倍:这为”超长上下文的记忆”提供了一种新思路。
  • 技巧:RoPE 的各种变体被推广到图像的二维位置(比如 Qwen-Image 的多模态可扩展 RoPE)。

§6 应用、挑战与怎么跟上

6.1 今天与明天

Lecture 9 的判断:日常生活已经被 LLM 显著改变:编程(真正的写代码、自然语言转查询)、通用对话助手(常识、网页搜索)、创作、学习……

接下来:已有的智能体会普及到更多人(比如 2025 年 12 月发布的 Google Workspace Studio,让普通用户搭建办公自动化智能体);近期可能是浏览器(比如 2025 年 10 月的 ChatGPT Atlas),更远一点可能是操作系统级的 LLM;长期:真正自主、承担大量职责的智能体?以及一个 Lecture 9 半开玩笑的”不可能任务”:真正好用的客服。

6.2 仍未解决的问题

Lecture 9 列出的”当前最受关注的改进方向”:

问题为什么难这门课里的相关内容
权重是固定的,不是持续学习训练完就定格;持续更新会遗忘旧知识(灾难性遗忘)RAG 是绕过它的办法(Week 4 Day 1 §1.3)
幻觉模型被训练成”给出流畅的下一个 token”,而不是”只说知道的”标签平滑与校准(Week 3 Day 1 §3.1);RAG 与忠实度(Week 4 Day 6 §3.1)
个性化每个人要的不一样,但不能为每个人训练一个模型LoRA(Week 2 Day 6 §3);记忆(Week 4 Day 4 §5.2)
可解释性几十亿参数里发生了什么,我们只理解一小部分FFN 键值记忆(Week 1 Day 2 §1.3)、QK/OV 电路(Week 1 Day 1 §4.5)
安全能力越强、自主性越高,风险越大提示注入(Week 4 Day 3 §6);对齐(第 3 周)

6.3 建立你的追踪机制

学习计划说:“冲刺结束后能不能持续,就看这个机制建没建起来。” Lecture 9 列出的信息源:

  • 论文:arXiv 的 cs.CL(计算与语言);机器学习会议(NeurIPS、ICML、ICLR)和 NLP 会议(ACL、EMNLP)。
  • 代码:论文里链接的作者仓库;Hugging Face 的”热门论文”页面(能看到最新的数据集和方法)。
  • 其他:学者和业界人士的社交媒体;YouTube 上理论向(Two Minute Papers、Yannic Kilcher)和实践向(Google Developers、Hugging Face、Andrej Karpathy)的频道;公司和实验室的技术博客与报告。
  • 课程的 VIP Cheatsheet(有中文版):课后复习用(Day 3 会逐条核对)。

一个能坚持的流程(每周约 3 小时):

  1. 筛选(周一,30 分钟):扫一遍 Hugging Face 热门论文和 arXiv cs.CL 的标题,挑 5 篇进”待读”。挑选的标准:和你的方向相关、有代码、被多个信息源提到。
  2. 精读 2 篇(周中,2 小时):用 Week 1 Day 3 §7 读 Attention Is All You Need 的方法:先读摘要和结论,再读方法,最后看实验。每篇写一页笔记(下面的模板)。
  3. 复现 1 个数字(周末,30 分钟起):从论文里挑一个最核心的数字,用最小的代价复现它(一个公式、一个玩具实验)。这是”读懂”和”读过”的区别,也是这门课每一个 checks.py 在做的事。

每篇论文一页笔记的模板:

标题 / 作者 / 日期 / 链接 / 代码:
一句话:它解决了什么问题?(用"以前……,所以……,这篇……"的句式)
动机:以前的方法撞到了什么墙?(这门课的哪一节讲过那堵墙?)
方法:核心想法是什么?关键公式写一遍,每个符号是什么意思。
证据:最重要的一张表 / 一张图说了什么?数字的误差有多大?比较公平吗?(Week 4 Day 5 §3)
代价与局限:它用什么换来了什么?作者承认了什么?没说的呢?
和我的关系:我能用上吗?我能复现哪一个数?

§A 多模态与扩散:API 用法与边界

A.1 视觉语言模型

from transformers import AutoProcessor, AutoModelForImageTextToText
processor = AutoProcessor.from_pretrained(name)          # 同时包含图像预处理和分词器
msgs = [{"role": "user", "content": [{"type": "image"}, {"type": "text", "text": "这只泰迪熊有多可爱?"}]}]
prompt = processor.apply_chat_template(msgs, add_generation_prompt=True)
inputs = processor(images=image, text=prompt, return_tensors="pt")
  • 用 processor,不要只用 tokenizer:图像要按模型训练时的方式缩放、裁剪、归一化;处理方式不对不报错,只会让模型”看错”。
  • 图像在序列里的位置由聊天模板决定:模板里的图像占位符会被展开成几百个图像 token。数一数 inputs["input_ids"] 的长度,看一张图到底占多少 token(§2.4)。
  • 高分辨率图像会被切块:很多 VLM 按图像大小动态决定切几块,token 数随分辨率变化;上下文和显存要按最坏情况留。
  • 不同的 VLM 用的自动类可能不同(有的是专门的类),以模型卡为准。

A.2 ViT

  • timm 和 transformers 都有预训练的 ViT。输入分辨率要和预训练一致,改分辨率时位置嵌入要插值(和 Week 1 Day 5 §3.2 的位置插值是同一个问题)。
  • 做分类用 [CLS] 的输出或所有 patch 的平均(不同模型不同);做检索、做 VLM 的图像编码器时常用倒数第二层的 patch 输出。

A.3 扩散语言模型

  • 生成接口通常有三个自回归模型没有的参数:总步数(质量与速度的旋钮,§3.4)、生成长度(要事先定,变长生成需要额外处理)、块长度与揭开策略(一次生成多长的一块、每步按什么标准揭开哪些位置)。具体的参数名以各模型的代码为准。
  • 不要用自回归的评测方式直接套:扩散模型没有精确的序列对数概率(只有上界,§3.3),基于困惑度的比较、需要对数概率的 DPO / GRPO 都要改写。

§B 实操

  1. 跑通 w5day1_checks.py,8 组结论都看懂。第 4 组把 LL 改成 5、词表改成 2,确认”掩码扩散目标 = −log p(x)“仍然逐位成立;第 5 组改变禁止转移的比例,看步数的影响怎么变。
  2. 推导(1h,纸笔):(a) ViT-B/16 的参数量;(b) ∫01tk−1(1−t)L−kdt=(k−1)!(L−k)!L!\int_0^1t^{k-1}(1-t)^{L-k}dt=\frac{(k-1)!(L-k)!}{L!},以及它为什么等于”随机顺序里前面恰好是 McM^c“的概率;(c) 由此推出掩码扩散目标 = −log p(x)。
  3. 小 ViT 与扩散模型(1h,CPU):python code/w5d1_vit_mdm.py --selftest、--vit、--mdm(CPU 上约十几分钟;默认扩散模型 6000 步、自回归 1500 步,想看”突然学会”的过程可以再试 --steps 3000 或 --steps 12000),对照 §2.3、§3.5。
  4. 建立追踪机制(1h):按 §6.3 的流程,挑本周的 2 篇论文,用模板写两页笔记。推荐从 Lecture 9 引用的里挑:ViT(Dosovitskiy et al. 2020)的第 3 节;LLaDA(Nie et al. 2025)的第 2 节。
  5. 写一页”我的前沿地图”:§4–§6 的开放问题里,你最想跟踪哪两个?为什么?它们和你想做的 Capstone(Day 6)有什么关系?

参考实现:code/w5d1_vit_mdm.py。


§C 自测

动机与直觉层

  1. 为什么说 Transformer 的归纳偏置弱?这对 ViT 意味着什么(数据少时 / 数据多时)?
  2. 视觉语言模型的两种接法各有什么代价?什么场景下你会选交叉注意力?
  3. 自回归生成的瓶颈是什么?扩散语言模型怎么绕开它、代价是什么?
  4. 什么是模型坍缩?合成数据怎么用才安全?
  5. Lecture 9 列出的五个未解决的问题是什么?各举一个这门课里相关的技术。

推导与计算层

  1. 224×224 的图、patch 16,有多少个 token?换成 patch 14、336×336 呢?注意力的计算量变成几倍?
  2. 写出掩码扩散的训练目标。为什么要除以 tt?它和 BERT 的 MLM 有哪两个区别?
  3. 证明:在真实条件分布下,掩码扩散的目标等于 −log⁡p(x)-\log p(x)。(提示:对 tt 积分,和随机生成顺序对应起来。)
  4. 同一步揭开两个 token 时,损失的信息量是什么?用 “New York / San Francisco” 的例子算一算。
  5. 解码时注意力的算术强度怎么算?为什么说它是访存瓶颈?

工程层

  1. 你要做一个能看截图回答问题的助手,上下文预算 8k token。一张截图占多少?你会怎么控制?
  2. 扩散语言模型为什么不能直接用 KV Cache?为什么不能直接做 DPO?
  3. 你的追踪流程是什么?每周花多少时间,产出什么?

出关标准

  • 能画出 ViT 的数据流,算出 token 数和参数量,说清弱归纳偏置与数据量的关系
  • 能画出视觉语言模型的两种接法,比较它们的代价
  • 能推出掩码扩散的训练目标,证明它在真实条件分布下等于 −log⁡p(x)-\log p(x),说清它和 BERT、自回归的关系
  • 能解释并行解码为什么要用步数换质量
  • 能说出 Lecture 9 的几个开放问题(设计选择、数据、架构、硬件、五个未解决的问题)
  • 按 §6.3 建立了追踪流程,写完两页论文笔记

疑问清单

← 返回课程目录