当我们与 ChatGPT 或 Llama 等大型语言模型 (LLM) 交互时,我们要么把它们视为神奇的黑盒: 输入提示词,连贯的回答就出现了。然而,在底层,这些模型本质上是下一个 Token 预测器 。 它们输出的是词表中成千上万个 Token 的概率分布。
将这些概率转换为我们阅读的流畅文本的过程称为解码 。
很长一段时间以来,社区的运作依赖于源自旧的特定任务模型 (如 2018 年用于翻译的模型) 的“经验之谈”。但是,这些规则是否适用于当今庞大的通用 LLM?最近的一篇论文*《A Thorough Examination of Decoding Methods in the Era of LLMs》 (LLM 时代解码方法的彻底审查) *提供了一个全面的答案。
在这篇文章中,我们将探索各种解码策略的机制——从“经典”方法到前沿的研究方法——并分析它们在不同任务、对齐阶段和部署约束下的表现。
概率与文本之间的桥梁
在深入研究复杂的算法之前,让我们先建立基础概念。LLM 是逐个 Token 生成文本的。在每一步 \(t\),模型都会查看输入序列 \(\mathbf{x}\) 和目前为止已生成的 Token \(\mathbf{y}_{ 解码方法就是从这个分布中选择特定 Token \(y_t\) 的决策规则。这些方法通常分为两类: 确定性 (对于给定的输入总是选择相同的输出) 和随机性 (引入随机性以生成多样化的输出) 。 让我们来分析一下这些竞争者。 确定性方法通常受到需要精确性任务的青睐,例如编码或翻译,在这些任务中通常有一个“正确”或最佳的答案。 这是最简单的方法。模型只需在每一步选择概率最高的 Token。 虽然速度快,但贪婪搜索通常患有“隧道视野” (目光短浅) 。它选择当前最好的选项,而不考虑这对后续序列的影响,通常导致重复或次优的文本。 集束搜索试图解决贪婪搜索的短视问题。它不是只保留一个序列,而是在每个时间步保留前 \(k\) 个概率最高的序列 (即“束”) 。 通过同时探索多条路径,集束搜索通常能找到整体概率更高的句子。然而,在开放式生成 (如讲故事) 中,标准的集束搜索往往会产生重复和无聊的文本。 为了对抗集束搜索的重复性,DBS 将束分为若干组,并添加惩罚项以确保各组之间存在差异。这迫使模型探索不同的措辞或想法。 这是一种更现代的方法,旨在修复开放式文本中出现的“退化” (循环和重复) 问题。CS 使用了一种前瞻机制。它选择概率较高但同时会对与先前上下文过于相似的 Token 进行惩罚 (确保隐藏状态是截然不同的) 。 对比解码是一种迷人的方法,它使用两个模型: 一个强大的“专家” (主 LLM) 和一个较弱的“业余者” (较小的模型) 。其直觉是,业余者会犯常见的错误并依赖简单的统计模式 (幻觉、陈词滥调) 。CD 会放大专家与业余者意见不一致的 Token 的概率。 它本质上是从大模型的“信号”中减去了小模型的“噪声”。 FSD 的运作原理与对比解码相似,但简化了“业余者”。它不使用单独的神经网络,而是使用简单的 \(n\)-gram 模型 (仅查看词频) 作为“反向语言模型” (Anti-LM) 。它会惩罚那些仅仅因为是常见短语而概率很高的 Token,从而推动模型选择更切合上下文的 Token。 DoLa 是一种独特的方法,它将 LLM 最后一层的输出与其自身的早期层进行对比。理论依据是,事实性知识存在于较高层,而语言语法存在于较低层。通过对比它们,DoLa 旨在增强事实的正确性。 随机性方法引入了随机性,使其成为多样性至关重要的创造性任务的标准。 这是 API (如 OpenAI 的 API) 中最常见的参数。一个“温度”参数 \(\tau\) 会在 Softmax 函数之前缩放 Logits。 这些方法截断了分布的尾部,以避免选择极不正确的 Token。 这些高级方法试图在生成的文本中保持特定的信息密度或“惊喜”因素。 研究人员使用 Llama-2 系列 (包括基础 7B/13B/70B 模型和“Chat”对齐版本) ,在大量任务中评估了这些方法。他们关注三个关键维度: 性能、鲁棒性和速度 。 最重要的发现是,“最佳”解码方法高度依赖于任务的性质以及模型是否经过了对齐 (RLHF) 。 未对齐模型 (Base Llama-2)
对于基础模型,存在明显的鸿沟。 对齐模型 (Llama-2-Chat)
这才是事情变得有趣的地方。对齐 (指令微调和 RLHF) 极大地缩小了不同解码方法之间的差距。 请看下面的表 1。这种“热力图”风格显示了性能排名。 从数据中得出的关键观察: 为了直观地展示对齐如何降低解码选择的重要性,请看下面的图 1。“相对偏差百分比” (RDP) 衡量了当改变解码方法时性能的波动程度。 请注意, 绿色柱状图 (Chat 模型) 几乎总是低于蓝色柱状图 (Base 模型) 。这意味着如果你使用的是 Chat 模型,相比使用原始 Base 模型,选择标准的解码方法会更“安全”。 在研究论文中,作者会针对每个数据集完美地调整超参数 (如温度或束宽) 。在现实世界中,你通常只设置一个参数,并希望它对所有情况都有效。 该研究分析了当方法被锁定为单个“固定”超参数与使用“最佳”调整参数时的性能对比。 理解图表: 发现: 高级解码方法通常需要额外的计算。对比搜索需要向前看;对比解码需要在主模型旁边运行第二个模型 (业余者) 。 速度细分: 虽然确定性方法通常在单次尝试的推理任务 (如 GSM8K 数学问题) 中获胜,但随机性方法有一张隐藏的王牌: 多样性 。 如果你使用随机性方法 (如温度采样) 生成 20 个不同的解决方案,然后进行“多数投票” (自洽性) ,性能会飙升。 如图 4 所示,虽然单次随机运行 (x 轴 = 1) 通常比集束搜索 (灰色虚线) 差,但进行 20 次生成后,像 Top-p 和 温度采样这样的方法能够超越最佳的确定性结果。 这篇论文挑战了“解码已解决”或我们应该简单地默认使用 以下是给学生和从业者的实用建议: 在 LLM 时代,模型的好坏取决于将其思想转化为文本的解码器。随着模型变得越来越大、越来越强,理解这些机制不仅是学术练习,也是构建高效、可靠 AI 应用的必要条件。1. 确定性方法 (Deterministic Methods)
贪婪搜索 (Greedy Search)

集束搜索 (Beam Search, BS)


多样化集束搜索 (Diverse Beam Search, DBS)

对比搜索 (Contrastive Search, CS)

对比解码 (Contrastive Decoding, CD)


极其简单的解码 (Frustratingly Simple Decoding, FSD)

DoLa (通过层对比解码)
2. 随机性方法 (Stochastic Methods)
温度采样 (Temperature Sampling)

Top-\(k\) 和 Top-\(p\) (核) 采样

基于熵的采样 (\(\eta\), Mirostat, Typical)


实验分析: 到底什么有效?
1. 性能: 任务之间的鸿沟


2. 鲁棒性: 令人头疼的超参数

3. 速度: 智能的代价

4. 自洽性的力量 (Self-Consistency)

结论和指南
temperature=0.7 的观念。
](https://deep-paper.org/en/paper/2402.06925/images/cover.png)