(Transformer) Decoder-Only 架构作为现今的主流因果语言模型架构, 其通过自回归的方式生成文本, 其中的每一步生成都是在从分词表大小的概率分布中采样下一 Token, 而如何采样下一 Token 则依赖 “解码策略” (Decoding Strategy), 不同的解码策略会显著影响生成序列的质量 多样性 以及连贯性, 因此选择合适而正确的解码策略至关重要. 本文深入探讨了 4 种常见的解码策略 (Top-K, Top-P, Temperature, Beam Search) 的算法原理.
Top-K 解码: 硬范围内的采样
Top-K 是一种简单而有效的采样策略, 最早由 Facebook AI Research 团队在故事生成研究中提出$^{[4]}$, 其核心思想是在每个时间步仅从概率最高的 K 个候选 Token 中进行随机采样, 而其他概率较低的 Token 则被抛弃, 这一策略通过减少候选 Token 的数量, 降低了生成文本的随机性, 提高了生成文本的连贯性和合理性.
抛弃低概率 Token 后, 剩余的 K 个 Token 的概率会被重新归一化以确保总和为 1 (概率域), 并按重新归一化后的概率进行采样.
-
算法简述
-
对当前 Step 的模型输出向量 (logits 向量) 进行降序排序 (依据维度排序), 找出 logit 最大的 Top-K 个维度索引.
模型的原始输出通常是一个与”分词表大小”相同维度的 logits 向量, 关于什么是 logits, 请移步此处.
词汇表是一个线性表, 所以可以被索引.
该步骤所找的维度索引, 就是分词表中对应 token id 的位置, 找到的 K 个 token id 就是我们需要的候选 token ids.
-
取到 Top-K 个 token 的 logit 和其对应的 token id 后, 我们需要对其进行 Softmax 归一化, 以确保 K 个 token 均被映射到概率域, 且和为 1.
-
现在我们得到了 Top-K 个 token 的概率分布, 在该分布上进行采样, 即可确定下一个 Token 的 token id.
-
使用分词器对 token id 进行解码 (
tokenizer.decode()
), 得到 token 字符串, 也就是我们真正需要的下一 Token.
-
-
性质
-
随机性可控: 通过调整 K 值, 可以灵活控制文本生成的多样性, 当 K = 1 时, Top-K 解码会退化为贪心搜索解码 (Greedy Search), 生成结果完全确定, 当 K 等于分词表大小时, Top-K 解码则退化为随机采样.
-
计算高效: 由于只需处理 K 个 Token, Top-K 采样的复杂性远低于全词表随机采样.
-
平衡多样性与连贯性: Top-K 通过排除低概率 Token, 减少了生成无意义或语法错误内容的可能性, 同时也保留了一定的随机性.
-
Top-P (核采样) 解码: 自适应的概率空间优化
Top-P 采样,也称为核采样 (Nucleus Sampling),是一种更高级的采样策略,由 Holtzman 等人在开放域文本生成研究中提出$^{[1]}$, 最初用于解决 “神经文本退化问题”. 与 Top-K 采样不同,Top-P 采样不是固定选择前 K 个 token,而是动态选择累积概率达到阈值 P 的最小 token 集合进行采样.
神经文本退化, 即重复/通用化/不连贯等文本现象.
-
算法简述
-
对当前 Step 的模型输出向量 (logits 向量) 进行降序排序 (依据维度排序).
-
对 logits 向量应用 Softmax 归一化, 得到降序排序的概率分布.
-
从高到低对概率进行累加(同时将遍历到的 token id 及其概率添加到候选集中), 直到累积概率达到阈值 P 停止, 抛弃之后的所有 Token 索引.
-
对候选集重新进行 Softmax 归一化, 确保概率总和依然为 1.
-
在归一化后的候选集上依据新的 token 概率进行随机采样, 确定写一个 token 的 token id.
-
使用分词器对 token id 进行解码 (
tokenizer.decode()
), 得到 token 字符串, 也就是我们真正需要的下一 Token.
-
-
性质
-
自适应采样空间: Top-P 采样能够根据概率分布的具体情况动态地调整采样空间的大小. 在概率分布集中的情况下, 采样空间小; 而在概率分布分散的情况下, 采样空间则被扩大, 从而实现更加灵活的控制.
-
更好的多样性和连贯性平衡: Top-P 采样不仅考虑了概率的高低, 还考虑了概率分布的整体结构, 能够在保持连贯性的同时引入多样性输出.
-
更好的可解释性: P 值直观地表示了采样空间占总概率质量的比例,相比 K 值更具解释性.
-
计算复杂度:Top-P 采样的计算复杂度略高于 Top-K 采样,因为需要计算累积概率并动态确定采样空间.
-
Temperature (温度): 概率分布的”放大器”
Temperature 并不是一种独立的解码策略, 但也值得拿出来讨论. 温度采样最初由深度学习之父 Geoffrey Hinton 在模型蒸馏研究中提出$^{[2]}$, 不同于直接在词汇集中选取子集的解码策略, 温度并没有直接取子集, 而是通过调整概率分布 (可以理解为控制方差 $\sigma$) 实现采样概率的集中化或平滑化, 其计算式如下:
\[P(w) = \frac {e^{\frac {s_w} {T}}} {\sum_{w' \in V}e^{\frac {s'_w} {T}}}\]其中, $s_w$ 是原始 logits, $T$ 是温度参数, $V$ 是分词表. 温度的工作原理是通过缩放 logits 来改变概率分布的形状:
-
当 T = 1, 概率分布保持不变.
-
当 T < 1, 概率分布的差异被放大, 分布变得更加陡峭, 高概率 token 的概率进一步提升, 而低概率 token 的概率进一步降低, 解码输出则更具确定性.
-
当 T > 1, 概率分布的差异被缩小, 分布变得更加平坦, 高概率 token 的概率可能被拉到和低概率 token 相近的值, 各 token 之间的区分度更低, 解码输出则倾倾向于多样性, 甚至不稳定.
Temperature 通常和其他解码策略进行集成, 旨在实现更加精细化的输出控制.
在 Hinton 最初的研究中, temperature(温度)主要应用于知识蒸馏过程,是一种调整 Softmax 归一化分布的关键手段,目的是更有效地将复杂模型(如集成模型或大型正则化模型)的知识迁移到小型模型中.
Beam Search (束搜索 / 最大化解码): 动态规划的贪心近似, 同时探索多条路径的确定性方法
束搜索 (Beam Search) 是一种确定性解码策略, 最初由 Alex Graves 在他的音素识别研究中提出$^{[3]}$,该策略通过维护多个候选序列来平衡探索和利用. 束搜索的核心思想是在每个 Step 保留概率最高的 $K$ 个候选序列 (称为束宽,Beam Width),而不是仅保留一个最优序列, 其目标是找到一个接近全局最优的序列 ($K$ 越大, 越接近全局最优).
-
算法简述
-
初始化, 从初始状态开始, 生成概率最高的 $K$ 个 token 作为初始候选序列.
-
迭代扩展, 对于每个序列, 生成概率最高的 $m$ 个 next token, 得到 $K \times m$ 个新序列.
-
计算每个新序列的累积概率, 保留 Top-K 个候选序列, 抛弃其他序列.
-
当序列达到最大长度或生成结束符后, 输出结束, 返回 $K$ 个最终候选序列.
-
-
性质
-
动态规划的贪心近似: 束搜索通过维护多个候选序列,能够在探索不同可能性的同时利用已知的高概率路径,相比贪心搜索能找到更优解.
-
生成质量高: 束搜索通常能生成比贪心搜索和采样方法更连贯、质量更高的文本,特别是在需要长距离依赖的任务中.
-
时间复杂度高: 束搜索的计算复杂度随着束宽 $K$ 的增加呈指数级增长,因为每个步骤都需要处理 $K \times m$ 个序列.
-
空间复杂度高: 束搜索需要存储多个候选序列及其状态,因此内存需求显著高于贪心搜索或采样方法.
-
-
典型应用
由于束搜索的生成质量最高, 其已经成为机器翻译任务的标准解码策略, 通常采用中等束宽 (3 到 10) 可以显著提升翻译生成质量. 而在其他 NLP 任务如文本摘要, 问答系统, 代码生成等, 其也能够保证输出的连贯性和稳定性.
参考文献
[1] Ari Holtzman, Jan Buys, Li Du, Maxwell Forbes, Yejin Choi. The Curious Case of Neural Text Degeneration. arXiv preprint, 2019.
[2] Geoffrey Hinton, Oriol Vinyals, Jeff Dean. Distilling the Knowledge in a Neural Network. arXiv preprint, 2015.
[3] Alex Graves. Sequence Transduction with Recurrent Neural Networks. arXiv preprint, 2012.
[4] Angela Fan, Mike Lewis, Yann Dauphin. Hierarchical Neural Story Generation. arXiv preprint, 2018.