
你有没有想过,一个脑子更大的人,是不是一定比反复思考同一个问题的人更聪明?
大语言模型圈子里,长期以来有一个默认答案:想让模型更强,就把它做得更大、喂更多数据。这是经典的缩放法则,几乎成了行业信仰。但最近几年,有一群研究者开始琢磨另一条路:不扩大模型体积,而是让模型反复把同一组参数拿出来用好几遍。这种做法叫循环Transformer,它不增加参数量,却能增加模型的有效计算深度。听起来有点像偷懒的智慧,用同一套工具反复加工,而不是打造更多工具。
但这里有个让人困惑的现象。
循环这个点子很早就有人验证过能提升语言模型的表现,也有人证明它能帮模型做更复杂的隐空间推理。可一旦研究者把这个思路用到混合专家模型上,事情就开始变得不对劲:多循环几次,性能提升很快就见顶,甚至开始往下掉。几乎所有做这个方向的团队,最后都默契地停在了循环两次。不是不想循环更多次,是循环超过两次之后,模型就开始出问题,再加的计算几乎白费。
这篇论文的研究者就是冲着这个"为什么卡在两次"的问题去的。他们发现了两个具体的病因,并且造了一套叫LOOM的方案,把循环次数一路推到了9到12次,而且效果持续变好。
混合专家模型
混合专家模型(MoE):一种神经网络架构,每次处理一个词时,不是让所有参数都参与计算,而是通过一个"路由器"挑选少数几个"专家"子网络来处理,这样能在扩大参数总量的同时,控制实际计算量。
这是理解整篇论文的前提。普通的循环Transformer是反复用同一组稠密的网络层;循环MoE则是反复用同一套专家池,每一轮循环都要经过路由器重新挑选专家。这本该是个双赢的组合:MoE提供额外的计算容量,循环提供额外的深度。可现实却是,这个组合跑不起来。
循环卡在两次的两个病根
研究者先做了个很朴素的实验:把一个MoE模型原样拿来循环,什么都不改,一直加循环次数,观察会发生什么。
答案很扎心。循环到6次、9次、12次的时候,模型的激活方差直接爆炸,数值涨到了1000甚至2500以上(论文图3里有具体曲线),训练损失也跟着飙升,到了没法恢复的程度,论文里用了"不可逆的损失突刺"来描述。这就是论文说的"深度的诅咒"的放大版。
深度的诅咒
深度的诅咒(Curse of Depth):这是此前有研究者提出的现象,指在采用Pre-LN(前置归一化)结构的深层Transformer里,残差连接的输出方差会随着层数增加而不断累积放大,导致越往后的层越接近"什么都不做"的恒等映射,相当于白白堆了很多层却没发挥作用。
循环相当于把这个问题乘了一个倍数。普通的深层网络只是层数多,循环却是让同一组参数反复累加残差,每循环一次,方差又涨一截,涨到后面整个数值系统就失控了。
这就像你往一个水桶里反复倒水,桶本身没有排水口。普通深层网络好比往一个很长的水管里灌水,水管越长,水压衰减得越明显,到后面水流几乎停滞;循环MoE则是让同一段水管反复灌水,每循环一次都往桶里加一遍,如果不开排水口,桶迟早会溢出来。研究者管这个"排水口"叫残差缩放,后面会具体说。
第二个病根更隐蔽,得专门去看模型内部的路由决策才能发现。
研究者统计了一个9次循环的MoE模型,在不同循环轮次里,路由器挑选专家的分布有多相似。如果用的是所有循环共享同一个路由器,那么不同轮次挑出来的专家几乎是一样的,余弦相似度能到0.98以上(论文图4左图)。换句话说,模型循环了9次,但每一次都在用几乎相同的专家组合做几乎相同的事情。
论文把这个现象叫做专家选择塌缩
专家选择塌缩(Expert Selection Collapse):路由器在不同循环轮次之间反复挑选出几乎相同的专家子集,导致额外的循环次数只是在重复计算,而没有带来新的计算内容。
这个问题比方差爆炸更本质。方差爆炸是数值层面的故障,专家选择塌缩是逻辑层面的浪费。你多算了9遍,但9遍里有8遍其实在干同一件事,这跟你只算1遍其实没有本质区别,只是多耗了算力。
这就像你请了九位顾问来给一份方案提意见,结果发现这九位顾问其实都在重复第一位顾问的看法。表面上你开了九场会,实际信息增量约等于一场会。如果不特意要求每位顾问从不同角度切入,这九场会的边际价值会迅速归零,甚至因为意见太统一反而让你忽略了真正的问题。
找到了这两个病根,研究者就可以对症下药了。他们提出的方案叫LOOM,设计原则听起来很直白:每一次循环都应该贡献新的计算,同时保持循环状态的稳定。这句话拆开来看,其实对应着上面两个病根,一个管"稳",一个管"新"。
稳住循环状态:残差缩放和重新注入输入
先说"稳"的部分。
既然问题是残差累积导致方差爆炸,那最直接的办法就是给每一次循环的残差输出乘上一个缩小系数,让累积的总量保持在可控范围。LOOM用的公式是γ等于λ除以H乘根号M,这里H是循环总次数,M是每次循环里的物理层数,λ是一个固定不变的超参数,设成了0.5。
残差缩放
残差缩放(Residual Scaling):对每一层注意力模块和专家模块的输出乘上一个随循环次数和层数变化的缩放系数,从源头上限制残差累积的速度,防止隐藏状态方差随深度增加而失控增长。
这个公式里有两个1除以的部分很值得琢磨。1/H这一项是循环次数越多,每次循环贡献的残差权重就越小,相当于提前给总量设了个上限,不管循环多少次,总的累积量都被控制住了。1/√M这一项是针对物理层数的,层数越多,每层的贡献也适当减小,防止层内本身也发生方差膨胀。
这其实是提前把蛋糕切好。你知道这块蛋糕最终要分给H个人吃,那不如一开始就按1/H的比例切,而不是先随便切大块,吃到最后发现蛋糕早就吃完了却还有一半人没吃上。如果不提前做这个除法,等到循环次数一多,前几轮循环就把方差额度耗尽了,后面的循环只会在一个已经崩溃的数值空间里挣扎。
但研究者做实验发现,光做残差缩放还不够。单独用残差缩放这一项,方差确实被压住了,可训练损失却比完整方案高出一截(论文图3有对比)。这说明光控制数值大小,解决不了另一个问题:信息在反复循环中被稀释,模型渐渐"忘了"输入到底是什么,这叫表征漂移。
于是LOOM加了第二招,叫嵌入重新注入,从第二次循环开始,在每一轮循环开始前,把最初的输入嵌入重新掺进当前的隐藏状态里:
嵌入重新注入
嵌入重新注入(Embedding Re-injection):在每一轮循环的开头,把最原始的输入词嵌入按一定比例重新混合进当前的隐藏状态,防止深层循环逐渐丢失对原始输入信息的感知,系数随着循环轮次递减,确保新鲜输入信息始终占有一席之地,同时又不会盖过模型已经积累的推理结果。
这就像你在玩传话游戏,十个人排成一队依次往后传一句话,传到第五个人的时候,原话可能已经走形了。如果每传两个人就允许大家回头看一眼纸条上写的原话,核对一下,信息失真的速度就会明显降低。LOOM做的正是这件事,只是这张"纸条"不是每次都翻看,而是用递减的权重参与进来,循环越往后,模型对自己已经积累的推理结果信任度越高,对原始输入的依赖比例就相应降低。
论文里有个具体数字能说明这招的分量:去掉嵌入重新注入这一项,9次循环的验证困惑度从18.62涨到了26.05(论文表5)。困惑度这个指标越低越好,涨了快8个点,相当于模型对下一个词的预测准确度明显变差了。这足够说明,光靠控制数值大小是不够的,信息锚点同样重要。
让每次循环都干不一样的事:独立路由器和循环残差
解决了"稳"的问题,接下来要解决"新"的问题,也就是怎么打破专家选择塌缩。
LOOM的做法听起来很简单:每一次循环配一个自己专属的路由器,而专家本身的参数仍然在所有循环之间共享。路由器决定"这次该找谁来干活",专家决定"干活的具体内容"。让路由器各管各的,专家池子不变,这样既不增加太多参数(路由器本身很小),又能让不同轮次的循环挑出不同的专家组合。
论文图4给出的对比很直观:用独立路由器之后,不同循环轮次之间的专家使用相似度明显降低,专家负载的波动性(用标准差衡量)明显升高。这说明不同轮次确实在干不一样的事了。
但这里有个新问题:如果每次循环都干不一样的事,那前面循环算出来的东西,会不会就这么被后面的循环直接盖掉、白白浪费了?
研究者想到的办法叫循环残差,核心思路是用指数滑动平均保留一份"记忆",让后面的循环能接着前面的成果继续加工,而不是从零开始。
循环残差
循环残差(Looping Residual):基于固定衰减系数的指数滑动平均(EMA)机制,维护两份记忆:一份是跨越所有层和所有循环的全局记忆,一份是只在当前这一轮循环内部跨层累积的局部记忆。两份记忆各自只需要存一个累积张量和一个标量,不需要存下历史上每一轮的完整输出,所以几乎不增加额外的显存和计算开销。
这个设计挺巧妙的地方在于,它没有真的把9次循环、每次循环内部好几层的所有中间结果都存下来,那样显存会爆掉。它用的是一种递归式的加权平均,每来一个新的输出,就按衰减系数β(固定为0.5)跟旧的累积值做一次混合,相当于一直在"滚动更新一笔账",而不是把每一笔账单都留底。
这就像你记旅行账本,如果每天的消费都单独记一页,十天下来账本就有十页,翻起来很麻烦,存储压力也大。但如果你每天只更新一个"累计平均消费"这个数字,用一个固定公式把新开销和旧的平均值混合一下,账本永远只有一行数字,却依然能大致反映你整个旅途的花钱节奏,偏重最近几天但也没完全忘记前面。如果不这样设计,存历史记录的开销会随着循环次数线性增长,循环次数一多,显存直接撑不住。
把这两个记忆summary接入到残差更新里之后,模型的注意力输出不再是直接简单加到隐藏状态上,而是用这两路"摘要"替代,这样后面的循环既能看到最新鲜的局部信息,又没丢掉全局积累的内容。
去掉循环残差这一项做实验,9次循环的验证困惑度从18.62涨到19.25(表5),涨幅不像去掉嵌入重新注入那么夸张,但下游任务平均准确率也从39.8%降到39.3%,确实是在起作用的。
训练技巧:分段反向传播
稳和新这两条主线之外,论文还解决了一个很现实的工程问题:循环次数一多,训练显存和耗时都会跟着暴涨,这也是为什么此前的研究往往主动放弃深层循环的另一个原因,不完全是效果问题,也有工程成本的问题。
常规做法是反向传播要穿过全部H次循环,循环次数越多,计算图越长,存的中间激活值就越多。论文图5给出的数据很直接:12次循环时,不做分段处理的显存占用是19.3 GiB,训练总耗时26.1小时;做了分段处理之后,显存稳定在12.6 GiB,训练耗时压缩到12.6小时,几乎砍掉一半。
LOOM用的办法叫分段反向传播
分段反向传播(Segmented Backpropagation):把H次循环切分成若干段,每段最多包含K=3次循环,只在每段的最后一次循环处计算语言建模损失并反向传播,梯度只在这一段内部流动,段与段之间传递隐藏状态和循环残差记忆时切断梯度连接(stop gradient)。
这个思路有点像公司财务审计不是等到年底才一次性翻查全年账目,而是按季度做阶段性结算,每个季度结清一次,下个季度基于上个季度的结果继续往前走,但不会再去反复核验上个季度的每一笔流水。如果不这样做,年底一次性审计全年账目,工作量会随时间线性堆积,到了年末几乎没法承受,而且一旦某个月出了错,很难精确定位到底是哪一步出的问题。
更让人意外的是,分段处理不只是省资源,还顺带提升了训练稳定性。表6的数据显示,9次循环不做分段处理时,出现了无法恢复的损失突刺,验证困惑度冲到81.04,下游平均准确率跌到34.3%;而做了分段处理之后,困惑度只有14.80,平均准确率41.1%。省资源和保稳定,这次是同一个动作带来的两个好处。
实验结果:循环到底能走多远
研究者在三个规模上做了验证,大致是1亿参数、3.5亿参数,还有17亿参数。
在近似等计算量的对比里(也就是控制住总计算开销不变,只是把计算量重新分配给循环次数和专家数目),700M规模的模型里,循环4到5次时效果最好,验证困惑度从未循环的18.36降到16.54,下游七个任务平均准确率从38.84%升到39.53%。这个对比条件下,循环5次是性能和稳定性的最佳平衡点,循环6次开始略微回落但基本持平,没有继续恶化,这说明LOOM把循环真正变成了一个可以持续受益的维度,而不是过了临界点就一路下跌。
在不限制总计算量的实验里,结论更有冲击力。350M规模的模型,循环12次时验证困惑度降到14.86,平均准确率升到41.4%,全程稳定,没有出现崩溃。而对照组里,不做任何稳定化处理的"原生循环"版本,循环到6次就开始出现无法恢复的损失突刺,困惑度直接冲上1000多。
17亿参数的大模型实验最能说明问题。这个模型在60B(600亿)token上训练,不循环的基线困惑度是9.62,下游平均准确率42.4%。循环9次时,困惑度降到7.77,平均准确率升到47.7%,整整提升了5.3个百分点。要知道,这相当于用同一组1.7B参数,通过循环9次,撬动出大致相当于一个15B(150亿)参数规模模型的有效计算深度,却完全没有增加真正存储的参数量。循环12次时表现略微回落到7.84,但依然远好于不循环的基线,说明9次附近已经接近这个规模下的最优甜点。
论文里特别强调,这套方案在从1亿到17亿参数的跨度里,核心的几个超参数(λ、β、分段长度K)全部保持不变,没有为每个规模单独调参。这意味着这不是一套只对某个特定模型大小凑巧有效的trick,而是具备一定的跨规模迁移性。
写在后面
读完这篇论文,我最意外的一点是,循环MoE卡在两次这件事,此前几乎被整个领域当成了一个"自然边界",大家默认接受了,很少有人去深挖这背后到底是数值问题还是逻辑问题。这篇论文做的事情其实是把一个被当成"天花板"的现象,拆成了两个可以分别处理的具体病因。这种拆解本身的价值,可能比最后那套解决方案更值得记住。
还有一个细节让我印象很深:专家选择塌缩这个现象的发现,靠的不是看loss曲线,而是专门去统计路由器在不同循环轮次之间挑选专家的相似度。这提醒我一个事情,很多时候模型表面上的性能停滞,背后的真实原因藏在一些你平时根本不会去画的那张图里。如果研究者没有专门去画那张"跨循环专家负载相似度热力图",这个病因可能永远被归结为"循环就是会退化,没办法"。
另外论文里反复强调一个细节:单独用残差缩放,或者单独用嵌入重新注入,都不够,必须两者齐上才能真正撑住深层循环。这跟很多"组合疗法"类的发现有点像,单个药起不了作用,但两个药一起吃,效果会出现一个台阶式的跳变。这种非线性的协同效应,在工程研究里似乎比我们想象的更常见。
一个还没被回答的问题是:为什么是循环9次左右达到最优,而不是15次或者20次?论文里只是观察到了这个经验上的峰值,但没有给出一个理论上能预测"最优循环次数"的公式。如果真的存在这样一条缩放定律,循环深度和模型规模、数据量之间应该有某种可以写成公式的关系,那会是比这篇论文本身更有野心的下一步。
Q&A
Q1:LOOM是什么?
A:LOOM是一种让混合专家模型(MoE)能够稳定循环9到12次的训练方案,通过残差缩放、嵌入重新注入、每循环独立路由器和循环残差四个机制,解决了循环超过两次就性能下滑的问题。
Q2:循环MoE为什么以前只能循环两次?
A:论文发现两个病根,一是深度的诅咒导致残差累积让激活方差爆炸,训练直接崩溃;二是专家选择塌缩,不同循环轮次挑选的专家几乎一样,多循环等于白算,没有带来新计算。
Q3:LOOM在实际模型上效果如何?
A:17亿参数模型循环9次后,验证困惑度从9.62降到7.77,下游任务平均准确率从42.4%升到47.7%;700M模型在等计算量下循环5次时表现最优,困惑度从18.36降到16.54。
好文章,需要你的鼓励
GeoVerse融合几何潜在扩散模型与Wan2.2视频生成先验,并引入全局空间记忆机制,实现了跨视角一致、生成质量高且推理速度快的新视角合成,在多个数据集上大幅超越现有方法GLD。
本文解读TT-VidT,一种通过分离外观锚点与动作令牌、结合Diff Compression训练目标的视频自监督方法。在24种架构目标组合的受控实验中,仅TT3D与Diff Compression搭配才能进入强动作敏感区,且计算量比同类方法降低近一半。
Q&A Q1:Imprint Reader是什么? A:Imprint Reader是上海人工智能实验室团队开发的模型,通过SMaRT训练方法学会读取另一个模型冻结的权重更新,把参数层面的变化翻译成自然语言描述,判断这次更新到底注入了什么知识或诱导了什么行为习惯。 Q2:MetaEdit能做什么? A:MetaEdit能把Reader对目标行为的梯度信号迁移到原始模型上,不需要任何目标任务的训练数据,只用一句行为描述就能定向调整模型参数,已经在安全性拒绝率调节、数学推理风格转变和工具调用能力提升上验证过效果。 Q3:Imprint Reader读权重更新的准确率高吗? A:目前还不高,知识类目标的Pass@100只有2%,行为类目标是16%,说明自由生成描述的可靠性有限,但相比原始模型完全答不出来的0%基线,已经证明了权重更新的自然语言读取是可行的。
统一多模态模型能看也能画,理论上该会自我修正。本论文提出UMM-Reflection,用整条轨迹的强化学习联合训练诊断和修图能力,GenEval提升12分,且迁移到多个未训练基准,揭示RL提升的是选择可靠性而非新能力。