简介:本文从参数复用与计算深度的角度,剖析视觉语言模型的一种新范式——循环Transformer。读者将理解:为何“同参反复用”能在低参数量、低训练数据条件下获得更强推理表现;循环计算与堆叠参数的本质差异;以及该思路对模型架构设计与工程落地的启示。
过去几年,视觉语言模型的能力提升几乎遵循着一条不成文的铁律:堆参数、堆数据。从十亿级到百亿级,再到千亿级,训练语料从几十亿token扩展到几十万亿token。行业普遍相信,参数量越大、见过的数据越多,模型对图像与文本的联合理解能力就越强。
这条路径确实有效,但也带来了显而易见的代价:训练成本指数级上升,推理部署门槛不断提高,而在某些需要深层逻辑推理的任务上,大模型的表现并不总是与体积成正比。
一个值得深思的问题随之浮现:能力的提升,究竟来自“更多不同的参数”,还是来自“更深更充分的计算”?
为了回答上述问题,研究者设计了一组控制变量对比实验。两组模型使用完全相同的训练数据(约0.14万亿token),参数量也基本对齐,区别仅在于计算结构:
实验结果在多个基准上呈现出显著差异:
| 测试基准 | 标准32层模型 | 循环计算方案 |
|---|---|---|
| 通用视觉理解 | 55.33 | 63.47 |
| 真实场景问答 | 55.29 | 70.98 |
| 图表理解 | 51.12 | 74.52 |
在图表理解任务上,差距超过23个百分点。这不是微调带来的波动,而是架构层面的系统性差异。
更值得注意的是,循环方案的语言骨干仅约1B参数,训练数据仅0.14万亿token,却在逻辑推理测试中超过了参数量数倍于己、训练数据多出两个数量级的对手。这说明:参数规模和数据规模并非能力的唯一决定因素,计算深度的组织方式同样关键。
传统Transformer的深度来自“堆叠不同的层”:第1层到第N层,每层有独立的权重矩阵,信息单向流过,每层只被计算一次。
循环Transformer则采取完全不同的策略:保留少数几层参数,让它们被多次调用。输入的隐藏状态在每一次循环中都会被更新,然后再次送入同一组参数进行处理。可以将其形式化地表示为:
# 伪代码示意:循环Transformer的前向过程h = embed(input) # 初始隐藏状态for step in range(num_loops): # 同一组参数反复执行h = transformer_block(h) # 参数共享,但输入h每次不同h = h + positional_info(step) # 可选:注入循环步数信息output = head(h)
关键在于:参数不变,但隐藏状态在变。每一次循环,模型都在对“已经加工过的表示”做进一步加工,相当于反复咀嚼同一份信息,逐层提炼出更抽象的语义。
直觉上,32个独立层似乎比“同一层用8次”更强,因为前者有更多“不同的视角”。但实验数据给出了相反的结论。原因可以从三个角度理解:
第一,参数效率。 独立堆叠的32层意味着32套权重矩阵,模型需要在有限数据下学习每一层的功能分工。而循环结构只有一套或少数几套参数,学习负担大幅降低,每个参数被更新的次数更多,收敛更充分。
第二,计算深度的连续性。 循环结构中,隐藏状态在多次迭代中逐步演化,形成一种“迭代精炼”的过程。这类似于数值优化中的迭代求解:每一步都在前一步的基础上改进,而不是让多个独立模块各做一次判断再拼接。
第三,隐式正则化。 参数共享天然限制了模型的自由度,降低了过拟合风险。在训练数据有限的情况下,这种约束反而有助于学到更通用的表示。
从工程落地角度看,循环架构有几个值得关注的特性:
参数量小意味着权重存储、加载和传输的成本都更低。对于边缘设备或资源受限的推理场景,1B级别的参数规模远比数十B级别更友好。同时,由于计算过程中反复调用同一组参数,权重的内存占用不会随计算深度线性增长。
循环次数是一个可以在推理时调整的超参数。在简单任务上减少循环次数以降低延迟,在复杂推理任务上增加循环次数以提升精度。这种动态计算分配的能力,是固定层数模型难以具备的。
在数据稀缺的垂直领域,循环结构可能比堆参数更具优势。因为每个参数被更多次更新,模型对有限数据的利用率更高,不容易陷入“参数多、数据少”的欠拟合困境。
循环计算并非万能解药,以下几点需要在实践中审慎考虑:
循环Transformer提供了一条不同于“堆参数、堆数据”的技术路径。它通过参数复用与迭代计算,在更小的参数规模和更低的训练数据需求下,实现了更深层次的计算和更强的推理表现。
这一思路的核心启示在于:模型能力不仅取决于“有多少参数”,还取决于“参数被如何组织和复用”。对于开发者和架构设计者而言,这意味着在追求规模之外,还有计算范式的优化空间值得探索。在资源受限、数据有限的场景下,循环计算提供了一种务实的替代方案,也为视觉语言模型的架构演进打开了新的方向。