下一个 token 预测
自回归语言模型生成文本时,先根据已有 token 序列输出整个词表的概率分布,再由解码规则选出一个 token、接到前缀后,重复这个过程。GPT-2 的分布有 50,257 项。本课使用贪心解码:每次选概率最高的项。
给定 The capital of France is,GPT-2 并不直接回答“Paris”。它把 the 排在第一,概率为 0.0846; Paris 排第五,概率为 0.0322,前面还有 now、 a、 France。这里前导空格属于 token,动画用 ·the 表示。约三分之二的概率质量落在图中八个候选之外。句子读着流畅,不代表模型确信自己的选择。
工作原理
Transformer 处理前缀并产生各位置的表示。预测下一个 token 时,取最后位置的向量 h。GPT-2 small 的 h 有 768 维。与形状为 50,257 × 768 的输出矩阵 W_u 相乘:
logits = h · W_uᵀ
每个 token 得到一个原始分数 logit。Softmax 将它们转成和为一的概率;实现时可先减去最大 logit,再取指数以保持数值稳定。
模型包含嵌入查表,但本例没有外部检索,也没有判断“这是地理题”的专用分支。矩阵乘法给所有候选评分。当前前缀下的高分项多为语法上可接续的词;仅凭这些排名,不能确定训练中哪些因素导致了它们。
同一个分布有两种用途:
- 评价已有文本。 每个位置读取真实下一个 token 的概率,计算
−log₂(p),再取平均。训练使用这种负对数似然目标,并根据梯度更新权重。本课只展示离线分数,不在浏览器内训练。因果模型的一次完整前向传播也可同时评价多个位置。 - 生成文本。 选
argmax(p),接到前缀后,再预测下一步。模型开始读取自己的输出。
教师强制从真实序列 ids 读取下一个 token,贪心生成改用 argmax(p)。模型、输出矩阵和 softmax 都相同,区别是后续输入由谁选择。
逐步演示
默认文本是 The capital of France is Paris.,在前五个 token 后交给模型续写。分词结果共七项:The、 capital、 of、 France、 is、 Paris、.。
第一幕:拆开一次预测
输入前五项,取 768 维的 h,计算 50,257 个 logits,再做 softmax。图中显示八项,下表列前五项;logit 整体平移,使第一项为 +0.00,不改变概率。
| 排名 | token | 概率 | 平移后 logit |
|---|---|---|---|
| 1 | the | 0.0846 | +0.00 |
| 2 | now | 0.0479 | −0.57 |
| 3 | a | 0.0462 | −0.61 |
| 4 | France | 0.0324 | −0.96 |
| 5 | Paris | 0.0322 | −0.96 |
八项合计 32.02%,其余 50,249 项合计 67.98%。尾部仪表表示这部分总质量,不把它冒充第九个 token。全分布熵为 8.65 bit,对应约 2^8.65 ≈ 402 个等概率选项的熵;实际分布并不均匀。
第二幕:评价真实文本
| 位置 | 前缀末项 | 真实后续项 | 概率 | 排名 | 信息量(bit) |
|---|---|---|---|---|---|
| 0 | The | capital | 0.0001 | 1,412 | 13.08 |
| 1 | capital | of | 0.1642 | 1 | 2.61 |
| 2 | of | France | 0.0065 | 14 | 7.26 |
| 3 | France | is | 0.1216 | 2 | 3.04 |
| 4 | is | Paris | 0.0322 | 5 | 4.95 |
| 5 | Paris | . | 0.2612 | 2 | 1.94 |
概率显示经过舍入,信息量来自未舍入值。只看到 The 时,真实项 capital 排第 1,412,消耗 13.08 bit。训练目标评价的是真实项,即使它不在前八名;优化时,梯度推动模型提高其概率。
六个位置平均为 5.4797 bit/token,困惑度为 44.62,即 2^5.4797。这是目标文本的平均信息量对应的等效选择数,不能理解成每一步都有 45 个等概率候选。
第三幕:让模型续写
保留前五个 token,连续做十二次 argmax。每次选择都会进入下一步前缀:
the capital of the French Republic, and the capital of the
十二步后句子尚未结束,名词短语已经重复。平均信息量为 1.9445 bit/token。第 2、10 步在 the capital 后选择 of,分别只需 0.11、0.09 bit。这说明它们概率高,不代表没有其他可能。
第四幕:比较什么才成立
屏幕上两个均值为 5.48 和 1.94,但它们的起点、长度和后续文本不同,不能把 2.82× 当成贪心解码的因果效果。真实文本的均值包含开头那次 13.08 bit 的预测。只看交接后的真实位置,比较变成 3.45 对 1.94;两段仍不是相同的后续序列。
可直接比较的是交接点:同一个前缀、同一次前向传播、同一组概率。真实项 Paris 需要 4.95 bit,贪心项 the 需要 3.56 bit。argmax 概率最大,所以 −log₂(p) 最小。这个逐步结论始终成立;不同轨迹均值的差值和方向则没有保证。
第 0–3 步与第 8–11 步都是 the capital of the。这证明当前十二步内发生了短语重复,不能证明状态循环或无限循环:完整前缀仍在增长。
局部最小信息量不等于好文章
真实作者可能引入名字、事实或某个同义词,模型未必能从前缀预知。 France 排第 14、 capital 排第 1,412,说明这些真实选择对当前模型的信息量较高。
贪心每步只取当前分布的信息量最小项。它仍可能进入高熵区域,因此不能保证整段均值低于另一条真实文本轨迹。对模型自己生成的文本算困惑度,反映模型、解码规则和前缀的组合,不能单独评价文章质量。
counting 预设使用 1, 2, 3, 4, 5, 6,三个 token 后交接。真实项与 argmax 都是 ,,均为 1.45 bit,交接点没有贪心优势。两段均值却仍相差 2.77×,主要来自开头与后段的难度和统计区间不同。应报告相同分布上的逐步比较,不能把跨区间比值当作效果大小。
贪心可能反复选择相似短语。温度、Top-k、Top-p 等采样策略能改变选择,但也不保证消除重复。相同短语出现两次,不等于完整前缀回到同一状态。
边界情况
- 真实项不在图中。 本例六个位置中有两个真实项在前八名之外,其中一个排第 1,412。独立卡片保留它们;前八名只是分布的局部视图。
- 模型也会集中概率。 计数预设在 Position 9(真实项为
6)时,真实项概率为0.9096,熵降到0.98bit。这个记录继续计数,不保证所有更长运行都如此。确定程度随前缀改变。 - 在句末交接。 整句已作为前缀时,没有真实下一个 token 可供对照。模型可以越过句号续写;部分记录中会以接近
1.00的概率重复已读内容,这不是所有句末的通则。 - 流畅但错误。 对
Water boils at 100 degrees Celsius at sea level.在三个 token 后交接,GPT-2 写出about 1,000 degrees Fahrenheit。正确值约为海平面下212 °F = 100 °C。低信息量不证明事实正确;不能用摄氏或华氏读数的比值描述温度误差倍数。
常见错误
- 把输出理解成一个词。模型先给 50,257 项分数和概率,解码规则再选择 token。
- 把八根柱子当完整分布。这里尾部占
67.98%,熵必须按全词表计算。 - 只看排名。
Paris与the的概率差约0.05;排名不能表达差距大小。换前缀还可能同时改变概率和顺序。 - 把低困惑度当写作质量。重复文本可能得到低困惑度,但并非所有重复都如此,更不代表内容有用或真实。
- 假设调用间存在独立记忆。本例依赖提供的前缀及其一致的缓存表示。删掉一个 token 会改变上下文,但后续文本也可能携带它的信息,不能说相关信息必然全部消失。
简化范围
画面使用 GPT-2 small(124M 参数、2019 年基础模型)的真实前向传播离线导出结果,不在浏览器内实时推理或训练。模型未做指令微调。训练方式和解码都会影响重复,模型更大并不保证不重复。
本课仅用贪心 argmax,没有温度、Top-k、Top-p 或重复惩罚;这些见解码策略课。十二个 Transformer 块合并成一张示意图,50,257 项只画八项。KV 缓存被省略:它复用已有 key/value,避免重算前缀,但生成仍逐 token 前向计算,注意力仍读取可用上下文。
信息量用 bit(以 2 为底),所以困惑度为 2^(bit/token)。Softmax 与交叉熵课使用 nat(自然对数)。二者表示同一类量,1 nat = 1.4427 bit。