解码策略
解码策略在不重训模型的情况下,从下一 token 分数中选择结果。贪心取最高分,Top-k 在固定个数候选中采样,Top-p 保留累计概率达到阈值的候选再采样。温度改变概率集中程度,同一组分数可因策略不同得到不同 token。
把 [0,1) 看作尺子,token 按概率占据区间,均匀随机标记落在哪就选谁。筛选去掉一些区间,再按比例拉伸剩余部分覆盖整把尺子;分数没变,标记却可能落到另一个 token。
温度、筛选与归一化
固定前缀下,GPT-2 输出 50,257 个 logit。对 T > 0:
p_T(i) = exp((z_i − max(z))/T) / Σ_j exp((z_j − max(z))/T)
减最大值使指数稳定,不改变数学概率。低温更集中,高温更分散;正温度不改变固定 logit 的排名。
贪心直接取最大 logit,无随机标记,所以种子不影响;唯一最大值在任何正温度下相同。本课同分优先小 token ID。
Top-k 留前 k 个;Top-p 按排名累加,首次达到或超过阈值时停止,保留跨线 token。p 指质量,不是候选数,也不是每 token 单独的门槛。
保留集合 S 的质量为 M = Σ_(i in S) p_T(i),采样概率:
q(i) = p_T(i)/M(保留项),其余为零。
这样剩余区间覆盖整把尺子,且相对比值不变。保留概率不相等时,标记均匀不等于候选等概率,宽区间更易选中。本课两种筛选各自从完整温度分布开始,不暗中先 Top-k 再 Top-p。定义参见 Transformers 生成参数与核采样论文。
逐步演示
固定原文前缀 The colors of the rainbow are red, orange, yellow,,T = 1、k = 3、top-p = 0.8、种子 41。这是实际 GPT-2 分数,· 显示 token 前空格。
| 排名 | token | 模型概率 | 累计 |
|---|---|---|---|
| 1 | ·blue | 0.226576 | 0.226576 |
| 2 | ·and | 0.218336 | 0.444912 |
| 3 | ·green | 0.210356 | 0.655268 |
| 4 | ·purple | 0.059970 | 0.715238 |
| 5 | ·yellow | 0.039174 | 0.754412 |
| 6 | ·pink | 0.032688 | 0.787099 |
| 7 | ·orange | 0.025592 | 0.812691 |
| 8 | ·black | 0.024890 | 0.837581 |
其他 50,249 token 共约 0.162419,始终参与计算。blue 排第一是待检查的模型输出,不是彩虹顺序的事实说明。
- 贪心:选第一名
·blue,不使用 k、p 或种子。 - Top-k:保留三项,质量
0.655268,排除0.344732。未归一化时尺子末段没有合法候选;除以保留质量后,blue、and、green 分别约0.345777、0.333200、0.321023。 - 放标记:种子 41 首抽
u = 0.8510142471641302。按排名排列区间,green 在约[0.678977,1),所以选·green,该区间长度对应约 32.10% 概率。 - Top-p:六项只有
0.787099 < 0.8,加入 orange 后到0.812691,所以保留七项。归一化后 purple 区间约[0.806294,0.880085),相同 u 选择·purple。
相同模型分数、相同随机数,三种规则得到 blue、green、purple,差异来自解码。
最后记录十二次相同前缀的独立抽样试验,不是连续生成十二词。两种采样器在每列共享 u,所以方法之间结果耦合;每种方法的后续试验使用新伪随机数。贪心始终 blue。十二次只能展示变化,不能证明经验频率已等于理论概率。
个数固定与质量固定
默认前缀、p 为 0.8,温度 0.5、1、1.5、2 的核分别含 3、7、352、6,340 token。排名未变,概率向尾部分散,需更多候选凑足质量。
固定 T = 1,换前缀 1, 2, 3, 4, 5,,·6 概率约 0.909493,一项就超 0.8,因此 Top-p 是确定的。The capital of France is 在同阈值却需 502 项。Top-k 在两者中仍留 k 项。
| 目的 | 控制 | 固定的性质 |
|---|---|---|
| 总选最大分 | Greedy | 固定前缀下不受种子影响 |
| 固定候选数 | Top-k | 分布变化也保留 k 项 |
| 按集中程度变候选数 | Top-p | 累计质量门槛 |
| 筛选前调整概率 | 温度 | 固定 logit 的排名 |
k 为一时,提高温度也不能产生变化,唯一幸存项仍占整个区间,需要增加 k。比较设置先固定前缀和种子。任何策略都不保证事实正确,提高温度也不是“创造力或质量改善”的测量。
复杂度
词表 V,贪心查最大 O(V)。本课完整排序 O(V log V),概率、保留质量和累计区间时间空间 O(V)。累计表完成后,每次二分定位为 O(log |S|)。
固定前缀的排名可跨正温度复用,完整排序只是本实现选择,专用 Top-k 可用其他算法。真实生成追加 token 后前缀变了,还需模型前向计算,不计在此后处理成本内。
边界情况
- k 为一:无论原概率多小,保留后 q 为一,温度救不回已删候选。
- p 低于首项概率:Top-p 也只有一项,可在未选 Greedy 时确定输出。
- 累计恰等:立即停止,未到门槛则必须加下一项。
- p 为一、k 为 V:各自保留全表,相同抽样值下两者结果一致;这是并列比较,不是串联筛选。
- 结果在显示八项之外:查看器显示真实 token、排名、区间,不采样虚构的“其他”token。
- 同分:本课按 token ID,库在精确并列的截止规则可能不同。
- T 为零:公式除数无效,界面保持正数,以显式 Greedy 提供确定选择。
常见错误
- 把 p=0.8 当每项需超过 80%。它是排名前缀的累计质量。
- 删除越线项。默认删第七项只剩 78.71%,没有满足 80%。
- 保留后均匀抽 token。正确是按剩余概率同比例归一化,不是每项
1/|S|;只有保留概率全相等(如k = 1只剩一个)时两者才一样。 - 只将可见八柱归一化,提前抹去尾部。温度与 Top-p 都处理全部 50,257 项。
- 把十二列抽样当生成文本。真实续写需每次将选中 token 反馈模型,见下一 token 预测。
模型范围
三次真实 GPT-2 前向导出的完整 logits,保存模型 revision 与元数据;浏览器不载模型,只用双精度重算解码,所以 Top-p 输入最多六位小数。八 token 单独显示,其余视觉分组。省略重复推理、束搜索、重复惩罚及其他 logit 处理器,以分开检查保留、归一化、选择。