RCSD: Reinforcement and Continual Learning for Domain-Specific Speculative Decoding

Mingkang Liu, Weiming Meng, Peipei Jiao, Jiawei Zhang, Tianyuan Liu, Junyan Li, Lichen Pang · arXiv 2610.29527 · 发表 2026-10-21
11 分钟阅读时长 4096字 4.10综合分 第 3 名10-23 Infra 日报
目录 · 6 节1问题:草稿模型学的东西和它要做的事不一致2方法:拿大模型自己的输出当正例3结果一:接受长度在所有设置里都变长了4结果二:速度提升没有摘要说的那么大5论文没有回答的问题6实践意义
相关 4新颖 4实用 4证据 4时效 5

投机解码的做法是:先让一个小的草稿模型连猜几个 token,再让大模型一次性并行核对,猜对几个就收下几个。每轮平均收下的 token 数叫“接受长度”,它越长,大模型需要跑的轮数越少,生成就越快。草稿模型一般用蒸馏来训,也就是让它的输出分布尽量贴近大模型。海信的这篇论文认为这个目标选错了:核对时只看草稿给的 token 是不是大模型也会选的那个,草稿把排在最前面的几个候选排对就够了,不必把整个分布学像。作者提出的 RCSD(用强化学习继续训练草稿模型的框架)先用常规方法训好草稿模型,再用 DPO 或 GRPO 继续训练,训练数据全部由大模型自己生成,不需要人工标注,也不需要额外的奖励模型。在 Qwen3-1.7B 和 Llama-3.1-8B 上,接受长度在所有测试设置中都超过基线。不过论文摘要里的“平均提高 35%”和“端到端快 1.35 倍”,用正文自己的表格核算对不上,下文会具体说明。

1. 问题:草稿模型学的东西和它要做的事不一致

这篇论文的对照组只有一个,要先交代清楚。EAGLE 的草稿模型很小,除了看已经生成的 token,还直接读大模型的隐藏状态来猜下一个词。HASS(在 EAGLE 上训练草稿模型的一种蒸馏方法)就是对照组,RCSD 也是从训好的 HASS 草稿模型接着训。

蒸馏的损失是前向 KL 散度。它的特点是“全都要”:大模型认为有一点点可能的 token,草稿模型也得分一些概率过去,否则就会被罚。问题在于草稿模型比大模型小几个数量级,没有足够的容量把整个分布学像。于是它的容量被摊到了大量根本不会被选中的低概率 token 上。

作者用下图说明这种错位。接受与否只取决于草稿最看好的 token 和大模型最看好的 token 是否一致。左下角是理想情况:分布贴得近,最高点也对上了。右下角草稿的分布和大模型差得很远,KL 损失很高,但最高点仍然对齐,所以照样被接受。上面两幅则相反,最高点错开了,不管 KL 高低都会被拒。换句话说,KL 损失只是接受率的一个间接代理,而且是不太准的那种。

KL 损失与接受长度并不一致(论文 Figure 1)。实线是大模型(base model)的分布,虚线是草稿模型。左上:KL 低但最高点错开,被拒;右上:KL 高且最高点错开,被拒;左下:KL 低且最高点对齐,被接受;右下:KL 高但最高点对齐,仍被接受。
KL 损失与接受长度并不一致(论文 Figure 1)。实线是大模型(base model)的分布,虚线是草稿模型。左上:KL 低但最高点错开,被拒;右上:KL 高且最高点错开,被拒;左下:KL 低且最高点对齐,被接受;右下:KL 高但最高点对齐,仍被接受。

由此作者把目标改了:不再要求草稿“模仿整个分布”,而是让它把概率集中到大模型最可能选的那条路上,宁可放弃分布尾部。用论文的话说,从覆盖所有峰(mode-covering)改成只抓主峰(mode-seeking)。

2. 方法:拿大模型自己的输出当正例

两种训练方式都从训好的 HASS 草稿模型出发,并把这份初始权重冻结一份作参考,防止新模型偏得太远。

DPO 版需要成对的“好”与“差”序列。好的那条完全由大模型逐个 token 生成,代表草稿理想中应该猜出来的内容。差的那条是交替生成的:大模型先写 1 个 token,然后草稿模型不经核对、连着写 k 个,再换回大模型写 1 个,如此循环(DPO 版里 k 取多少,论文没有写明)。草稿自己写的部分往往会慢慢偏离大模型会写的内容,所以这条序列自然就是反例。训练时让草稿对好序列的概率相对参考模型上升,对差序列的概率下降。

这里有一个细节很关键:差序列里由大模型写的那些 token 在计算损失时被屏蔽掉。如果不屏蔽,训练会把这些本来就正确的 token 也当成错误来压低。另外,DPO 对序列长度敏感,所以好序列上也用了同样的屏蔽位置,保证两边比较的 token 数一致。

GRPO 版不再只比一对,而是对同一个提示准备一组序列:一条由大模型直接生成,另外三条由两者交替写:大模型写 1 个 token,草稿接着不经验证连写 个,再轮到大模型, 分别取 1、2、3。每条序列的得分由两部分相加,两部分都先在组内做标准化:一是大模型认为这条序列有多自然,用大模型给它的对数概率衡量,也就是每个 token 概率取对数后求和;二是这条序列里草稿写的 token 被大模型接受的比例。大模型直接生成的那条没有草稿 token,论文没有说明它这一项怎么算。组内得分高于平均的序列被加强,低于平均的被削弱。

RCSD 框架(论文 Figure 3)。左:投机解码时,核对结果把输出分成被接受和被提前拒绝的部分;右上(A):DPO 版,大模型生成的序列为正例,大模型与草稿交替生成的序列为反例;右下(B):GRPO 版,按接受率给一组序列打分。底部示意:训练后草稿的分布更集中在大模型的高概率 token 上。
RCSD 框架(论文 Figure 3)。左:投机解码时,核对结果把输出分成被接受和被提前拒绝的部分;右上(A):DPO 版,大模型生成的序列为正例,大模型与草稿交替生成的序列为反例;右下(B):GRPO 版,按接受率给一组序列打分。底部示意:训练后草稿的分布更集中在大模型的高概率 token 上。

两种方法的共同点是:正例、反例和分数全部由大模型自动给出,数据可以从线上请求或任意文本提示里批量构造。这也是标题里“持续学习”的出发点:上线后可以不断用新请求继续训练草稿。不过正文并没有做这类实验,后文会再提。

3. 结果一:接受长度在所有设置里都变长了

训练数据是 ShareGPT 对话的 90%。测试用 HumanEval(代码)、MT-Bench(多轮对话)、GSM8K(数学)和剩下的 ShareGPT,所以只有最后一个和训练数据同分布,这一点后面会用到。“步数”指每轮草稿连猜几个 token,测了 3 到 6。下表是按论文表 1、表 2 算出的四个测试集平均接受长度:

模型步数HASSHASS + DPOHASS + GRPOGRPO 相对提升
Qwen3-1.7B32.122.572.57+22%
Qwen3-1.7B62.262.973.00+33%
Llama-3.1-8B32.472.722.74+11%
Llama-3.1-8B62.783.263.29+18%

从这张表可以读出三点。

第一,提升是稳定的。两个模型、四个数据集、四种步数共 32 个组合,DPO 和 GRPO 都比 HASS 长,没有一个例外,所以这不是挑出来的好结果。

第二,猜得越多,提升越大。Qwen3-1.7B 在 GSM8K 上,步数 3 时提升 31%,步数 6 时到 49%。原因是接受是连锁的:第一个 token 被拒,后面的就全部作废。草稿每一步的命中率只要提高一点,连猜 6 个时被一路接受的概率就会放大。这意味着如果你的部署本来就用较长的猜测步数,这个方法的收益会更明显。

第三,GRPO 和 DPO 几乎打平。两者在平均值上最多差 0.03,单个数据集上也大多在 0.05 以内。GRPO 每个提示要生成四条序列,DPO 只要两条,所以从投入产出看 DPO 更划算。论文结论里说 GRPO 在训练早期收敛更快,但没有给出对应曲线。

还要注意两个模型的差别。Qwen3-1.7B 提升明显,Llama-3.1-8B 在代码、对话和数学上只提高 6% 到 11%,只有 ShareGPT 提高 24% 到 43%。ShareGPT 正是训练数据所在的分布,所以 Llama 上的大幅提升有一部分可能来自“训练和测试是同一种数据”,而不全是训练目标改对了的功劳。

4. 结果二:速度提升没有摘要说的那么大

接受长度变长要换成实际速度才有意义。作者在 SGLang 5.5.0 上用 Llama-3.1-8B-Instruct 测了每秒输出 token 数,结果如下(论文没写这组用的步数,图中的接受长度和上表步数 3 的数值一致):

数据集不用投机解码HASSHASS + DPOHASS + GRPOGRPO 比 HASS
HumanEval90.7163.1173.1173.81.07 倍
MT-Bench90.6134.2141.9143.11.07 倍
GSM8K90.8150.5159.7160.31.07 倍
ShareGPT90.2142.3176.1176.61.24 倍
吞吐(上)和平均接受长度(下)(论文 Figure 2)。灰色为不用投机解码,蓝色为 HASS,橙色为 HASS + DPO,红色为 HASS + GRPO。图注写的是 SFT 基线,图例写的是 HASS,二者指同一个对照组。
吞吐(上)和平均接受长度(下)(论文 Figure 2)。灰色为不用投机解码,蓝色为 HASS,橙色为 HASS + DPO,红色为 HASS + GRPO。图注写的是 SFT 基线,图例写的是 HASS,二者指同一个对照组。

最后一列是按表中数字算的,它说明速度收益主要来自同分布数据。在三个通用测试集上,新方法只比 HASS 快约 7%;只有在 ShareGPT 上快 1.24 倍。

摘要里的“比 HASS 快 1.35 倍”在这张图里找不到对应数字,结论部分又写成“1.2 到 1.35 倍”,两处说法也不一致。“接受长度平均提高 35%”也只在 Qwen3-1.7B 步数 6 附近勉强对得上,那里是 33%。Llama-3.1-8B 的平均提升只有 11% 到 18%,所以这两个宣传数字应当看成最好情况,而不是平均水平。

接受长度提升 11%,速度却只快 7%,这个差距也合理。每一轮除了草稿猜测,还有大模型核对和调度开销,这部分不会因为猜得更准而变少。所以接受长度的提升要打个折扣才能变成吞吐。

5. 论文没有回答的问题

  • 质量没有测。论文多次说“不影响生成质量”。按投机解码的标准核对规则,最终输出确实由大模型决定,理论上应该如此。但实验部分没有任何质量指标,在采样温度不为 0 或用了近似核对的部署里,这一点需要自己验证。
  • 标题里的“持续学习”和“特定领域”都没有实验。训练和测试都是通用数据集,没有做“上线后用新请求不断训练”的实验,也没有某个垂直领域的评测。
  • 方法描述前后有出入。Figure 3 左侧说正例和反例来自核对时被接受和被拒绝的 token,而方法章节写的是“大模型单独生成”对“大模型与草稿交替生成”。实验用的是后者。
  • 缺少成本数据。论文没报告构造数据和继续训练要花多少 GPU 时间,也没和其他非蒸馏的草稿训练方法比较,只和 HASS 一个基线比。
  • 吞吐只测了一组配置:一个模型、一个推理框架、一种步数,没有测不同并发下的表现。

6. 实践意义

如果你已经在线上用 EAGLE 或 HASS 类的草稿模型,这篇论文给出一个成本不高的后续步骤:用大模型对线上或离线提示生成一批回答,再按“大模型单独写”和“大模型与草稿交替写”构造正反例,对现有草稿模型做一轮 DPO。整个过程不需要标注,也不改推理代码。

预期收益要按自己的流量来估。如果训练数据和线上请求同分布,接受长度可能提高两成以上,吞吐提高一到两成。如果分布不同,按论文在 Llama 上的通用测试集结果,吞吐大约只多 7%。GRPO 比 DPO 多花一倍的生成成本,收益几乎相同,可以先不做。上线前需要自己补上论文缺的两项检查:输出是否与不开投机解码时一致,以及继续训练的 GPU 开销。

读完这篇,你觉得

点一下即可,无需登录;再点一次撤回。只统计匿名次数,不记录你是谁。

讨论

欢迎补充实验细节、复现经验或不同看法。需 GitHub 登录。

正在加载讨论…