大模型逐字生成慢,是因为每出一个字都要过一遍全部参数。投机解码找了个聪明的杠杆:让小模型先起草几个字,大模型一次验一串,猜对就白赚速度,猜错就地回退。豆包、DeepSeek 的推理优化里都有这类技术,本文拆解起草、验证、回退三步。
分工:小模型起草、大模型批卷
草稿模型是小几号的学生,速度飞快,一口气先写 3 到 5 个字;目标模型不逐字写,而是把这串草稿一次性并行验证——普通生成一个字算一遍,验证 5 个字也只算一遍,这就是提速的来源。验证用的是目标模型自己的概率:每个草稿字逐一对照,符合就收编,不符合就断。张量是什么那篇讲的一次前向能处理一串序列,正是并行验证的基础设施——大模型的算力本来就是按整段设计,让它一个字一个字干才是浪费。
| 环节 | 谁来做 | 一次处理几个字 |
|---|---|---|
| 起草 | 草稿模型 | 3 到 5 个 |
| 验证 | 目标模型并行 | 一串草稿一次算完 |
| 收编或回退 | 目标模型 | 分歧处之后整串作废 |
一次验一串:省时逻辑
验证环节全按目标模型的分布来,收下的字与目标模型自己写的完全一致,所以输出质量不打折——这是它和「换小模型糊弄」的本质区别。量化感知训练是怎么回事那篇的压缩、前缀缓存是怎么命中的那篇的复用,都能与它叠加使用,各自省不同的钱。命中率高时一顶五回,速度接近翻倍;命中率低时白验一通,反而变慢,所以草稿模型好不好,全看它像不像目标模型的影子。
投机解码速查表
- 草稿长度 3 到 5 字常见,太长验证浪费
- 命中率高整体加速明显,命中率低反而变慢
- 输出与目标模型分布一致,质量不打折
- 评估加速效果前,先看你的任务草稿命中率高不高
猜错怎么办:回退点怎么选
草稿在头一个分歧处被否,目标模型就用自己这一步的采样结果顶上,后续草稿整串作废,从分歧点重新走。回退不丢质量,只丢时间——所以草稿模型越懂目标模型的文风,命中越高、加速越猛。指令放长文前后为什么效果不同那篇讲的注意力分配、上下文压缩是怎么做的那篇的历史管理,都会影响草稿模型的发挥:上下文干净一致,草稿才猜得准。
关于投机解码的三个常问问题
- 猜错回退会改变回答内容吗?:不会,验证严格按目标模型分布进行,被否的部分本来就不是目标模型会写的,收下的与它自己写的一致。
- 什么任务加速最明显?:模板化、可预测性强的内容命中率高,加速明显;高度随机的创作类任务草稿老猜错,收益打折甚至倒贴。
- 为什么不直接用小模型回答?:小模型质量差,投机解码让大模型守质量、小模型出速度,分工不越界,这是它与降质方案的根本差别。
把它想成师徒流水线:徒弟打草稿,师父批卷,错的推倒重来,对的照单全收。再把边界说清楚:这套加速成立的前提是草稿模型和大模型口味接近,草稿越准,回退越少,省得越多;如果两个模型分布差距大,猜十次错九次,批量验证白算,反而更慢。接受长度是衡量效果的核心指标,实践中常在二到四个词之间波动,任务越常规越高。另外它省的是时间不是算力,总计算量甚至略增,所以它适合延迟敏感的场景,不适合吞吐打满的离线批处理——那里反正不缺时间。看评测数据时也要多问一句:加速比是在什么接受长度、什么硬件上测的,脱离这两项的数字没有参考价值。另外它和缓存、量化这些优化互不冲突,可以叠加使用,这也是它在生产环境里受欢迎的原因。


