7. Decoding Strategy

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

什么是解码策略

  • 给定语言模型条件分布

    p(xtx<t)p(x_t \mid x_{<t})
  • 解码策略的目标是在每一步 $t$ 为下一个 token $x_t$​ 选择或采样一个值,从而形成最终序列

  • 采样策略指:下一个 token 不是 argmax,而是按概率随机抽取,因此贪心解码和束搜索不是采样策略,而其他的具有随机性的解码策略是基于采样的

Greedy Decoding(贪心解码)

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

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

Beam Search(束搜索)

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

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

    score(x1:t)=i=1tlogp(xix<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(截断采样)

  • 仅从概率前 $k$ 的 token 集合 $S_k$ 中采样:

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

    pk(x)=p(x)jSkp(j)xSkp_k(x) = \frac{p(x)}{\sum_{j \in S_k} p(j)}\quad x\in S_k
  • 多样性可控,$k$ 越大越随机

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

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

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

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

    xSpp(x)p\sum_{x \in S_p} p(x) \ge p
  • 采样分布:

    pp(x)=p(x)jSpp(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)=logp(x)I(x) = -\log p(x)
  • 计算分布的信息熵:

    H=xp(x)(logp(x))H = \sum_x p(x) \cdot (-\log p(x))
  • 典型性度量:

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

  • Typical Encoding 的优点:

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

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

Contrastive Decoding(对比解码)

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

  • 给定一个强模型 $p_s$ 与一个弱模型 $p_w$,得分为:

    score(x)=logps(xx<t)αlogpw(xx<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 $z_i$​,温度缩放分布的形状:

    z~i=ziTP(i)=ez~ijez~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)jSP(j)iS0iSP'(i)= \begin{cases} \frac{P(i)}{\sum_{j\in S} P(j)} & i\in S \\ 0 & i\notin S \end{cases}
    • 其中 $S$ 是解码策略选出来的集合

  • Temperature:连续地调整整个分布

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

解码策略对比

策略
随机性
多样性
信息利用
重复控制
质量稳定性
典型用途

Greedy

确定

极低

局部

确定性任务

Beam

确定

全局(弱)

结构化翻译(但不适合 LLM)

Top-k

中等

局部

创造性生成

Top-p

中等 / 高

动态截断

良好

良好

Chat 对话 / 通用生成

Typical

中等

信息论最佳

良好

稳定

长文本生成

Contrastive

强判别

极佳

高真实度、减少幻觉

Last updated

Was this helpful?