Transformer 有一个部件,我认为至今仍是整条流水线里改动最少的:残差连接。它把每层输出加回主干,粗暴但稳定,绝大多数研究都在它周围打转——加门控、加缩放、加多条车道。直到最近,才有人认真去动它。俄亥俄州立大学 NLP 组(OSU NLP Group)放出的 ARLoop 把一个更激进的思路搬进了循环模型:让残差流自己决定该复用哪几层。

结果有点反常识:一个 1.2B 参数、只训了 0.5T token 的循环模型,在论文的评测表里全面超过了 3.5B 参数、训练时最多用到 64 次循环的 Huginn,论文称它还与训练 36T token 的 Qwen3.5-2B 打平或更好。训练代码、数据处理脚本、中间 checkpoint 全部开放。

残差流:一条没有选择机制的管道

标准 PreNorm Transformer 里,第 i 层的输入是 h_i = h_{i-1} + f_i(Norm(h_{i-1}))。把它展开就能看到一个事实:任意更早一层产生的残差更新,都以固定的单位系数一路加到后面所有层。这条单一残差流没有"挑选"机制——后面的层想用哪一层的输出,只能用或者不用,不能选。

ARLoop 借的是 Kimi 团队 2026 年提出的注意力残差(Attention Residuals):把"深度"本身当成一个可以被 attention 的维度。每一层用自己学到的查询向量,对前面若干个残差源做 softmax,自己决定聚合权重。为控制开销,论文采用块级形式——把连续若干子层的残差更新合成一个块级表示,块内照旧相加,块与块之间走注意力。

循环深度下,历史其实是冗余的

论文里有个反直觉的发现:在循环模型上,只让深度注意力看最近几个残差块(外加输入嵌入),效果不但不差,在更大 R 下还更好——而同样的滑窗限制搬到标准 Transformer 上是会削弱收益的。

论文用注意力可视化与余弦相似度解释了原因:在 140M 规模的 ARLoopfull、R=4 的可视化里,第 47 个有效子层把 96% 的注意力权重交给了最近三个残差块加嵌入块。根源是参数共享——循环反复套用同一批层,不同轮次产出的表示高度相似,远端历史提供不了多少新信息,反而可能引入干扰。

放到真实预训练配方里

受控实验(140M 与 370M 两档,FineWeb-Edu 语料 11.2B 与 29.6B token,上下文 2048)里,ARLoop 在各档 R 上困惑度都最低:140M 的 R=3 是 16.38,PreNormLoop 16.91、Parcae 16.60(带输入注入 16.55)、DeepLoop 17.05、Sandwich-Norm 17.19;370M 的 R=3 是 12.17,PreNormLoop 12.48。140M 档上相对 PreNormLoop 的增益从 R=1 的 0.11 涨到 R=3 的 0.53,说明它确实更会用循环深度换来的那份额外算力。

放大到真实配方(SmolLM 风格,GQA 加 SwiGLU,数据用 FineWeb-Edu、FineMath 与 Stack-Edu,上下文 4096)之后,0.6B 模型在 180B token 上对比同架构、同预算的 PreNormLoop-0.6B:GSM8K 40.9 对 35.7,MATH 26.3 对 20.9,MBPP 36.2 对 33.1,八项评测里赢七项;唯一输掉的是 ARC-C,45.5 对 46.3。1.2B 模型(24 层、R=3、500B token)的表更激进:GSM8K 63.1、MATH 37.8、MBPP 52.1、HumanEval 33.1。论文称它在全部评测任务上超过 Huginn-3.5B(后者 0.8T token 档的 GSM8K 是 26.1、MATH 14.1),并称与 Qwen3.5-2B 在所评基准上打平或更好(Qwen3.5-2B 的 GSM8K 是 60.6、MATH 35.8)。

三笔要算的账

第一笔是吞吐。ARLoopfull 比 PreNorm 平均慢约 15%,换成滑窗版本把差距压到约 10%;内存几乎不变(0.6B 档 66.5 GiB 对 66.6 GiB)。论文说深度注意力增加的算术量很少,主要开销是额外的显存带宽访问,后续 kernel 优化还有压缩空间。

第二笔是数据。论文自己承认 ARLoop-1.2B 在多数任务上不如 Ouro-1.4B,后者 GSM8K 78.2、MATH 70.5,归因是对方预训练数据预算更大、数据源质量更高。1.2B 用 0.5T token 追平 36T token 的 Qwen3.5-2B 看着漂亮,但这更多说明基座小不等于账算得划算——换成规模相近的非循环模型,数据预算是躲不掉的。

第三笔是外推。循环模型的一个卖点是训练时 R=3、推理时多跑几轮。ARLoop 的结论偏冷静:性能涨到训练时最大 R 为止,再往上不涨。也就是说,把残差访问改聪明了,不会自动解锁推理期的循环外推——"在训练深度内组织好信息"与"外推到没训过的深度"是两个问题。

完全开放意味着什么

代码库放出了数据准备、模型实现、训练配方和评测代码;模型卡放出了 1.2B 这条 500B token 训练线的全程 checkpoint——第 1 万步到第 23 万步共 23 个中间检查点,加上第 238,417 步的最终版本,总训练量 499,996,688,384 token,Apache 2.0 授权。结构上,24 个物理层共享着跑 3 轮,有效深度 72,隐藏维 2048,MLP 中间维 5632,16 个注意力头配 4 个 KV 头,上下文 4096。

Loop 方向这两年出了不少论文,但大多只放权重,或者干脆不放。这篇把训练轨迹完整摊开,意味着别人可以从中段 checkpoint 接手,不必从零复现一遍训练——按论文自己的账,受控实验总共烧掉约 12K GPU 小时,0.6B 用 8 张 H100 跑了约一周,1.2B 用 16 张 B200 跑了约两周。

所以呢

残差流这根管道被撬开之前,大多数人的注意力都在层数、宽度和激活函数上。ARLoop 提醒的是另一件事:模型的深度不只是物理层数,还有信息在层之间流动的拓扑。循环模型让同一批层反复使用,冗余必然产生,这时候让模型自己挑历史,比让它无差别全接更划算。

不过这篇更像一份可行性证明,而不是结论:1.2B、0.5T token 的体量,还谈不上下任何关于循环路线的判断。真正值得等的是它能不能在更大规模上稳住那 10% 到 15% 的吞吐代价——如果能,残差流改造就不再是实验室技巧,而是每个循环模型都该抄的一笔。