技术解读 4天前 121 浏览次数 0 评论

从零学习大模型(7)——解码策略:大模型如何 “选词说话”?从基础方法到投机解码

人人都是产品经理

发布了 435 文章

本文将系统解析解码策略的核心逻辑:基础解码方法如何工作?top-k、top-p 等参数如何调控生成效果?投机解码为何能让大模型推理速度翻倍?

当你让大模型生成文本(如 “写一段关于秋天的散文”)时,模型并非 “一次性写出完整内容”,而是逐词选择—— 每一步从词汇表中挑出下一个词,再基于已生成内容继续选择。这个 “选词” 过程就是 “解码”,而决定 “如何选词” 的规则,就是解码策略。

解码策略直接影响生成文本的质量:有的策略让文本更连贯但缺乏新意,有的策略让文本更有创造性但可能逻辑混乱。从基础的 “贪心搜索” 到优化的 “波束搜索”,再到最新的 “投机解码”,解码策略的演进始终围绕一个核心目标 ——在 “连贯性”“多样性”“效率” 之间找到平衡。

解码的本质:从概率分布中 “选词”

大模型生成文本的核心是 “概率预测”:在生成到第 t 个词时,模型会对词汇表中所有词(通常 1-3 万个)输出一个 “成为第 t+1 个词” 的概率(如 “秋天” 之后,“的” 的概率 30%,“树叶” 的概率 20%,“天空” 的概率 15%)。

解码策略的任务,就是基于这个概率分布选择下一个词。这个选择看似简单,却直接决定生成质量:只选概率最高的词,可能导致文本重复(如 “秋天的秋天的秋天”);随机选择低概率词,可能导致逻辑混乱(如 “秋天的电脑在飞翔”)。

理想的解码策略需要保证连贯性,优先选择与前文匹配的词(高概率词);保留多样性,适当选择低概率词避免重复和单调;同时提升效率,减少计算量,让生成速度更快。

一、基础解码策略:从 “贪心” 到 “波束” 的选择逻辑

早期解码策略主要关注 “连贯性”,通过不同的 “选词规则” 提升生成文本的流畅度。

1. 贪心搜索(Greedy Search):只选概率最高的词

贪心搜索是最简单的解码策略,每一步都选择当前概率最高的词,不考虑其他可能性。

例如模型预测 “秋天” 之后的概率分布为 “的”(30%,最高)、“树叶”(20%)、“天空”(15%),贪心搜索会直接选择 “的”,然后基于 “秋天的” 继续选择下一个概率最高的词(如 “树叶”,概率 25%),以此类推,最终生成 “秋天的树叶落在地上…”。

贪心搜索的优势在于计算效率极高,每步只需找出最大概率词,无需额外计算,而且生成的文本基本连贯,因为高概率词通常与前文匹配,不会太离谱。不过它也有明显局限,容易陷入 “局部最优”—— 某一步选高概率词可能导致后续无好词可选,比如 “秋天的” 之后选 “的”(概率 30%),但后续可能没有合适的词,而若选 “树叶”(20%),后续可生成 “树叶变黄了”,整体更优;同时,生成的文本容易单调重复,可能反复生成相同短语(如 “秋天的风景很美,秋天的风景真的很美”)。这种策略适用于对速度要求极高、对多样性要求低的任务(如实时翻译的快速草稿)。

2. 波束搜索(Beam Search):保留多个候选路径

波束搜索是贪心搜索的改进版,每步保留前 k 个概率最高的候选序列(称为 “波束”),最终从 k 个序列中选最优(k 称为 “波束大小”,通常取 5-10)。

例如 k=2 时,生成过程为:第一步选择概率最高的 2 个词作为候选序列 ——“秋天的”(概率 30%)和 “秋天树叶”(概率 20%);第二步对每个候选序列计算下一词概率,“秋天的” 后续最高概率词是 “树叶”(25%),序列总概率 30%×25%=7.5%,“秋天树叶” 后续最高概率词是 “黄了”(22%),序列总概率 20%×22%=4.4%,保留前 2 个序列:“秋天的树叶”(7.5%)和 “秋天树叶黄了”(4.4%);之后重复步骤,直到生成结束符,最终选择总概率最高的序列。

波束搜索的优势在于能避免局部最优,保留多个候选路径降低了 “一步错步步错” 的风险,而且在机器翻译、摘要生成等任务中,生成的文本通常比贪心搜索更连贯,质量更高。但它的计算量相对增加,波束大小 k=5 时,计算量约为贪心搜索的 5 倍;同时,多个候选路径可能收敛到相似序列(如 “秋天的树叶” 和 “秋天的叶子” 最终都生成类似内容),仍可能出现重复;另外,序列越长,候选路径的存储和计算成本越高,长文本效率较低。这种策略适用于对质量要求高、对速度要求中等的任务(如正式文档翻译、新闻摘要)。

3. 随机采样(Stochastic Sampling):引入随机性提升多样性

贪心和波束搜索都是 “确定性” 策略(基于概率排序选择),容易导致文本单调。随机采样则通过按概率分布随机选择下一个词引入多样性,高概率词被选中的概率高,但低概率词也有机会被选中。

例如 “秋天” 之后的概率分布为 “的”(30%)、“树叶”(20%)、“天空”(15%),随机采样时有 30% 概率选 “的”,20% 概率选 “树叶”,15% 概率选 “天空”,其余概率分配给其他词;多次生成同一提示时,可能得到不同结果(如 “秋天的天空”“秋天树叶”)。

随机采样的优势是多样性强,适合创意生成(如写诗、编故事),能避免重复,而且灵活性高,可通过参数调控随机性。不过它可能生成无意义内容,当低概率词(如 “秋天的电脑”)被选中时,会导致逻辑混乱;同时,随机选择可能破坏上下文关联(如 “秋天树叶” 之后突然选 “手机”),连贯性有所下降。这种策略适用于创意生成任务(如诗歌、小说片段),但需配合参数调控随机性。

二、解码参数:调控生成的 “三大旋钮”

纯随机采样的 “多样性” 是把双刃剑 —— 过度随机会导致文本失控。实际应用中,通过三个核心参数(temperature、top-k、top-p)调控采样过程,平衡 “连贯性” 和 “多样性”。

1. Temperature(温度):控制概率分布的 “陡峭度”

Temperature(温度,通常 0-2 之间)通过调整概率分布的 “平滑度” 影响选择。低温(temperature→0)会放大高概率词的优势,抑制低概率词,例如原分布 “的”(30%)、“树叶”(20%),低温下可能变为 “的”(60%)、“树叶”(30%),接近贪心搜索;高温(temperature→2)会拉平概率分布,让低概率词有更多机会,原分布可能变为 “的”(20%)、“树叶”(18%)、“天空”(17%),随机性增强。

从效果来看,temperature=0.1(低温)时,生成 “秋天的树叶变黄了,秋天的树叶落在地上”(连贯但重复);temperature=1.0(常温)时,生成 “秋天的树叶随风飘落,天空格外高远”(连贯且有变化);temperature=1.8(高温)时,生成 “秋天的雁群衔着夕阳,在云朵里种满桂花香”(有创意但可能偏离逻辑)。

使用时,追求严谨(如代码生成)可选择 temperature=0.2-0.5;平衡连贯与创意(如散文生成)可选择 temperature=0.8-1.2;追求极致创意(如诗歌生成)可选择 temperature=1.5-2.0。

2. Top-k 采样:限制候选词数量

Top-k(通常 10-100)的核心是只从概率最高的前 k 个词中随机采样,过滤掉低概率的 “离谱词”。

例如 k=3 时,只保留 “的”(30%)、“树叶”(20%)、“天空”(15%),从这 3 个词中按概率采样,忽略其他词(如 “电脑”“飞翔” 等)。

Top-k 采样的优势是能避免极端随机,过滤掉概率极低的无意义词(如 “秋天的电脑”),同时计算量降低,只需处理前 k 个词,无需考虑整个词汇表。不过它的 k 值较难确定,k 太小(如 k=2)会导致多样性不足,k 太大(如 k=100)则接近纯随机采样;而且它对概率分布敏感,若前 k 个词中有低概率但无意义的词(如 “秋天的 123”),仍可能被选中。

3. Top-p 采样(Nucleus Sampling):动态选择候选词范围

Top-p(通常 0.7-0.95)是比 top-k 更灵活的策略,累积概率从高到低叠加,直到总和达到 p,只从这些词中采样。

例如 p=0.6 时,“的”(30%)累积 30%(未达 0.6),加 “树叶”(20%)累积 50%(未达 0.6),加 “天空”(15%)累积 65%(达到 0.6),候选词为 “的”“树叶”“天空”,从这三个词中采样。

Top-p 采样的优势是能动态适应概率分布,在概率集中的场景(如 “秋天” 后高概率词少),自动减少候选词;在概率分散的场景(如 “我喜欢” 后可选词多),自动增加候选词;而且无需调 k 值,避免 top-k 中 “k 固定” 的问题,更鲁棒。不过它在极端情况下可能保留低概率词,若前 100 个词的累积概率才达到 p=0.9,可能包含部分低概率词。

实际应用中,top-p 常与 temperature 结合使用(如 p=0.9+temperature=1.0),既能保证多样性,又能避免无意义生成。

三、高效解码:投机解码如何让大模型 “加速说话”

基础解码策略(贪心、波束)虽能保证质量,但生成速度慢 —— 大模型(如 70B 参数)生成 100 词可能需要几秒,严重影响用户体验。投机解码(Speculative Decoding)通过 “小模型辅助大模型”,将推理速度提升 2-3 倍,成为大模型高效部署的核心技术。

传统解码的效率瓶颈

大模型生成文本时,每步都需要 “大模型计算概率→选词”,而大模型的单次计算成本极高(如 70B 模型一次前向传播需占用数十 GB 显存)。例如生成 100 词,需要调用大模型 100 次,耗时主要花在重复的大模型计算上。

投机解码的核心思路是用小模型提前 “猜词”,让大模型只 “验证” 而非 “从头计算”,减少大模型的调用次数。

投机解码的工作原理

投机解码需要两个模型配合:小模型(如 7B 参数)速度快但精度低,负责 “猜测” 候选词序列;大模型(如 70B 参数)精度高但速度慢,负责 “验证” 小模型的猜测。

具体步骤以生成 “秋天的树叶” 为例:首先小模型基于前文生成一段候选序列(如 “秋天的树叶”,长度 n=4);然后大模型一次性对候选序列的每个词进行验证,判断是否 “认可”,若认可前 m 个词(如 “秋天的”),则直接保留这些词,无需大模型重新生成,若第 m+1 个词(如 “树叶”)不被认可,则只保留前 m 个词,大模型生成第 m+1 个词(如 “叶子”);最后以 “已保留的词 + 大模型生成的词” 为新起点,重复上述步骤,直到生成结束。

例如小模型猜了 4 个词,大模型认可 3 个,则大模型只需生成第 4 个词,相当于 “用小模型的 1 次计算 + 大模型的 1 次计算” 生成 4 个词,而传统方法需要大模型计算 4 次。

投机解码的优化算法

基础投机解码仍有优化空间(如小模型猜词准确率低时,验证成本高),研究者们提出了多种改进算法。Adaptive Speculative Decoding(自适应投机解码)通过动态调整小模型猜词长度优化,小模型在擅长的领域(如日常对话)多猜词(n=5),在不擅长的领域(如专业代码)少猜词(n=2),这种方式比固定长度猜词减少 30% 的无效验证,进一步提升效率。Tree-based Speculative Decoding(树状投机解码)让小模型生成多个候选序列(如 2 个),大模型同时验证这些序列,选择最优的部分保留,能使猜词准确率提升 20%,尤其适合创意生成等需要多样性的场景。Rejection Sampling(拒绝采样)在小模型生成候选词时,只保留 “大模型可能认可” 的词(通过小模型模拟大模型的概率分布筛选),可减少大模型的 “拒绝率”,验证效率提升 15%。

投机解码的优势与局限

投机解码的优势明显,速度提升显著,在保持生成质量不变的前提下,推理速度提升 2-3 倍(如生成 100 词从 3 秒缩短到 1 秒);而且兼容性强,可与波束搜索、top-p 采样等策略结合,不影响生成质量;同时能减少大模型的计算量,降低部署时的算力成本。

不过它也有局限,需要小模型配合,小模型的质量直接影响猜词准确率,若小模型与大模型差异大(如小模型未对齐大模型的风格),可能导致频繁验证失败;而且猜词长度通常不超过 10 词,长文本优化有限。

目前,投机解码已成为 ChatGPT、Claude 等大模型的默认加速策略,是平衡 “质量” 与 “速度” 的最佳选择。

不同场景的解码策略选择

解码策略的选择需结合任务类型、模型大小和用户需求。代码生成任务要求严谨、无错误,适合采用贪心搜索配合 temperature=0.2,如 GitHub Copilot;机器翻译(正式)任务注重准确、连贯,可选择波束搜索(k=5)搭配 top-p=0.9,如专业翻译工具(如 DeepL);创意写作需要多样、有新意,top-p=0.9 结合 temperature=1.2 是不错的选择,如小说生成工具(如 Sudowrite);实时对话追求快速、流畅,投机解码加 top-p=0.95 较为合适,如 ChatGPT、Claude;诗歌生成侧重创意、韵律,可采用 top-p=0.8 与 temperature=1.8,如诗歌生成器。

结语:解码策略是 “模型的表达风格”

解码策略就像 “模型的表达风格控制器”:贪心搜索是 “循规蹈矩的好学生”,波束搜索是 “严谨细致的编辑”,随机采样是 “天马行空的诗人”,而投机解码是 “高效干练的助手”。

这些策略的演进,体现了大模型从 “能生成文本” 到 “能生成高质量文本” 再到 “能高效生成高质量文本” 的发展脉络。未来,随着模型能力的提升,解码策略可能会进一步与 “语义理解” 结合 —— 例如根据文本主题动态调整随机性(如科学主题降低随机性,艺术主题提升随机性),让生成不仅 “流畅”,更 “贴合场景”。

当我们惊叹于大模型生成的精彩文本时,别忘了背后 “选词” 的智慧 —— 每一个词的选择,都是解码策略与模型能力共同作用的结果。

本文由 @红岸小兵 原创发布于人人都是产品经理。未经作者许可,禁止转载

题图来自Unsplash,基于CC0协议

该文观点仅代表作者本人,人人都是产品经理平台仅提供信息存储空间服务

人人都是产品经理

人人都是产品经理

435 文章 58892 浏览次数 58654 粉丝

评论 (0)

睡觉动画