简介:本文围绕“循环超过两次会发生什么”这一核心问题,系统对比循环稠密Transformer与循环MoE两类循环架构:从参数组织、每轮计算分配、循环增益来源、路由稳定性到显存与工程成本逐维拆解,剖析循环MoE在两轮之后路由坍缩、收益趋零的深层成因,并给出场景化选型建议、可落地的诊断方法与改进方向,帮助读者在两类方案间形成清晰的判断依据。
大模型的成本可以拆成两个正交的量:参数量(决定显存与存储占用)和每个token的计算量(决定延迟与吞吐)。标准稠密Transformer里这两者是绑定的:多加一层,参数和计算同步增长。于是业界发展出两个解耦方向:
两个方向各自成熟后,一个自然的设想是:把循环套在MoE外面——反复使用同一套专家池,每一轮都让路由器重新选一次专家。理论上,MoE贡献额外容量、循环贡献额外深度,本该是双赢组合。但研究与工程实践反复观察到的结论是:这个组合跑不起来,而且问题恰恰在循环次数超过两次之后集中暴露。
本文的对比对象由此明确:循环稠密Transformer(反复复用同一组稠密层) 与 循环MoE(反复复用同一套专家池、每轮经路由器重选专家)。核心问题是:循环次数从1次、2次增加到3次以上,两者各自会发生什么。
将Transformer的某个块(或一段层)用同一份权重反复执行K次,隐藏状态在残差流上被同一组变换迭代精炼:
# 循环稠密Transformer(示意)h = embed(x)for k in range(K): # K 为循环次数h = h + DenseBlock(h) # 同一组参数反复使用
关键性质:每一轮循环,全部共享参数都确定性地参与计算。循环K次,模型的有效深度约等于“K × 层数”。
MoE把“一层”改造为“路由器 + N个专家子网络”。路由器对每个token打分,选出Top-k个专家(k远小于N),加权汇总输出。参数存放在所有专家中,计算只花在选中的专家上。这个定义是理解全文的前提:MoE的本质是“条件计算”——算什么由路由器临时决定。
# 循环MoE(示意)h = embed(x)for k in range(K):h = h + MoEBlock(h) # 每轮都要经路由器重选专家
关键性质:每一轮实际参与计算的,是路由器这一轮选中的那k个专家。专家池参数在轮与轮之间共享。
两类方案在动机层面高度一致,这也是“组合它们”听起来合理的原因:
相同点之下,真正的分歧藏在“每一轮循环里,到底有没有新计算发生”。
这一确定性差异,是后续所有表现分化的根源。
这一现象可以从四个相互叠加的机制理解:
结果是一个双重落空:MoE承诺的“额外容量”没有兑现——参数很多,但多轮循环实际只反复使用同一小撮专家;循环承诺的“额外深度”也没有兑现——重复近似恒等映射的计算对表示的改造能力迅速衰减。同时还要多付出K倍的路由开销和随K增长的激活显存。
可以更抽象地总结:循环稠密买到的是“深度”,普通MoE买到的是“容量”(知识面),循环MoE试图两者兼得,但坍缩使其两头落空。这解释了为什么“参数规模看似变大、循环次数看似变深”的模型,实测提升远低于预期。
| 对比维度 | 循环稠密Transformer | 循环MoE |
|---|---|---|
| 参数组织 | 一组稠密层,全体参数共享复用 | 路由器 + 专家池,参数分片存放 |
| 每轮参与计算的参数 | 全部共享参数(确定性参与) | 路由器选中的Top-k专家(条件性参与) |
| 循环增益来源 | 有效深度随K近似线性增长 | 名义上“深度×容量”,实际易坍缩 |
| K=1→2 的表现 | 通常有稳定提升 | 常有提升(第2轮可选互补专家) |
| K>2 的表现 | 收益递减、进入平台期 | 路由坍缩,新增循环近似无效 |
| 训练稳定性 | 相对简单稳健 | 需负载均衡、路由正则等辅助手段 |
| 权重显存 | 小(参数总量少) | 大(全部专家常驻显存) |
| 推理延迟 | 与K成正比 | 与K成正比,另含每轮路由开销 |
| 工程复杂度 | 低,可即插即用 | 高:专家并行、通信、路由监控 |
| 倾向的适用面 | 参数受限、需要推理深度 | 容量受限、需要知识覆盖面 |
选型的第一步是回答“瓶颈到底是什么”:
在训练或评测脚本中记录每个token在各轮的专家选择,统计轮间重合度:
# 诊断示意:统计各轮循环的专家选择重合度selected = [router.topk_ids(h, k) for k in range(K)] # 每轮的选择集合overlap = mean(jaccard(selected[k], selected[k - 1])for k in range(1, K))# overlap 趋近 1 → 路由坍缩:后续轮次在做重复计算
若重合度随轮次快速逼近1,说明增加循环次数只是在浪费算力,应停止加深循环。
# 迭代感知路由(示意)def route(self, h, k):g = self.gate(h + self.iter_embedding(k)) # 注入轮次信息return topk(softmax(g), self.top_k)
回到最初的问题:循环超过两次会怎样?答案因架构而异。循环稠密Transformer在第三轮之后表现为收益递减的平台期,但每一轮仍有完整的新计算发生;循环MoE则在第三轮之后普遍触发路由坍缩——路由器为同一token反复选择同一批专家,容量与深度的双重承诺同时落空,多出的循环近似于无效计算。
决策思路可以归纳为一条主线:先判断瓶颈是参数、容量还是深度;再评估路由行为的确定性——凡是“新计算是否发生”依赖运行时条件判断的方案(如MoE路由),在叠加循环这类时序结构时,都必须为“条件不兑现”的风险做诊断与兜底。对多数团队而言,循环稠密与普通MoE各自站在天平两端,而循环MoE目前仍是一个需要谨慎对待、以K=2和小规模实验为边界的研究性组合。