LLM解码策略:算法与采样指南
发现解码与算法的重要性及其如何在实践中应用
原作者:kuriko-iwai,对原作者更多文章感兴趣可以访问博客,点击这里
引言
解码策略是大型语言模型(LLMs)中用于将条件概率分布转化为连贯且高质量文本的关键机制。
不同的策略会影响LLM输出的特征,包括质量、创造性、一致性以及多样性。
在本文中,我将深入探讨解码策略,分析主要解码方法与算法的底层机制、使用方式及其局限性。
LLM解码基础:概率分布
大型语言模型(LLM),尤其是仅解码器架构的模型,是一种旨在生成具有人类般流畅性与连贯性的文本系统。
下图展示了仅解码器LLM生成文本的自回归过程:

图A. 仅解码器LLM架构(左)及其自回归过程(右)(Kuriko IWAI 制作)
给定初始输入 “I lived in Tokyo, so”,仅解码器LLM(图A左侧):
- 生成输入嵌入 X₀
- 通过多头注意力与前馈层(图A中的粉色框)计算输入的丰富表示(O),并在自回归过程中(图A右侧)
- 逐个预测后续token(子词或单词)
在自回归过程中,模型根据当前已生成序列的最高条件概率来生成下一个token。
例如,在第1轮中,模型选择 “I”(图A左侧粉色框),因为它在所有候选中具有最高的62%概率。
随后,这个新生成的token被添加到输入序列中,形成更长的上下文。
在第2轮中,扩展后的序列 “I lived in Tokyo, so I” 被重新输入模型,以预测下一个token “speak”。
这一迭代过程持续进行,直到模型生成句末标记(EOS)或达到最大上下文长度。
如图A第1轮到第4轮所示,模型成功完成了句子:
I lived in Tokyo, so I can speak Japanese
最终的线性层(左侧)负责计算整个词汇表范围内的条件概率分布,以选择下一个token。
从数学上可以将该过程概括为:
其中:
P( | ):在给定从 w₁ 到 w_t 的前序token序列的条件下,token w_{t+1} 被选为下一个token的条件概率;
t:当前token长度;
z:Logits(未归一化分数),其计算方式为:
其中:
h_{final}:线性输出模块的最后一层隐藏层表示;
W_{vocab}:将隐藏状态投影到词汇表大小 |V| 的权重矩阵;
b_{vocab}:对应词汇表的偏置项。
Softmax函数会在整个词汇表范围内(例如Llama 3.2中的128K个token)计算概率分布,确保所有token的概率之和为1。
实现解码策略
现在我们知道,LLM会为下一个token计算整个词汇表上的条件概率分布;接下来,我们需要一个规则,从该分布中有效地采样一个token以继续生成序列。
解码策略是最高层级的概念,用于根据具体任务的整体目标来控制输出结果的特征。
分层结构说明
下图展示了解码策略的一些应用示例:
图B. 解码策略的应用场景(Kuriko IWAI 制作)
例如,对于事实问答(图B中的用例1),解码策略应当是确定性的,因为目标是持续生成唯一正确的答案。
而对于对话(用例2),解码策略则需要在对话连贯性与词汇随机性之间取得平衡。
为实现这些解码策略,需要使用解码方法(图B中间一行)作为从模型条件概率分布中选择下一个token的具体规则。
随后,解码算法(图B底部一行)负责运行自回归过程,反复应用选定的解码方法以生成token序列。
例如,在用例1中,解码方法通过调整关键参数(如top-k采样)来消除随机性,同时采用贪心搜索(Greedy Search)解码算法,确保模型在每一步自回归中都选择概率最高的token。
这种方式能够生成最可能的单一序列,对于需要高度置信度和准确性的事实问答任务至关重要。
在下一节中,我将探讨主要的解码方法与解码算法。
解码方法:控制概率分布
解码方法(也称为随机采样方法)会在自回归过程中引入随机性,这对于生成多样化文本至关重要。
本节将介绍:
- 采样方法:Top-k采样与Top-p采样;
- 概率分布修改方法:温度缩放与重复惩罚。
采样方法
下图比较了两种主要采样方法:Top-k与Top-p:

图C. Top-k采样 vs Top-p采样(Kuriko IWAI 制作)
Top-k采样
Top-k在每一步简单地选择概率最高的前k个token。
在图C中,为句子 “I like blue” 选择后续token时,当 top-k = 2 时,会根据概率排序选择前两个token(“sky”和“jeans”)。
目标
- 以最直观的方式限制随机性与多样性。
使用场景
- 用于早期采样实现(例如早期GPT模型)。
局限性
- 任意的k选择:最佳k值高度依赖上下文、任务与数据分布,使得选择过程缺乏稳健性。
- 硬截断:Top-k忽略第k个与第k+1个token之间的细微概率差异。
- 偏见放大:Top-k会放大底层排序函数的偏见,可能导致对代表性不足群体的不公平排除。
- 计算成本:寻找Top-k需要对所有候选token进行评分。
Top-p采样(核采样)
Top-p从累计概率超过阈值p的最小概率token集合中进行采样。
在图C中,当 top-p = 0.85 时,会采样三个token(“sky”“jeans”“shoes”),因为这些token的累计概率刚好接近0.85阈值。
当阈值接近1时,即便概率分布非常尖锐,Top-p也可能比Top-k采样出更多样化的token。
目标
在连贯性与创造性之间取得平衡。
使用场景
- 是ChatGPT、Gemini、Claude、Llama以及Mistral等主流LLM的主要采样策略。
局限性
- 任意的p选择:与Top-k类似,阈值p通常需要人工调参,可能并非最优。
- 对置信度不敏感:在模型高度自信且概率分布极度尖锐的情况下,Top-p可能过于限制。例如某个token概率为99%,当 top-p = 0.95 时只会选择该单一token,而Top-k则可以保证选择多个token。
- 无法保证多样性:当概率分布集中在重复或冗余token上时,Top-p生成的输出可能仍然重复且缺乏多样性。
Temperature Scaling(温度缩放)
温度缩放是一种通过调整超参数 T 来控制概率分布熵(随机性与多样性)的解码方法。
下图展示了不同温度值如何改变概率分布的形状:

图D. 温度缩放与采样方法(Kuriko IWAI 制作)
当 T = 1(图D中间橙色框)时,分布保持不变。
当 T 变小(T < 1,向左侧移动)时,分布变得更加尖锐,概率质量集中在最可能的token上。
例如,当 T = 0.2(左侧)时,概率质量几乎全部集中在最高概率的token“sky”上。因此,当应用 top-p = 0.85(底部一行)时,模型只会选择“sky”,从而产生最具确定性的选择。
另一方面,高温度(T > 1,右侧)会使分布变得平坦,使原本概率较低的token更有可能被采样。
在图D中,当 T 增大到 T = 50 时,概率分布变得非常平坦。因此,同样的 top-p = 0.85 可以从更多token中采样,从而产生更多样化的选择。
相比之下,top-k(top-k = 2)无论 T 的取值如何,都始终选择相同的两个token(“sky”和“jeans”)。
这表明,将温度与 top-p 采样结合使用,可以有效控制文本生成的随机性与多样性。
从数学上看,该过程通过将 logits(z)按温度 T 进行缩放来生成条件概率分布(P):
目标
- 控制随机性与多样性的程度。
使用场景
- 广泛应用于主流LLM,如ChatGPT、Claude、Gemini和Llama(通常设置在 0.7 < T < 1.0 之间)。
局限性
- 多维参数调优复杂:寻找 T、p 和 k 的最优组合可能较为复杂,当参数取极端值时可能导致不可预测的结果。
- 探索与利用之间的强制权衡:作为固定的全局超参数,T 无法在自回归过程中针对每个token灵活调整。例如,在序列中的事实部分(如名称)适合较低 T,而在创造性部分(如故事发展)适合较高 T,但实际中 T 是恒定的。
- 忽略token依赖性:固定的 T 无法利用模型内部丰富的状态信息(如隐藏状态与注意力权重)来为当前token预测上下文相关的温度值。
- 对模型校准问题处理不足:当模型出现严重过度自信(miscalibration)时,温度缩放无法有效纠正高度错误预测的置信度。
- 对任务迁移敏感:针对某一任务(如摘要)优化的温度值,可能不适用于另一任务(如代码生成)。在模型需要适应多任务场景时,单一 T 值可能导致性能下降。
重复惩罚与频率惩罚
重复惩罚与频率惩罚同样是在应用采样方法之前,通过直接调整 logits z 来修改原始概率分布。
OpenAI 提供的通用公式将频率惩罚与存在惩罚合并为一个公式:
其中:
- z̃_j:第 j 个token的新logit(惩罚后);
- z_j:第 j 个token的原始logit;
- c_j:第 j 个token在已生成文本中的出现次数;
- α_{freq}:频率惩罚系数(超参数),范围为 -2.0 到 2.0;
- 1[c_j > 0]:指示函数,当 c_j > 0(即该token至少出现一次)时取1,否则取0;
- α_{pres}:存在惩罚系数(超参数),范围为 -2.0 到 2.0。
在该公式中,c_j · α_{freq} 是频率惩罚项,与token已出现的次数成正比。
这意味着,一个出现五次的token所受到的惩罚是出现一次token的五倍。
另一方面,存在惩罚项(1[c_j > 0] · α_{pres})是针对任何至少出现一次的token施加的一次性固定惩罚,相当于基于布尔条件的重复惩罚。
在修改logits之后,模型生成新的概率分布 P̃:
同时可以选择性地应用温度缩放 T。
最后,模型使用 top-k 或 top-p 采样,从新的概率分布中采样token。
目标
- 防止模型陷入重复循环,并鼓励使用新的词汇。
使用场景
- 广泛应用于所有聊天界面,如 ChatGPT-4.0。
局限性
- 缺乏上下文意识:由于惩罚是基于token出现次数统一施加的,可能会错误惩罚必要的关键词重复或功能词(如“the”“of”)。
- 参数调优任意性:α_{freq} 和 α_{pres} 需要人工调参,可能导致次优效果。
- 对长距离重复无效:该惩罚机制主要针对最近生成的token,对跨多句或长序列中的主题性重复检测效果较弱。
解码算法:最大化序列级质量
解码算法(也称为确定性搜索方法)运行自回归过程,结合解码方法,确保当前生成序列在模型概率意义上达到整体最大化。
本节将介绍主要算法:
- Greedy Search(贪心搜索),
- Beam Search(束搜索)(纯Beam Search、随机Beam Search),以及
- Diverse Beam Search(多元束搜索)。
贪心搜索
贪心搜索是一种确定性解码算法,保证相同输入始终产生相同输出,优先考虑连贯性与概率而非创造性。
机制
- 在每一步,模型选择概率最高的单个token。
- 这等同于设置 top-k = 1。
目的
- 最大化当前步骤的局部概率。
使用场景
- 作为性能评估的基线方法。
- 适用于高度受限任务(如代码生成),其中确定性至关重要。
局限性
- 局部最优问题:在每一步只选择当前概率最高的token,忽略未来可能形成更优全局序列的可能性。
缺乏多样性与重复问题:对于相同输入始终生成完全相同的输出,模型可能陷入单调、重复的循环。
Beam Search (束搜索)
Beam Search 是另一种确定性解码算法,在每一步中不只选择单个最可能的 token,而是从多个最可能的 token 中进行扩展。
下图展示了纯 Beam Search(束宽 N = 2)的过程:

图E. 纯 Beam Search 示例(束宽:N = 2)(Kuriko IWAI 制作)
在自回归过程的任意一轮(如图E中的第1至第3轮),算法会根据累计得分,从候选序列池中选择两个 beam(序列)。
例如,在第1轮中,算法根据得分 S(Y₁),选择两个 token “sky” 和 “jeans” 来接在序列 I like blue ____ 之后,生成两个 beam:
- "I like blue sky"
- "I like blue jeans"
接着,在第2轮中,算法为每个 beam 生成条件概率分布,并计算候选序列的得分 S(Y₂)。
例如,将 “because”(基于条件概率得分为 -1.427)添加到 beam "I like blue sky"(得分 -0.3567)后,总得分为 -1.7837(= -0.3567 + (-1.427)),在所有候选中为最高。
算法对另一个 beam "I like blue jeans" 进行同样的过程,最终在第2轮结束时选出两个 beam:
- “I like blue sky because”
- “I like blue jeans and”
其余候选则被剪枝。
从数学上讲,这种得分计算方式可以概括为:在前一轮总得分的基础上,累加每个可能 token w 的条件概率的自然对数(ln(P)):
其中:
S(Y):整个序列 Y 的得分(标准得分);
Y:长度为 L 的完整序列;
P( | ):在给定上下文条件下,第 i 个 token 被选中的条件概率。
该过程持续进行,直到达到最大 token 长度或生成 EOS 标记,最终算法从所有 beam 中选择得分最高的序列。
机制小结
在自回归过程中始终保留 N 个 beam,最终选择得分最高的 beam。
通过丢弃大量低得分路径来保持计算可控。
当与 top-p 或 top-k 采样结合时,Beam Search 可以在每一步运行前缩小候选 token 池(称为随机 Beam Search)。
从技术上讲,Greedy Search 等价于 N = 1 且 top-k = 1 的 Beam Search。
目的
- 最大化整体序列概率(相比 Greedy Search 更少“短视”)。
使用场景
- 传统上广泛用于机器翻译和抽象摘要(例如早期 Transformer 编码器-解码器模型如 T5)。
- 由于其在长文本生成中容易产生重复短语,因此在开放式聊天模型(如 ChatGPT)中使用较少。
局限性
- 计算成本:扩展较大的束宽会显著增加计算负担,在实时应用中可能成为限制。
- 束退化问题:在某些情况下,Beam Search 可能产生重复或退化输出,尤其当束宽较小或模型预测过于自信时。
Diverse Beam Search (多元束搜索)
Diverse Beam Search(DBS)在原始 Beam Search 的得分上加入惩罚项,以鼓励多样性。
DBS 首先将束宽 N 划分为多个较小的独立组 G,然后根据冗余程度在组内对序列进行惩罚。
下图比较了在词汇表大小为 12 时,纯 Beam Search 与 DBS 的差异:

图F. 纯 Beam Search vs Diverse Beam Search(N = 6, |V| = 12, G = 3)(Kuriko IWAI 制作)
纯 BS 和 DBS 都选择 6 个 beam(N = 6),但 DBS 强制引入多样性。
DBS 将 12 个 token 分为 G₁ 到 G₃ 三组,并从每组中根据得分 S′(Y) 选择前两个(N / G = 6 / 3 = 2)beam。
S′(Y) 在 S(Y) 的基础上加入惩罚项:
其中:
- S(Y):纯 Beam Search 中使用的标准得分(累计对数概率);
- λ(λ > 0):惩罚超参数,用于控制算法惩罚相似序列的强度,λ 越大,多样性越强;
- r_g:序列在组 g 内的排名,例如:
- r_g = 0 表示组内最佳序列;
- r_g = 1 表示第二名;
- r_g = 2 表示第三名,以此类推。
在图F中,λ = 0.2,使组内第二、第三和最后一个序列分别增加 -0.2、-0.4 和 -0.6 的惩罚,排名越低惩罚越大。
这鼓励每个组探索不同的高层次想法、前缀或主题,因为算法对得分较低的相似序列施加更强惩罚。
在图F中,DBS 选择了 “I like blue cats”,其 S′(Y) = -0.69,尽管在 G₁ 中 “I like blue shoes” 的得分 (-0.62) 更高。
而纯 BS 完全由得分驱动,保留得分最高的六个 beam,因此生成相同的最高概率词,导致多样性较低。
目的
- 鼓励选择 N 个在语义上彼此多样化的序列。
使用场景
- 用于研发与应用场景,如翻译和图像描述任务,在这些任务中需要多个不同候选。
局限性
- 超参数任意性:过大的 λ 可能生成多样但质量低的输出;过小的 λ 则可能不足以产生多样性。不合理的 G 和 N 设置也可能限制多样性效果。
- 质量与连贯性降低:对高概率序列施加惩罚,可能导致选择得分低于纯 Beam Search 的序列,从而降低连贯性。
- 计算复杂度高:DBS 需要在标准束 N 的基础上额外跟踪和计算多个多样性组 G 的惩罚,增加计算与内存开销。
- 多样性机制有限:基于组内排名的惩罚未必能保证语义多样性。例如,当 N = 2 时,DBS 可能生成:
“The Labrador dog is dashing through the field.”
“The golden retriever runs across the lawn.”
两者在语义上几乎相同:狗在草地上奔跑。
总结
解码策略在 LLM 文本生成中至关重要,因为它们直接影响输出的质量、连贯性、多样性与计算成本,使模型能够超越简单采样,生成更具人类特征的序列。
为了实现这些策略,我们通过温度缩放或 top-k / top-p 过滤来调整概率分布(解码方法),然后应用解码算法高效运行自回归预测过程。
未来,诸如 Speculative Decoding、Contrastive Search 以及 Neural Text Generation(NTG)等先进算法将继续被探索,以在 LLM 部署中实现更快的推理速度和更高的生成质量。
参考文献
Impact of Decoding Methods on Human Alignment of Conversational LLMs (arXiv:2407.19526)
Diverse Beam Search: Decoding Diverse Solutions from Neural Sequence Models (arXiv:1610.02424)