SMELT 把 MoE 中间一半层循环两遍:训练算力省 6.8% 到 18%,代码任务收益最大
把模型中间一半的层原样再跑一遍,按理说该更费算力,但一篇 9 月初登上 Hugging Face 每日论文的研究发现:在稀疏混合专家(MoE)模型上这么做,反而能在训练算力上省下 6.8% 到 18%,下游效果不仅没掉,在代码类任务上还涨得最多。这篇论文名为 SMELT(arXiv 2609.01343),核心结论是在总参数量、每次前向算力、缓存占用三个口径都和基线对齐的前提下,循环层结构仍然带来了实打实的训练收益。
SMELT 的全称可以翻译成一句话:中间层循环两遍的稀疏 MoE Transformer。它属于「循环型 Transformer」这一支研究,这类结构通过反复使用同一批层来模拟更深的网络,好处是权重更省,代价是同一批参数要承担更多轮计算。过去这类研究多数在固定模型大小下做对比,循环模型多跑的那几遍算力没有被算进成本里,所以「循环到底有没有用」一直吵不清楚。
一、循环层到底省不省:先解决对比不公平
要理解这篇论文,先得知道它针对的问题。普通 Transformer 的每一层参数只用一次,网络想变深,就要一层层加新参数,训练和存储成本跟着涨。循环型模型选择把一组共享层重复执行好几遍,用「深度复用」代替「深度堆叠」,这是它在内存和存储上的天然优势。
问题出在评价方式上。过去很多对比让循环模型和普通模型用同样的层数、同样的参数规模,然后说循环模型更好。可循环模型把层多跑了几遍,每次前向的算力(FLOPs)明显更高。这就好比两个人比赛解题,一个人多花了一倍时间,赢了你却说「方法更优」,显然不公平。论文明确指出,这种对比把「架构优势」和「额外算力」混在了一起。
所以这篇研究给自己立了一个更严的规矩:循环模型和基线模型必须在三个账本上全部对齐。第一,每个 token 前向计算的算力相当;第二,总参数量(不含词嵌入)相当;第三,推理时的 KV 缓存占用相当。只有在这样「算力对齐」的前提下跑出优势,才能证明收益来自结构本身,而不是来自偷偷多烧的算力。
为什么偏偏选 MoE 模型来做这个实验?因为 MoE 天生适合做这种「拆东墙补西墙」的账。MoE 把前馈网络拆成成百上千个「专家」,每个 token 只激活其中一小部分专家,参数量可以很大,但单次算力并不大。循环层多出来的一次执行要烧算力,就可以通过把隐层维度收窄来省回去;而收窄隐层会缩小专家容量,又可以通过加专家数量把参数量补回来。MoE 把「参数量」和「单次算力」解耦了,对齐预算才有了操作空间。
二、SMELT 的三条设计规则
论文通过一系列消融实验,把「怎么循环最划算」收敛成三条规则。
第一条,循环中间一半层,而不是整叠层。把网络中间 50% 的层拿来执行两遍,前后的层照常只跑一次。这样既增加了有效深度,又不像整叠循环那样把所有层都重跑,算力账更容易打平。
第二条,给循环模型一个更大的「深宽比」。循环模型的有效深度更深,隐层宽度可以相对窄一些,让网络形态更偏「深而窄」,这在算力对齐的前提下对精度更友好。
第三条,循环两遍,而不是三遍四遍。多加循环轮次会让收益边际递减,两遍是性价比最高的点。
这三条组合起来就是 SMELT 配方。用一个论文里的具体配置来说:一个约 2 亿参数(按激活规模算)的模型,稀疏度约 95%,共 12 层,中间 6 层循环两次,实际执行 18 层;为了让单 token 算力和基线打平,隐层宽度从 1280 收到 1056;为了把收窄导致的参数损失补回来,每一层的专家数量相应调多;循环残差做了 1/2 缩放,注意力头改小、GQA 分组比例调高,让多出来的层执行几乎不增加 KV 缓存占用。做完这套手术,模型和未循环的基线在三个账本上基本对齐,但结构完全不同。
三、实验结果:等算力下的训练成本账
模型规模从 2 亿一直放到 540 亿非嵌入参数,跨越四个规模档,每个规模都在 85%、95%、97% 三档稀疏度下和基线对比,再分别为两种架构单独拟合 Chinchilla 风格的扩展律。结论是 SMELT 的损失随算力下降得更快,在「算力最优前沿」上可以省下 6.8% 到 18% 的训练算力。
把省算力的幅度按预算拆开看,趋势非常清晰。当总训练算力在 10 的 20 次方 FLOPs 量级时,不同稀疏度下大约省 6.8% 到 10%;当预算上到 10 的 21 次方时,节省幅度扩大到 14.7% 到 18%;继续往更大预算外推,节省比例还能再往上走,最高一档的实验区间达到 19.6% 到 23.5%。换句话说,模型训练得越久、规模越大,SMELT 相对基线的算力优势越明显,这个差距不是恒定的,而是会复利式拉大。
| 训练算力预算 | 稀疏度约 85% | 稀疏度约 95% | 稀疏度约 97% |
|---|---|---|---|
| 10 的 20 次方 FLOPs | 约 10.0% | 约 7.8% | 约 6.8% |
| 10 的 21 次方 FLOPs | 约 18.0% | 约 15.8% | 约 14.7% |
| 10 的 22 次方 FLOPs | 约 23.5% | 约 20.9% | 约 19.6% |
表里的数字代表同一个损失水平下,SMELT 比未循环基线少花的训练算力。稀疏度越高(专家激活比例越低),绝对节省幅度略小,但节省比例的增速不变。为什么稀疏度高的档位省得少一点?论文解释是稀疏度项放大了基线和 SMELT 的差距,影响了「节省幅度」的水平,而不是影响它的增长速度。
四、下游收益:代码最强,长样本更强
验证损失更低,只能说明训练阶段表现好,还要看下游任务是否真的受益。论文的答案是不仅受益,而且收益超出验证损失能预测的水平。
在最高规模(540 亿非嵌入参数、约 97% 稀疏度)上,SMELT 在五类 DCLM Core 评测加上 MMLU 一共六个方向的准确率全面领先未循环基线。更有意思的是收益的分布规律:优势在代码类任务上最大,而且随着样本变长、上下文里的示范样例变多,SMELT 相对基线的优势还会继续扩大。这背后的逻辑很顺:循环层给了模型更多轮「重新看一遍」的机会,长文本和带多个示例的任务正好需要这种反复加工,循环结构的收益在这种场景里最能兑现。
论文还做了一层机制分析,想看清「第二遍到底多做了什么事」。通过检查注意力权重的分布,他们发现第二遍执行会压低一种叫 attention sink 的现象。attention sink 是模型学到的一种偷懒行为:很多注意力头会把大量注意力分数堆在少数几个特殊 token 上,而不是真正去关注内容相关的 token。第二遍循环把这种「注意力陷阱」压下去,把注意力质量重新导向内容相关的 token,这可能是循环结构带来收益的内在原因。
五、意义与局限
这篇论文给「循环型 Transformer」正了一次名。之前这类结构总被怀疑是拿算力换分数,SMELT 在三个预算口径全部对齐的情况下仍然跑出 6.8% 到 18% 的训练算力节省,说明深度复用本身是有价值的,不是作弊。对大模型训练来说,这给出一个可以直接抄的实操配方:中间层循环两遍、收窄隐层、加专家、调小注意力头。训练成本每省下 10%,在动辄上亿美元的预训练账单里都是真金白银。
局限也要摆清楚。第一,最高验证规模是 540 亿非嵌入参数,离当前商用前沿的万亿级模型还差两个数量级,扩展律外推本身有不确定性。第二,收益集中在长样本、多示例场景,对短 prompt、单轮问答类任务,循环的额外价值有限。第三,attention sink 的解释目前是机制层面的观察,证据指向相关性,但因果链条还需要更多实验锤实。第四,循环结构会增加推理时的计算轮次,训练省下的算力是否会在推理端以时延的形式还回去,论文没有给端到端的部署结论。
对做模型的人来说,这篇论文最大的提醒是:算力对齐是一种比「参数量对齐」严格得多的对比标准,能在这种标准下跑出优势的架构改动,才真正值得跟进。SMELT 用一次干净的实验,给循环层这条老思路指出了一个新的可行方向。