在大屏或电脑上体验更佳——动画和操作区域更宽敞。
输入

下一个 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 the0.0846+0.00
2 now0.0479−0.57
3 a0.0462−0.61
4 France0.0324−0.96
5 Paris0.0322−0.96

八项合计 32.02%,其余 50,249 项合计 67.98%。尾部仪表表示这部分总质量,不把它冒充第九个 token。全分布熵为 8.65 bit,对应约 2^8.65 ≈ 402 个等概率选项的熵;实际分布并不均匀。

第二幕:评价真实文本

位置前缀末项真实后续项概率排名信息量(bit)
0The capital0.00011,41213.08
1 capital of0.164212.61
2 of France0.0065147.26
3 France is0.121623.04
4 is Paris0.032254.95
5 Paris.0.261221.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.98 bit。这个记录继续计数,不保证所有更长运行都如此。确定程度随前缀改变。
  • 在句末交接。 整句已作为前缀时,没有真实下一个 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。