解码策略:贪心搜索与束搜索
模型给出一个概率分布之后,总得有东西把它变成一段序列。这里讲确定性的策略——贪心搜索与束搜索,以及为什么局部最优的 token 并不构成全局最优的句子。
每一步,语言模型交给你的都是下一个 token 上的概率分布,而不是一句话。把一连串概率分布变成真正输出的那套规则,就是解码策略,而这个选择不是细节——同一个模型在不同解码策略下产出的文本差别明显。本篇讲的是确定性策略:贪心搜索和束搜索,它们试图找出概率最高的序列。带随机性的替代方案——温度、top-p、top-k——另见温度与 top-p。
解码要解决的问题
回想一下生成循环:预测一个分布,挑一个 token,追加,重复。「挑一个 token」这一步就是解码所在之处。听起来没什么大不了——取最可能的那个?——但这里藏着一个真问题。
你想要的通常是概率最高的序列,而不是一串各自最可能的 token。这不是一回事。此刻看起来最好的 token,可能把你带进一个后续每一步都很差的区域;而现在稍差一点的 token,也许能通向一个好得多的句子。不同解码策略的区别,就在于它们为了避开这个陷阱下了多大功夫。
贪心搜索
最简单的策略:每一步都取概率最高的那一个 token。不向前看,不保留备选。温度趋近于零时,退化成的就是它。
贪心解码(greedy decoding)快且确定——同样的输入,每次都是同样的输出——对简短的事实性补全,它常常正合适。问到法国的首都,你要的就是概率最高的那个 token,不需要更花哨的东西。
它的弱点是结构性的:局部最优,全局盲目。设想模型想生成「New York」。假设在某个前缀之后,最可能的下一个 token 是「New」,但模型其实给一个以稍低概率 token 开头的说法分配了更高的合计概率。贪心认定了「New」,就再也回不了头,因为它从不重新考虑。每个选择都是终局,一个贪心步就能把整条序列带进一条比「稍微往前看一眼」所能找到的概率更低的路上。在较长的生成里,这表现为文本局部通顺,却偶尔拐进一个它自己绕不出来的别扭弯道。
束搜索
束搜索(beam search)是对贪心盲目性的直接回应:不保留一条候选序列,而是保留最好的 k 条。这个 k 就是束宽(beam width)。
每一步,k 条存活序列中的每一条都被每一个可能的下一个 token 扩展,所有扩展后更长的序列按总概率打分,只留下分数最高的 k 条,其余丢弃。生成结束时,返回束中得分最高的那条序列。
直观理解:贪心立刻押注在一条路径上;束搜索同时押注几条有希望的路径,让它们在多步之间竞争。第 3 步看起来平庸的 token,如果以它为起点搭出的序列到第 8 步最强,就能翻盘。束宽为 5 时,模型并行探索五个假设,挑出其中最好的完整那条——往往正好捞回贪心径直错过的那个更高概率的序列。
有一个必要的细节:长度归一化。 因为每个 token 的概率都小于 1,更长的序列仅仅因为长,累计总概率就更低。不做修正的话,束搜索会偏向短输出。分数要按长度归一化,这样那些更长、也确实更好的序列才不会被不公平地压低。
为什么聊天场景不默认用束搜索
既然束搜索能找到概率更高的序列,开放的对话助手为什么很少用它?因为在开放式生成里,「概率最高」本身就是个错误的目标。
概率最高的序列往往平淡、空泛、重复——最安全、最可预测的那种续写,读起来平板,还容易卡进循环。束搜索恰恰在朝着这种平淡优化,产出的文本常常自我重复。对开放式写作和对话来说,采样刻意引入的随机性才能带来更多样、更自然、更像人写的输出。于是这个领域按任务分了家。
在确实存在唯一最佳答案、忠实度比多样性更重要的地方,束搜索依旧是正确的工具:机器翻译、语音转写,以及其他序列到序列的转换任务。在那里,找出概率最高的输出正是目标,束搜索多花的搜索力气是值得的。而在聊天和创意生成上,采样胜出。
按任务选策略
- 贪心: 快、确定,适合简短的事实性回答;在较长输出上有走进局部最优、显得别扭的风险。
- 束搜索: 探索多个假设以找到高概率的序列;最适合翻译和转写这类存在唯一正确答案的任务。
- 采样(见温度与 top-p):刻意引入随机性,让开放式文本更多样、更自然;聊天和创意写作的默认选择。
更深的一点是:解码是一个真正的选择,没有放之四海皆准的赢家。「最好的下一个 token」「最好的序列」和「最有用的输出」是三个不同的目标,你选的策略决定了你在优化哪一个。
要点回顾
- 解码把一连串概率分布变成真正的输出;这个选择会实质性改变模型的产出。
- 贪心每步取概率最高的 token——快且确定,但局部最优,一旦拐错弯就回不了头。
- 束搜索保留最好的 k 条序列让它们竞争,能找到贪心会错过的更高概率序列;它需要长度归一化,否则会偏向短输出。
- 聊天场景不用束搜索,因为概率最高的序列往往平淡又重复;它在翻译和转写里才发光。
- 「最好的 token」「最好的序列」「最有用的文本」是三个不同的目标——解码就是在选择你追求哪一个。
下一篇: 温度与 top-p —— 面向开放式生成的随机解码策略。