2026年年初,一篇论文安静地摆在了很多研究者的桌面上,标题里有个词特别扎眼:无损。
这篇论文说的是一个叫Orthrus的系统,它号称能让大语言模型的推理速度大幅提升,而且承诺输出结果和原来的模型一模一样,不多不少。这在AI圈子里是个挺诱人的说法,因为通常来说,想让模型跑得快,就得在准确性上做点妥协,鱼和熊掌很难兼得。Orthrus却说自己两个都要。
但另一组研究者不太放心,他们决定亲自把这套系统跑一遍,看看这个"无损"到底能不能立得住。结果发现,事情没那么简单。
**在BF16精度下,Orthrus生成的文本轨迹只有45%左右和原始模型完全一致,剩下超过一半的情况,两者的输出在某个地方开始分道扬镳。**
这个数字如果放在广告语里,恐怕没人敢用"无损"两个字来形容。
大语言模型是怎么慢下来的
要理解Orthrus想解决什么问题,得先说说自回归模型的老毛病。
自回归模型*:一种逐字生成文本的语言模型,生成第N个词之前必须先看到前面N-1个词,像接龙一样一个接一个往下写。
这种生成方式的问题在于它天生是串行的。你想生成一百个词,就得算一百次,一步都省不了。每一步还要去翻查越来越长的历史记录,也就是常说的KV缓存。
KV缓存*:模型在生成过程中保存的历史信息记录,用于避免重复计算之前已经处理过的内容,但会随着生成长度增加而越来越大。
这就好比你在写一封长信,每写一个字都要把前面所有内容重新读一遍才敢往下写。信越长,读的时间越长,整个写信过程就越拖沓。如果不这样做,直接跳着写,那前后逻辑很可能对不上,读者会发现这封信语无伦次。自回归模型正是靠着这种"步步回头看"的谨慎,才保证了生成内容的连贯性,但代价就是速度慢。
于是研究者们开始琢磨,能不能让模型一次性多蹦出几个词,而不是一个一个挤牙膏。这就是扩散语言模型和并行解码技术想解决的问题。
扩散语言模型*:一类可以同时预测多个位置的词、并行生成文本的模型,和自回归模型的逐词生成方式不同。
问题是,一旦你允许模型同时预测多个词,就等于放松了"必须先看清前面才能写后面"这个约束,模型的行为就可能和原来那种严格按部就班的版本产生偏差。
Orthrus的野心:既要快,又要一模一样
Orthrus给出的方案挺聪明。它不去动那个训练好的自回归模型本体,而是给它加装了一个轻量级的"扩散视角",让这个新增的组件去预测接下来可能出现的多个词。
关键设计是所谓的"内在共识机制":用原始的自回归模型去检验扩散组件提出的候选词是否正确,如果通过检验就采纳,通不过就回退到老老实实一个词一个词生成的模式。
内在共识机制*:Orthrus用来验证并行预测结果的核心机制,通过让冻结的自回归模型确认候选词是否符合它自己会给出的答案,来决定是否接受这些候选词。
这就像是给一个老练的校对员配了一个手快但不够沉稳的助理。助理一次性写出好几行草稿,校对员逐行检查,凡是助理写对的地方就直接批准通过,凡是助理写错的地方就打回去让校对员自己重新按部就班地写。理论上,只要校对员的判断标准和他自己单独工作时完全一致,最终交出去的稿子应该和他一个人慢慢写出来的东西分毫不差。
这个设计思路听起来天衣无缝,论文作者也确实这么宣称的:这套系统是"严格无损"的。
但这次复现研究的作者们心里犯了嘀咕,理论上的严丝合缝,在真实的计算机硬件上是否真能做到分毫不差?
数字精度里藏着的鬼
答案是,理论上的无损和工程实现里的无损,压根不是一回事。
研究团队用两套模型做了对比实验,一套是原论文作者发布的官方检查点,另一套是他们自己按照类似流程独立训练出来的模型。他们从12个不同领域收集了1190条测试样本,涵盖代码生成、诗歌创作、数学解题、机器翻译等各种任务,中英文都有。
测试的方式很直接:让Orthrus和原始自回归模型面对同一个提示词,分别生成一段回答,然后逐字对比两者的输出轨迹是否完全一致。
在BF16精度下,官方检查点的完全匹配率是45%,团队自己训练的模型是43%。也就是说,超过一半的情况下,Orthrus给出的答案和原始模型走上了不同的路。
BF16*:一种16位的浮点数表示方式,比标准的32位浮点数占用更少存储空间、计算更快,但精度也更低,在深度学习中被广泛用来加速训练和推理。
不同的任务领域,匹配率差异还挺大。语法纠错任务的匹配率能到88%,几乎不出错;但诗歌生成任务的匹配率只有8%到14%,绝大多数时候两个系统给出的诗都不一样。数学题解答、代码生成这些任务处在中间地带,匹配率大概在35%到65%之间浮动。
这个差异是从哪来的?研究者发现了一个规律:模型对某段文本越"没把握",也就是这段文本在原始模型看来的困惑度越高,Orthrus复现出这段文本的概率就越低。
困惑度*:衡量语言模型对一段文本预测难度的指标,数值越低说明模型越有把握、越"确信"这段文本应该长这样,数值越高说明模型越"犹豫"。
研究者用逻辑回归做了统计检验,发现困惑度和轨迹匹配之间存在非常显著的负相关,这个关系在控制了回答长度和任务领域之后依然稳固,统计意义上极为可靠。
这个现象其实很好理解。想象你请两个翻译员分别翻译同一句话,如果原句意思清清楚楚、没有歧义,两人大概率会给出一模一样的译文。但如果原句本身模棱两可、有好几种理解方式,两个翻译员各凭直觉走,翻出来的版本大概率就对不上了。如果模型不去在意这种"模棱两可"的情况,直接假设所有位置都同样确定,那结果就是看不出问题出在哪里,也无从改进。恰恰是这种对"哪里容易分歧"的追问,才让研究者找到了问题的规律所在。
那么,为什么BF16精度下会出现这种分歧?根源在于浮点数运算本身的舍入误差。BF16虽然计算快,但保留的小数位数有限,在层层叠加的神经网络计算中,微小的数值误差会一点点累积。当某个词的预测概率非常接近另一个词时,哪怕只是小数点后几位的差别,都可能让模型最终选出不同的词。而语言生成是离散的,选错一个词,后面所有基于这个词展开的内容就全都不一样了,一步错步步错。
研究团队随后把整个实验用FP32精度重新跑了一遍。
FP32*:32位浮点数,比BF16精度更高、计算更慢、占用内存更多,是深度学习里传统意义上更"精确"的数值表示方式。
结果,在FP32下,两个Orthrus模型在全部1190条测试样本上都做到了和原始模型100%完全匹配,一个都没有例外。
这个对比结果相当有说服力。**Orthrus的"无损"承诺,其实是一个建立在理想化数学模型上的承诺,一旦落到真实硬件的有限精度运算里,这个承诺就会打折扣。**
准确率没跌,甚至还涨了
这里出现了一个挺反直觉的地方。
按照常理,如果Orthrus有超过一半的情况没能复现原始模型的输出,那它在各种下游任务的表现应该会明显变差才对,毕竟它"背离"了那个被认为是标准答案的自回归模型。
但研究团队在GSM8K数学题测试、HumanEval代码生成测试和IFEval指令遵循测试三个基准上跑了一遍,发现情况完全不是这样。
无论是官方检查点还是团队自己训练的模型,在这三个基准上的得分都不比原始自回归模型差,有的地方还略高一些。比如在GSM8K上,原始模型的准确率是40.03%,官方Orthrus检查点是42.38%,团队自己的模型是41.47%,反而都比原始模型高一点。
研究者对此的解释很坦诚:这些差异在统计上算不上显著提升,样本量和置信区间摆在那里,谁也不能拍着胸脯说Orthrus真的更聪明了。但至少可以确定的一件事是,轨迹层面的分歧并不会自动转化为任务表现层面的退步。
这说明了一件更深层的事情:判断两个AI系统是否"等价",不能只看它们答对题的比例是否接近。两个系统完全可能在最终得分上打成平手,却在具体的生成过程中走了两条完全不同的路。就像两个学生做同一张试卷,最后都考了85分,但你去看他们的解题步骤,会发现思路完全不一样,一个绕了远路,一个抄了近道,分数相同不代表过程相同。反过来说,一次微小的数值扰动,偶尔也可能歪打正着地把答案往评分标准更喜欢的方向推了一把。
这提醒我们,用最终跑分去验证一个系统是否"忠实"于另一个系统,这个判断标准本身可能存在盲区。
训练数据也很关键:教它模仿自己
除了精度问题,这篇论文还有一个值得说的发现,跟训练数据的选择有关。
Orthrus里那个负责并行预测的扩散组件,是需要单独训练的。这个训练过程用的是一种叫"teacher forcing"的技术。
Teacher forcing*:一种训练序列生成模型的常用方法,训练时直接把正确答案的每一步都喂给模型看,让模型学习在给定正确上下文的情况下预测下一步,而不是让模型自己生成上下文再学习。
问题是,如果拿一般的人类写作文本去训练这个扩散组件,它学到的场景和自回归模型实际生成时遇到的场景可能对不上。自回归模型自己生成东西时,会走出一套特有的"行文习惯",如果扩散组件没有见过这种习惯,配合起来自然会打折扣。
研究团队想了个办法:直接让原始的自回归模型自己生成一大批文本,然后拿这批"自产自销"的文本去训练扩散组件,让它专门去适应这个特定模型自己的说话方式。这就好比训练一个替身演员,与其让他去模仿各种明星的表演风格,不如直接让他反复观看要替身的那位演员本人的所有影像资料,这样替身出场的时候,动作神态才最贴近本人。如果不这样做,直接拿市面上随便找来的表演素材去训练,替身演员学到的可能是一种"泛化的表演套路",真正上场时和本尊的差距反而会被放大。
这个思路奏效了。团队用这种"教师生成"的方式构建了一个包含四百多万条提示词和回答的蒸馏数据集,用这套数据训练出的模型,在12个测试领域里有10个领域的"每次前向传播生成的词数"这项指标超过了官方检查点,说明并行解码的效率更高了。
每次前向传播生成的词数*:衡量并行解码效率的指标,数值越高说明模型平均每算一次就能确定越多个词,加速效果越明显。
不过在数学题和语法纠错这两个领域,官方检查点反而表现更好,团队认为这可能和两者训练数据构成、训练超参数的具体差异有关,没有一个简单的原因可以完全解释。
这篇论文最终没有去否定Orthrus这项技术本身的价值,作者反复强调这一点。他们说的是,"无损"这个词在神经网络推理的语境下,需要更谨慎地定义清楚,到底是理论上的算法无损,还是工程实现里位对位的数值无损,这是两件事,不能混着说。
写在后面
读完这篇论文,我最先冒出来的念头是:一个技术术语在论文标题里出现的时候,读者天然会赋予它日常语言里的含义。"无损"这个词,普通人一看就以为是"结果完全一样,绝对不会错",但在这篇论文的语境里,它其实指的是一种理想化数学模型下的等价性证明,这两者之间隔着一层工程实现的鸿沟,而这层鸿沟往往是最容易被忽略的。
另一个让我意外的细节是,困惑度和轨迹分歧之间的这层关联,其实暗示了一件更有意思的事:数值误差不是均匀分布在所有生成内容里的,它会集中出现在模型本身就"没把握"的地方。这意味着,如果你想知道一个加速系统在哪些场景下最容易出问题,不需要盲目地大规模测试,直接去看原始模型对哪些内容最犹豫不决,可能就是最容易踩坑的地方。这个洞察本身,比"精度会影响结果"这个结论更有操作价值。
论文里还提到一个引用,说的是精度和硬件配置的变化也会让LLM推理结果发生变化,这不是Orthrus独有的问题,而是整个大模型推理领域一直存在但常常被忽视的隐患。这篇论文只是恰好选中了一个打着"无损"招牌的系统,把这个隐患摆到了台面上,逼着大家去正视它。
一个号称无损的系统,跑一千多次测试,一半以上的结果和承诺不符,这事儿要是发生在其他任何一个行业,恐怕早就被打上问号了。AI领域对这种偏差的容忍度,是不是也该重新想一想?
Q&A
Q1:Orthrus的无损承诺为什么在实际测试中没能兑现?
A:因为Orthrus的无损是在理想化数学模型下成立的,但实际推理使用BF16这种低精度浮点数运算时,微小的数值误差会在神经网络多层计算中累积,导致某些位置选出不同的词,进而让整个生成轨迹和原始模型分道扬镳。测试显示BF16下完全匹配率只有43%到45%。
Q2:为什么Orthrus轨迹分歧了,但下游任务成绩没有变差?
A:因为最终任务得分和逐字轨迹匹配是两码事,两个系统可能走了不同的生成路径却得到相近甚至更高的分数。研究团队在GSM8K、HumanEval、IFEval三个基准上测试,Orthrus的分数没有系统性下降,个别指标还略高于原始自回归模型,但差异在统计上不算显著。
Q3:换成FP32精度后Orthrus的表现如何?
A:在FP32精度下,Orthrus在全部1190条测试样本上都实现了与原始自回归模型完全一致的输出轨迹,匹配率达到100%,说明此前观察到的轨迹分歧确实是BF16低精度运算导致的数值误差造成的,而非算法设计本身的缺陷。







