解码策略与推测解码:模型怎么"说

05-推理与工程 进阶 约 20 分钟 #解码策略#temperature#top-p#推测解码#beam search 更新 2026-10-02
当前状态:未学
本文基于模型知识整理(生成时未联网核对),解码策略效果建议对照 Holtzman 等 2019(The Curious Case of Neural Text Degeneration)复核。

一句话定义

模型每步输出词表上的概率分布,"怎么说"由解码策略决定:贪心(永远取最大——稳定但呆板)、temperature(调分布的"锐度")、top-p/top-k(截断长尾防胡言)、beam search(保多候选——适合翻译不适合聊天);推测解码则是提速黑科技:小模型先猜多个 token、大模型并行验证——一次验证多个、产出与大模型分布完全一致。

为什么重要

同样的模型,解码策略不同输出质量天差地别(贪心的"复读机"vs 调好温度的流畅文本);推测解码让大模型推理提速 2~3 倍且零损失——解码层是"模型能力"到"用户体验"的最后一公里,也是推理成本优化的最后一站(kp-023 的下游)。

前置知识

kp-002(softmax 输出分布)、kp-023(推理两阶段)。

核心概念

  • temperature:logits 除以 T 再 softmax——T<1 锐化(更确定/保守)、T>1 平坦(更随机/有创意)、T→0 等价贪心。语义:温度直接改变"探索-利用"。
  • top-k / top-p(nucleus):只在概率前 k 个/累积概率前 p(如 0.9)的候选中采样——砍掉长尾胡言。top-p 自适应(候选数随分布集中度变化)通常优于固定 top-k。
  • 贪心与复读机问题:贪心解码在开放生成中陷入重复循环("我 love 我 love 我 love")——高概率词的自增强循环;采样类策略是解药(随机性打破循环)。
  • beam search 的领地:维护 beam 条候选路径取最优——机器翻译/结构化输出(有"标准答案"的任务)合适;开放生成会产出"安全但无聊"的通用文本(Holtzman 2019 的著名批评——人类文本本就是"采样"不是"最优")。
  • 推测解码(speculative decoding):小模型(draft)连续猜 γ 个 token → 大模型一次并行验证(kp-023 的 prefill 批量)→ 接受最长正确前缀、从错误处回退——2~3 倍提速且输出分布与大模型完全相同(拒绝采样保证分布不变——不是近似!)。
  • 其他:min-p(按相对比例截断,新宠)、重复惩罚、结构化输出(JSON schema 约束采样)。

原理与机制

temperature 的数学:$p_i∝e^{z_i/T}$——T 缩放 logits 改变分布熵;T=1 是模型"原汁"分布,T<1 是"模型自信面的投影"。低温度减少胡言同时减少多样性——创作任务与事实任务的最优 T 不同(且 kp-031 提醒:事实任务低 T 也不保证真)。

推测解码为什么分布不变(核心定理直觉):大模型对 draft token 的接受概率 = min(1, p_big/p_small)——拒绝时按残差分布(p_big−p_small 归一化)重采样。数学上这是"从 p_big 精确采样"的标准拒绝采样构造(kp-030 采样方法姊妹篇)——小模型只提供"猜测的顺序",分布完全由大模型裁决。

为什么推测解码有效:decode 阶段是带宽受限(kp-023)——一次验证 γ 个 token 与验证 1 个的耗时几乎相同(并行批量化吃满带宽);γ 个中平均命中 α 个(小模型与大模型相关性)→ 加速比 ≈(1+α)/(1−α)·修正。小模型与大模型越"志同道合",加速越高——同系小模型是最佳 draft。

图示

每步分布 → 解码策略 → token
 贪心: argmax (稳定但复读循环)
 temperature: logits/T 再采样 (锐度旋钮)
 top-p: 只在累积概率p的核内采样 (砍长尾)
 beam: 多候选最优 (翻译适用/开放生成无聊)
推测解码: 小模型猜γ个 → 大模型并行验证
          接受min(1,p大/p小) → 分布严格不变 → 2~3×提速

直观类比

temperature 像"话筒增益":调低说话四平八稳,调高天马行空——不同场合要不同增益。推测解码像"资深医生带实习生":实习生先快速开处方草稿(小模型猜),医生逐条快速审签(并行验证)——审签后的处方与医生亲开等效,但快了数倍。

实例或案例

  • 创作类应用 temperature 0.7~1.0、事实问答 0~0.3 的配置惯例——产品侧的解码即体验。
  • vLLM/TGI 内置推测解码:配同家族小模型即可加速——推理服务的标配开关。
  • 代码补全的 FIM(fill-in-middle)+低温度:结构化输出的解码工程。

常见误区

  • 误区一:"temperature=0 就没有随机性"。数值上仍有浮点平局打破的非确定性(批处理/硬件),且"完全确定"会放大复读循环——工程上的"确定性"需要额外手段。
  • 误区二:"beam search 总比采样好"。开放生成中 beam 产出重复/泛化文本(概率模型的最佳≠人类文本的分布)——翻译用 beam、聊天用采样是分工不是优劣。
  • 误区三:"推测解码换了小模型所以输出质量下降"。拒绝采样保证分布与目标模型完全一致——质量零损失(损失的只是 draft 不准时的一些验证计算)。

与其他知识点的关系

  • kp-012:解码的分布来源(自回归 softmax)。
  • kp-023:两阶段推理与带宽瓶颈(推测解码的提速原理)。
  • kp-030:重要性采样/拒绝采样的概率方法姊妹。

自测题

  1. temperature=0.5 与 1.5 的分布差别?

答:0.5 锐化(高概率项更突出,保守确定);1.5 平坦(更随机多样,可能胡言)——熵随 T 单调变化。

  1. 为什么 beam search 在开放生成中产生"无聊文本"?

答:人类文本本身是分布采样而非条件最优——beam 追逐条件最優路径会收敛到保守通用表达(Holtzman 批评)。

  1. 推测解码保证什么、不保证什么?

答:保证输出分布与大模型独立解码完全一致(拒绝采样构造);不保证每个 draft 被接受(命中率决定加速比,不决定正确性)。

延伸阅读

  • Holtzman 等, "The Curious Case of Neural Text Degeneration"(ICLR 2020,top-p 出处)。
  • Leviathan 等, "Fast Inference from Transformers via Speculative Decoding"(2023)。
  • OpenAI 文档的 temperature/top_p 使用指南(产品视角)。