香港科技大学与MetaX联手:让AI回答问题的速度快13%秘诀
这项由香港科技大学、MetaX、浙江师范大学和苏州大学联合完成的研究,于2026年5月以预印本形式发布在arXiv平台,论文编号为arXiv:2605.07243v1。研究的核心成果被命名为SpecBlock,是一种加速大型语言模型(AI聊天系统)推理速度的新方法。对普通用户而言,这项研究意味着你与ChatGPT等AI系统的对话响应速度有望显著提升,而背后消耗的计算资源却更少。
**AI聊天为什么有时候那么慢?**
每次你向AI助手提问,它给出回答的方式并不像人类一口气说完一句话,而是像一个一个地往外吐字,每吐一个字之前都要在脑子里过一遍所有可能性。这个过程非常耗时,就好比一个厨师每做一道菜都要重新把整套厨具从仓库搬出来,用完再放回去,然后再搬出来做下一道——效率极低。
计算机科学家们早就发现了这个问题,并想出了一个叫做"推测解码"(speculative decoding)的方案。这个方案的思路很直接:与其让大厨亲自做每一道菜,不如让一个小学徒先快速猜出接下来几道菜是什么,备好食材,然后让大厨一次性检验学徒的猜测,对的就直接端上桌,错的才由大厨亲自重做。这样大厨的时间就能集中用在"审核"上,而不是逐字逐句地"烹饪"。
SpecBlock在这个框架的基础上更进一步,解决了此前方案中存在的一个根本矛盾:如何让学徒既猜得快,又猜得准?
一、两种学徒的困境
在SpecBlock出现之前,学徒们分成了两个极端流派,各有各的毛病。
第一种学徒叫做"自回归式学徒",代表是业界标杆EAGLE-3。这种学徒的工作方式非常严谨:猜完第一个词,才去猜第二个词,猜完第二个词,才去猜第三个词,每一步都依赖上一步的结果。这样的好处是猜测的逻辑连贯,大厨审核时发现猜对的概率很高——实验数据显示,平均每次审核能确认大约6个词是正确的。但缺点是速度太慢,学徒每猜一轮就要单独做一次"脑力运算",哪怕学徒的脑子比大厨小得多,这种一轮一轮的运算加起来,仍然占据了整个系统时间的将近30%。
第二种学徒叫做"并行式学徒",代表是Medusa和ParallelSpec。这种学徒很聪明地决定:一次性把未来好几个词全部同时猜出来,不管前后顺序,全靠直觉。这样速度极快,学徒的运算时间只占总时间的6%到9%。然而问题来了——因为每个词都是独立猜测的,猜第三个词的时候完全不知道第二个词猜的是什么,猜出来的词组合在一起往往驴唇不对马嘴,大厨一审核发现逻辑混乱,大部分猜测都要否定,学徒的努力白费了大半。
这就是SpecBlock要解决的核心矛盾:能不能有一个学徒,既像第二种那样"批量猜测"节省时间,又像第一种那样保持前后词之间的逻辑联系?
二、SpecBlock的解题方案:分块猜测
SpecBlock给出的答案可以用一个词概括——"分块"。
具体来说,学徒不再是一个词一个词地猜,也不是把所有词一次性独立猜完,而是每次猜出一个"块",每个块包含K个词(实验中K=4)。在这一个块内部,K个词不是彼此独立的,而是有前后依赖关系;但整个块只需要做一次脑力运算,而不是K次。
这就像一个厨师学徒不再一道菜一道菜地备料,而是把四道相关联的菜打包成一套"套餐",一次性备好所有食材,但四道菜的食材之间有合理的搭配逻辑,不是随机拼凑的。
当第一个块猜完之后,学徒会从这个块的某些位置出发,再猜出第二个块,形成一个"树状"的猜测结构:多条分支同时延伸,但每条分支内部的逻辑是连贯的。大厨最终一次性检验这整棵"猜测树",找出其中最长的正确链条,直接接受。
为了让块内的K个词真正保持前后依赖关系而不是各说各话,SpecBlock发明了一个精巧的机制,叫做"逐层位移"(layer-wise shift)。
三、逐层位移:让猜测有记忆
要理解逐层位移,可以把学徒的"脑子"想象成一栋多层的楼房,每一层都会对输入的信息进行一轮加工,然后把加工结果传给上一层,最终从楼顶输出答案。
普通的并行猜测方式下,四个词同时进入这栋楼,每个词都走自己的楼梯,互不干扰。虽然它们在同一栋楼里,但彼此之间的信息交流非常有限——好比四个人各走各的电梯,虽然在同一栋楼里,但几乎没有交流。
逐层位移的做法是:在每两层楼之间,第k个词在经过某一层之后,会把自己这一层的"加工结果"传递给第k+1个词,让第k+1个词在进入下一层之前先接收这份信息,再结合自己的情况继续往上走。换句话说,每个词在进入每一层新楼层之前,都会先"听一听"前一个词走完这层之后的心得体会。
这个设计的效果非常显著。实验数据显示,去掉这个机制之后,系统的平均猜测正确数量从4.41个词降到4.02个词,整体加速比从3.21倍降到2.95倍。长文本生成任务受影响最大,比如写作任务损失了0.39倍的加速比,因为越长的回答,后面的词对前面的词依赖越深。
四、"等级预测头":聪明地分配猜测资源
学徒猜词的时候,有些位置非常有把握——大厨几乎一定会选择某个词,这种情况只需要猜一个备选就够了,猜多了是浪费。另一些位置则很不确定,大厨可能会选择好几种词中的任意一种,这时候猜更多备选才能提高命中率。
SpecBlock为学徒配备了一个"等级预测头"(rank head),专门负责在每次猜词时判断"大厨最终选择的词,在我的备选名单里排第几",并将这个排名归为四个等级:第一名(最有把握)、二到四名(比较有把握)、五到十名(不太确定)、十名以外(非常不确定)。
根据这个等级,学徒会为这个位置安排不同数量的备选词。排名预计在第一的,只需要提供少量备选;排名预计在十名以外的,就多提供几个备选,增加命中机会。更重要的是,等级预测头还会决定哪些位置值得"开枝散叶",成为第二个块的起点——毕竟如果第一个块的某个词都很难猜中,从那里继续往后猜,大概率只是浪费计算资源。
研究团队在大约七万两千个验证样本上测试了这个等级预测头的准确性。结果显示,对于最有把握的情况(目标词排第一),预测精确率高达97.8%;对于最没把握的情况(目标词排在十名之外),预测F1分数也达到了0.822。中间两个等级由于样本本身就比较模糊,预测难度更大,F1分数在0.46到0.50之间。总体而言,这个头的预测质量足以有效引导资源分配。
五、"有效前缀课程":只在有意义的地方学习
训练学徒的方式也大有讲究。传统的自回归学徒在训练时,每猜一个词都是拿着正确答案作为背景去猜下一个词——就好比学生做填空题,每一空的答案都是已知的,根据前面已知答案去填下一空。这种方式的好处是每道题都有明确的标准答案,学习效率高。
SpecBlock的学徒无法这样做,因为它是一次性同时猜出K个词的,后面的词只能依靠前面词的猜测结果,而不是正确答案。如果第一个词猜错了,大厨在审核时会直接切断这条路,后面的词根本不会被接受。但如果仍然用正确答案来督导第二、第三个词的训练,那学徒实际上是在一种"永远不会真正遇到"的情境下练习,学了也没用。
SpecBlock的解决方案叫做"有效前缀掩码"(valid-prefix mask)。规则很简单:在同一个块里,只要某个位置的猜测已经猜错了,从这个位置往后的所有位置的训练损失全部归零,也就是说不计入学习成绩。学徒只在猜对的前提下继续学习,一旦猜错,就停止在这条路上的学习。
实验证明,去掉这个机制后,平均加速比会从3.21倍降到3.06倍,猜中的词数量也相应减少。这个效果乍看不大,但考虑到它本质上是在解决"训练场景与真实场景不一致"的问题,能有这样的提升已经相当有价值。
六、"成本感知老师":在服务中持续进化
学徒在正式上岗之前经过了训练,但上岗之后面对的用户问题五花八门,有时候会遇到训练时从未见过的问题类型。这时候学徒的猜测准确率就会下滑,大厨审核时发现猜对的词越来越少,整体速度也随之下降。
SpecBlock提出了一个在"工作中学习"的机制——"成本感知老师"(cost-aware bandit)。这个机制利用了大厨审核过程中产生的"免费信息":每次大厨拒绝一个猜测时,它会同时告诉学徒自己本来想要哪个词,以及这个词在学徒的备选名单里排第几。学徒可以利用这份反馈来更新自己的知识。
关键的问题是:什么时候更新,更新多少?每次更新都是有代价的,大约相当于一次完整的大厨审核所花的时间。如果更新太频繁,省下来的时间都被更新消耗掉了,反而得不偿失。
这个"老师"采用了一种叫做"老虎机算法"(bandit algorithm)的策略,在三个选项中动态选择:完全不更新(当学徒当前表现还不错时);只更新输出层(等级预测头和词汇输出头,更新成本极低,大约只有全量更新的百分之一);全量更新学徒的所有参数(成本高但效果最好)。每次选择时,老师会估算不同操作带来的预期收益,只有当预期收益超过更新成本时,才会选择更新,而且会选择性价比最高的那种更新方式。
在工程实现上,为了不让训练打断正常的推理服务,系统维持着两份学徒的副本:一份专门用于推理,一份专门用于训练。训练在大厨审核的空隙时间里悄悄进行,训练完毕后再把更新后的参数同步到推理副本。这样用户完全感知不到后台的学习过程。
七、实验结果:数字说明一切
研究团队在三种不同规模的大型语言模型上验证了SpecBlock的效果:Llama-3.1-8B(80亿参数规模的对话模型)、Qwen3-8B和Qwen3-32B(320亿参数规模的模型)。测试覆盖了六类任务:多轮对话、代码生成、数学竞赛题、指令跟随、问答和翻译。所有测试在单张英伟达A100-80GB显卡上进行,每次批量处理一个请求。
与不用任何加速技术的原始AI相比,SpecBlock在Llama-3.1-8B上实现了平均3.21倍的速度提升,代码生成任务上更是达到了3.92倍。与最强的对比方法EAGLE-3相比,SpecBlock的平均速度提升幅度在各种配置下高出8%到13%,而学徒的运算时间仅占整体的14%到16%,相比EAGLE-3的30%到31%,节省了将近一半的学徒成本。
加入"成本感知老师"之后,在有足够流量的任务上(问答、翻译、指令跟随、数学题),速度提升进一步扩大到超越EAGLE-3的11%到19%。单域任务(如问答和数学题)的提升最为明显,因为持续接触相似类型的问题让学徒能快速适应该领域的语言模式;而混合多种指令类型的任务(如Alpaca指令集)提升幅度较小,因为各种类型问题的梯度信号互相抵消,学习效率较低。
值得关注的是,对话生成(MT-Bench,仅80个样本)和代码评测(HumanEval,仅164个样本)这两个任务的样本量太少,不足以让老师的价值估计收敛,因此这两项没有启用动态更新功能。这说明"成本感知老师"需要足够的流量才能发挥效果,对于请求量很少的场景,静态的SpecBlock已经足够。
在消融实验(逐一去掉某个设计组件看效果变化)中,去掉逐层位移造成的损失最大;去掉前缀广播(把大厨提供的上下文特征同步给块内所有位置的机制)次之;去掉有效前缀课程排第三;去掉等级预测头的影响相对最小但仍然可见。在适应机制的消融中,去掉成本感知判断(变成每次都更新)会让平均速度降0.10倍;去掉"只更新输出头"这个低成本选项,只保留全量更新,平均速度会进一步降0.24倍,因为全量更新的代价太高,频繁执行得不偿失。
八、SpecBlock的局限与边界
研究团队对自己方法的局限性保持了坦诚的态度。
等级预测头的预测并不完美,中间两个等级的准确率只有约50%,这意味着有相当一部分位置的备选词数量没有被最优配置。更准确的等级预测器理论上能让整个系统表现更好,这是一个明确的改进空间。
块的宽度K在训练时就确定了,推理时无法改变,因为逐层位移机制是针对特定K值设计的。而块的数量M则比较灵活,可以在推理时自由调整,甚至用比训练时更大的M值,因为每个额外的块只是在新的起点上重复同样的操作。研究团队在所有实验中统一使用了M=2,没有针对不同任务或模型规模单独调整M值,这可能留下了一些优化空间。另外,对于与训练数据分布差异很大的任务,适当调整K和M的组合可能能获得更好的效果。
---
说到底,SpecBlock做的事情并不复杂:在"猜得快"和"猜得准"之间找到一个新的平衡点。它既不像老派学徒那样一步一步地磨,也不像冒进的学徒那样一次性胡乱猜,而是每次猜出一个有内部逻辑的"套餐",再用套餐叠套餐的方式把猜测树构建起来。配合对资源的智能分配和对工作场景的持续适应,这套方案最终实现了在更少学徒时间消耗下获得更多正确猜测的目标。
对普通用户来说,这意味着未来AI助手的响应速度可能会再快一些,同时运行同一个AI所需的算力成本会低一些。在能源和算力日益紧张的今天,这类"让AI更高效"的研究的价值不只是让聊天更流畅,更在于让同样的算力能服务更多人。有兴趣深入了解技术细节的读者,可以通过arXiv编号2605.07243查阅完整论文,代码也已在GitHub公开,地址可通过搜索"SpecBlock shiweijiezero"找到。
---
Q&A
Q1:SpecBlock和EAGLE-3相比,速度提升多少?
A:在三种不同规模的语言模型上测试,SpecBlock的平均推理速度比EAGLE-3高出8%到13%。加入动态适应机制之后,这个优势可以扩大到11%到19%。与此同时,SpecBlock的学徒计算开销只占EAGLE-3的44%到52%,也就是说用更少的额外计算换来了更快的整体速度。
Q2:SpecBlock的"逐层位移"机制为什么重要?
A:逐层位移是SpecBlock保持块内词语前后逻辑连贯性的核心手段。在一个块内同时猜出多个词时,如果没有这个机制,后面的词就无法"感知"到前面的词猜的是什么,猜出来的词组合在一起往往逻辑不通顺,大厨审核时会大量否定。实验证明,去掉这个机制后,系统的平均猜对词数从4.41个下降到4.02个。
Q3:SpecBlock的"成本感知老师"在什么情况下效果最好?
A:这个动态更新机制在请求量较大、任务类型比较单一的场景下效果最好。实验数据显示,问答和数学题这类单一领域任务的速度提升最为明显,因为持续的相似问题能让学徒快速适应。但对于样本量很少的任务(比如只有80个样本的对话评测),流量不足以让系统积累有效反馈,这个机制就不适合启用。
