这是 Module 2 的"地图课"——先看清整条生成链路的骨架(每个框一句话,细节标 🅿️ 后面逐块挖),你就知道接下来每一课在整图的哪个位置。
| Topic | 从"最后一层 hidden state"到"吐出下一个词",再循环生成整段文字 |
| 本课目标 | 建立 Module 2 的整体骨架 + 一个关键新观念:生成是循环的 |
| Prerequisites | Module 1 ✅(Transformer 主干把 token 加工成 hidden state) |
| 形式 | 概览:只给骨架和一句话,不深入;细节留给后面的下钻课 |
| 衔接 | Module 1 停在"最后一层 hidden state",Module 2 从这里接手 |
Module 1 给了我们什么:一段已有文字 → Transformer 主干 → 每个位置一个 hidden state(含上下文的向量)。但它还不是词——你之前敏锐地问过"输出去哪了"。
Module 2 要做什么:把 hidden state 变成真正的下一个词,并且一遍遍循环,生成出整段文字。这就是"语言模型会说话"的那部分。
Module 1 你以为的是"一次前向"。但 LLM 生成文字其实是把这个前向反复做:
预测一个词 → 接上 → 再预测 → 接上 → …
你和 ChatGPT 对话时看到字"一个个蹦出来",就是这个循环在转,每转一圈蹦一个词。
| 输出层 / unembedding | hidden state 怎么变成"词表上每个词的分数"→ 概率 下一课 |
| 采样 sampling | 为什么不总是选概率最高的词?temperature / top-k / top-p 各调什么 🅿️ |
| 自回归循环 | 把词接上再跑;以及为什么能复用之前的计算(伏笔 → Module 3 KV Cache) 🅿️ |
| Context window | 模型一次最多能"看"多长的文字,超了怎么办 🅿️ |
| Tokenization 细节 / BPE | 回到起点,深入"怎么切词、词表怎么建出来的" 🅿️ |
先分清两个"最后":层(layer)是纵深(总用最后一层,加工最充分);位置(position)是横向(句子第几个词)。预测下一个词用的是最后一层、最后一个位置那个向量。
机制:每个位置的 hidden state 负责预测"紧跟它后面"的那个词。位置1→第2词、位置2→第3词……位置N(最后)→第N+1词 = 我们要的下一个词。前面位置也在预测,但那些词已经有了,生成时不关心。
不能。每个位置只能看到自己和它前面的词,看不到后面的——叫因果掩码 (causal mask)。因为训练时每个位置都在"预测它的下一个词",偷看后面就作弊了。最后一个位置恰好"前面所有词=整句",所以它看到了全部。(细节后面讲。)
对,聊天不是新机制,完全建在"预测下一个词"之上。整段对话被拼成一个长字符串,用特殊标记分出谁在说:<|user|>问题<|assistant|>,模型用同一个自回归循环从 <|assistant|> 后面一个词一个词续写——续出来的就是"回答"。没有单独的"问答模式"。
让它像助手一样答,靠:① 对话模板 (chat template)(特殊 token 标出 user/assistant 边界);② 指令微调 (SFT/RLHF)(训练模型"看到问题就续写有用回答")。🅿️ 细节在 Module 4/5。
答完这 3 题,下一课我们下钻第一个框:输出层(hidden state → 词表概率)——正好接上你之前问的"输出去哪了"。