
2024 年,如果你去看主流的投机解码方案,会发现一个挺奇怪的现象。
像 EAGLE3 这样的方法,为了让小的草稿模型能更准确地预测大模型接下来要说什么,会去"偷看"大模型内部几层的隐藏状态,拼起来喂给草稿模型。但这几层到底选哪几层,答案居然是一个写死的公式:第 2 层、中间层、倒数第 3 层。
没有人仔细问过,为什么是这三层。为什么不是第 5 层、倒数第 2 层、再加一个中间偏后的层?这篇来自高通 AI Research 和斯坦福的论文,就是冲着这个问题去的。他们给出的答案有点出人意料:选对层之后,哪怕只用一层,效果都能逼近甚至超过默认选三层的方案。
### 投机解码到底在"投机"什么
先说清楚背景。大语言模型生成文字很慢,因为每蹦出一个词都要完整跑一遍几十亿参数的网络。
投机解码*:用一个小的"草稿模型"先快速生成几个候选词,再让大模型一次性批量验证这些候选词对不对,对的就直接采纳,省掉逐词计算的时间。
草稿模型越准,一次能"蒙对"的词就越多,加速效果就越好。而 EAGLE3 这类方法让草稿模型变准的办法,是直接把大模型内部某几层的隐藏状态接过来当参考信息。
隐藏状态*:神经网络每一层处理完输入后留下的中间结果,可以理解成大模型"思考到一半"时脑子里的状态快照。
问题来了,一个 36 层的大模型,到底该拿哪几层给草稿模型看?如果只选一层,36 选 1 有 36 种可能。如果选三层,组合数直接飙到几千种。穷举是不可能穷举的,所以过去大家图省事,干脆用个位置公式一刀切:开头取一层,中间取一层,结尾取一层。
这个公式能跑通,但没人解释过它为什么能跑通,更没人验证过它是不是最优解。这篇论文想做的,就是把"拍脑袋选层"变成"有理有据选层"。
### 用信息量给每一层打分
研究者想到的第一个工具是矩阵熵。
矩阵熵*:衡量一组高维向量里信息分布得有多"丰富"的指标,数值越高,说明这些向量包含的独立信息越多,越不是在重复表达同一件事。
具体算法是这样的:把某一层所有 token 位置的隐藏状态堆成一个矩阵,对这个矩阵做类似主成分分析的分解,看奇异值分布得散不散。如果一个矩阵的能量都集中在一两个主方向上,说明这层的信息很单一,熵就低。如果能量分散在很多方向上,说明信息丰富多样,熵就高。
论文在 Qwen3-4B 和 Llama-3.1-8B 两个模型上画出了每一层的熵曲线,结果出乎意料:熵值随着层数变化,呈现出一种"先高、骤降、再爬升、最后回落"的波浪形状,论文管这个叫"激活波"。拿 Qwen3-4B 来说,前 6 层熵值较高且波动大,中间 7 到 28 层熵值走低后缓慢回升,最后 29 到 35 层又冲到波峰。
这其实是个挺直觉的发现,但没人之前系统画出来过。网络最开始几层还在处理原始词向量,信息比较杂,熵自然高;进入中间层之后,网络开始做抽象和压缩,信息变得集中,熵走低;到了最后几层,网络要为生成下一个词做准备,重新展开信息,熵又上升。
这就好比你早上刚起床脑子里乱糟糟什么念头都有(熵高),工作到中午全神贯注做一件事(熵低),下午快下班前又开始规划晚上吃什么、要不要健身、明天开什么会(熵又高)。网络内部信息的"忙碌程度"不是均匀分布的,有自己的节奏。
如果不承认这个节奏,继续用位置公式死板地切三刀,很可能恰好切在熵值最低的那几层上,拿到的信息既不丰富也不独特。
### 两层拼起来,比单独两层都强吗
知道单层的熵高低还不够,因为投机解码要同时用多层拼接的信息。于是问题变成:两层拼在一起,会不会比单独看任何一层都更有信息量?
论文做了个实验:挑出单层熵最高的 10 层作为"种子层",再把它们分别和网络里其他所有层两两拼接,算拼接后的熵。结果发现,拼接效果差异巨大。有些层对拼在一起后熵暴涨,说明两层信息互补;有些层对拼起来熵几乎没涨,说明两层在说同一件事,属于浪费。
更关键的是,不同种子层"喜欢"搭配的伙伴层也不一样。第 28 层拼第 35 层效果好,不代表第 27 层拼第 35 层也一样好。
这说明一个朴素的贪心策略行不通:你不能先挑出熵最高的三个单层,直接把它们拼在一起,因为单层最优不等于组合最优。这就像组篮球队,你不能把联盟里个人得分最高的五个人凑一队,因为他们可能都想自己单打,互相之间没有配合增益,真正厉害的阵容讲究的是互补。
基于这个发现,论文设计了一套名叫 ELSI 的算法。
ELSI*(Entropy-based Layer Set Iteration,基于熵的层集合迭代):一种用束搜索(beam search)的方式,逐步从单层扩展到多层组合,每一步都挑选能让拼接熵增长最多的层加入集合的算法。
束搜索*:一种不做穷举、但也不是贪心到只看眼前一步的搜索策略,每一步保留若干个最有希望的候选分支,往后继续扩展,兼顾效率和搜索质量。
ELSI 的流程是,先选出单层熵最高的若干层作为候选起点,然后尝试给每个起点加一层,看哪几个组合拼接后熵最高,留下排名靠前的几个组合继续往下扩展,直到凑够目标层数。整个过程不需要穷举几千种组合,但又比纯贪心更全面,因为同时维护了多条候选路径。
### 光看信息量不够,还得看"够不够不一样"
熵能告诉你一个层集合信息量大不大,但没法告诉你这些层之间有多相似。如果三层熵都很高,但彼此表达的内容高度重合,那拼起来其实还是在浪费带宽。
于是论文引入了第二把尺子,叫中心核对齐。
CKA*(Centered Kernel Alignment,中心核对齐):一种衡量两组表示有多相似的方法,数值在 0 到 1 之间,越接近 1 说明两层几乎在编码同样的信息,越接近 0 说明两层差异越大。
论文把所有层两两之间的 CKA 值画成一张热力图,还顺带计算了"转折分数",也就是相邻层之间 CKA 值变化有多剧烈。转折分数高的地方,说明网络的表示方式在这里发生了明显跳变,可以看作是一个天然的"分区边界"。
两个模型的热力图长得很不一样。Qwen3-4B 转折点比较多,中间还能分出两大块相对独立的区域,说明这个模型内部层与层之间的"个性"差异比较大。Llama-3.1-8B 则相反,除了最开头和最末尾,中间一大片层的 CKA 值都接近 1,说明这部分层彼此高度相似,互相可以替代。
这个发现直接解释了为什么默认的位置公式在某些模型上效果还不错。如果一个模型的中间层本来就高度冗余(就像 Llama 那样),随便从中间挑一层和挑另一层,效果差别都不大,这时候位置公式蒙对的概率自然高。但如果模型像 Qwen3-4B 那样中间层分区明显,位置公式选在哪个分区边界内,结果差异就会很大。
拿装修打比方,如果一套房子每个房间风格都差不多,随便挑哪个房间拍照当样板间问题都不大。但如果这套房子客厅、厨房、卧室风格完全不同,你要是闭着眼睛挑房间,拍出来的效果就可能很不理想。CKA 转折图,本质上就是帮你提前看清楚"这套房子有几个风格分区",让你不用赌运气。
基于这两把尺子,论文又设计了 ELSI 的升级版 ELSI-C。
ELSI-C*:在 ELSI 的基础上,扩展新层时不再只看熵,而是优先挑选 CKA 转折分数高的候选层,也就是那些和当前已选层差异最大的层,用来保证多样性。
### 光算高熵还不够,得先把"废话"token 滤掉
做这套分析之前,论文还发现一个麻烦事:同一层的熵值,会因为输入的文本不同而剧烈波动。图 1 里能看到,不同 prompt 下同一层的熵曲线波动很大,尤其是最开头和最末尾那几层,波动幅度格外夸张。
这就带来一个实际困境:你总不能让模型为每个不同的输入句子换一套层的选择方案,层集合一旦定下来,就要在训练和推理中始终保持固定。如果熵值统计本身就很不稳定,那基于熵选出来的层集合也会跟着不靠谱。
论文的解决办法是先过滤掉"没什么信息量"的 token。
Token*:模型处理文本时的最小单位,可以粗略理解成一个词或词的一部分。
预测熵*:模型在预测下一个 token 时,对所有候选词的概率分布算出的熵,熵低说明模型很确定接下来该写什么(比如写完"今天天气",大概率接的是"很好"或"不错"这种常见搭配),熵高说明模型面临真正的选择难题。
论文的做法是只保留预测熵排名前 30% 的 token 位置(ρ=0.3),把那些模型"闭着眼睛都知道该写什么"的 token 对应的隐藏状态直接扔掉,只用真正有决策难度的 token 来统计层的熵值。
这步操作听起来像是个细节,但效果立竿见影:过滤后,跨 prompt 的熵值方差在前段层降低了 48.4%,中段层降低 45.8%,末段层降低 35.6%,而"激活波"的整体形状没变。
这就好比你要给一个班级的学生摸底考试打分,如果把那些闭卷都能蒙对的送分题也算进总分里,每个学生的分数都会被这些送分题拉得差不多,真正拉开差距的难题反而被稀释了。把送分题剔除出去,只看难题的得分,排名才能真正反映出谁强谁弱。
### 实际跑分:选对层真的更快吗
说了这么多理论,最后还是得看投机解码跑起来效果怎么样。论文在 SpecBench 这个评测集上做了全面测试,衡量指标是平均接受 token 数(τ),也就是草稿模型一次性蒙对了几个词被大模型采纳,这个数字越高,意味着越少需要大模型逐词计算,解码速度也就越快。
| 方法(Qwen3-4B,30节点,T=0.0) | 选用层 | 平均接受token数 |
|---|---|---|
| EAGLE2(单层默认) | {L35} | 4.00 |
| EAGLE3(三层默认) | {L2, L18, L33} | 4.20 |
| ELSI(单层,m=1) | {L28} | 4.24 |
| **ELSI(三层,m=3)** | {L5, L23, L35} | **4.29** |
| 低熵对照组 | {L0, L1, L35} | 4.04 |
表格里最值得玩味的一行是 ELSI 单层方案。EAGLE3 要动用三层信息才能拿到 4.20 的分数,而 ELSI 只挑一层(第 28 层)就跑到了 4.24,反而更高。这说明选对一层,比瞎选三层还管用。
在 Llama-3.1-8B 上结果略有不同,ELSI 单层能达到 EAGLE3 三层效果的约 99%,但继续增加层数几乎没有额外收益,三种层数下的平均分差距只有 0.017。论文把这归因于前面提到的 CKA 热力图:Llama 中间层本来就高度冗余,多选几层本质上是在重复拿相似信息,边际收益自然很低。
论文还特意训练了一个"反例":故意选熵最低的三层({L0, L1, L35})作为负对照。这组在所有测试条件下都表现最差,证明低熵的、信息重复度高的层组合,确实没法给草稿模型提供有效的参考信号。
这个结果也呼应了前面那个篮球队的类比。选层不是选"个体最强",而是选"组合起来信息最互补",低熵对照组就像是硬凑了一队能力和打法都差不多的球员,看着人数够了,实际配合效果反而不如精心搭配的阵容。
Q&A
Q1:ELSI算法是什么?
A:ELSI全称Entropy-based Layer Set Iteration,是一种基于矩阵熵的层选择算法,通过束搜索逐步扩展层组合,每一步都挑选能让拼接后熵值增长最多的层加入集合,用来给投机解码的草稿模型找到最有信息量的目标模型隐藏层组合。
Q2:为什么投机解码要选择大模型的多层隐藏状态?
A:因为草稿模型需要参考大模型内部的思考过程才能更准确地预测下一个词,而不同层编码的信息并不相同,选对层能让草稿模型蒙对更多候选词,从而减少大模型逐词计算的次数,加快整体生成速度。
Q3:ELSI选层方法真的比EAGLE3默认规则效果好吗?
A:论文实验显示,在Qwen3-4B模型上,ELSI选出的三层组合比EAGLE3默认的[2, N//2, N-3]规则平均接受token数提高1.6%到2.2%,甚至ELSI只选一层也能达到或超过EAGLE3三层的效果。
好文章,需要你的鼓励
RGPO用"临时脚手架"破解大模型强化学习的奖励稀疏难题:先让模型独立解题,失败则分段放出标准解法引导重写,仅采纳经验证更优的答案。难题测试准确率从0跃至99.5%,语言模型平均分高出最强基线5.0分。
论文提出用MoE模型的路由器输出作为跨语言对齐目标,通过持续预训练对翻译句对施加路由KL散度损失,在不改变分词和架构的前提下让隐藏表示更接近,并在四个开源MoE模型、七种语言上验证了下游任务性能的一致提升。
DiffGate提出难度门控的教师指导机制,让验证器决定何时需要教师介入,仅对失败且困难的轨迹提供有界教师指导,结合GRPO强化学习,在数学与代码任务上显著提升解题覆盖率与跨领域迁移能力。
研究者用固定不变的16位二进制编码替代传统可训练词嵌入表,在17亿参数规模模型上训练1000亿token,证明模型仍可获得实质语言能力,揭示输入表并非必需,但性能略逊于可学习方案。