![]()
你有没有想过一个奇怪的问题:为什么ChatGPT回答你的时候,是一个字一个字往外蹦的,而不是"唰"一下整段话全出来?
答案其实很简单。这类大模型的底层原理叫做**下一词预测**
next-token prediction,简称NTP:模型每次只根据前面已经生成的内容,预测紧接着的那一个词,然后把这个词加入已知内容,再预测下一个,如此循环。
这种方式训出来的模型叫**自回归模型**
autoregressive,简称AR:一种按顺序、一个接一个生成内容的模型架构,每生成一个新词都必须等前面的词先生成完。
这套逻辑训出来的模型确实聪明,但有一个躲不开的硬伤:生成速度永远被"必须排队"这件事卡住。你想让它一次性吐出100个字?不行,它必须先吐出第1个,再看着第1个去想第2个,一步都跳不过去。
这就好比你在银行排队办业务,前面99个人必须一个一个办完,你才能轮到自己,哪怕柜台后面同时坐着100个空闲的柜员也没用,因为规则规定了只能一个窗口一个窗口地放号。如果不遵守这个"排队"规则会怎样?柜员确实可以同时给100个人办业务,速度快了,但办出来的结果可能乱套,因为很多业务本身是有先后依赖的,比如你要先存钱才能再取钱。这正是自回归模型慢的根本原因:它慢,但慢得有道理,因为语言本身就是有前后依赖关系的。
那有没有办法既保留这种"讲道理"的生成质量,又能突破排队的限制?这就是这篇论文要解决的核心问题。
排队与合唱:两种生成范式的百年恩怨
在自回归模型这条路之外,还有另一条路,叫**离散扩散模型**
discrete diffusion:一种支持多个位置同时生成、同时修正的模型,原理上更接近"先画草稿再逐步修正"的过程,不需要严格按顺序生成。
扩散模型天生适合并行生成,因为它不需要等前面的词确定了才能想后面的词,它可以把一整段话同时"蒙上一层雾",然后同时把雾一点点吹散,这个过程理论上可以让很多词同时冒出来。
问题是,现实很打脸。目前市面上做得比较好的扩散语言模型,业内简称**d-LLM**
d-LLM:基于扩散原理构建的大语言模型,和自回归模型是两条不同的技术路线。
在质量上普遍不如同等规模的自回归模型,而且更麻烦的是,它们的加速效果在批量请求变大之后会大幅缩水,甚至比自回归模型还慢。论文里提到的两个开源d-LLM,DiffusionGemma和Nemotron-Labs-Diffusion,都存在这个问题:它们的母公司自己承认,在大批量并发场景下,这些模型反而比它们各自的自回归"母模型"更慢。
这就好比一个合唱团,理论上应该比独唱快很多,因为大家可以同时开口。但实际情况是,合唱团需要先排练磨合,声部之间要对齐节奏,人数一多反而互相打乱阵脚,最后合唱的整体效果还不如一个熟练的独唱者一句接一句唱得又准又快。d-LLM就有点这个味道:并行生成听起来很美,但代价是要修改整个模型的训练方式,导致质量打折,而且这个"合唱团"人数(也就是批量大小)一大,协调成本反而超过了并行带来的好处。
那有没有第三条路:既不改变自回归模型原本"讲道理"的生成质量,又能真的用上并行加速?
Uno的核心想法:让AR负责"把关",让扩散负责"抄近路"
这篇论文提出的模型叫**Uno**
Uno:论文提出的一类新模型,名字取自"统一"之意,表示它在同一个架构里同时容纳了自回归权重和扩散权重两套参数。
它的思路说出来其实特别朴素:既然自回归模型的输出质量没得挑,那就别去动它,而是额外训练一套"快速起草"的参数,专门用来猜接下来几个词大概是什么,猜完之后再拿原来那套自回归模型来验证这些猜测对不对。
具体来说,论文把模型的参数拆成了两部分。一部分叫**AR权重**,专门负责按标准流程一步一步生成词、决定回答质量;另一部分叫**扩散权重**,专门负责一次性"蹭"出好几个词的草稿,不追求完全正确,只追求"大概率蒙对"。
这两套权重的训练方式完全不同。AR权重的训练就是行业标准流程:先做大规模预训练,再做指令微调,最后可能还有强化学习后训练。这部分和市面上任何一个主流大模型的训练过程没有区别。真正有意思的是扩散权重怎么训。
论文用了一种叫**LoRA**
LoRA:Low-Rank Adaptation的缩写,是一种给大模型"打补丁"的轻量化训练方法,不需要改动原模型的全部参数,只在旁边加一小组新参数就能实现新功能。
的技术,给AR权重的每一个矩阵都挂上一个小小的"外挂"参数,这个外挂就是扩散权重。训练的时候,AR权重被冻住不动,只训练这个外挂,让它学会"根据前面已经确定的内容,一次性蒙出后面一整块词,并且蒙出来的分布要尽量接近AR模型自己会给出的分布"。
这里为什么非要用LoRA这种轻量挂件的方式,而不是训练一个完全独立的模型?论文给出了一个很关键的理由:如果草稿模型和最终把关的模型差异太大,那么草稿被采纳的概率就会很低,加速效果也就无从谈起。
这就像考试时找人代写作业检查答案。如果找一个完全不同风格、不同水平的人来对答案,他给出的判断你根本没法参考,因为标准不统一。但如果用的是同一个老师,只是让他"先随手扫一眼、快速给个大概判断",再"认真核对一遍给出正式判断",两次判断的出发点是一致的,所以快速判断大概率能和正式判断吻合。Uno的扩散权重就是那个"随手扫一眼"的快速判断,它共享了AR权重的底子,所以猜测和最终验证的口径几乎一致,这才保证了猜的东西大概率能通过验证。如果不这样设计,直接训练一个独立的草稿模型会怎样?论文里正好有对照:DFlash这个基于独立扩散草稿模型的方案,参数量是Uno扩散外挂的三倍(1.05B对比0.35B),训练成本也高得多,但速度反而更慢。
蒙对了就用,蒙错了就纠正:验证机制怎么运作
光有草稿还不够,必须有个机制来确认草稿靠不靠谱,这个机制论文叫它**Ψ-Spec采样器**
Ψ-Speculative sampler,简称Ψ-Spec:论文提出的采样方法,先用扩散权重快速起草一块词,再用AR权重去验证这些词是否符合AR模型本身会生成的结果,只保留验证通过的最长连续部分。
它的工作流程其实借用了一个业内早就有的思路,叫**投机采样**
speculative decoding:一种用小模型先草拟、大模型再核实的加速手段,核实通过就采纳,不通过就用大模型自己重新生成那个位置的词。
传统投机采样需要另外训练一个独立的小模型来做草拟,这个小模型的架构设计、参数规模都要反复调试,而且它是单独维护的一套东西,占用额外的显存。Uno的做法是把"起草"和"验证"这两件事都放进同一个模型里做,起草时多用一点点扩散外挂,验证时只用纯粹的AR权重,两者共享同一份缓存记忆(专业说法是KV缓存),这样既省了显存,又保证了草稿和标准之间的一致性。
验证的规则是这样的:假设一次起草了8个词,AR模型会依次检查这8个词是不是它自己也会选的词。如果前3个都对,第4个错了,那就保留前3个,第4个换成AR模型认为正确的词,后面几个全部作废重新来。这个规则保证了不管草稿对不对,最终输出的结果和纯AR模型一步步生成出来的结果在统计意义上完全一样,这就是论文反复强调的**无损**
lossless:指加速方法不会改变模型原本的输出分布,也就是说加速后模型给出的答案和不加速时在统计上是等价的,不会因为求快而牺牲准确性。
这个词的分量。
为了让草稿命中率更高,论文还专门设计了一个训练技巧,叫**总变差损失**
Total Variation loss,简称TV loss:一种衡量两个概率分布差异程度的损失函数,论文用它来缩小扩散权重给出的猜测分布和AR权重真实分布之间的差距,间接提升草稿被验证通过的概率。
以及把整套多步骤扩散过程压缩成一步就能出结果的**离散一致性蒸馏**
Discrete Consistency Distillation,简称DCD:一种把原本需要多步才能完成的扩散生成过程,压缩训练成一步就能给出结果的技术,大幅降低了推理时的计算开销。
有了这些技巧,Uno在实际测试里能做到起草8个词,平均能有2到3个词一次性通过验证,单次生成步骤能吐出的词数明显超过了传统一步一词的AR方式。
数字说话:Uno到底快多少、准不准
论文测试用的是一个叫"1K/8K"的标准场景,意思是输入1024个词,输出8192个词,这个设定尽量还原真实使用场景,避免不同模型因为回答长短不同造成的误导性对比。
先看和同等基础模型的直接对比。论文自己从零训练了一个约7B参数的AR模型作为基座,再挂上扩散外挂得到Uno。在批量请求数达到64(这是基座AR模型在单张H200显卡上能撑住的最大批量)的情况下,Uno的吞吐量比基座AR模型快了1.5倍;如果只服务一个用户(批量为1),Uno能快到2.2倍。论文里提到,综合各种批量规模,Uno相比AR模型能实现最高3倍的加速,而且这个加速在设备能承受的最大批量下依然保持在2倍左右。
再看和开源扩散语言模型的对比,这才是真正打脸的地方。DiffusionGemma是一个26B参数、谷歌出品的扩散模型;Nemotron-Labs-Diffusion是英伟达做的14B扩散模型。Uno只用了8B参数,但在几乎所有测试的基准上都碾压了这两个体量更大的对手。在一个叫τ?-Telecom的智能体工具调用测试里,Uno拿到90.1分,DiffusionGemma只有68.1分,差了整整22分。在编程能力测试SWE-bench Verified上,Uno是68.4分,DiffusionGemma是18.7分,Nemotron-Labs-Diffusion更是只有0.8分。吞吐量方面,尽管Uno每一层都用的是计算量更大的全注意力机制,而DiffusionGemma用的是更省算力的局部注意力,但Uno的系统吞吐量依然做到了5255 tokens/秒,远超DiffusionGemma的1136和Nemotron-Labs-Diffusion的2794。
和商业闭源产品比也不落下风。Inception Labs出品的Mercury 2是一个参数量未公开的商用扩散模型,官方给出的吞吐量数据是1154 tokens/秒。Uno的最大系统吞吐量是这个数字的约4.6倍,而且Mercury 2用的还是比论文实验用的H200更先进的Blackwell显卡。质量上,Uno在智能体工具使用、代码生成、长文本推理这几个维度全部超过Mercury 2,只在一个知识类测试上稍稍落后,论文猜测这可能是模型规模和训练数据差异造成的。
这里有个数字值得多说两句。20个百分点的差距是什么概念?意味着每做5次任务,DiffusionGemma就要比Uno多失败1次左右。这不是简单的"谁更聪明"的问题,而是印证了论文反复强调的那个核心观点:压缩模型本体去追求并行速度,和保留模型本体只加一个外挂去追求并行速度,是两条完全不同的路,后者的代价小得多。
老模型也能"打补丁":拿开源Qwen3-8B做实验
论文还做了另一组更有说服力的实验:不从零训练,而是直接拿阿里开源的Qwen3-8B模型当基座,不碰它原本的参数,只在上面挂扩散外挂,训练数据用的是开源的OpenThoughts数据集,和Qwen3-8B原本训练用的数据完全不是一回事。
这组实验的意义在于证明了一件事:扩散外挂的训练数据甚至不需要和基座模型的训练数据一致,依然能实现无损加速。论文里专门做了一个对照,如果直接拿OpenThoughts数据去微调Qwen3-8B本身(也就是改变基座模型参数),模型的数学、编程能力会明显下滑,AIME-24这个数学竞赛测试的分数从77.7掉到68.3,跌了将近10分。但如果只是用同样的数据去训练扩散外挂,不去动Qwen3-8B本身的参数,那么原模型的能力完全不受影响,加速效果照样拿到。
这就好比给一辆车加装定速巡航系统。厂家出的定速巡航模块可能是拿别的路况数据调校出来的,和你平时开车的路况完全不搭边,但这不妨碍它照样帮你稳住车速,因为定速巡航这个外挂功能和"发动机本身开得好不好"是两件独立的事。如果不这样拆开设计,而是把巡航逻辑直接焊进发动机控制系统里重新调校,那发动机原本调好的动力输出反而可能被搞乱。这正是论文强调"解耦"的意义所在:质量和速度,分别交给两组独立的参数负责,谁也不去干扰谁。
在这组实验里,论文把Uno的Qwen版本(简称UnoQwen)和两个专门做投机解码的开源方案EAGLE-3、DFlash放在一起比。EAGLE-3是Qwen官方推荐的一种投机解码方案,用一个0.4B参数的轻量草稿模型;DFlash用的是1.05B参数的扩散草稿模型。结果显示,在追求整体系统吞吐量的场景下,UnoQwen做到5733 tokens/秒,明显超过DFlash的5351和EAGLE-3的4944;在追求单用户体验的场景下,UnoQwen达到445 tokens/秒,同样超过DFlash的370和EAGLE-3的284。而且UnoQwen用的外挂参数(0.35B)比这两个对手都少,占用显存也更省。
论文还做了大量细节调优实验,比如LoRA的秩(可以理解为外挂参数的"容量大小")从128提升到256能进一步提高命中率;训练时逐步增大"一次起草多少词"这个数值(从2逐渐加到16),比一开始就固定用大数值效果更好;外挂参数分散挂在模型的每一层,比只集中挂在少数层效果更好。这些细节虽然琐碎,但共同说明了一件事:这套方法不是靠某个单一的巧妙设计撑起来的,而是需要一整套工程细节配合才能跑出理想效果。
顺带解决了一个大麻烦:强化学习训练太慢的问题
大模型训练完之后通常还要经过一道叫**强化学习后训练**
RL post-training:在模型完成基础训练之后,通过强化学习方式进一步调整模型行为,让它更符合人类偏好或者更擅长完成特定任务,比如DeepSeek-R1用的就是这类方法。
的工序,这道工序里模型需要反复自己生成大量样本(业内叫"rollout"),然后根据生成结果的好坏来调整参数。这个反复生成的过程本身就是自回归模型那套"排队生成"的老问题,而且因为要生成的样本数量巨大,这个瓶颈在强化学习阶段被放得更大。
论文做了一个挺聪明的安排:在指令微调完成之后、正式开始强化学习之前,先训练好扩散外挂,然后让这个外挂在整个强化学习过程中一直挂着不动,只让AR权重继续被强化学习更新。乍一看这个安排有点冒险,毕竟AR权重在变,扩散外挂却原地不动,两者会不会渐行渐远,导致草稿命中率暴跌?
论文的实验结果出乎意料:即便AR权重经过了大量的强化学习训练,扩散外挂依然保持了几乎一样的加速效果,平均每次起草能命中的词数只下降了6%。论文用这套组合训练了数学、代码、工具调用、网页搜索四个不同方向的"专家"模型,整体训练速度提升了最高40%,尤其是在数学和代码这两个方向增益最明显。这个结果侧面说明,扩散外挂学到的"猜词习惯"其实相当稳健,不会因为基座模型的微调而轻易失效。
写在后面
读完这篇论文,最让我意外的地方不是加速倍数有多高,而是那个"AR权重在强化学习中变了,扩散外挂却不用跟着变"的实验结果。按直觉,草稿模型和验证模型的分布只要稍微拉开一点距离,命中率就应该断崖式下跌,论文里其他方法(比如自我投机解码类的方案)确实存在这个问题。Uno的外挂却顶住了大量强化学习迭代,只掉了6%,这说明LoRA挂件学到的可能不是"这个具体模型的说话习惯",而是某种更底层的、关于"哪些位置容易被后续内容纠正"的通用规律,这个规律恰好比模型本身的具体参数更稳定。
另一个值得琢磨的细节是论文对"批量大小"这件事的执着强调。行业里很多加速方案喜欢展示单用户场景下的极限速度,论文作者显然对这种展示方式不满,专门指出真实的智能体应用场景(一个请求背后可能触发多个并行子任务、多次工具调用、多轮重试)天然就是高并发的,单用户测试的意义被严重高估了。这个批判角度提供了一个重新审视"加速论文"的尺子:下次看到某个模型宣称"提速N倍",第一反应应该是问一句,这个N倍是在哪个批量规模下测出来的。
论文没有解决的问题也摆在那里。Ψ-Spec采样器目前每一步都要做两次前向计算(起草一次、验证一次),论文提到有种叫"二次采样"的技术理论上能把这两步合并成一次,但需要专门的底层计算核心支持,这部分工作被明确留给了未来。另外,论文里提到的"推理时扩展"方向,也就是允许扩散权重做更多轮修正来换取更高质量、同时不拉长文本长度,这个方向目前只是提了个概念,没有深入展开。如果这条路走通了,会不会出现一种新的选择:在关键任务上,宁愿慢一点,也要让模型自己多"想"几轮再定稿?这个问题目前还悬在半空。
Q&A
Q1:Uno模型是什么?
A:Uno是论文提出的一种大模型架构,在同一个模型里同时保留自回归权重和扩散权重两套参数,自回归权重负责保证回答质量,扩散权重负责一次性生成多个词的草稿来加速推理,整体实现无损加速。
Q2:Uno和传统的投机解码有什么区别?
A:传统投机解码需要单独训练一个独立的草稿模型,而Uno用轻量级LoRA外挂直接挂在原模型上做草稿,不需要额外的独立模型,显存占用更低,而且草稿和验证共享同一份缓存,协调成本更小。
Q3:Uno的加速是否会牺牲模型原本的回答质量?
A:不会。Uno通过AR权重对扩散权重生成的草稿进行验证,只采纳验证通过的部分,保证最终输出结果和纯自回归模型生成的结果在统计上完全一致,论文中称这种方式为无损加速。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.