🏠 总目录📚 本教程 主线 3 · 模型怎样逐词生成 ← →
📑 本页目录(点开跳转)

主线 3 · 模型怎样一个字一个字写下去

⏱ 9 分钟 | ⭐ 主线第三站


🎯 一句话

聊天模型的基本工作不是“先想好整段答案再写”,而是:看见左边已经出现的 token,猜下一个 token;猜完,把它放回左边,再猜一次。 这就是 Decoder-only 和自回归生成。

因果遮罩:不许偷看答案

训练时,完整句子明明就在眼前。若模型能看右边,它只会抄答案,学不会预测。所以我们给注意力加一条规则:当前位置只能看自己左边的位置。

预测第 4 个 token 时,模型能看哪里?已出现:猫追老鼠?下一个✓ 可看✓ 可看✓ 可看正在猜右边还不存在,所以绝不允许看
绿格是可用线索;橙格是正在预测的位置。训练和使用时都遵守同一条规则。

生成就是一个小循环

  1. 读入已经写好的 token。
  2. 为下一个 token 给出概率表。
  3. 选出一个 token,接到句子末尾。
  4. 把新句子再送回去,继续下一步。

这解释了两个现象:它会慢慢往外吐字;而且前面生成错一个词,后面会顺着这个错误继续写。

训练时其实不是一个字一个字算

生成必须串行,但训练可以并行。训练样本例如“猫追老鼠很快”,会同时要求模型完成四道题:看“猫”猜“追”、看“猫追”猜“老鼠”、看“猫追老鼠”猜“很”……

因果遮罩保证每个位置只能使用自己左边的信息,于是这些题可以在一张矩阵里同时算出来,又不会泄题。这就是为什么训练能把 GPU 跑得很满,而在线生成仍要等前一个 token 出来。

“选下一个词”也不是总选概率最高

若每次都选最高概率,回答会更稳定,却很容易模板化和重复。实际生成还会使用 temperature、top-p 等规则:它们不是让模型突然更懂,而是在已经给出的概率分布里控制“保守还是多样”。这部分在推理优化的解码专题会细讲。

为什么叫 Decoder-only

“Decoder-only”不是说它没有理解能力,而是说整套网络都遵守左看规则。它用同一种结构完成两件事:读你的问题时根据前文更新向量;写回答时继续预测下一个 token。规模足够大后,这个简单目标会逼它学到语法、事实关联、代码模式和部分推理套路。

早期还有 Encoder-only 和 Encoder-Decoder 两条常见路线。它们不是“错误版本”:Encoder 很适合理解、分类、抽取;Encoder-Decoder 很适合输入与输出结构明显不同的翻译、摘要等任务。Decoder-only 在通用聊天模型里流行,是因为它用一个统一的“续写”目标就能吸收各种文本和代码,也天然匹配开放式生成。

这和 KV Cache 有什么关系?

同一个 70B 模型:上下文长度会把 KV Cache 推过模型权重模型权重(FP16)140 GBKV Cache · 10,000 token26 GBKV Cache · 100,000 token260 GB100k token 时:KV Cache = 260 GB,已经是 FP16 权重的约 1.9 倍GQA 的作用:让多个注意力头共享 K/V,把这块缓存显著缩小
这张图对应紧接着的算账:上下文从 1 万涨到 10 万,KV Cache 从 26 GB 线性涨到 260 GB。⭐ GQA 让多个头共享 K/V,就是为了把这根最长的橙色条压下来。

每次生成新 token 时,前面的内容没有变,没必要从头再算一遍。模型会把过去 token 的 K 和 V 暂存起来,这就是 KV Cache。

好处:生成更快。代价:上下文越长,缓存越占显存。它是部署与长上下文问题的桥梁,等需要关心速度和显存时再深入。

可以把一次请求分成两段:Prefill 是先读完整个问题并建立缓存,决定首字要等多久;Decode 是之后逐 token 生成,每一步只计算新 token,但都要读取越来越长的缓存,决定每秒能吐多少字。现代模型常用 GQA,让多个注意力头共享较少的 K/V 头,以减轻缓存压力;但“长上下文会吃显存”这条基本约束仍在。

✅ 检查点

点开核对

遮罩堵住右侧答案,模型才会练习预测;生成时把刚选出的 token 接到左边,再继续预测。这就是自回归循环。

🔗 想再深一层,去哪一套

去哪 为什么
AI 基础设施 16 · KV Cache ⭐ 这一页那个循环为什么必须缓存,以及缓存会吃掉多少显存;第七节让你算出自己能开多大 batch
ML 基础 附录C · 手撕代码速查 第 2 题就是「缩放点积注意力(含因果掩码)」—— 遮罩在代码里只是一行
06b · 解码策略 循环每一步「猜下一个 token」到底怎么猜:温度、top-p、beam 各自改了什么

🛑 可以停在这里

不必先背 BERT、Encoder-Decoder 的历史。先能解释“模型为什么一个词一个词输出”,就够了。

⚡ 走神救援

模型只能看左边,所以只能猜下一个 token;猜出的 token 又会成为新的左边。这条简单循环,就是聊天模型生成回答的发动机。

👉 04-训练三阶段.md

打卡记录保存在你的浏览器里,首页能看到总进度