2025年秋天,一批测试扩散语言模型的研究者发现了一件挺尴尬的事:这类模型生成文字的速度明明比传统AI快得多,可是写出来的东西质量总是差一截。
这事儿说起来有点反直觉。按理说,AI模型越新越聪明才对,为什么这种能并行"吐字"的新架构反而不如老老实实一个字一个字蹦出来的传统模型?
要理解这个问题,得先弄明白两种AI写文字的方式有什么不同。
**自回归模型*:传统大语言模型的生成方式,像人打字一样一个字接一个字往后写,每写一个字都要先看清楚前面已经写好的所有内容。
这种方式稳是稳,但慢。写一千个字,就要算一千次。
**扩散语言模型*:简称DLM,生成方式完全不同。它先把整段话全部盖上"遮罩"(想象成打了马赛克),然后一轮一轮地同时猜测多个被遮住的位置应该填什么字,猜得越来越准,最后拼出完整的句子。
这种方式的好处很明显:一次能同时处理好多个位置,理论上速度能快很多。但问题也出在这儿。
一个句子里,有些空白特别好猜。比如"今天天气真___",后面大概率是"好"或者"不错",几乎不用动脑子。但另一些空白就复杂多了,比如数学题里的一个关键数字,或者需要前后文推理好几步才能确定的用词。
**传统扩散语言模型对这两种情况一视同仁,用完全相同的计算量去处理它们。**
这就好比一个阅卷老师改卷子,遇到选择题和遇到需要演算的大题,花的时间却一模一样。简单题被过度照顾,浪费了时间;难题却没有得到应有的重视,草草了事。结果就是,容易的地方算力被浪费了,难的地方又没算够,整体质量自然上不去。
这篇论文的作者们把这个现象叫做"计算量与难度不匹配"。他们认为,这正是扩散语言模型质量始终落后于自回归模型的根本原因。
那些"已读乱回"的早期补救方案
在ALoDLM出现之前,业界试过一些办法。
一种思路是往扩散模型里掺一些自回归的"血统",让生成过程按块分段,块内并行、块间顺序进行,这类方法叫"块扩散"。另一种思路更直接:干脆让扩散模型打草稿,生成候选内容,最后交给自回归模型来做最终把关和校验。
这两种方法都在某种程度上绕开了问题,而不是正面解决它。论文作者选择了一条更难走的路:既然问题出在"一刀切"的计算分配上,那就想办法让模型自己学会,哪些字该多想,哪些字可以秒答。
这就是ALoDLM要解决的核心命题,让扩散语言模型拥有"因材施教"式的计算分配能力。
循环结构:给难题留出反复琢磨的空间
ALoDLM最核心的设计,是在扩散模型原有的"去噪步骤"(也就是每一轮猜测被遮住内容的过程)里面,又塞进了一层"内循环"。
传统DLM在每一个去噪步骤里,只对所有被遮住的位置算一遍,算完就直接定稿。ALoDLM不这样做,它允许模型在同一个去噪步骤内反复"回味":那些已经猜得很有把握的字,会提前"交卷",变成后续推理可以直接引用的文字;而那些拿不准的字,不会被强行定稿,而是保留它们当前这团"还没想清楚"的内部状态,让模型继续在这团状态上反复加工,直到想明白为止。
论文把模型架构拆成三段:前奏部分负责把输入文字转换成初始的内部表示,循环核心是反复被调用的那部分网络层,尾声部分负责把内部状态转换成最终输出。每多循环一次,循环核心就被多执行一遍,相当于在不增加参数量的前提下,硬生生给模型"加深"了一层思考。
**模型有两个判断模块在同时工作:一个负责猜测这个字具体是什么,另一个负责判断"我要不要再想想"。**
前者给出词汇分布,看哪个词概率最高;后者给出一个"该不该停"的信号。如果某个位置的猜测已经非常确定(专业说法叫"预测熵很低"),它就提交答案,把这个词的词向量嵌入反馈回去,成为接下来其他位置做判断时可以参考的"已知条件"。如果某个位置还很纠结,它的内部状态会被保留下来,在下一轮循环里继续被打磨。
这里有个设计细节值得多说一句,提交的是具体的词嵌入,而不是继续传递那团模糊的隐藏状态。这意味着一旦某个字被确定下来,它就变成了铁板钉钉的上下文,供其他还在犹豫的位置参考,就像拼图时先把确定的边角拼好,剩下的中间部分可以对照着边角来推敲。
这个设计让我想起了小组讨论做题的场景。一群人解一道复杂的数学题,有人一眼看出某个步骤的答案,直接报出来,大家就拿这个结果继续往下推;而对于那个最烧脑的步骤,大家不会强行凑一个答案敷衍过去,而是继续讨论,直到有人想明白了才往下走。如果强行要求每一步都在同样的时间里给出答案,那道题大概率会错在最难的那一步,因为留给它的思考时间和留给最简单那步的时间一样多,而它显然需要更多。
什么时候"交卷":熵和停止概率的双重把关
具体到操作层面,ALoDLM用两套阈值来控制这个过程。
一个是熵阈值,控制一个位置的猜测要有多确定才能提前提交;另一个是累积停止概率阈值,控制整个批次的未定字还要被循环打磨多少轮才罢休。熵阈值放宽一点,模型会更急着下结论,速度快但容易出错;停止概率阈值调高一点,模型会多琢磨几轮再下笔,准确率上升但速度下降。
论文里的实测数据很说明问题:固定住停止概率阈值,把熵阈值从0.1调到0.6,GSM8K数学题的生成速度从每秒278.7个词提升到508.3个词,但准确率从93.8%掉到92.3%;如果熵阈值继续放宽到0.9,准确率会跌到89.9%。另一边,固定熵阈值,把停止概率阈值从0.1提到0.9,准确率从93.3%升到93.8%,但速度从每秒455.3词降到309.0词。
这组数字其实在告诉我们一件很朴素的事:计算量和准确率之间没有免费午餐,但至少现在,这个权衡可以被精细地调节,而不是被模型架构一刀切地锁死。
怎么训练这个会"犹豫"的模型
架构设计清楚了,接下来的难题是怎么训练它。
**这个模型里有一个变量特别棘手:每个字到底在第几轮循环提交答案,这件事本身是不确定的,而且各个字的提交顺序会互相影响。**
论文把这种"每个字各自在哪一轮提交"的组合,定义为一个叫"退出计划"的随机变量。听起来抽象,其实可以理解成一张时间表,记录着句子里每个空位分别是在循环的第几轮被填上的。
照理说,最稳妥的训练方式是把所有可能的退出计划都算一遍,取个加权平均,这样模型学到的就是一种全局最优的策略。但这里有个致命问题:一旦某个字提前提交,它就会变成后面位置的新上下文,直接改变了剩下的推理路径。这意味着每一种退出计划都对应一整条完全不同的计算轨迹,排列组合下来数量是指数级的,根本算不过来。
作者们的解法是引入一个叫"变分分布"的近似工具,用它来代替对所有可能性的暴力枚举,再基于这个近似推导出一个数学上站得住脚的训练目标,叫"条件负证据下界"。这个名字听着拗口,但它的作用说白了就是给训练过程划定了一条底线:只要模型的实际表现优于这条底线,训练就是在往正确方向走的。
**负证据下界*:简称NELBO,是一种在概率模型训练中常用的数学工具,当真实目标算不出来时,用一个可以计算、且有理论保证的"下界"来代替它进行优化。
由于这张"退出计划"表是离散的、不能直接求导,论文用了一种叫"得分函数估计"的技巧来估算梯度,简单理解就是,让模型根据某次具体的退出计划所产生的最终效果好不好,反过来调整自己做"要不要提前交卷"这个决策的倾向性。这个过程还搭配了两项稳定训练的技巧:一是让还没提交的字在每一轮循环里都提供一点训练信号,而不是只在它最终提交那一轮才被教一次,这样能显著降低训练过程中的噪声;二是用第一轮的预测结果作为参照基准,帮助模型更准确地判断某次退出决策到底是好是坏。
这套训练机制带来的一个意外发现挺有意思。论文里统计了不同类型字词的首轮停止概率,结果显示数字类的字词停止概率最低,只有0.369,比整体平均值0.417低了11.5%,而普通词汇的停止概率最高,达到0.428。
**这说明模型自己学会了,数字应该被多想几遍。**
没有人告诉它数字更难,也没有给它贴任何难度标签,这种偏好完全是训练过程里自发涌现出来的。这其实挺符合直觉:数学推理和代码生成里,一个数字错了整道题就全盘皆输,而一个普通词汇即使不够精准,大体意思往往也还过得去。模型学会了把更多的"脑力"留给代价更高的地方,这正是论文开头提出的那个"计算量匹配难度"的设想,在实践中真正落地了。
实测效果:比自回归快,还比扩散模型准
研究团队把Qwen3的1.7B和8B两个版本的自回归模型,通过直接的监督微调转换成了ALoDLM,训练数据只用了50亿token的语料,没有做额外的大规模继续预训练这一步,这在同类工作里算是比较轻量的路线。
十一个基准测试覆盖了常识推理、数学、科学问答和代码生成四大类,结果是ALoDLM在两个参数规模上都拿到了所有被比较模型里的最高平均分,1.7B版本平均分65.5,8B版本平均分80.3。
更值得说道的是,8B版本的ALoDLM不仅打赢了所有参与对比的扩散语言模型,还打赢了它自己的"亲爹",也就是原版Qwen3-8B自回归模型。在代码生成类的四个测试里,ALoDLM几乎是全面压制,HumanEval+这一项拿到84.2分,比Qwen3-8B的79.3分高出近5分,比另一个强力扩散模型WeDLM-8B的74.4分更是高出近10分。
速度方面的数据也很亮眼。在GSM8K数学题测试里,使用优化推理引擎的ALoDLM-8B达到了vLLM部署的Qwen3-8B大约2.7倍的吞吐量,同时准确率还更高或者持平。和同为扩散模型的WeDLM-8B比,在准确率93.25%这个点上,ALoDLM每秒能处理612.4个词,WeDLM是564.2个,快了8.5%;换算成每个词需要的计算量,ALoDLM只需要133.5 GFLOPs,WeDLM需要154.6 GFLOPs,省了13.6%的算力。
架构的几个关键选择:深度、位置、监督方式
论文还做了一系列对照实验,来验证架构里的几个关键参数是怎么选出来的。
最大循环深度这个参数,作者试了2、4、8三种设置。结果是循环深度设为2的时候,模型训练初期进步很快,但很快就遇到天花板,分数被压在低位上不去;循环深度设为8虽然理论上能想得更深,但训练初期进步反而比4慢;最终深度为4的设置,在训练后期追平了深度为8的效果,相当于用一半的计算开销拿到了差不多的结果,这也是论文最终选择循环深度为4的原因。
循环核心放在网络的哪个位置也很有讲究。论文对比了把循环放在网络中间层和放在网络靠后层这两种方案,两种方案的层数是一样的,但效果不同,中间层循环在训练后期的表现明显更好。这意味着"循环放在哪里"和"循环几次"同样重要,不是简单地堆叠层数就能解决问题。
另外论文还验证了那个"让每一轮循环都提供训练信号"的技巧到底有没有用。测试结果显示,如果去掉这种中间监督,训练过程中的梯度方差会明显增大,在训练早期阶段甚至会涨到1.76倍,这说明这项技巧确实实实在在地让训练过程更稳定了。
这几组对照实验让我想起调相机参数的过程。光圈、快门、感光度三个旋钮,单独调好其中一个未必能拍出好照片,必须互相配合着来调,循环深度、循环位置、监督方式这三者的关系也是类似的,缺了任何一环单独使劲,效果都打折扣。
这个方法还没解决的问题
论文也坦诚地列了两条局限。
第一条是首字延迟的问题。因为模型需要在预填充阶段就把完整循环深度的缓存建好,这个前期准备工作会花更多时间,对于短回答或者对延迟特别敏感的场景,这个额外开销可能会抵消掉并行生成本来带来的速度优势。
第二条更有意思,生成速度本身是不稳定的,取决于输入内容。因为模型该循环几轮、该同时确定几个字,这些决定都基于当前输入的难易程度来动态调整,所以同样是贪婪解码,换一个领域、换一批提示词,吞吐量可能就完全不一样了。如果碰上训练数据里没怎么覆盖过的陌生领域,模型可能会变得更谨慎,循环更多轮、一次确定更少的字,这时候它相对自回归模型的速度优势甚至可能完全消失。
这其实是一个挺诚实的admission:动态计算分配这件事,天然就带着不确定性,用算力去换质量的这笔交易,账面上好看,但具体到每一次请求,账本都可能不太一样。
写在后面
读完这篇论文,印象最深的一点不是速度提升了多少或者分数高了多少,而是那个关于数字类字词停止概率明显更低的发现。这是一个没人特意教、模型自己悟出来的偏好。这说明"计算量应该匹配难度"这个想法,不只是研究者脑子里的一厢情愿,而是真的能通过一套合理的训练机制,变成模型自己的行为习惯。
另外一个让我反复琢磨的地方是,论文里特意强调了提交的是词嵌入而不是隐藏状态这个细节。乍一看是个很小的工程选择,但它其实决定了整个系统的可解释性边界:一旦某个字被确定,它就变成了离散的、看得见摸得着的文字,而不是继续飘在某种模糊的"可能性云团"里。这种设计选择背后,其实藏着一种对"确定性"本身的坚持,哪怕为此要牺牲一点理论上的灵活度。
这篇论文也让我想到,很多AI性能瓶颈的解法,未必是发明全新的架构,而是重新审视一个被默认为"理所当然"的假设。扩散模型"每个位置用同样的计算量"这件事,大概从没人真正质疑过,直到有人发现,质疑它本身就是突破口。
还剩下一个没被回答的问题:如果把这套"可深可浅"的循环机制用到更长的文本生成上,比如写一整篇论文或者一本书,模型会不会在某些段落里陷入过度循环,迟迟不肯"交卷"?这个问题论文里没提,但挺想知道答案。
Q&A
Q1:ALoDLM是什么?
A:ALoDLM是一种扩散语言模型,核心创新是在每个去噪步骤内加入内循环机制,让模型根据每个字的难易程度动态分配计算量,容易的字提前提交,难的字继续反复推理,由此提升生成质量同时保持并行解码的速度优势。
Q2:ALoDLM和传统自回归模型相比有什么优势?
A:在GSM8K数学题测试中,使用优化推理引擎的ALoDLM-8B吞吐量约为vLLM部署的Qwen3-8B的2.7倍,同时准确率持平或更高;在十一个基准测试上平均分也超过了对应的Qwen3自回归模型。
Q3:ALoDLM有什么局限性?
A:它的首字延迟比自回归模型更长,因为预填充阶段要构建完整循环深度的缓存;另外生成速度依赖输入内容的难易程度,在训练数据覆盖不足的陌生领域,速度优势可能会减弱甚至消失。







