Decoding Strategy

介绍常见的解码策略,包括贪心解码、束搜索、Top-k 采样、Top-p 采样、典型解码和对比解码

什么是解码策略

  • 给定语言模型条件分布 p(xt∣x<t)p (x_t \mid x_{<t})
  • 解码策略的目标是在每一步 tt 为下一个 token xtx_t​ 选择或采样一个值,从而形成最终序列
  • 采样策略指:下一个 token 不是 argmax,而是按概率随机抽取,因此贪心解码和束搜索不是采样策略,而其他的具有随机性的解码策略是基于采样的

Greedy Decoding(贪心解码)

  • 贪心解码(Greedy Decoding)每一步直接选取概率最大的 token:

    xt=arg⁡max⁡xp(x∣x<t)x_t = \arg\max_{x} p (x \mid x_{<t})
  • 贪心解码最快,无采样成本,但其输出单一、缺乏创造性,长文本质量差,容易导致重复 / 循环

Beam Search(束搜索)

  • 维护大小为 BB 的候选集合(beam),在每一步扩展每个候选的所有可能 token,保留 top-BB 总概率的序列

  • 序列得分常用对数概率累积:

    score(x1:t)=∑i=1tlog⁡p(xi∣x<i)\text{score}(x_{1:t}) = \sum_{i=1}^{t} \log p (x_i \mid x_{<i})
  • 可加入长度惩罚:

    score′=1(5+t)αscore\text{score}' = \frac {1}{(5+t)^\alpha} \text{score}
  • 现代大模型中不推荐使用 Beam Search:

    • 增大 beam 会降低文本质量(与传统 NMT 不同)

    • 更倾向重复和模板化表达

Top-k Sampling(截断采样)

  • 仅从概率前 kk 的 token 集合 SkS_k 中采样:

    Sk=Top-k(p(x))S_k = \text{Top-} k (p (x))
  • 采样分布:

    pk(x)=p(x)∑j∈Skp(j)x∈Skp_k (x) = \frac {p (x)}{\sum_{j \in S_k} p (j)}\quad x\in S_k
  • 多样性可控,kk 越大越随机

  • 长尾控制较好,去除所有尾部 token 噪声

  • 若 kk 太小 → 倾向贪心、僵硬

Top-p Sampling(Nucleus Sampling,核采样)

  • 从最小集合 SpS_p 中采样,使得:

    ∑x∈Spp(x)≥p\sum_{x \in S_p} p (x) \ge p
  • 采样分布:

    pp(x)=p(x)∑j∈Spp(j)p_p (x) = \frac {p (x)}{\sum_{j \in S_p} p (j)}
  • Top-p 采样的优点:

    • 与 Top-k 的固定截断不同,top-p 根据上下文动态调整候选集合,适应性强(概率集中时减少候选数;分散时增加)

    • 能够有效过滤尾部噪声,是 ChatGPT 早期默认策略

Typical Decoding(典型解码)

  • Typical Decoding 由 Maynez et al., 2020 提出,是一种基于信息论的采样方法,其选择 “信息量(surprise)最典型” 的 token 区域

  • 首先计算每个 token 的自信息:

    I(x)=−log⁡p(x)I (x) = -\log p (x)
  • 计算分布的信息熵:

    H=∑xp(x)⋅(−log⁡p(x))H = \sum_x p (x) \cdot (-\log p (x))
  • 典型性度量:

    δ(x)=∣I(x)−H∣\delta (x) = |I (x) - H|
  • 典型解码在所有 token 中选择 δ(x)\delta (x) 最小的 token 子集,再进行采样

  • Typical Encoding 的优点:

    • 选择 “典型” 而非 “最高概率” 的 token,克服 top-p 在某些分布中失效的问题(如 top-p 忽略信息量结构)

    • 语言更自然、减少重复、保持连贯性,更接近人类自然语言熵的生成行为

Contrastive Decoding(对比解码)

  • Contrastive Decoding(对比解码)由 Li et al. (2022) 提出,是一种结合 “大模型 + 小模型” 的判别式解码策略

  • 给定一个强模型 psp_s 与一个弱模型 pwp_w,得分为:

    score(x)=log⁡ps(x∣x<t)−αlog⁡pw(x∣x<t)\text{score}(x) = \log p_s (x\mid x_{<t}) - \alpha \log p_w (x\mid x_{<t})
  • 选择最大得分的 token

    • 强模型生成真实语义,而弱模型捕捉语言噪声(共现偏差),两者相减减少幻觉与重复

    • 需要双模型,延迟较高,但可以减少幻觉

Temperature 不是解码策略

  • 根本区别

    • Temperature 控制的是 softmax 后概率分布的 “形状”;
    • 而 top-k /top-p 等解码策略是在这个概率分布之上做支持集(support)的截断与筛选
  • 给定 logits ziz_i​,温度缩放分布的形状:

    z~i=ziTP(i)=ez~i∑jez~j\tilde z_i = \frac {z_i}{T}\\ P (i)=\frac {e^{\tilde z_i}}{\sum_j e^{\tilde z_j}}
    • 温度只影响:熵大小、概率差距、分布 “尖 / 平”
  • 而解码策略是在**P(i)P (i) 已经确定**的前提下裁剪支持集:

    P′(i)={P(i)∑j∈SP(j)i∈S0i∉SP'(i)= \begin {cases} \frac {P (i)}{\sum_{j\in S} P (j)} & i\in S \\ 0 & i\notin S \end {cases}
    • 其中 SS 是解码策略选出来的集合
  • Temperature:连续地调整整个分布

  • 解码策略:离散地砍掉一部分支持集

解码策略对比

策略随机性多样性信息利用重复控制质量稳定性典型用途
Greedy确定极低局部差差确定性任务
Beam确定低全局(弱)中中结构化翻译(但不适合 LLM)
Top-k中等高局部中中创造性生成
Top-p中等 / 高高动态截断良好良好Chat 对话 / 通用生成
Typical中等高信息论最佳良好稳定长文本生成
Contrastive低中强判别极佳高高真实度、减少幻觉
这篇文档有帮助吗?

On this page

页面信息