投机解码是提升大模型推理速度的关键方式之一,其优势在于利用 drafter-then-verfiy的范式,很大程度解决了自回归解码一次仅生成一个token的局限,很多推理架构也配置了该特性。本文围绕投机解码主要讨论以下问题:
1)投机解码的定义和组成部分drafter和verfiy介绍 2)两类草稿模型设计的过程以及优缺点。 3)介绍贪婪解码和投机采样,两种验证规则如何平衡输出质量和效率。
投机解码是一种先草稿后验证(Draft-then-Verify)的解码范式,在每一步解码过程中,草稿模型先高效的生成多个草稿token,然后使用目标大语言模型,一次性的并行验证所有草稿token是否可接收,进而达到一次解码输出多个token的效果,实现大模型推理速度的加倍。
由定义可知,投机解码主要由两部分组成:Drafting 草稿模型和 Verification验证规则。

为了方便投机解码的公式定义,先来看下必要的自回归解码公式。
给定输入序列 ,自回归解码大模型 ,其生产下一个token 的公式为:
其中的q表示自回归解码模型在给定输入数列情况下,得到的条件分布概率。 从q采样得到输出token x。
草稿模型 ,主要任务是根据输入序列 ,高效的生成K个未来草稿输出 。
其中K表示草稿模型预测的token数, 表示各种草稿模型设计实现, 表示K个条件概率分布。
草稿模型生成了K个草稿token,需要使用目标大语言模型 进行验证,并根据接受规则检验草稿token是否可接收。
通过目标大模型一次并行得到K个草稿模型的条件概率分布。之后需要使用验证规则 验证是否可接收。
通过以上公式可知:最终大模型的解码速度取决于,每一步解码中多个草稿token 的接收率。而接收率由多个因素决定,包括:草稿token的质量,验证标准,草稿模型和目标模型的一致性。
首先从drafter的生成token的质量说起。
草稿模型对推理速度有重大影响,关键体现在两个方面,草稿模型的推理准确度(高质量)和草稿模型推理延时。其主要解决的问题是,如何在较低的推理延时下保证高质量的输出。目前主流的草稿模型设计分为以下几类:独立草稿生成(Independent Drafting)和 自草稿生成(Self-Drafing)
模型:
一般采用与目标大模型同系列的,独立小型语言模型作为草稿生成模型,如 Llama-7B、Mistral-7B 等。而目标模型通常为上百亿的大语言模型,如 Llama-70B、GPT-4、PaLM 等。
优势:
不足:
模型:
仅依赖目标大模型自身完成草稿生成,通过调整生成策略,如低温度采样、小批次快速生成、截断式解码等,产出草稿序列,无需引入额外模型。
优势:
不足:
在解码的每一步,生成的多个草稿token需要经过并行的验证,来保持与大语言模型输出的一致性。验证规则大体可分为:贪婪解码和投机采样。
贪婪解码就是每次仅选择概率字符最大作为输出token。对于k个草稿token通过以下公式获得。
定义草稿token第一个验证失败的token位置为c,称之为分岔点。在分岔点之后的草稿token会被丢弃。分岔点处的token使用大语言模型模型的top-one输出代替。
小结:贪婪解码一般导致较低的接收率,因为只有和大模型top-one输出相同的草稿token才会被接收。
为了保证高的接收率同时保证输出分布和目标大语言模型保持一致,设计了投机采样。
公式中r是从0到1均匀分布中取到的随机数, 和是关于草稿token 在草稿模型和目标大语言模型的条件概率。由公式可知到 时,草稿token时被接收的,反之被拒绝。
在分岔点c的token,采用了修正规则,重构分岔点 c 处的概率分布后,重新进行随机采样得到token。
通过对比大小模型的概率差,构建新分布,让分岔点的概率即保留了小模型 “快速草稿” 的效率,又使用大模型高置信度进行了修正。
小结:以上投机采样的token输出分布经过多位学者的理论证明,是和大模型输出token的分布一致的,所以被广泛的采用。
通过介绍投机解码的定义和公式,也算是对其提高推理的速度的原理略知一二了。有几个关键的问题:
通过增大草稿小模型,复杂化生成策略等,提升了草稿token的质量后,其生成的速度会降低。但高效的生成速度,可能会影响质量,导致较低的接收率影响整体的推理速度。目前的解决方案是,将小的草稿模型和目标大语言模型进行对齐(Behavior Alignment)。对齐的方式一般采用知识蒸馏(Knowledge Distillation),也存在一些潜在的方向值得研究[1]
现在基于文本的投机解码开始大量应用,但是对于多模态的解码,仍有大量的工作需要研究。
参考: [1] arxiv:2401.07851
更多精彩:
历史文章: