第 20 章 · 通往大模型

通往大模型:原理与训练

你已经亲手把一个完整的语言模型从一个神经元拆到了底。现在我们站远一点,看看把第 19 章那个小模型 放大上千万到上亿倍会发生什么。这一章讲清楚三件事:大模型怎么读懂文字(分词与词嵌入)、 为什么越大越强(规模定律与涌现)、以及是怎么“炼”出来的(预训练 → 微调 → 对齐 → 蒸馏)。 讲完训练链路后,我们还会把“为什么偏偏是这几年爆发”拆成数据、算法、算力、工程四个卡点来看。 至于它靠什么硬件跑起来、你又该怎么用好它,留给第 21、22 章。

路线图 · 你在这一段的哪一站

上一站(第 19 章)你已亲手搭出迷你语言模型;本站把它放大上千万到上亿倍——分词 / 词嵌入、规模定律与涌现、预训练 → SFT → RLHF → 蒸馏(全景图「放大成大模型」那一站);下一站(第 21 章)讲它靠什么硬件才跑得起来。

读完这一章,你会明白

  • 真实大模型怎么分词(BPE / 子词),词表大小意味着什么;
  • 1750 亿参数装在哪些层、每层约多少权重(GPT-3 举例);
  • “词嵌入”把词变成语义坐标,为什么向量夹角能表示“意思相近”;
  • 规模定律(Scaling Law)和涌现能力,到底在说什么;
  • 训练数据从哪里来、怎样清洗成可用语料,为什么高质量数据会越来越稀缺,以及它为何是当前大模型竞争的核心资源;
  • 预训练后训练(SFT、RLHF、蒸馏)的分工,以及“底座模型”和“对话模型”的区别;
  • 大模型测评在预训练、后训练、上线门禁和线上监控里分别测什么;
  • 为什么大模型不是单点奇迹,而是数据、算法、算力、工程四个卡点同时解开后的结果;
  • 模型是怎么一代代迭代升级的——GPT-4 到 GPT-5 是不是“重新训一个”,大版本和小更新差在哪;
  • 推理模型、多模态(图像/语音怎么进 Transformer)、长上下文(窗口大小由什么决定、为何标称≠有效)等最近的新方向,大致是怎么回事;
  • 常见“体感”问题:模型降智对齐税灾难性遗忘各自发生在训练链路的哪一环;
  • 一串训练“黑话”:自监督、泛化、过拟合、epoch/batch/step、超参数;
  • 大模型的本质与局限——它为什么会“一本正经地胡说八道”。

1. 先看一个惊人的事实:内核没变

GPT、DeepSeek 这类模型,做的事和你第 19 章那个 mini LM 一模一样: 看着前文,预测下一个 token,然后自回归地一个个往下写。区别只在量级:

本书 mini LM几千参数 · 几句话语料 · CPU 几秒
GPT-31750 亿参数 · 数千亿 token · 上千 GPU 训数周
DeepSeek-V36710 亿参数(MoE)· 十几万亿 token

同一套机制(Embedding + Transformer + 预测下一个 token),规模相差上亿倍。

最重要的一句话

大模型不是用了什么你没学过的“黑魔法”。它就是把你已经理解的 注意力、Transformer Block、预测下一个 token 堆得更深、喂得更多、训得更久。 这一章新增的每个概念,都只是围绕这个内核的“外围工程”。

那么,“大”到底大在哪几个方面?

既然内核没变,“大模型”的就不是某一处,而是同一套机制在好几个维度上同时被放大。 把它们拆开看,后面每一节其实都在讲“其中一个维度怎么被放大、放大后带来什么新问题”:

放大的维度具体指什么本书 mini LMGPT-3 量级细讲小节
① 参数量 可学习权重的总个数(旋钮数) 几千 ~ 几万 1750 亿 §2 参数地图
② 深度与宽度 堆多少层 Block(L)、每个 token 向量多宽(d) L≈1~2 · d≈64 L=96 · d=12 288 §2 参数地图
③ 训练数据 喂进去的 token 总量 几句话 数千亿 token §5 规模化
④ 词表 能区分多少个 token(V) 几十个字符 约 5 万 BPE 子词 §3 分词与 BPE
⑤ 上下文长度 一次能看多长的前文 几十个 token 约 2k(GPT-3);现代可达上百万 §9 更长的上下文
⑥ 算力与训练时长 用多少 GPU、训多久 CPU 几秒 上千 GPU 训数周 第 21 章 工程与基础设施

六个维度不是各自独立地随便加——规模定律(§5)告诉我们参数、数据、算力要按比例一起放大才划算;放大到一定程度还会冒出小模型没有的涌现能力(§6)

一句话记住

“大”= 更多参数 · 更深更宽 · 更多数据 · 更大词表 · 更长上下文 · 更多算力,六者协同放大。 但“大”只是量,不是新原理——下面先把最直观的“参数量”拆开,看这 1750 亿个旋钮到底装在哪。

2. 参数地图:1750 亿个“旋钮”装在哪儿(GPT 举例)

上一节说 GPT-3 有 1750 亿参数。参数就是训练后要存进模型文件、推理时要加载进内存/显存的那些可学习权重 (以及少量偏置、LayerNorm 的缩放/平移系数)。它们和“层数、头数”这类结构超参不是一回事: 超参决定网络长什么样;参数是这张网里每一根“连线”上的具体数字。

以最常见的 GPT 系 decoder-only 为例——结构和你在 第 19 章搭的 mini LM、 第 18 章的 Transformer Block 是同一套,只是更深更宽。 从外到内,可训练的参数大致分这几块:

词嵌入 EmbeddingV × d
× L 层 Block每层 ≈ 12d²
LM HeadV × d(常与嵌入共享)

GPT 类模型的参数主体 = 嵌入 + 很多层 Transformer Block + 输出头。下面用几个字母记形状——先别慌,含义见紧挨着的说明框

这几个字母分别是什么
  • d模型宽度:每个 token 在模型里用多宽的一条向量表示(一串有多少个数)。从嵌入层出来是 d 维,进每一层 Block、层与层之间传递,宽度始终是 d。GPT-3 的 d=12 288;本书 mini LM 常见 d=64。
  • L层数:Transformer Block 纵向堆了几层。每层各自有一套 attention + FFN 权重,参数量大致随 L 线性涨。GPT-3 的 L=96。
  • V词表大小:分词后模型认识多少个不同的 token(每个 token 一个 id)。嵌入表有 V 行,LM Head 要给词表里每个 token 打一个分,所以这两块都是 [V×d] 的矩阵。GPT-3 的 V≈50 257。
  • fFFN 中间层有多宽:每个 Block 里的前馈网络先把 d 维向量临时扩到 f 维,再压回 d 维。GPT 系惯例 f≈4d。对应两个矩阵 [d×f][f×d]。GPT-3 的 f=49 152。
  • h注意力头数:把 d 维切成 h 份并行算注意力,每头 d/h 维。只改变怎么切分计算,不改变四个投影矩阵的总参数量(仍是 4d²)。GPT-3 的 h=96,每头 128 维。

2.1 先分清:结构数字 vs 要存的权重

读模型卡时你会同时看到两类数字,别混:

别把“注意力权重”当成参数

前向时算出来的注意力分数 / 注意力矩阵(谁该多看谁)是临时中间结果,随输入变、算完就丢,不算进 1750 亿。 参数量只统计 W_Q, W_K, W_V, W_O 这类固定矩阵

2.2 每一层 Block 里有哪些矩阵

一层 Transformer Block 里,和参数量相关的主要权重如下(偏置、LayerNorm 的 γ/β 也有,但相对很小,先略):

【自注意力】四个投影矩阵,每个都是 [d × d]
  W_Q, W_K, W_V, W_O
  → 小计 4d²

【前馈 FFN】两层全连接(中间维 f, GPT 系通常 f ≈ 4d)
  W1: [d × f]    W2: [f × d]
  → 小计约 2df ≈ 8d²(当 f=4d)

【一层合计(主项)】≈ 4d² + 8d² = 12d²

头数 h 改变的是怎么切分计算(多头并行),那四个 [d×d] 矩阵的总元素数不变。 堆 L 层,Block 部分就是 L × 12d² 量级。

2.3 嵌入层与 LM Head

【词嵌入】把 token id 变成 d 维向量
  Embedding 权重: [V × d]  →  Vd 个参数

【LM Head】把最后一层 d 维向量投影回词表,得到每个 token 的 logit
  权重: [V × d]  →  又是 Vd 个参数

【权重绑定(weight tying)】很多 GPT 实现让嵌入和 LM Head 共用同一张 [V×d] 表
  → 只算一份 Vd,不重复存

词表 V 越大,嵌入和输出头就越大——这也是 BPE 词表不能无限膨胀的原因之一(见下一节)。

2.4 用 GPT-3(175B) 对一下账

OpenAI 公布的 GPT-3 规模(以 1750 亿参数那一档为例)大致是:

单层 Block(主项):
  注意力 4d² = 4 × 12288² ≈ 6.0 × 10⁸
  FFN    2df = 2 × 12288 × 49152 ≈ 1.2 × 10⁹
  单层合计 ≈ 1.8 × 10⁹(约 18 亿)

96 层 Block:
  96 × 1.8×10⁹ ≈ 1.7 × 10¹¹(约 1700 亿)

嵌入(+ LM Head 若绑定则只算一份):
  Vd = 50257 × 12288 ≈ 6.2 × 10⁸(约 6 亿)

总计 ≈ 1.75 × 10¹¹  →  常说的 175B(1750 亿参数)
和本书 mini LM 比一比

L=2、d=64、V=几十(字符级词表),Block 部分只有 L×12d² ≈ 几万到十万量级,再加嵌入/LM Head 也就十万级参数——和 GPT-3 差大约六到七个数量级,但矩阵名字、乘法形状完全一样。 想逐步看 [n×d]×[d×d] 怎么乘,可回 第 19 章 §4.4

2.5 一眼估算总参数量

工程上常背一个近似式(FFN 取 f≈4d,嵌入与 LM Head 绑定):

参数量 ≈ L × 12d²  +  Vd
         ≈ 12Ld²      +  Vd        (主导项是 L 和 d²)

所以 Scaling Law 里“把参数量做大”,本质上就是加层(增大 L)或加宽(增大 d,且每层按 d² 涨)。 只加词表 V 也会涨,但通常不如加层/加宽猛。 若换成 MoE 架构,FFN 部分会变成“多份专家权重 + 路由器”,总参数量可再上一个台阶(但每步只激活其中少数专家)。

3. 第一步:把文字切成 token(分词与 BPE)

第 19 章我们用的是最简单的字符级分词——一个字一个 token。真实大模型嫌它太浪费: 英文一个单词能拆成好几个字符,序列变得很长,而注意力的计算量随长度平方增长(第 17 章),很不划算。 于是它们用子词(subword)分词,最常见的算法叫 BPE(Byte Pair Encoding)

BPE 的直觉:高频搭档就“焊”在一起

BPE 的规则很朴素:谁和谁经常挨在一起出现,就把它俩合并成一个新 token,反复合并。 就像 “ing”“tion” 这种后缀在英文里到处出现,于是它们被合成一个整体;中文里“沙发”“葡萄”这种 高频组合也会被当成一个词。这样常用的东西用一个 token 就能表示,既短又高效。 (类比一下:晚自习后你和她三番五次被班主任“偶遇”,久了大家就默认你俩是“一对儿”——高频共现,合并成一个整体。)

切出来的这些 token,会预先登记在一张词表(vocabulary)里,每个 token 配一个唯一 id。 训练和推理都查这张表来分词,不能临时换算法(否则会切出词表里查不到的“陌生” token)。 词表大小(vocab_size)是个权衡:

只有 5 万词表,怎么支撑几十种语言?

这里有个一算就露馅的疑问:全世界的文字加起来远不止 5 万——光常用汉字就好几千,再加上日文、韩文、阿拉伯文、印地文、各种 emoji……几十万都打不住。 GPT-3 的词表才 V≈50 257,凭什么能读写这么多语言?答案藏在两个字里:碎片

① 词表里装的不是“词”,是“子词碎片”。 BPE 的规矩是高频的合成整体、低频的拆成碎片(见上文)。 所以词表不必囊括所有词,只要能把任意文本拼出来就行:常用词 the 占 1 个 token,生僻词 antidisestablishment 会被拆成 anti+dis+establish+ment 几块;实在没见过的,就一路拆到最小粒度兜底。

② 最小粒度是“字节”,所以永远拼得出、永不失败。 GPT-2/3 用的是 字节级 BPE(byte-level BPE): 它不在“字符”上合并,而在 UTF-8 字节上合并。任何语言的任何字符,在计算机里都是 1~4 个 UTF-8 字节,而字节只有 256 种。 于是词表最底层永远躺着这 256 个“单字节 token”做兜底——任何字符都能用字节序列拼出来,再也不会遇到“词表里查不到”(即 OOV(out-of-vocabulary))的字。 所以 5 万 ≈ 256 个字节 + 约 5 万个“高频字节组合”,靠拆分与拼接覆盖一切语言。

代价:非英语更“费 token”

能支持,不等于高效。GPT-3 的训练语料以英文为主,合并出的高频 token 大多是英文片段,于是:一个英文词常常 1 个 token, 而一个汉字往往要 2~3 个 token(它的 UTF-8 是 3 字节,又没被并成整体)。这就是为什么同样的意思,中文调 API 更烧钱、也更快顶到上下文长度上限。 后来不少模型(如 GPT-4o)专门重做了 tokenizer、扩大词表,就是为了改善多语言的效率——而不是“能不能支持”,字节级早就保证了能支持。

动手看一眼

OpenAI 提供了在线分词器 platform.openai.com/tokenizer,把一句中英文粘进去, 就能看到它被切成了哪些 token、各自的 id。你会直观感到:token 数 ≠ 字数,这也是 API 按 token 计费的原因。

4. 词嵌入:给每个词一个“语义坐标”

token 的 id 只是个编号(2 不比 1 “大”)。第 19 章讲过,词嵌入(embedding) 给每个 id 配一个可学习的多维向量。这里我们把这件事的“妙处”讲透,因为它是大模型能“懂语义”的地基。

用 RGB 颜色理解“向量”

怎么用几个数字表示一个复杂事物?你其实早就会了:屏幕上任何颜色都用 RGB 三个数表示, 比如橙色 ≈ (255, 165, 0)。相近的颜色,三个数也相近。词嵌入一模一样,只是维度更高 (几百到上万维),用一串数字表示一个词的“意思”。意思相近的词,向量也相近。

那怎么用数学衡量“两个向量意思有多近”?一个直觉是算它们的距离,但训练中向量会被整体拉伸缩放, 距离不稳。更稳的是看方向(夹角):两个向量夹角越小,就认为语义越接近。而衡量夹角的工具, 正是你在第 17 章反复用的点积——点积越大,夹角越小,语义越相近

相似度 ≈ cos(夹角) = a · b|a| |b| 这叫“余弦相似度”:只看方向、不看长短。它就是把点积按长度归一化了一下

于是训练会把语义相近的词“”到相近的方向上。一个经典的神奇现象:在训练好的词向量里, 向量(“国王”) − 向量(“男人”) + 向量(“女人”) ≈ 向量(“女王”)——语义关系居然变成了可以做加减法的几何关系。

迁移学习:别人练好的,可以直接拿来用

词向量一开始是随机的,要靠海量训练才长出语义。好消息是:别人训好的向量可以直接下载来用 (比如经典的 GloVe 词向量),这叫迁移学习——站在别人的肩膀上,省掉从零训练的巨大成本。 大模型时代更是如此:绝大多数人不会从头训一个,而是拿开源的“预训练模型”接着用。

权重是成品菜,训练方法是菜谱

更准确地说,许多被称为“开源”的大模型,核心是公开训练完成后的权重,也叫开放权重(open weights)。 把训练模型想成做菜:权重是已经做好的成品菜,下载后可以直接“端上桌”,也能继续微调加工; 训练方法、超参数和数据配比是菜谱与火候;训练数据则是食材。 拿到成品菜,不等于知道每样食材从哪来、放多少、按什么顺序烹饪,也就不一定能从头原样复刻。

所以,能下载权重训练全过程可复现是两回事。有些项目还会公开训练代码、技术报告、部分数据来源或训练配方, 但开放程度各不相同。看到“开源模型”,最好继续问一句:开放的是权重、代码、训练配方,还是数据?

5. 规模化(Scaling Law):大力真的出奇迹

研究者发现一个惊人规律——Scaling Law(规模定律):当你同时放大三样东西—— 参数量、数据量、算力——模型的损失会沿着一条平滑、可预测的曲线持续下降。 也就是说,“做得更大”能可靠地换来“做得更好”。这条规律是过去几年“军备竞赛”的底气:既然变大几乎稳赚,那就拼命变大。

损失 (越低越好) 规模(参数 / 数据 / 算力,对数轴)→ 数据自身的“噪声下界”(不可约损失) 平滑、可预测 → 由小模型的点, 能外推大模型的损失

规模定律:横轴取对数后,测试损失沿一条近乎直线的曲线平滑下降,并逐渐逼近一个由数据本身决定的“下界”。正因为它可预测,才敢在真正砸钱训超大模型前,用几个小模型先把曲线画出来、外推投入产出。

注意:三样要一起涨,不能只堆参数

很关键但常被忽略:光把参数堆大、数据却不够,模型会“吃不饱”,反而学不好(后面会讲的过拟合)。 研究(如 Chinchilla)发现:参数和数据要按比例一起增长才最划算。所以你会看到现代模型动辄用 十几万亿 token 训练——参数大,喂的数据也得跟上。

顺便建立一个数量级直觉:参数量 ≈ 网络里连线(权重)的总数(§2已按层拆开)。 1750 亿参数,就是 1750 亿个 第 2 章那样的“权重旋钮”。它们全部存成小数,这也是为什么模型文件动辄几十上百 GB。

那到底该配多少数据、多少算力?

“三样一起放大”不是拍脑袋,业界有能上手估算的经验法则。DeepMind 的 Chinchilla 研究给了个著名结论: 在算力预算固定时,参数量和训练 token 数最好按大约 1 : 20 搭配——每 1 个参数,大约要配 20 个训练 token 才“吃得饱”。

算力也能估:一个粗略但好用的公式

训练要烧多少算力(浮点运算次数 FLOPs),有个广为流传的估算:FLOPs ≈ 6 × 参数量 × 训练 token 数。 它告诉你一件扎心的事:参数和数据任意一个翻倍,算力就翻倍——两个都想涨,成本是相乘着往上冲的。 这也是为什么训一个前沿大模型动辄要上千张 GPU、烧数百万美元、跑好几周:不是钱多烧得慌,是这条曲线逼的 (硬件账细算见第 21 章)。

数据从哪来,又怎么洗干净?

既然 Scaling Law 要求“参数、数据、算力一起涨”,下一个问题就很自然: 这些训练数据到底从哪里来? 真实训练集不是“把互联网打包下载下来直接喂给模型”。 更准确地说,训练数据是一条很长的数据工程流水线:先从许多来源收集原始文本和多模态材料, 再经过抽取、去重、过滤、分类、配比,最后才变成一批批 token 送进训练。

先分清:原始数据很多,可训练数据很少

互联网上当然还有海量页面。真正稀缺的不是“字符串”,而是 高质量、低重复、低污染、合法可用、能带来新增能力的训练 token。 垃圾页、广告导航、复制粘贴、SEO 灌水、机器翻译、重复镜像、泄漏的测试题、版权风险内容,看起来都是文本, 但喂进去未必让模型变强,还可能让它学坏。

① 数据来源:不是只有网页

大模型底座的预训练语料通常会混合多个域。公开报告很少披露精确比例,但大方向很清楚: 网页是基本盘,代码和数学是高价值补给,授权/私有数据补可靠性,合成数据和人类反馈数据补稀缺能力。

来源典型内容价值主要风险
公开网页百科、博客、论坛、新闻、教程、问答站、开源文档覆盖面极广,是预训练的基本盘重复、广告、SEO spam、低质转载、版权与隐私
代码数据开源仓库、README、issue、PR、测试、编译报错、题解结构化、逻辑密度高,还能用测试/编译验证许可证、泄漏密钥、脆弱代码模式、重复模板
数学 / STEM教材、论文、题库、证明、实验报告、解题步骤对推理、抽象和严谨表达很有价值答案污染、题目重复、错误解析会被放大
授权与私有数据图书、期刊、新闻档案、企业知识库、专业数据库更新、更可靠、法律边界更清楚成本高、覆盖窄、通常不公开
多语种 / 多模态非英语网页、图文页面、OCR 文档、字幕、音频转写、视频描述扩展世界知识和跨语言/跨模态能力对齐难、噪声大、清洗和标注成本高
后训练数据指令问答、偏好排序、红队样本、工具调用轨迹、Agent 任务记录直接决定模型是否好用、听话、安全、会做任务规模小但质量要求极高,标注标准容易漂移
合成数据强模型生成题目/答案/解析,改写低质文本,模拟多轮对话补自然数据里稀缺的推理、代码、工具和边界 case不验证会复制幻觉,循环自训可能越训越窄

真实训练集不是“某一种数据越多越好”,而是不同来源按任务目标和实验结果混合。

② 清洗:把原始网页变成训练 token

原始网页离“可训练文本”很远。你打开一个网页看到的是正文,爬虫拿到的却可能是 HTML、菜单、广告、 cookie 弹窗、推荐列表、评论区、脚本和一堆重复模板。清洗流水线要做的事,就是把这些东西一层层剥掉:

抓取网页 / 代码 / 文档
抽正文去 HTML / 模板 / 广告
去重过滤垃圾 / 低质 / 污染
分类配比语言 / 领域 / 质量
分词打包token shard

数据清洗流水线:从“原始材料”到“训练 token”,中间要丢掉大量噪声和重复内容。

步骤在做什么怎么判(方法)为什么必要
正文抽取从 HTML / PDF / OCR 里抽正文,去掉导航栏、广告、版权页、相关推荐用 readability / trafilatura 等工具,按标签密度、文本块长度找出正文主体,丢掉短小的模板碎块否则模型会学到一堆“首页 / 登录 / 相关阅读”这类网页噪声
语言与格式识别判断语言、编码、文档类型,修正乱码和异常字符fastText / CLD3 语言分类器给每段打语种和置信度,低置信度或乱码率高的丢弃方便按语言配比,也避免乱码 token 浪费训练预算
精确去重删除完全一样的文档、段落、代码文件对正文算哈希(MD5 / SHA),哈希撞了就是逐字相同,直接判重重复内容会让模型背模板,还会浪费 token 预算
近似去重删除轻微改写、镜像站、转载页、模板化问答MinHash / SimHash + LSH,按 n-gram 集合的 Jaccard 相似度超阈值(如 >0.8)判为近重很多页面只换了标题或广告,本质仍是同一份内容
质量过滤过滤低信息密度、SEO spam、机器翻译腔、自动生成垃圾启发式规则(长度、符号/数字占比、重复行比例、脏词表);②质量分类器或语言模型困惑度打分,低分丢弃模型会模仿训练分布;低质文本多,输出也会变油、空、乱
安全与隐私过滤处理个人信息、密钥、恶意代码、极端有害内容等正则匹配邮箱/手机号/身份证/密钥 + NER 识别人名地址,命中就删或替换成占位符降低隐私泄漏、安全风险和法律风险
污染检测移除 benchmark 题目、测试答案、评测集泄漏内容把评测集的 n-gram 与训练文本比对,重叠过高的样本剔除否则模型可能只是“背过考题”,评测分数会虚高
领域分类与重加权给文本打上 web / code / math / book / forum / language 等标签,再决定混合比例训练一个领域分类器给文档打标签,再按实验结果调各域权重训练不是平均吃;高价值领域通常要提高权重
分词与打包用 tokenizer 切成 token,拼成固定长度训练样本,打成 shardBPE / BBPE tokenizer(§3)切分,再拼成定长序列让 GPU 能高吞吐地一批批读取,减少空洞和随机 IO

这就是为什么同样来自 Common Crawl,不同团队清洗出的语料效果会差很多。模型不是只看“吃了多少 token”, 还看这些 token 的信息密度、重复率、领域配比、语言覆盖、污染程度。训练前常常会先用小模型做 ablation: 换一版过滤器、调一版 web:code:math 比例,看验证集和下游任务到底变好还是变差,再决定大模型要不要跟进。

动手洗一段脏语料:8 条「刚爬下来」的原始文本,逐个打开过滤器,看噪声、重复、隐私被一层层剥掉,最后只剩下真正能训练的正文。

③ 为什么说 GPT-4 之后“数据更难了”?

网上常说“GPT-4 把互联网吃完了”,这句话不严谨。GPT-4 技术报告没有公开完整数据组成, 也不能证明它真的消耗完了互联网。更准确的说法是: 从 GPT-4 时代开始,继续靠更多公开高质量自然文本来暴力 scaling,边际收益变差了。

不是没有 token,而是好 token 变贵

原始网页还很多,但新增的高质量唯一文本越来越难找。第一次看到一篇好教材,收益很大; 第二次看到转载版,收益就小;第十次看到换皮 SEO 文章,可能只是在浪费算力。 所以行业竞争点正在从“谁爬得多”转向“谁洗得干净、配得合理、验证得住、拿得到授权数据”。

这也解释了为什么现在的训练越来越依赖几类“高价值补给”:代码和数学因为可验证、逻辑密度高,价值很大; 多语种和多模态扩大了自然数据边界;授权/私有数据补可靠性和法律边界;合成数据负责补自然世界里很少出现的复杂题解、 工具调用轨迹和边界 case。它们不是替代网页,而是在公开网页边际收益下降后,继续给模型提供新的学习信号。

④ 合成数据:有用,但不是无限续命

合成数据(synthetic data)就是让已有强模型帮忙生产训练材料: 生成数学题和解析、把粗糙答案改写成高质量答案、模拟用户多轮追问、生成代码任务、产出工具调用轨迹。 这条路很重要,因为自然网页里“高质量多步推理 + 可执行验证 + 标准格式”的样本并不多。

但合成数据不能无脑循环。模型自己生成的内容里会有幻觉、重复套路和隐藏偏见;如果不筛就拿来训练, 等于把旧模型的错误再刻进新模型。靠谱做法通常是:

自然数据打底
→ 强模型生成 / 改写 / 补洞
→ verifier、单元测试、规则过滤、人工抽检
→ 只把通过验证的样本混回训练集
→ 用小规模实验确认真的提升,再扩大

所以“数据怎么来”这件事,已经从简单爬虫变成了完整的数据系统: 收集、清洗、分类、配比、验证、合成、再验证。Scaling Law 仍然告诉我们“更多高质量数据有用”, 但今天真正难的是把“更多”变成“更干净、更有信息量、更能提升能力”。

真正的竞争底座:有效数据 × 有效算力 × 转化效率

学到这里,很容易产生一种错觉:论文和新闻天天在讲新架构、新优化器、新注意力,算法似乎才是大模型竞争的主角。 但若把范围限定在今天主流的Transformer + 自回归预训练范式内,更接近现实的判断是: 高质量有效数据有多少、能投入多少有效算力,构成了能力竞争的资源底座;许多近期算法主要在提高这两种资源的转化效率。

最终能力 ≈ 有效数据 × 有效算力 × 转化效率 这不是可代数计算的 Scaling Law 公式,而是一张思考地图:任何一项接近 0,另外两项再大也救不回来
要素它真正决定什么别用什么表面数字代替
有效数据 模型能看到哪些知识、技能、行为范式和纠错信号 不是硬盘里有多少 TB,也不是去重前爬了多少 token
有效算力 这些训练信号能被多大模型、以多少 step 真正吸收 不是买了多少张 GPU,而是稳定训练实际完成了多少有用计算
转化效率 同样的数据和硬件,最终能沉淀出多少能力 不是算法名词越新越好,而是 loss、能力、吞吐和成本是否真的改善

这里的“有效数据”尤其不能只按数量算。一个 token 是否有效,取决于它是否正确、独特、信息密度高、覆盖当前能力缺口、配比合适,并且能被可靠验证。 一百万条换皮转载不等于一百万份新知识;一条带单元测试的代码任务、一份经过专家核对的推理轨迹, 可能比大量无法验证的流畅文本提供更强的训练信号。数据还决定模型不会什么:训练分布没有覆盖的语言、领域、边界 case 和行为规范, 很难靠多跑几轮优化器自动补出来。

数据给出知识与练习,算力负责消化,算法决定浪费多少

可以把预训练想成备考:数据是教材、例题和答案,决定你究竟有机会学到什么; 算力是学习时间和脑力,决定能练多少遍、多大范围;算法与工程是学习方法,决定同样的教材和时间被浪费多少。 学习方法很重要,但没有教材学不到内容,没有时间也消化不完。

为什么说许多近期算法是在弥补“算不起、存不下、数据不够好”?

在主范式没有改变的前提下,近年来很多创新都可以还原成一个现实问题:理想做法太贵,怎样少算、少存、少通信,又尽量保住能力?

近期做法它在弥补什么怎样省资源,又付出什么
MoE每个 token 都算全部参数太贵只激活少量 FFN 专家,用较小计算承载更大总容量;代价是全部专家仍占显存,路由、通信和均衡更复杂
KDA超长历史做全量 attention 算不起、存不下把历史压进固定状态,再周期性用全局 MLA 补交互(第 21 章);代价是固定状态可能覆盖精确细节
稀疏 Attention所有 token 两两连接是 O(n²)只算窗口、全局或动态 top-k 连接;代价是没被选中的历史可能漏掉
FlashAttention显存读写和中间矩阵太贵数学不变,分块计算并减少 HBM 往返;实现更复杂,而且没有消除稠密计算量
量化 / 蒸馏原模型部署成本太高用更低精度或小模型承接大模型能力;压得太狠会损失细节与通用性
合成数据高质量自然数据和稀缺任务轨迹不够生成缺口样本,再用测试、规则、verifier 或人工筛选;验证不足会复制幻觉、偏见和套路

这些算法绝不是“不重要”:转化效率提高 2 倍,相当于同样资源做出了更多有效计算,甚至让原本不可训练的规模变得可行。 但它们通常没有凭空创造新的知识来源或无限算力,而是在资源约束下重新分配计算、压缩表示、减少浪费、制造并筛选训练信号。 因而看一项新技术时,比“名字新不新”更有用的问题是: 它省了哪种资源?省下来的资源去了哪里?牺牲了什么?最终让多少高质量数据变成了多少可用能力?

这里讨论的是当前主流范式内部的竞争:团队间差距越来越取决于谁拥有更多高质量、低污染、可验证的数据, 谁能投入并稳定利用更多算力,以及谁能用算法和工程把这两者浪费得更少。Transformer、反向传播、自监督目标这类基础算法 曾经改变过可扩展的能力上限,未来的新范式也可能再次改写规则。

6. 涌现能力:量变到质变

涌现能力(emergent abilities)指的是:某些能力在小模型上几乎为零, 但当规模越过某个门槛后会突然出现。比如:

这些能力没有被任何人“显式编程”进去,而是在“预测下一个 token”这个朴素目标 + 巨大规模下,自己长出来的。

为什么会“量变到质变”?

第 5 节说损失是平滑下降的,这里怎么又变成突然出现?这看似矛盾,其实不冲突。涌现的成因目前学界还没有定论,但有几条被广泛接受的解释,拼起来能说清大半:

① 复合任务是多个子技能的“连乘”,像木桶效应。 很多高级能力(如多步推理)要好几个子能力同时到位,错一环整件事就失败。假设某任务需要 5 个子技能答对,每个子技能的正确率随规模从 60% 平滑升到 90%:

小模型:0.658%(几乎为零)  →  大模型:0.9559%(突然能用) 每个子技能都是平滑提升(量变),但它们的乘积会呈现出拐点式跃升(质变)

② 要越过一个“容量门槛”才够用。 有些能力需要模型内部长出足够精细的表征/电路;参数和数据不够时,模型根本腾不出“脑容量”去编码这些间接、罕见的模式,越过临界规模后才学得动。就像水一直加热(平滑),到 100°C 才沸腾(相变)

③ 很可能有一部分是“度量方式”造成的错觉。 这是近年一个重要反驳:很多涌现是用“全对才算分”的严苛指标衡量的(比如多位数加法必须完全正确)——这种指标天生非线性,会把平滑进步放大成断崖式跳变。换成连续、宽容的指标(按 token 部分给分、看概率),同一批模型的曲线又变回平滑上升,拐点就消失了。

能力 / 正确率 规模(对数轴)→ 严苛指标(全对才算分) “涌现门槛” 宽容指标(部分给分) → 底层能力其实一直平滑变强

同一批模型,换一把“尺子”结果就不同:黄线(全对才算分)在门槛处陡然跃升,看着像“质变”;蓝线(部分给分)则平滑上升,和第 5 节的规模定律一致。所以“突然涌现”里,既有真实的门槛/连乘效应,也有度量放大的成分。

一句话总结

规模定律管的是“平均损失平滑下降”;涌现是这种平滑进步在复合任务 + 严苛指标下表现出的“看起来突然”的跃升。底层是量变(每个子能力平滑提升),表面上呈现质变(连乘 / 门槛 + 度量放大)。真正的成因至今仍是开放问题。

7. 大模型是怎么炼成的:预训练 + 后训练

① 预训练海量文本上预测下一个词
② 微调 SFT用指令数据教它“听话”
③ RLHF按人类偏好对齐
④ 蒸馏(可选)把大模型能力压进小模型

从“会接话的语料模型”到“有用、能落地的助手”,通常要走这几步。

这几步可以归成两大阶段,这也是你会反复听到的两个词:

“底座模型”和“对话模型”的区别

开源社区里名字带 -base 的通常是只做过预训练的底座模型:博学,但只会顺着你的话往下接; 带 -chat / -instruct 的则是又做过后训练的版本,才会好好回答问题、听从指令。 今天各家大模型拉开体验差距的,很大一部分就在后训练这一段的数据质量与工艺。

测评:贯穿训练和上线的质检系统

大模型测评不是“随手问几个问题看看聪不聪明”,而是一套质量控制工作: 用固定题集、真实任务、自动脚本、人工规则和线上反馈,判断模型到底会什么、不会什么、有没有退步、能不能上线。 它本身通常不直接训练模型,但会反过来告诉训练团队该补什么数据、调哪段后训练、哪些版本不能发布

测评维度具体看什么常见问题
基础能力语言理解、数学、代码、知识问答、推理、长文本数学变强了,代码是否退步?
指令遵循格式约束、多轮对话、角色边界、只输出 JSON 等用户说“不要解释”,它还在啰嗦吗?
安全与对齐危险内容、隐私泄漏、越狱、歧视、过度拒绝安全了,但是否把正常问题也拒掉了?
可靠性幻觉、引用来源、证据不足时能否承认不知道它是在回答,还是在编一个像真的答案?
产品体验清晰度、啰嗦程度、延迟、成本、工具调用成功率benchmark 高,但用户是不是觉得难用?

放到训练和发布链路里看,测评几乎每一站都在场:

环节测评重点测评结论用来干什么
预训练中loss / perplexity、基础 benchmark、不同 checkpoint 的能力走势判断训练是否有效、哪个 checkpoint 值得继续训或拿去后训练
后训练中SFT / RLHF / DPO 前后,指令遵循、安全、偏好、幻觉是否改善选择后训练配方,发现对齐税、灾难性遗忘和安全退步
上线前新旧模型对比、红线安全、核心业务 case、延迟与成本做发布门禁:能不能上线、灰度多少、哪些能力要回滚
上线后A/B 实验、用户反馈、人工抽检、投诉、安全事件、失败日志发现离线榜单看不到的真实问题,进入下一轮数据和后训练
应用层模型 + prompt + RAG + 工具 + 产品流程的端到端效果判断问题到底出在模型、检索、工具、提示词还是业务链路
模型测评和系统测评要分开看

模型测评尽量只看模型本身:同一题、同一 prompt、同一解码参数,比较模型 A/B 的能力。 系统测评则看完整产品链路:检索有没有召回正确文档、rerank 有没有排对、工具有没有执行成功、最终答案有没有解决用户问题。 RAG 问答答错时,不一定是模型笨;也可能是切片、召回、排序或 prompt 出了问题。

所以测评岗位的产出,通常不是一个孤零零的分数,而是一整套证据: 测评集、自动评测脚本、人工标注规范、模型对比报告、安全红队报告、badcase 分析、上线准入结论和回归看板。 最有价值的测评报告会说清楚:哪里变好了、哪里变差了、为什么变差、下一轮训练该补什么

① 预训练(Pre-training):自监督地读遍互联网

海量文本(互联网级别)上,做的就是第 19 章那件事:预测下一个词。它最妙的一点是 不需要人工标注——因为“下一个词是什么”文本里现成就有,把后文盖住让模型猜即可。 这种“答案自带、不用人工打标签”的方式叫自监督学习。这一步最烧钱、最耗时, 却是模型获得“通用语言能力 + 世界知识”的来源。

监督 vs 自监督:区别只在“目标从哪来”

监督学习:目标(答案)由人工标注,比如给一张图片标上“猫”。
自监督学习:目标从数据里自动抠出来,比如把“青海长云暗雪山,孤城遥望玉门关”里的 “玉门关”盖住,让模型猜——被盖的词就是现成的答案。两者都要有目标值,只是自监督省掉了人工。 海量数据下人工标注不可能,所以预训练必须靠自监督。

② 指令微调(SFT):把“博学”调教成“听话”

预训练完的模型“博学但不一定听话”——你问它问题,它可能只顾着把你的话接着往下写,而不是回答。 指令微调(SFT,Supervised Fine-Tuning)用一批“指令 + 理想回答”的高质量数据继续训练, 把它从“只会接话”调成“会回答你的问题、完成你的任务”。这一步数据量小得多,但作用关键。 注意:它用的还是第 19 章那套“预测下一个 token + 交叉熵 + 反向传播”,只是把训练数据从“互联网文本”换成了“标准问答范文”,并没有换算法。

一条 SFT 数据长什么样

就是一问一答的“范文”,比如:
指令:“用一句话解释什么是黑洞。” → 理想回答:“黑洞是引力强到连光都逃不出来的天体。”
成千上万条这样覆盖问答、翻译、写代码、总结的范文,教会模型看到指令就给出对应的回答, 而不是把指令当普通文本接着往下续。这里质量远比数量重要——几万条精挑细选的,常胜过几百万条粗制滥造的。

为什么少量 SFT 数据,能把模型“掰”得这么明显?

这听起来反直觉:预训练吃了几万亿 token,SFT 可能只有几十万到几百万条样本,凭什么能让模型行为大变? 关键在于,SFT 不是从零教模型知识,而是在已经很会续写、很懂语言的底座上,重新校准它的“使用接口”。

预训练模型早就见过解释、教程、代码、问答、论文、论坛讨论,所以它并不是不会回答;问题是它的默认目标只是“把文本接得像”。 你输入“解释一下梯度下降”,底座可能续写成百科、课堂笔记、论坛回复,也可能只是顺着你的话往下编。 SFT 把训练分布集中改成:

用户给指令 → 助手给出有用、完整、按要求的回答 它改的重点是“面对用户时该怎么输出”,不是重新灌一遍互联网知识
阶段主要学什么为什么影响不同
预训练语言规律、世界知识、代码模式、推理痕迹范围极宽,决定“会什么”
SFT看到指令后,应该怎样组织答案、遵守格式、完成任务正好打在上线时最常见的用户交互分布上,决定“怎么把会的东西拿出来”
RLHF / DPO同一个问题下,哪种回答更有帮助、更安全、更符合人类偏好继续把输出风格从“能回答”推向“更像好回答”

所以数据量小不等于影响小:后训练样本少,但它们正好覆盖模型最终被调用的入口。

还要记住一个训练顺序上的事实:后训练发生在预训练之后。同一批参数已经被预训练塑好大体能力, SFT 再用更小的学习率、更新更短的时间,把“指令区域”的输出往范文方向拉。 它不必重写整个模型,只要把常见 prompt 附近的行为调顺,用户体感就会非常明显。

一个更准确的说法

预训练像长期读书:模型在海量文本、代码和图像里形成语感、知识底座、世界模型和基本推理痕迹; 后训练像进入真实工作:用范文、偏好、工具结果和任务反馈,教它在具体场景里怎样把事做对、怎样回答才算合格。 更短地说,预训练决定模型会什么;SFT 决定模型怎么听指令地调用这些能力; 偏好优化决定模型两个可行答案里更该选哪一个

这也解释了小模型和大模型的差别。粗略类比,小模型像受过专门训练的中专/技工,大模型更像知识面更宽、抽象能力更强的博士。 前者在熟悉工位上可以练得非常熟,甚至超过更大的通用模型;但任务一旦跨领域、跨模态、需要融会贯通, 底座容量和预训练见识的差距就会重新显现。后训练能把“博学但散漫”的底座调成“会接任务”的助手, 但如果底座完全没学过中文、数学或代码,少量 SFT 很难凭空造出这些能力。

训练时,哪部分 token 真正在计分?

很多人第一次听说 SFT 会困惑:既然还是“预测下一个 token”,那是不是整段 system / user / assistant 文本都拿去算 loss?真实实现里通常不是。 更常见的做法是:把整段对话都喂给模型看,但只对 assistant / completion 部分算 loss; 前面的 prompt(system/user) 主要是拿来当上下文条件,自己通常不直接计分。

位置内容是否计入 loss为什么
system / user提示词 / 指令 / 题干通常不计它们负责告诉模型“题目是什么”,不是本轮想让模型去模仿的输出
assistant理想回答通常计这是 SFT 真正想教模型学会的那段输出
结束符 <eos>回答结束位置常常计让模型顺便学会“这里该停了”

一句最短的话: prompt 负责出题,assistant 负责得分

比如一条样本被格式化成:

[<user> 解释牛顿第一定律 <assistant> 牛顿第一定律说 ... <eos>]

训练时模型会把这整串 token 都过一遍前向,但 loss mask 大致像这样:

token: [<user> 解 释 牛 顿 ... <assistant> 牛 顿 第 一 定 律 说 ... <eos>]
mask : [   0      0  0  0  0      ...      0         1  1  1 1  1  1  1 ...  1 ]

这里的 0/1 不是“看不看”,而是“计不计分”:0 表示这个位置不算 loss,1 表示这个位置要算 loss。 所以 mask 掉 prompt != 模型没看到 prompt。它照样看了整道题,只是老师打分时主要看它的“答题区”。

SFT loss mask · 示意伪代码(帮助理解)
tokens = [prompt..., assistant..., <eos>];                    1
target_mask = [0, 0, 0, ..., 1, 1, 1, 1];                    2

logits = model(tokens[:-1]);                                 3
loss = Σ target_mask[t+1] * CrossEntropy(logits[t], tokens[t+1]) 4
  1. 把完整 prompt + answer 拼成一条训练序列。
  2. 给每个被预测的目标位置配一个“计不计分”的开关。assistant 回答区域通常标 1,prompt 区通常标 0。
  3. 前向时模型整段都看,因为回答必须依赖题目。
  4. logits[t] 预测的是 tokens[t+1],所以算 loss 时要看目标位置 t+1 是否标了 1。SFT 真正在优化的是 “给定这个 prompt,回答该怎么写”

这也是它和预训练在“训练感觉”上的一个关键区别:预训练更像对整段自然文本普遍计分; SFT 则更像拿 prompt 当题干、拿 assistant 当标准答案。底层依然常是交叉熵,但监督重点已经从 “文本通常怎么继续写”变成了“面对指令时,理想回答应该怎么写”。

灾难性遗忘(catastrophic forgetting)

在预训练底座上继续 SFT/微调时,模型可能新任务学会了、旧本领丢了——比如微调成“只会写邮件”,通用推理变差。 缓解办法包括:混一定比例的原预训练数据、用小学习率、只训少量参数(LoRA/PEFT——在权重旁加低秩小矩阵,只更新这部分), 以及控制微调轮次。这不是 bug,而是在旧分布与新任务之间抢参数的必然张力。

LoRA / PEFT: “只训一小块参数”是怎么做到的?

PEFT(Parameter-Efficient Fine-Tuning)是“参数高效微调”的总称,LoRA 是其中最常见的一种。 它的关键不是换掉 SFT 的训练算法,而是不再直接改原来那块巨大的权重矩阵。假设某层原本前向是:

y = Wx W 是原来的大矩阵(比如 attention 里的 WQ/WK/WV 或 FFN 的线性层权重)

LoRA 会把它改成:

y = Wx + (α/r)BAx W 冻结不动;只训练新增的小矩阵 AB。其中 A ∈ Rr×din, B ∈ Rdout×r, r 很小

这里的核心思想叫低秩增量:不去学一整个巨大的 ΔW,而是假设“这次微调真正需要的改动,可以用一个很低秩的小补丁近似出来”。 于是训练时:

一个巧思:一开始 B=0,让起点恰好等于底座

初始化时 A 用小随机数、B 全设为 0。于是训练刚开始的一瞬 BA = 0,前向退回 y = Wx—— 模型和原底座一字不差,不会因为凭空加了个随机补丁把好好的底座搞乱。训练启动后 B 才从 0 慢慢“长”出来,一点点学到这次微调需要的增量。

到底省多少?拿具体数字算一遍。 设某层 din = dout = 4096、取 rank r = 8:

全量:4096 × 4096 ≈ 1678 万 个可训练参数
LoRA:A(8×4096) + B(4096×8) = 6.5 万 个  →  约 1/256 可训练参数缩到约 1/256;Adam 还要给每个可训练参数额外存 2 份动量状态,这块显存也跟着省同样的倍数——省显存往往比省参数更实惠
做法全量微调LoRA
更新什么直接更新整块大矩阵 W冻结 W,只更新小矩阵 A / B
训练参数量很大很小(由 rank r 决定)
优化器状态要给全部参数存 Adam 状态只给 LoRA 参数存状态
底座权重显存要放也还得放,LoRA 省的是“可训练部分”,不是把底座凭空删掉

所以 LoRA 更准确的说法是: 省训练参数、优化器状态和微调成本,但底座模型本体仍然要在。

这也是为什么很多开源项目会写“7B 模型 + LoRA 微调”——本体还是 70 亿参数,只是训练时不再硬拧这 70 亿个旋钮, 而是在若干层旁边外挂一些很小的“微调旋钮”。最常见的插入位置,就是 attention 里的 WQ/WK/WV/WO 和 FFN 的线性层。

那这些参数到底存在哪?

这是 LoRA 最容易被绕晕、也最实用的一点:底座和 LoRA 是两份完全分开的权重

存什么大小微调时
底座权重 W原始 7B / 70B 模型(那几十亿个旋钮)几十 ~ 上百 GB冻结,只读不改
LoRA 权重 A/B每个挂了 LoRA 的层各一对小矩阵通常几 MB ~ 几百 MB只训这个

微调跑完,只产出一个几 MB 的 LoRA 文件(常叫 adapter);底座那几十 GB 一个字节都没动过。

用的时候:加载底座 + 加载 adapter,前向按 y = Wx + (α/r)BAx 一起算(或先把 (α/r)BA 并回 W 再跑)。 正因为 adapter 这么小,你可以给同一个底座配好多套 LoRA——客服一套、写代码一套、翻译一套,每套才几 MB,要用哪个就挂哪个、随时热插拔,而不必为每个任务各存一份几十 GB 的完整模型。这也是开源社区能分享海量“XX 风格 LoRA”的原因。

③ RLHF:按人类的喜好“对齐”

SFT 已经能让模型“好好回答”,但“什么才是更好的回答”很难写成标准答案——语气、分寸、有没有真的帮上忙, 这些没法像“1+1=2”那样标注。这里有个关键的转念:让人“写出满分答案”很难,但让人“判断两个答案哪个更好”很容易。 RLHF(基于人类反馈的强化学习)就建立在这句话上,分三步走:

① 收集偏好同一问题多个答案,人来排序
② 训练奖励模型学会给答案打“人有多喜欢”的分
③ 强化学习把大模型朝高分方向推(+KL 约束)

把“人的口味”先蒸馏成一个会自动打分的裁判,再让模型去追这个裁判的高分。

  1. 收集偏好:同一个问题让模型给出多个回答,请人排序哪个更好。这种“比较题”标起来又快又稳。
  2. 训练奖励模型:用这些排序,训练一个专门的打分模型(reward model),让它学会给任意回答打出一个“人类有多喜欢”的分数——相当于把“人的口味”蒸馏成一个可自动打分的裁判。
  3. 用强化学习优化:让大模型不停生成回答、让裁判打分,再用强化学习(如 PPO)把它朝高分方向推。同时挂一个“别跑太偏”的约束(KL 惩罚),防止它为了讨好打分器而说出一堆通顺却怪异的废话。(PPO、策略梯度等 RL 基础见第 12 章。)
对齐税(alignment tax)

RLHF/DPO 把模型调得更安全、听话、像助手,但往往要付一点能力代价——复杂推理、创造性、某些专业深度可能不如对齐前的底座。 俗称“对齐税”:不是模型“坏了”,而是优化目标从“接话像互联网”变成了“人类更喜欢”。KL 惩罚、保守的奖励模型、过度拒绝有害内容, 都会让这种体感更明显。工程上常在能力评测安全评测之间找平衡。

今天聊天助手那种得体的语气、拒绝有害请求的分寸,很多就来自这一步。近来也流行更简化的 DPO:跳过“单独训一个奖励模型”,直接拿人类偏好数据把模型“掰”过去,工程上更省事,思路完全一致。

④ 知识蒸馏:让小模型“拜大模型为师”

大模型效果好,但太重,难以塞进你的手机或个人电脑。知识蒸馏(distillation)让一个小的 学生模型去模仿大的教师模型:不只学“正确答案”,还学教师输出的整个概率分布 (即“软目标”)——因为“它觉得‘吃饭’概率 0.6、‘干饭’0.2、‘用膳’0.05”这种细微的偏好本身就是宝贵知识。

这里用上了第 19 章的温度

蒸馏时常把 softmax 的温度调高(第 19 章),让那些低概率但有意义的选项“显形”, 学生才学得到这些“隐藏知识”。

当心:大模型时代说“蒸馏”,多半不是上面这件事

上面讲的是经典蒸馏(Hinton 那一套):学生对着教师的软概率分布学,所以才需要调温度。 但今天在 LLM 圈里,大家口头说的“蒸馏”通常指另一种更省事的做法:让教师模型生成一大批高质量回答,再拿这些回答当普通训练数据去 SFT 学生——学的是硬答案(一个个 token),完全不碰概率分布,也就不涉及温度。

举个真实例子:DeepSeek 开源的 DeepSeek-R1-Distill-Qwen-14B(140 亿参数)虽然名字里带 Distill, 走的其实就是后一条路——用 R1 生成的约 80 万条推理轨迹去 SFT 一个 Qwen 底座。 所以听到“蒸馏”时最好追问一句:学的是软分布,还是老师写出来的答案?两者都能让小模型继承不少本事,但机制不是一回事。

蒸馏、小模型与“降智”的一种来源

蒸馏和直接做小模型,换的是体积与速度,付的是能力上限。学生很难 100% 复制教师的“暗知识”, 复杂推理、长尾知识、细腻概率偏好最容易丢——用起来就像“同款但没那么聪明”。这和量化MoE 压 k导致的降智是不同环节, 但体感类似:不是不会,而是浅了、窄了

一个小模型在编程、数学或某个 Agent 评测里接近大模型,也不等于“堆参数没用了”。它往往是拿几样东西来换:

  • 更长的推理时间:小模型一步看不出的题,靠更长思维链、多候选搜索、测试和修复慢慢逼近;单步便宜,整次任务未必便宜。
  • 更窄的能力范围:专门练编程、数学或工具轨迹后,这个工位上很能打;但常识、写作、科学、多语言或跨领域迁移可能弱很多。
  • 更少的模态和体验:砍掉视觉、音频、视频能省参数和训练成本,但前端设计、图表理解、真实世界任务会吃亏。

所以看“小模型打大模型”的结果,不能只看分数,还要看任务范围、推理预算、延迟、多模态能力和通用性。 更准确的结论是:底座规模决定上限,后训练决定能不能把上限用出来;小模型可以靠专精和更多推理预算追上某些任务, 但它通常牺牲了宽度、速度或跨场景鲁棒性。

新趋势:一个学生,多个老师

传统蒸馏常像“一位大老师带一个小学生”。MiMo-V2-Flash 这类模型展示了更工程化的做法: 让数学、代码、Agent、工具使用等领域老师分别提供反馈,学生在自己当前生成的轨迹上接受批改, 不只学最终答案,还学每一步、每个 token 附近的偏好信号。这类多教师在线蒸馏的目标不是单纯压小, 而是把多个专家模型或 RL 专项模型的能力合并进一个更快的统一模型

⑤ 为什么这几年才爆发:四个卡点同时解开

到这里,我们已经把大模型的核心训练流程拆开了。现在补一个更宏观、但很关键的问题: 神经网络、反向传播、GPU、互联网都不是今天才出现,为什么大模型偏偏在最近几年爆发? 答案不是某个单点突然神了,而是四个长期卡住的条件第一次同时接上:数据够喂、算法能学、算力能训、工程能用。

卡点前文伏笔怎么被解决少了它会怎样
数据
能喂
第 19 章的语言模型目标:预测下一个 token Web 文本和代码本身就带着“下一个 token”答案,不需要人工逐条标注; 自监督预训练把海量文本变成训练题库。后训练再用指令数据和偏好反馈,把底座模型推向可用助手。 模型容量再大也吃不饱;只会在小语料上背模板,学不到广泛知识、代码模式和真实表达方式。
算法
能学
反向传播解决调参; RNN 的问题引出注意力; Transformer成为可堆叠骨架 反向传播 + 交叉熵让“预测下一个 token”能端到端优化; 自注意力解决长距离关系,Transformer 让训练天然并行; 规模定律又把“继续放大是否值得”变成可估算的工程判断。 有数据也学不动;模型要么串行太慢,要么长距离信息丢失,要么不知道该怎样按比例放大。
算力
能训
矩阵是神经网络的计算形状; GPU擅长海量并行乘加 GPU/CUDA 把矩阵洪流跑起来,HBM 提供高带宽显存,高速互联让多卡像一台更大的机器协同。 训练成本仍然巨大,但从“根本算不完”变成“可以预算、可以排期、可以复现”。 曲线再漂亮也只是纸面路线图;一次训练要拖到不可接受的时间,模型迭代速度跟不上。
工程
能用
下一章第 21 章会展开:显存、并行、通信、推理服务 数据清洗与去重保证“喂进去的东西别太脏”;数据/张量/流水线并行解决“单卡装不下”; checkpoint、容错和监控让长训练不中途白费;推理侧靠 KV cache、连续批处理、量化和负载均衡把模型送到真实用户面前。 模型可能训得出,但服务不了:延迟太高、成本太贵、显存爆掉、线上不稳定,最终只能停在实验室指标。

所以“大模型爆发”更像四道闸门同时打开:Web/Code/Feedback 提供可扩展的数据, Transformer + 规模定律给出可扩展的算法路线,GPU 集群提供可扩展的训练能力, 工程系统把训练和服务做成可持续迭代的流水线。只有其中一块成熟,最多产生漂亮 demo; 四块同时成熟,才会出现 ChatGPT 之后这种社会级应用扩散。

一句话记住

数据解决“学什么”,算法解决“怎么学”,算力解决“训不训得动”, 工程解决“能不能稳定给人用”。大模型时代不是把其中一个做到极致,而是四个环节都跨过了最低门槛。

8. 模型是怎么一代代迭代升级的?

学会了“炼一个模型”,一个很自然的问题是:GPT-4 到 GPT-5,难道是重新训一个吗? 答案是——大版本升级,底座确实基本是从头重新训一个;但你平时感受到的大多数“变强”,并不是重训,而是更便宜、更频繁的后训练迭代。 迭代其实发生在好几个时间尺度上:

迭代类型怎么做要重训底座成本 / 频率例子
大版本从随机初始化重新预训练一个新底座极高 / 一两年一次GPT-4 → GPT-5
中版本底座不变,重做/加强后训练(SFT+RLHF)中 / 几个月Llama-3 → Llama-3-Instruct(同一底座多做一遍后训练)
小版本快照换更新的对齐数据、调安全策略、修 bug低 / 常态同名模型的日期后缀更新,如 DeepSeek-V3 → V3-0324
能力扩展加多模态 / 工具调用 / 更长上下文 / 推理模式多为增量训练或微调加视觉、加 reasoning、把上下文从 32K 拉到 128K
蒸馏出轻量版用大模型当老师蒸馏出小模型否(训小的)大模型 → mini / lite 版

提醒一句:商业模型改个名字(比如冒出个 -turbo)时,往往好几行一起发生了—— 知识截止日往前挪要动预训练语料,上下文从 32K 拉到 128K 要续训,再叠上新的后训练和更便宜的推理配置。 闭源模型通常不公开细节,所以看到一个新名字时别急着往某一行里塞;这张表是帮你拆解可能变了什么,不是给商业版本号做分类。

那 Flash / Pro 这种区别是什么?

很多产品还会在同一代模型里分出不同档位,名字可能叫 ProFlashMiniLiteTurbo。这通常不是“GPT-4 → GPT-5”那种代际升级,而是同一产品线里按能力、速度、价格、上下文长度做的工程取舍。

档位通常怎么来的优点代价适合场景
Pro / Max 更大的底座、更完整的后训练,或推理时给更多计算预算 复杂推理、长文理解、代码、多轮稳健性更强 更慢、更贵、吞吐低 难题、重要决策、长文档深分析
Flash / Turbo 更小模型、蒸馏版、量化版、MoE 少激活专家,或推理服务做了更激进的加速 响应快、便宜、并发能力强 复杂题可能更容易浅答、漏细节或出错 客服、摘要、批量分类、实时交互
Mini / Lite 用大模型当老师蒸馏出来的小学生模型 成本低、部署灵活,甚至能跑在端侧 能力上限更低,长尾知识和复杂推理更容易丢 固定流程、低成本大规模调用、隐私端侧场景

这些名字不是严格学术分类,不同厂商含义会变;但底层取舍差不多:把同一代能力切成“更强但更贵”和“更快但更省”的服务档位。

所以选模型时不要只看名字像不像“新一代”。更实用的判断是:这件事是要一次答得最稳,还是要大量、便宜、低延迟地完成? 前者偏向 Pro,后者偏向 Flash / Mini。它们的关系更像“同一车系的性能版和省油版”,不是“上一代车和下一代车”。

为什么大版本非得“从头再来”?

既然后训练那么省,为什么大版本不能在旧模型上“接着训”?因为一次真正的代际提升,往往三样东西同时变了,旧权重根本接不上:

时间 → v4 底座 v4 从头预训练 · 极贵 v5 底座 v5 又一次从头预训练 后训练迭代:SFT/RLHF、对齐数据更新、修 bug 底座不变 · 便宜 · 频繁(你平时体感到的“变聪明”多在这里)

大模型迭代的两个时间尺度:大圆点是从头预训练的新底座(贵、稀少),小圆点是同一底座上不断做的后训练更新(便宜、频繁)。

一个类比:换新人 vs 反复培训

预训练底座想成“一个人读完了海量的书、世界观定型”——贵、慢、很少发生;把后训练想成“给他做岗前培训、教他说话得体、纠正坏习惯”——便宜、快、可以反复做。 GPT-4 → GPT-5 是换了个读书更多、脑子更大的新人;而 GPT-4 的多次小更新,是同一个人反复参加培训。 你某天觉得“这个模型最近变聪明/变听话了”,绝大多数时候是后训练和对齐数据更新了,底座根本没动。

9. 最近的一些新方向(建立个印象就好)

大模型领域跑得飞快,新词层出不穷。但你会发现一个规律:再新的花样,也都长在前面这套地基上。 下面几个最常被提到的方向,不求精通,先混个脸熟。

推理模型:先“想很久”,再作答

以 OpenAI o1、DeepSeek-R1 为代表的推理模型(reasoning model),核心变化是: 在给出最终答案前,先自己生成一大段思维链(第 22 章会细讲),一步步推演,想清楚了再回答。 相当于把“一步一步想”从你来提示,变成了模型天生就会、而且能想很长

那模型推理时怎么知道该想多久?它不是凭空有个“自知之明”开关,而是三件事叠在一起:

所以“思考深度”更准确地说是外部预算 + 模型学到的停机策略 + runtime 硬限制共同决定的。 调高它不会改变模型权重,只是允许同一个模型在推理阶段花更多 token、更多候选或更多验证轮次。简单题可能只是变慢变贵;难题才更可能因此做对。

真正难的是:推理长度本身不好直接监督。训练时通常不是教模型“这题必须想 137 个 token”, 而是让它学会在预算内判断继续想是否值得

effort 条件控制可以理解成“给同一个模型装一个推理预算旋钮”。训练样本不只长这样:

题目 → 推理过程 → 答案

而是会把预算档位也放进条件里,像这样:

[effort=low]   题目 → 短推理 / 少检查 → 答案
[effort=high]  题目 → 更完整推理 / 多检查 / 可尝试备选解法 → 答案

这里的 [effort=high] 不一定真是用户能看到的文字,也可能是服务端插入的特殊 token、隐藏控制字段或路由配置。 关键是模型在训练时反复见到“同类问题 + 不同 effort 条件 → 不同长度和细致程度的推理轨迹”。 到推理时,产品 UI 里的“快速 / 深度思考”或 API 里的 reasoning_effort,就会被服务端翻译成类似的控制信号。

这不是精确控制“必须想 512 个 token”。它控制的是分布倾向: low 档更倾向于少展开、快给答案;high 档更倾向于拆步骤、做检查、必要时换一种解法。 最终长度仍由题目难度、模型停机策略和 runtime 上限共同决定。

R = Rcorrect - α · Treason - β · Ttool 一种直觉化奖励:答对加分,推理 token 和工具轮数扣成本;真实系统会更复杂

所以 reasoning 模型学到的不是精确计时器,而是一种策略: 这道题继续推演带来的正确率收益,值不值得多花这些 token。 这也是为什么高 effort 往往更强但更慢、更贵,而且不是所有问题都会明显受益。

多模态:不只吃文字

多模态(multimodal)模型(GPT-4V、Gemini、Qwen-VL 等)能同时处理图、音、视频和文字。 内核不变:各模态都切成 token → 编成向量 → 拼成一条序列 → 送进同一个 Transformer → 往往仍自回归生成文字。

① 各模态怎么切成 token

模态切法直觉
文字BPE / 子词本章 §3
图像16×16 等 patch 小块一张图 ≈ 一句由上百个“图块词”组成的句子(第 13 章局部块思想)
音频频谱片段或神经 codec 码声音也排成 token 序列
视频抽帧后每帧走图像流程序列更长,更吃算力

② 编码、投影、拼进 LLM

图像经 ViT 等视觉编码器变成 patch 向量,再经投影层 MLP拉到与词嵌入相同维度; 文字照常 BPE + 嵌入。推理时典型序列:

[系统提示] [图开始] patch₁…patchₙ [图结束] [用户问题 tokens] [模型开始生成…]

自注意力让“猫”这类文字 token 直接关注猫所在的 patch——跨模态对齐靠统一注意力,不必硬接两套系统。

③ 训练通常分阶段

  1. CLIP 式对齐:成对“图+配文”,用点积/余弦把配对拉近、非配对推远。
  2. 接 LLM + 训投影:冻住或轻微微调语言模型,用“图→描述”学连接器。
  3. 多模态指令微调:图+问答三元组(VQA 等),类似 SFT。
  4. (可选) RLHF:按人类偏好再对齐(第 12 章)。
CLIP 到底是什么?

CLIP 全名是 Contrastive Language-Image Pre-training, 可以理解成“用对比学习做图文预训练”。它不是扩散模型本身,而是一套先学好的图文对齐模型: 一个图片编码器把图变成 image vector,一个文本编码器把句子变成 text vector。

图片编码器: image → image vector
文本编码器: text  → text vector

配对图文:   拉近
不配对图文: 推远

训练时,一张“猫坐在沙发上”的图片应该靠近文字 a cat sitting on a sofa, 远离 a red sports car。久而久之,图片和文字就被放进同一个语义坐标系里: 意思相近的图和句子,向量也相近。 所以“CLIP 式对齐”说的就是这件事。

早融合 vs 双塔

名字不同,套路都是:编码 → 对齐维度 → 拼序列 → 注意力融合 → 预测下一个 token。 LLaVA、Qwen-VL 等主流属于 patch 向量直接与文字 token 早融合进一个 Transformer。

反过来:文生图与文生视频(扩散模型)

上面多模态讲的是“图/音进来 → 出文字”(理解)。反方向——“文字进来 → 出图/视频”(生成)——今天主流用的是另一套和“预测下一个 token”完全不同的技术: 扩散模型(Diffusion Model)。它是这几年最漂亮的想法之一,先把它单独讲透,再看文生图 / 文生视频怎么用它。

① 扩散模型:先学“去噪”,再从噪声里“显影”

“扩散”这名字从哪来?——借自物理里的墨水扩散

往一杯清水里滴一滴墨水,墨分子会自发随机扩散开,直到整杯均匀混浊。这是物理里最典型的“有序 → 无序”过程,而且不可逆——你从没见过混浊的水自己聚回一滴墨。 对一张图一步步加噪直到变成均匀雪花,和墨水扩散数学上是同一回事:清晰结构(有序)散成随机噪声(无序)。模型这个名字就来自这里,而它要学的,正是把这个物理上“不可逆”的扩散硬生生倒放回去——从噪声逆扩散出图。

直接让模型“凭空画一张猫”太难——它要一次性决定几百万个像素,任何一步走偏都满盘皆输。扩散模型的聪明之处是把这件难事拆成很多步简单的事,而拆解的钥匙,是一个人人都懂的不对称现象:

把画画反过来做:破坏很容易,那就学“逆着破坏”

往一张清晰照片上撒噪点易如反掌,撒到最后变成一屏电视雪花;可反过来,从雪花还原出照片却难如登天。 扩散模型的核心一招就是:既然“加噪”这么简单、答案还自带,那我就专门训练一个网络去学它的逆操作——“去噪”。

它分成正反两个方向:

生成时把这个去噪器反复用几十步就行:从一张纯随机噪声出发 → 去噪器减掉一点噪 → 再减一点 → …… 一张清晰图像照片显影一样慢慢浮现。

清晰图 x₀ 半噪图 xₜ 纯噪声 x_T 正向:加噪(简单, 只为造题)→ ← 反向:去噪(难, 要训练的网络)

扩散 = 一条可逆的“加噪—去噪”链。加噪用来造训练题(答案自带),真正学的是那条反向的去噪路;生成时从最右的纯噪声一路去噪回最左的清晰图。

为什么非要分几十步,不一步到位?

一步从雪花跳到成品,等于让网络一次猜中全部像素,太难、也容易糊。拆成几十步,每步只需去掉一点点噪、把图改好一丁点,每一步都是网络能学好的“小任务”,难度被摊薄了。这也是扩散图像又清晰又多样的原因——代价是生成要跑几十次网络,所以比“一次出结果”的模型慢(后来有各种加速采样把步数压到几步)。

和你学过的两种生成方式比一比

自回归(GPT):一个 token 一个 token 往后蹦,天生适合离散的文字; GAN:让“生成器”和“鉴别器”对抗,一步出图但训练不稳、容易崩。 扩散:把生成拆成多步去噪,训练稳、质量高、多样性好,特别适合图像/视频这种连续信号,如今是文生图/视频的主流。

② 文生图:让文字给去噪“掌舵”

扩散本身只会“去出一张图”,可怎么保证去出来的正好是你要的那张?办法是在去噪的每一步都把文字提示喂进去,让它决定“噪声该往哪个方向减”。这一步靠的正是第 17 章注意力:

还有个省算力的关键工程:主流的 Stable Diffusion 不在原始像素上去噪(几百万像素太贵),而是先用一个自编码器(一个先把图压小、再还原回去的网络)把图压进小得多的潜空间(latent)里去噪,最后再解码回像素——这就是名字里 “Latent” 的由来。

等等——“文字↔图片的对应”这么难,是怎么学出来的?

直觉上这像个不可能的任务:难道要人一张张标“这句话对应图里哪些像素”?其实它靠三个巧劲绕开了人工标注:

  • 数据是现成的,不用标。 互联网上有几十亿张图天生自带配文——网页 alt 文本、图片标题、社交媒体配字、商品描述……(公开数据集 LAION 就有约 50 亿对)。爬下来就是“图 + 配文”训练对,和第 7 节预训练一样是自监督,无需人工对齐。
  • 不要求精确对齐每个词,只要求“文字能影响去噪”。 训练目标始终是那个简单的“预测这一步的噪声”,loss 还是均方误差。文字只是作为额外条件喂进去——因为“看着‘橘猫’去噪”比“啥都不看瞎猜”预测得更准,梯度下降自然就逼模型去利用文字。所以“词↔像素”的对齐,是它为把噪声预测得更准而顺带涌现的副产品,没人显式教。
  • CLIP 已经先把图文对齐好了。 上文讲过,CLIP 是一套“图片编码器 + 文本编码器”的双塔模型,本身就是拿几亿“图+配文”对、用对比学习把配对的图文向量拉近、不配对的推远。文生图系统如果直接复用它的文本编码器,拿到的文字向量就已经活在一个“和图像语义对齐好的空间”里——最难的对齐,CLIP 提前替它做了一大半。

③ 文生视频:在文生图上再管住“时间”

视频无非是一连串图像帧。所以文生视频大体是文生图的“扩展版”,但多了一个致命难点:帧与帧之间要连贯——同一个人不能下一帧突然换脸,物体运动要顺滑。逐帧独立生成必然“鬼畜闪烁”,所以关键动作是让模型同时看多帧、把时间也纳入注意力:

那“帧与帧的连续性”到底怎么学出来的?

和图文对齐一样,连续性没人显式去教,而是被训练方式“逼”出来的,关键有两点:

  • 把整段视频当一个整体去噪,而不是一帧一帧分开画。 训练时对整段(比如 16 帧)一起加噪,再让网络一起去噪。于是网络在预测某一帧的噪声时,视野里同时有前后帧——想把这一帧的噪声猜准,就不得不参考相邻帧,连续自然成了“预测得准”的前提。
  • 时间注意力让每个位置直接“看”别的帧。第 17 章的注意力:同一个物体在第 3 帧的 patch,可以直接和它在第 2、4 帧的 patch 做注意力,把“我上一刻在哪、该往哪动”对齐起来。运动是否顺滑,就成了让噪声预测更准的一部分。

而“运动到底该长什么样”(重力、走路的姿态、水的流动……)这些常识,来自海量真实视频:真实视频里的运动本就是连贯的,模型在几百万段视频上学“去噪”,等于顺带把真实世界的动态规律吸收了进去——这也是为什么好的视频模型偶尔被说“像学到了一点物理直觉”。当然它并不真懂物理,数据不够时照样会穿模、鬼畜。

一句话抓住区别

文字模型:预测下一个 token;文生图:从噪声里去噪出一张图,文字用交叉注意力掌舵; 文生视频:在文生图基础上,把时间也放进注意力,逼帧与帧连贯。三者主干都还是你学过的那套神经网络 + 注意力 + 梯度下降,只是“预测目标”换了。

更长的上下文

早期模型一次只能读几千 token,如今动辄支持几十万甚至上百万——你能把一整本书、一个代码仓库丢进去让它一起看。 难点在第 17 章那句话:注意力计算量随长度平方增长,所以需要稀疏注意力等优化(第 21 章)才扛得住。

上下文窗口大小是怎么定出来的?

常有人问“为什么这个模型是 8K,那个是 128K”。答案是:窗口大小不是某一个因素拍板的,而是三道关卡里最紧的那个—— 任何一关卡住,窗口就到头了。

关卡决定什么卡住会怎样
① 位置编码
(硬上限)
注意力本身对位置无感,全靠位置编码标记先后。方案决定了“最远能编到多远” 早期可学习绝对位置(如 GPT-2 的 1024)定死一张位置表,超出就没有对应向量,是一堵硬墙;现代 RoPE / ALiBi 等相对位置有一定外推能力,才谈得上做到 128K、1M
② 训练长度
(软上限)
位置编码“支持”到某长度,不等于模型“用得好”;得在长序列上真正训练/微调过,它才会用远处的信息 没在长序列上训过,远处信息就用不起来。常见做法:先用短序列(如 4K)便宜地预训练,再用长序列续训;或事后用位置插值 / NTK / YaRN 把 RoPE “拉伸”后再少量微调——这就是模型能“事后加长”的原因
③ 算力 / 显存
(现实约束)
标准 softmax attention 的计算与显存随长度平方增长,推理时 KV cache 又随长度线性膨胀吃显存 最卡脖子的一关:长度翻倍,标准 attention 开销约 4 倍。FlashAttention、稀疏/滑窗注意力、KDA 等递归状态架构、PagedAttention(第 21 章)决定了厂商“愿意开多长”、你“用得起多长”

一句话:位置编码能编多远 × 训练时真喂过多长 × 推理时扛得住多长,取最紧的那个,就是窗口上限。

标称 ≠ 有效:128K 不等于 128K 都好用

模型标称支持 128K,不代表这 128K 里的信息都能被可靠利用。存在著名的 “迷失在中间(lost in the middle)”现象:开头和结尾的内容记得牢,正中间的容易被忽略。 所以有效上下文常明显短于标称值——把最关键的材料放在开头或结尾,往往比一股脑塞满窗口更靠谱。

上下文不够长,也会像“降智”

若产品侧把输入截断(只保留最后几千 token),或你贴的代码/文档超出窗口被 silently 砍掉, 模型等于没看到关键前文——回答变短、变偏、变健忘,常被误以为是“模型变笨了”。 长上下文能力取决于训练时的长度扩展推理时的显存/KV cache(第 21 章),也取决于你有没有真的把材料完整送进去。

更省的架构、更强的“手脚”

万变不离其宗

推理模型、多模态、长上下文、MoE……概念很唬人,但拆开都是你已经学过的东西: token 化 + Transformer + 预测下一个 token + (后)训练。抓住这个内核,追新会轻松很多。

10. 它的本质与局限:清醒地看待它

把上面串起来,你会得到对大模型最准确的一句话概括: 它是一个被海量文本喂大的、极其强大的“下一个 token 概率预测器”。 理解这一点,它的“超能力”和“毛病”就都说得通了。

大模型并不“无所不知”

幻觉(hallucination):它的目标是“预测最像样、最连贯的下一个词”,而不是“说真话”。(如何靠证据与验证缓解幻觉,见第 22 章。) 当它对某事没有可靠依据时,照样会生成通顺合理、却是编造的内容。
知识截止:参数一旦训练完就固定,它的知识停在训练数据那一刻,不知道今天的新闻、天气、股价。
偏见:训练数据里的偏见会被它一并学进去。
不会真正“算”与“查”:它是在做极其复杂的模式延续,不是在执行精确计算或实时检索。

好消息是:这些局限大多有工程解法——给它接上实时检索(RAG)、外部工具(function calling)、 让它调用计算器或搜索引擎。这些正是第 22 章的主题。把它当成一个 强大但会犯错的概率文本生成器,而不是全知神谕,你就能用得又稳又好。

11. 你已经走通了主干

回头看看这一路搭起来的东西:

原理主干到此走完。但一个上千亿参数的模型,靠什么硬件才跑得起来?普通人又该怎么把它用好? 这两个非常实际的问题,我们用接下来两章回答。

小结

  • 大模型内核 = 第 19 章的“预测下一个 token + 自回归”,只是规模大上亿倍;参数主体是嵌入 + L 层 Block(每层约 12d²) + LM Head,GPT-3 约 175B。
  • 真实分词用 BPE/子词:高频组合合并成一个 token,存进词表;词表大小是权衡。
  • 词嵌入把词变成“语义坐标”,点积/余弦相似度衡量语义远近;词向量可迁移复用。
  • Scaling Law:参数、数据、算力一起放大,性能可预测提升;超过门槛会“涌现”新能力。
  • 训练数据不是原始互联网的简单堆叠,而是经过正文抽取、去重、质量过滤、安全/隐私过滤、污染检测、领域分类、重加权和分词打包后的工程产物。真正稀缺的是高质量、低重复、低污染、合法可用、能带来新增能力的 token。
  • 在当前 Transformer + 自回归预训练范式内,竞争底座可理解为有效数据 × 有效算力 × 转化效率:数据决定可学到什么,算力决定能消化多少,MoE/KDA/稀疏注意力/量化/合成数据等近期方法主要提高资源利用率或弥补资源缺口,但不会凭空创造知识和算力。
  • 预训练(自监督)像长期读书,练出语言、知识和世界模型底座;后训练(SFT → RLHF/DPO → 蒸馏)像进入真实工作,把它调成好用的助手。SFT 数据量远小于预训练,但正好打在“用户指令 → 助手回答”的使用入口上,所以能显著改变体感;它常常仍是交叉熵训练,但通常只对 assistant/completion 部分计 loss,prompt 更多是作为条件输入。新的后训练还会用多教师在线蒸馏,把数学、代码、Agent 等专项老师的能力压进一个统一模型。
  • 大模型测评是训练和上线的质检系统:预训练中选 checkpoint,后训练中看指令/安全/幻觉是否改善,上线前做发布门禁,上线后用 A/B、人工抽检和日志发现真实问题;应用层还要把模型、prompt、RAG、工具和产品流程一起测。
  • 最近方向:推理模型、多模态(patch→ViT→投影→拼序列)、长上下文、MoE——内核仍是 token + Transformer。推理模型的“思考深度”由 effort 条件训练、外部预算、模型学到的停机策略和 runtime 硬限制共同决定;上下文窗口由位置编码 × 训练长度 × 算力显存三关中最紧的一关决定,且标称长度≠有效长度。
  • 降智/对齐税/遗忘等多半发生在后训练、蒸馏、量化、MoE 压 k、截断、产品护栏等环节,先定位链路再判断能力。小模型追上大模型通常靠专精、更长推理或砍掉多模态来换分数,不能只看 benchmark,还要看任务范围、延迟和通用性。
  • 它本质是概率预测器,所以会幻觉、有知识截止和偏见——要理性使用,并靠 RAG/工具补救。

动手与思考

问题 1:GPT-3 的 1750 亿参数主要装在哪儿?单层 Block 量级怎么估?

主体在 L 层 Transformer Block(每层四套 [d×d] 注意力矩阵 + 两层 FFN),加上词嵌入和 LM Head(常为 [V×d],可与嵌入绑定)。单层主项约 12d²;GPT-3 用 L=96、d=12288 时,96 层合计约 1700 亿,再加嵌入约 6 亿,总数约 175B。详见 §2

问题 2:为什么真实大模型用 BPE/子词,而不是像本书那样按字符分词?

字符级会让序列变得很长,而注意力计算量随长度平方增长,代价高。BPE 把高频组合合并成一个 token,序列更短、更高效,同时又比“整词”更灵活(能拼出没见过的词)。

问题 3:为什么用“向量夹角/点积”而不是“距离”来衡量词的语义相似度?

因为训练中向量会被整体拉伸或缩放,距离会“强烈波动”,不稳定;而方向(夹角)更能反映本质的语义关系。余弦相似度只看方向;未归一化的点积还受模长影响——模长相当时点积也可作近似,点积越大夹角往往越小、语义越近。

问题 4:训练数据为什么不能“直接抓网页就开训”?它和自监督有什么关系?

原始网页里混着导航栏、广告、重复转载、SEO spam、乱码、隐私、泄漏评测题和大量低质文本,直接训练会浪费 token 预算,甚至让模型学坏。真正的训练数据要先做正文抽取、去重、质量过滤、安全/隐私过滤、污染检测、领域分类和配比。预训练仍然是自监督:清洗后的文本不需要人工逐条标答案,模型把前文当输入、把下一个 token 当自动生成的答案来学。

问题 5:大模型为什么会“一本正经地胡说八道”?怎么缓解?

因为它的目标是预测“最像样、最连贯的下一个词”,而不是“说真话”;缺乏依据时也会编出通顺但错误的内容(幻觉)。缓解办法包括给它接实时检索(RAG)、外部工具/计算器(function calling),以及对关键事实自己核对。

问题 6:“预训练”和“后训练”分工是什么?为什么 -base 模型不好直接聊天?

预训练像长期读书:在海量文本上自监督地学到语言能力、世界知识和代码/推理模式,给出一个“博学但只会接话”的底座模型(base)。后训练像进入真实工作:在底座之上用 SFT → RLHF/DPO → 蒸馏加工,教它听指令、按人类偏好回答、在具体任务里把事做对。SFT 数据量虽然远小于预训练,但它正好覆盖最终用户最常见的交互入口,而且不是重新教知识,只是把已有能力校准成“指令 → 助手回答”的模式。-base 没做后训练,所以往往只会顺着你的话往下写,而不是好好回答——要 -chat/-instruct 那样做过后训练的版本才好用。

问题 7:SFT 为什么常常“只对 assistant 部分算 loss”,而把 prompt mask 掉?

因为 SFT 真正想教模型学的是“给定这道题,标准答案该怎么写”。prompt/system/user 主要负责提供条件上下文,assistant/completion 才是想让模型模仿的输出。所以训练时通常整段都喂给模型看,但只在回答区计分。注意: mask prompt 不等于没看 prompt——回答的 loss 仍会通过计算图逼模型学会理解题目。

问题 8:一个模型的上下文窗口(比如 128K)到底是由什么决定的?

由三道关卡里最紧的那个决定:①位置编码能表示多远(可学习绝对位置是硬墙,RoPE/ALiBi 才能外推);②训练时真的在多长的序列上练过(没练过就用不好远处信息,可用位置插值/YaRN 事后拉长);③推理时的算力与显存(注意力随长度平方增长,KV cache 随长度线性膨胀)。此外标称长度 ≠ 有效长度,存在“迷失在中间”,关键材料放开头或结尾更可靠。

问题 9:推理模型怎么知道自己该“想多久”?

不是模型凭空知道,而是几层机制合起来:训练时可以把 [effort=low][effort=high] 这类条件放进样本,让模型学到同类题在低档短推理、高档多检查;RL 再用正确性奖励和 token 成本惩罚,塑造“继续想是否值得”的策略;服务端推理时给外部预算,并用 max reasoning tokens / 工具轮数 / 时间做硬截断。调高思考深度不改权重,只是给同一个模型更多推理阶段计算。

原理清楚了,但“上千 GPU 训数周”到底是怎么回事?下一章我们钻进机房, 看看大模型靠什么硬件和并行技巧才跑得起来:GPU、显存、数据并行、张量并行、KV cache……