这项由南洋理工大学、新加坡管理大学和乌普萨拉大学联合开展的研究,以预印本形式发布于2026年4月8日,论文编号为arXiv:2604.07023,有兴趣深入了解的读者可通过该编号查询完整论文。

**每个字都要单独"想一下",这是一种浪费**

当你使用ChatGPT、文心一言或任何大语言模型时,你可能注意到它生成文字的方式很特别——一个字、一个字地往外蹦,像打字员在慢慢敲键盘。这背后有一个根深蒂固的设计逻辑:每生成一个字,模型都需要完整地"思考"一次,无论那个字有多显而易见。

以一道简单的数学题为例:"2加2等于几?"答案显然是"4",但模型在生成这个字之前,依然会老老实实地走完一整套思考流程。更极端的例子是,当模型输出"综上所述,答案是"这样的套话时,后面跟着什么答案几乎是被前文决定了的,但模型还是要为这几个毫无悬念的字分别花费相同的计算资源。这就好比一个厨师,不管是切一根大葱还是处理一道复杂的法式料理,都要把整套刀具和砧板重新摆一遍——显然有点大费周章。

研究团队把这种浪费看在眼里,于是提出了一个问题:能不能让模型在"显而易见"的时候,一口气预测出好几个字,而不是每次只能出一个?他们给出的答案,就是这篇论文的主角——**MARS**,全称Mask AutoRegreSsion,直译过来叫"掩码自回归"。

一、老方法有哪些痛点,MARS又是什么思路

在MARS出现之前,研究人员并非没有想过让模型多生成几个字。主流的解决方案大致走了两条路。第一条路是"找个助手来帮忙",也就是所谓的推测解码:先用一个小的、速度快的模型猜几个字,再让大模型来验证这些猜测对不对。这个办法有效,但代价是你需要同时养着两个模型,内存占用加倍,系统复杂度也大幅提升,就好比你雇了一个助手,但助手和你都需要一张完整的办公桌。第二条路是"给模型装上额外的脑子",比如Medusa和EAGLE这类方法,在原有模型的基础上附加多个预测头,每个头负责预测未来的某个位置。这个思路需要额外的参数和专门的训练,改变了模型的结构,部署起来颇为麻烦。

MARS走的是一条截然不同的路线:不增加任何结构,不添加任何参数,只通过继续训练,让原本的模型"学会"在一次思考中同时预测多个字。更关键的是,训练完成后的模型和原来的模型在外观上完全一样——你可以把它当作普通模型来用,一次只出一个字;也可以开启"加速模式",让它在有把握的时候一次吐出好几个字。用餐厅来类比,这就像是把同一位厨师训练成既能做精细的单人套餐,也能在熟悉菜品的情况下同时备好几道菜,而不是新招一个帮厨或者给厨房加一台新设备。

二、为什么之前的"多字预测"方法总是搞砸,MARS找到了什么关键

在设计MARS之前,研究团队做了一件重要的功课:分析为什么以往的方法总是在"多字预测"上表现变差,尤其是在数学推理和代码生成这类需要严谨思考的任务上。

他们把问题归结为四个"裂缝"——也就是多字预测方案和原始模型之间存在的四处差异。第一处裂缝是不可避免的:要同时预测多个未知的字,你就必须在那些位置放上"占位符",就像在填空题里先画几个横线。这是多字预测的本质代价,没有办法绕开。

然而,其余三处裂缝都是"自找麻烦"——它们源于研究者在设计方案时不必要地偏离了原始模型的工作方式。第二处裂缝是注意力方向的问题。原始的语言模型只向左看——它只能参考已经生成的字,不能"偷看"还没生成的字,这叫因果注意力。但一些多字预测方案在处理同一批待预测的字时,允许它们互相参考,也就是说某个待预测的字可以看到同一批中其他待预测的字,这就打破了模型原本的工作习惯。第三处裂缝是预测位置的对齐问题。在标准语言模型里,位置1的输出是对位置2的预测,位置2的输出是对位置3的预测,依此类推,整体向右偏移一格。如果多字预测方案改变了这个规则,就相当于把一套精密仪器的刻度盘重新校准,原本的指针指向就全乱了。第四处裂缝是生成顺序的问题。原始模型总是从左到右依次生成,但有些扩散类方法会根据模型的置信度决定先生成哪个字,打乱了顺序。

MARS的核心洞察在于:只要把第二、三、四处裂缝填平,模型就能在保留原有能力的同时,学会处理第一处裂缝带来的挑战。用修车来比喻,MARS发现四个零件中有三个是可以完好保留的,只有一个需要改装——而之前的方法却把四个零件全换了,难怪车开起来不顺。

三、MARS具体是怎么训练的——"双轨并行"的学习方式

了解了问题所在,MARS的训练方案就变得清晰了。整个训练过程可以用"影子练习"来理解:模型同时处理同一段文字的两个版本,一个是原汁原味的完整版本,另一个是被打了马赛克的遮盖版本。

具体来说,对于一段需要学习的回答文字,研究团队把它按固定大小分成若干"块",比如每块4个字。然后,他们把每一块里的所有字都替换成特殊的"掩码符号"(可以理解为空白占位符),得到一个全是占位符的遮盖版本。训练时,模型同时接收这两个版本,前半段是完整版,后半段是遮盖版,长度加在一起是原来的两倍。

在这个"双轨"结构里,模型需要同时完成两项任务。面对完整版那一半,它照常做标准的语言模型训练,每次预测下一个字;面对遮盖版那一半,它需要根据前面那些完整的字,把每个占位符的位置填上正确的内容。特别设计的注意力规则确保了遮盖版里的每一块只能看到它前面那些已经生成完毕的块,而不能偷看后面还没生成的块。这样一来,模型的"只向左看"习惯得以完整保留。

这里有一个微妙但至关重要的技术细节:在同一块遮盖位置内部,每个占位符可以看到同一块里它前面的占位符,但因为那些也都是空白符号,实际上流通的只有位置信息,没有真正的内容信息。这就像在一个填空题里,你知道第三个空在第二个空后面,但你看不到第二个空里填了什么——这保证了预测的独立性,同时维持了因果关系。

在损失函数的设计上,MARS把两个任务的损失加在一起,各占一半权重:一部分是遮盖版的预测损失,另一部分是完整版的标准语言模型损失。这个"完整版的损失"看起来像是锦上添花,但研究者发现它实际上是整个方案能够扩展到更大块尺寸的关键所在。

四、为什么"完整版损失"那么重要——一个关于训练信号衰减的故事

当每次预测的块变大时(比如从4个字一块变成16个字一块),模型能从每块里学到的"标准语言模型信号"就越来越少。研究者做了一个简单的计算:在每块4个字的情况下,只有每块的第一个字能看到完全干净的上下文;第二个字必须面对1个占位符;第三个字面对2个占位符;第四个字面对3个占位符。也就是说,在一整块里,只有25%的位置享受着和标准语言模型训练完全一样的条件。如果块大小变成8,这个比例降到12.5%;变成16,更是只剩6.25%。

随着块越来越大,模型越来越多地在"不正常"的条件下训练,它的标准语言模型能力就会慢慢被侵蚀,就好比一个学钢琴的学生,如果大部分时间都在练一种变形的指法,正常的指法自然会生疏。

加入完整版的损失之后,情况发生了根本性的改变。此时,整个训练过程里有一半的信号来自完整版——那里面的每一个位置都是标准的语言模型训练。研究者计算出,加入完整版损失后,整体训练信号中属于"标准语言模型信号"的比例,无论块大小如何变化,都能稳定保持在50%以上。块大小为4时,这个比例是62.5%;块大小为16时,这个比例仍有53.1%。模型同时在学习"预测被遮盖的内容"和"维持标准的语言能力",两者相互促进而不是相互竞争。

实验数据完美印证了这个推断。在不加完整版损失的情况下,把块大小从4增加到16,模型的综合得分从28.4分急剧下滑到22.2分,在数学推理和代码生成上的退步尤为明显。加入完整版损失之后,同样的块大小变化只带来了0.7分的轻微波动,数学题的得分甚至还略有提升。

五、推理时如何工作——"滑动窗口"机制

训练好的MARS模型在生成文字时,采用了一种形象的"滑动窗口"方式。你可以把它想象成一个有着固定视野宽度的探照灯,每次向前照出若干个位置。

生成开始时,模型在已有内容的后面追加若干个占位符(数量等于块大小),然后一次性对这些占位符全部做出预测,得到每个位置上最可能的字以及对应的置信度。接下来,模型从最左边的占位符开始,逐一检查置信度:如果这个字的最高概率超过了一个设定的门槛值τ(比如0.95),就接受这个字,把它加入已生成的内容,然后检查下一个占位符。一旦某个位置的置信度不够高,就停止接受,不管后面的占位符有多高置信度——始终遵循从左到右的严格顺序。

被接受的字滑入前面的内容区域,同时在右边补上新的占位符,保持窗口大小不变,然后再次进行预测。如此循环,直到生成完毕。有一条保底规则:每次至少接受一个字。这保证了在极端情况下,MARS的行为和普通语言模型完全一样,不会卡死。

门槛值τ是一个非常灵活的控制旋钮。把它调到最高(τ→1.0),模型每次只接受一个字,行为和普通语言模型完全相同,没有任何质量损失;把它调低,模型在有把握的时候会接受更多字,速度更快,但质量可能略有下降。更妙的是,这个旋钮不需要重新训练模型,不需要换一个新模型,只需要在运行时随时修改这个数值。在服务器负载高峰期,可以把τ调低来提高吞吐量;在需要高质量输出的时候,再把τ调回来。

六、实验结果——数字背后的故事

研究团队在两个规模的模型上验证了MARS的效果,分别是参数量5亿的小模型和70亿的大模型,都基于Qwen2.5系列的指令调优版本。训练数据使用了约200万条指令样本,先做5轮标准语言模型训练,再用同样的数据做5轮MARS训练。评测覆盖了6个基准测试,涵盖指令遵循、逻辑推理、多学科知识、科学问答、数学计算和代码生成。

在"一次只出一个字"的模式下,MARS不仅没有退步,反而超越了基线。小模型从28.7分提升到30.4分,代码生成得分更是从35.4跳升至40.2。大模型从56.6分提升到58.1分,数学题得分提升了4.5分,代码生成提升了3分。这说明MARS的掩码预测训练对模型来说不只是"附加能力",它还像是一种数据增强,让模型的原有能力也得到了练习。

为了排除"纯粹多训练了一些轮次"这个干扰因素,研究团队还专门训练了一个基线模型,总训练轮数与MARS完全相同(10轮),但全程都是标准语言模型训练。结果,这个多训练了的基线反而退步了,从28.7分跌到26.4分——在各项任务上都有所下滑,显示出过拟合的迹象。这证明MARS的提升确实来自于掩码预测这种训练方式本身,而不仅仅是更多的训练步数。

相比之下,Block Diffusion这种使用双向注意力(允许同一块内的字互相参考)的方案,在逻辑推理任务上的得分从26.3分崩塌到7.5分,在多学科知识测试上从11.9分跌到2.0分,接近完全没有经过训练的基础模型水平。这一鲜明对比直接验证了MARS关于"三个可消除的裂缝"的分析:一旦让注意力方向偏离因果结构,模型的推理能力就会遭受毁灭性打击。

七、速度与质量的天平——可调节的"加速旋钮"

在开启多字接受功能(τ=0.95)之后,MARS展现出了令人满意的速度质量平衡。小模型每次前向计算平均接受约1.46到1.49个字,整体精度只下降了约1.1分。大模型的表现更为出色,平均每次接受1.68个字,综合精度仅下降1.3分,但依然比原始基线的56.6分高出了0.2分——也就是说,就算开启了加速模式,大模型的整体表现依然优于原始的标准语言模型。

不同任务的加速效果差异很大,这背后有清晰的逻辑。在BBH逻辑推理任务上,大模型平均每次接受2.60个字,这是因为推理链中大量使用固定的连接词和模板化表达,模型对这些部分非常有把握。在IFEval指令遵循任务上,加速效果相对较小,质量下降也相对明显(约5分)。IFEval测试的是模型是否严格遵循格式要求,比如"恰好写三段话",而多字接受可能会跳过某些格式控制词,导致格式错误。

从完整的阈值扫描数据来看,整个速度质量曲线非常平滑,没有出现"突然断崖式下跌"的情况。从τ=1.0一路调到τ=0.5,精度是逐渐下降的,不是某个点骤然崩溃。这种平滑性让服务系统可以根据实时负载精细调节,找到合适的工作点。

八、让"一次预测多字"在服务器上真正提速——块级KV缓存

算法层面的"每次接受更多字"只是理论上的加速。在实际的服务器推理中,还有一个关键的工程挑战:KV缓存。

标准语言模型每次只生成一个字,但它可以把之前所有字的计算结果缓存起来,下次只需要处理新加入的那一个字,计算量非常小。MARS每次要处理若干个占位符,如果每一步都要重新计算整个序列,计算量会随序列长度的平方增长,很快就比标准语言模型慢了。实验数据印证了这一点:没有缓存策略时,随着批量大小从4增加到16,MARS的吞吐量反而从每秒127个字下跌到98个字,越批越慢。

研究团队为此设计了一套"块级KV缓存"策略,逻辑和分组结账有几分相似。具体来说:每当一整块的字都被所有正在处理的请求确认接受后,才把这一块的计算结果缓存起来。在此之前,批次里的每条请求可能接受了不同数量的字,慢的那条还没确认完,快的那条就等一等。等到最慢的那条也确认完这一整块之后,所有请求一起把这块的内容存入缓存,然后大家同步开始下一块的预测。

这个策略的效果立竿见影。在批量大小为4的情况下,最优配置(缓存粒度32个字)把总耗时从276.2秒压缩到161.2秒,实现了1.71倍的实际挂钟时间加速。批量大小为8时,加速比是1.60倍(169.1秒→105.6秒)。批量大小为16时,加速比是1.34倍(91.8秒→68.7秒)。加速比随批量增大而减小,这是因为批量越大,"等最慢的那条请求"的同步等待时间占比越高,就好比分组结账时,人越多越容易有人算不清楚拖慢了整桌。但即便如此,在测试的所有配置下,MARS都比标准语言模型要快。

九、训练代价与适用边界

研究团队坦诚地指出了MARS的局限。训练时需要同时处理原始序列和遮盖序列,相当于序列长度翻倍,训练计算量大约是标准语言模型训练的两倍。小模型的MARS训练需要33个GPU小时,标准训练只需15个GPU小时;大模型则是202小时对100小时。不过考虑到这只是对现有指令训练数据的继续利用,而非从零开始的大规模预训练,这个代价还在可接受范围内。

与Jacobi解码的对比也很能说明问题。Jacobi解码是另一种让单个模型一次预测多个字的方法,不需要任何额外训练,直接在标准语言模型上运行。但由于标准语言模型从未被训练过"从占位符预测内容",Jacobi解码每次前向计算平均只能接受1.07个字,而MARS在相同设置下能接受1.46个字。Jacobi有一个特殊优势:它一开始就把所有输出位置都初始化了,所以模型天然知道要生成多长的回答,不会停得太早或太晚——这解释了为什么Jacobi在数学题和代码生成上反而有些提升,因为这类任务对输出长度很敏感。

说到底,MARS做的事情可以用一句话概括:让模型在"说废话"的时候少费心思,把省下来的算力用在真正需要思考的地方。这不是什么革命性的颠覆,而是一种务实的优化——用5个额外训练轮次,换来了一个既能当普通模型用、又能在有需要时加速1.5到1.7倍的新版本。对于已经大规模部署语言模型的企业来说,这意味着同样的服务器可以接待更多用户,或者在高峰期不需要临时扩容。对于普通用户来说,这可能意味着等待时间的缩短。

这项研究还留下了一些有趣的开放问题。未来能否做到"不需要在块边界同步,每条请求各自缓存"?能否根据输入内容的复杂程度自动选择块大小?能否把MARS和推测解码结合起来,叠加两种加速手段?这些都是值得探索的方向。有兴趣深入了解这项研究细节的读者,可以通过论文编号arXiv:2604.07023找到完整原文,研究团队也在GitHub(Xalp/MARS)上开放了代码。

Q&A

Q1:MARS方法需要对语言模型做哪些结构上的改动?

A:MARS不需要对语言模型做任何结构上的改动,也不需要增加额外参数。它只是用同一份指令训练数据继续训练已有的模型,训练完成后的模型和原始模型在结构上完全一样。这和Medusa、EAGLE等需要附加额外预测头的方法有根本区别。

Q2:MARS和推测解码有什么不同?

A:推测解码需要同时维护两个独立的模型——一个小的草稿模型和一个大的验证模型,内存占用加倍,系统也更复杂。MARS只需要一个模型,训练完之后既可以当普通语言模型用,也可以在有把握时一次生成多个字,不需要另外维护一个辅助模型。

Q3:MARS的接受门槛τ是什么,调低它有什么风险?

A:τ是控制模型"有多大把握才接受预测字"的门槛,取值在0到1之间。τ调到最高时模型每次只出一个字,行为和普通模型一样;调低后模型在把握不那么足的时候也会接受预测,速度更快但错误率可能上升。当τ低于0.7时,精度下降会比较明显,尤其是对格式要求严格的任务影响更大。