循环变换器架构
循环变换器的根本动因是打破"深度与参数量线性绑定"的限制——既然不是每个输入都需要同等计算量,为何不用同一组权重反复"思考",以固定参数换取可变深度?
Elman(1990)和 Jordan(1986)的循环网络在每个时间步共享同一权重矩阵,本质上就是一种"循环深度"架构:将网络在时间维度展开后,等价于一个所有层权重相同的深层前馈网络。这一设计证明了有限参数可以支撑无限深度的计算,但受困于梯度消失/爆炸问题,其深度利用效率有限。RNN 奠定了"权重复用即计算复用"的基本哲学。
DeepMind 的 Alex Graves 发表"Adaptive Computation Time for Recurrent Neural Networks",首次将"不同输入应获得不同计算量"形式化。ACT 在每个循环步骤引入一个停止概率 $p_t$,模型学会对简单输入提前停止、对困难输入继续迭代。这是突破性贡献:它不仅将计算深度从超参数变成了可学习量,更揭示了一个深刻洞见——计算资源的最优分配应该是输入自适应的。ACT 的正则化项 $\mathcal{R} = \sum_t R(t)$(残余思考步数之和)为后续所有自适应深度方法提供了模板。
Dehghani 等人(Google Brain/DeepMind)提出 Universal Transformer(UT),将同一 Transformer block 重复应用 $T$ 次,配合 ACT 实现自适应深度。UT 在理论上比标准 Transformer 更具计算通用性——在合理假设下是图灵完备的。它在算法推理任务(如拷贝、排序)和 LAMBADA 语言建模上超越了固定深度 Transformer,证明共享权重加循环可以弥补参数量的不足。UT 的核心创新在于引入 step embedding(循环步编码),让共享层能区分"第几次思考"。
CMU 的 Bai、Kolter 和 Koltun 提出 Deep Equilibrium Models(DEQ),将循环次数推至无穷大:直接求解不动点 $h^* = f_\theta(h^*)$,绕过显式迭代。DEQ 使用 Anderson 加速或 Broyden 方法进行根求解,反向传播通过隐函数定理计算,内存开销为常数 $O(1)$,不依赖循环深度。DEQ 在语言建模(WikiText-103)和图像分割(Cityscapes)上达到与深层网络可比的性能,证明"无限深度的不动点"是一个实用的计算范式。
DeepMind 的 Banino 等人提出 PonderNet,用几何分布先验替代 ACT 的累积停止机制,使停止决策的概率建模更加原则化,训练更稳定。其核心改进是将停止决策建模为参数化几何分布的采样,并通过 KL 散度正则化约束迭代次数。
随着"测试时计算缩放"成为后 GPT-4 时代的核心范式(OpenAI o1/o3 等思维链模型通过增加推理步骤提升质量),循环变换器获得新生。ALBERT(2019)早已验证了跨层参数共享在 BERT 级模型的可行性,而 LoopCoder(2025)和今日的 LoopCoder-v2、Looped World Models 进一步证明:共享 block 循环可以高效缩放测试时计算,关键挑战转向如何降低顺序循环带来的延迟和 KV-cache 膨胀。
设 $f_\theta$ 为参数为 $\theta$ 的 Transformer block。标准 Transformer 有 $L$ 层各自参数 $\{\theta_1,...,\theta_L\}$,总参数量 $L|\theta|$。循环变换器强制 $\theta_1=...=\theta_L=\theta$,参数量恒为 $|\theta|$,深度由循环次数 $T$ 控制。前向传播为迭代映射:$h^{(t+1)} = f_\theta(h^{(t)})$,其中 $h^{(0)}$ 为输入嵌入。为保证收敛性,需要 $f_\theta$ 满足压缩映射条件:存在 $0 < \gamma < 1$,使 $\|f_\theta(x) - f_\theta(y)\| \leq \gamma\|x-y\|$。由 Banach 不动点定理,必存在唯一不动点 $h^* = f_\theta(h^*)$,且收敛速度为几何级数 $\|h^{(t)}-h^*\| \leq \gamma^t\|h^{(0)}-h^*\|$。DEQ 的关键贡献在于梯度计算:通过隐函数定理,不动点处的梯度为 $\frac{\partial h^*}{\partial \theta} = -(I - J_{h^*})^{-1}\frac{\partial f_\theta}{\partial \theta}\big|_{h^*}$,其中 $J_{h^*} = \frac{\partial f_\theta}{\partial h}\big|_{h^*}$ 为不动点处的 Jacobian 矩阵。这避免了对 $T$ 步迭代的反向传播,内存为 $O(1)$。为什么这样定义?因为在不动点处,微小参数扰动 $\delta\theta$ 导致新不动点 $h^*+\delta h$,满足 $h^*+\delta h = f_{\theta+\delta\theta}(h^*+\delta h)$,一阶 Taylor 展开后消去 $h^*=f_\theta(h^*)$ 即得上式。自适应停止通过学习的停止概率 $p_t = \sigma(w^\top h^{(t)} + b)$ 实现,最终输出为加权混合:$y = \sum_{t=1}^{T_{max}} \lambda_t \cdot g(h^{(t)})$,其中 $\lambda_t = p_t\prod_{s=1}^{t-1}(1-p_s)$ 是第 $t$ 步停止的概率(几何分布形式)。正则项 $\mathcal{L}_{ponder} = \text{KL}(\lambda \| \text{Geom}(\beta))$ 约束迭代次数的分布,$\beta$ 控制期望深度。参数效率的压缩比为 $T:1$——$T$ 次循环仅用一份参数。
循环变换器将深层 Transformer 的独立层栈替换为共享 block 的重复应用,可选地用自适应停止机制为每个输入动态分配计算量。
输入 token 经标准嵌入后,需要额外注入循环步编码(loop-step embedding)。与位置编码(编码 token 在序列中的位置)不同,循环步编码告诉共享 block "这是第几次迭代"。为什么这是必要的?因为所有迭代共享同一组参数,如果没有步编码,$f_\theta$ 在每次迭代中"不知道"自己处于精炼过程的哪个阶段——初次粗加工和末次精调的最优行为截然不同。实现方式通常有两种:(a) 正弦编码,将迭代步 $t$ 映射为与隐藏维度等长的向量加到 $h^{(t)}$ 上;(b) 可学习的步嵌入表,$T_{max}$ 个向量通过查表获得。实践中方式 (b) 在 $T_{max}$ 较小(如 $\leq 32$)时效果更好。
核心计算循环将同一 Transformer block 应用 $T$ 次。每次迭代包含完整的多头自注意力和前馈网络计算,但权重完全共享:= embed(x); for t in range(T): h = h + loop_embed[t]; h = transformer_block(h)。阻尼迭代是一个重要的实现细节