ARLoop:1.2B循环Transformer打穿3.5B,循环架构首次在真实预训练上可行
想象你有一本只有 50 页的笔记本,但每次翻页的时候,你可以把之前写过的内容"再读一遍"。同样 50 页的笔记,翻 3 遍的效果接近 150 页的笔记本。
目录
想象你有一本只有 50 页的笔记本,但每次翻页的时候,你可以把之前写过的内容"再读一遍"。同样 50 页的笔记,翻 3 遍的效果接近 150 页的笔记本。
这就是循环 Transformer(Looped Transformer)的核心思想:不增加参数,增加循环次数。 同一套 transformer 层反复应用,每次循环都让模型"想得更深"。
听起来很美。但直到上周,循环 Transformer 在真实规模预训练上的表现一直不如普通 Transformer——参数效率是高了,但效果追不上。
Ohio State 和 Saarland 的团队刚发布了 ARLoop,第一次把循环 Transformer 在真实预训练规模上做到了同等参数量下超越非循环模型的水平。1.2B 参数的 ARLoop 用 0.5T tokens 训练,在所有 8 个基准测试上超越了 3.5B 参数的 Huginn(此前唯一的完全开源循环 LLM),还跟用更多数据训练的 Qwen3.5-2B 打得有来有回。
循环 Transformer 的老问题
先说标准 Transformer 的残差连接怎么工作。每一层的输出 = 这层的计算结果 + 上一层的输出。信息像河流一样往下流,越流越深,所有中间表示都汇入同一条河。
循环 Transformer 把同一组层反复用 R 次。标准做法是把所有循环的历史信息都累加到残差流里——"全历史注意力"(full-history attention)。第 3 次循环时,模型能看到第 1 次、第 2 次的所有中间表示。
问题在于:不是所有历史信息都值得保留。 第 1 次循环的某些中间表示可能对第 3 次循环有用,但另一些可能是噪音。全历史累加等于把信号和噪音一锅端,循环越深噪音越多。
ARLoop 的核心创新:注意力残差 + 滑动窗口
ARLoop 做了两件事:
第一,用注意力残差代替加法残差。 标准残差是 output = layer(input) + input——无脑加。ARLoop 是 output = Attention(layer(input), input)——让模型自己决定保留多少历史信息。每一层的输入是所有前序层输出的加权聚合,权重由注意力机制计算。
类比:标准残差像自助餐——所有菜都往盘子里夹,不管你爱不爱吃。注意力残差像点菜——你看着菜单选,想吃什么拿什么。
第二,滑动窗口深度注意力。 这是最反直觉的发现。你可能会以为:循环次数越多,模型越需要看全历史——毕竟更多历史意味着更多信息。但实验发现恰恰相反:在较深的循环次数下,只看最近几次循环的滑动窗口效果比看全历史更好。
为什么?因为早期的循环表示太"粗糙"了。第 1 次循环时模型刚"看"完输入,表示还很浅。第 3 次循环时,模型已经"想"了两轮,表示更成熟。让第 3 次循环去看第 1 次的粗糙表示,就像让大学生重读小学课本——不是没用,但性价比低,还可能被简单化的思路带偏。
滑动窗口只看最近 2-3 次循环,让模型聚焦在"最近的想法"上,不被"最早的粗糙想法"干扰。
控制实验:先验证再放大
论文的一个优点是先做控制实验再放大规模。
在 140M 和 370M 参数规模、循环深度 R=1 到 5 的设置下,ARLoop 在语言建模困惑度上一致超越之前的循环 Transformer 残差设计(PreNormLoop、Sandwich Norm、DeepLoop、Parcae)。
关键发现:
- ARLoop 在所有参数规模和循环深度下都优于现有残差设计
- 滑动窗口在浅循环时跟全历史持平,在深循环时超越全历史
- 滑动窗口的深度注意力权重显示:模型确实更关注近期循环层
真实预训练:1.2B 打 3.5B
在 0.6B 和 1.2B 参数规模下,用 0.5T tokens 进行真实 LLM 预训练。结果:
ARLoop-1.2B 在全部 8 个基准测试上超越 Huginn-3.5B。 Huginn 是此前唯一完全开源的循环 LLM,参数量是 ARLoop 的近 3 倍。ARLoop 用更少参数、更少数据,全面胜出。
ARLoop-1.2B 在 8 个基准中的多数上跟 Qwen3.5-2B 持平或超越。 Qwen3.5-2B 是非循环模型,参数量更大,训练数据量也更大。ARLoop 用更少参数和更少数据达到了同等水平。
数学和编程任务提升最大。 深循环对数学和编码的贡献远大于一般任务。这符合直觉:数学和编码需要更深的推理链——正好是循环的优势场景。
ARLoop-0.6B 在 8 个基准中的 7 个上超越参数匹配的 PreNormLoop 基线。 证明改进不是规模红利,是架构红利。
深循环在数学和编码上贡献更大的原因
论文做了一个"层效应"分析:拆解每次循环对最终输出的贡献。
在一般任务(如常识问答)上,第 1 次循环贡献了大部分正确性,后续循环的边际贡献递减。这些任务不需要深推理,"想一遍"就够了。
但在数学和编码上,后续循环的贡献显著更大。第 2 次、第 3 次循环不是在重复第 1 次的工作,而是在第 1 次的基础上"再想一层"。这就像解一道数学题:第 1 遍列出方程,第 2 遍求解,第 3 遍验证。每一步都建立在前一步的基础上。
这个发现对推理时计算扩展(inference-time scaling)有直接意义:循环次数是一个可控的推理时计算旋钮。 简单问题转 1 圈就输出,难问题转 3-5 圈。ARLoop 的滑动窗口设计让深循环不会因为历史噪音而退化,所以可以放心地增加循环次数来换更好的推理效果。
完全开源
论文强调"完全开源"——不只是模型权重,包括:
- 训练代码
- 数据处理代码
- 中间检查点
- 最终模型
这意味着什么
对参数效率:循环 Transformer 的核心承诺——用更少参数达到同等效果——在 ARLoop 上首次得到真实规模验证。1.2B 打 3.5B 不是微调技巧,是架构层面的效率提升。
对推理时扩展:循环次数是天然的推理时计算旋钮。ARLoop 的滑动窗口让深循环不退化,意味着你可以用更多循环次数换更好的推理效果——不需要更大模型。
对模型设计:注意力残差和滑动窗口是两个独立的设计选择,可以分别采用。滑动窗口的发现——"深循环不需要全历史"——可能适用于其他需要历史聚合的架构。
对"小模型大智慧"路线:ARLoop 证明了一条不同于"堆参数"的路线——用循环换深度。在端侧部署、低资源场景下,循环架构可能比同等参数量的非循环模型更有优势。
局限
- 0.5T tokens 的训练量相对较少,更大规模训练是否能保持优势未知
- 循环次数的收益在一般任务上递减明显,主要价值在数学和编码
- 推理延迟随循环次数线性增加——虽然参数少了,但每次推理的计算量随循环次数增加
论文链接:https://arxiv.org/abs/2611.05234 代码和模型:https://github.com/OSU-NLP-Group/ARLoop