今天小路精读了 MoRE 这篇论文,想法虽然非常简单,但是思路很清晰,值得跟着读一遍。它来自 Cornell(Kilian Weinberger 组),发在… · @Zen_with_AI · TwKit
@Zen_with_AI
今天小路精读了 MoRE 这篇论文,想法虽然非常简单,但是思路很清晰,值得跟着读一遍。它来自 Cornell(Kilian Weinberger 组),发在 COLM 2026,正文 10 页。 一句话概括全文:让相邻两层共用一个专家池,每层可选的专家组合多了约 18 倍,物理参数一个没加。 下面我按论文的思路,一步一步带您看:问题在哪,办法是什么,实验怎么样,哪里还不够。 先给骨架: 独立专家池 -> 相邻层共享 -> 深度嵌入 -> 路由分析 -> 局限 (每层各管各的 -> 路由组合变多 -> 让共享的专家分得清层 -> 真的在复用 -> 只测到 1.15B) MoE是什么: MoE 是 Mixture of Experts 的缩写,中文一般叫"混合专家"。 论文想结局的问题: 标准 MoE 里,每层有自己的 N 个专家,路由器只能在本层的 N 个里选 K 个,一共 C(N,K) 种组合。想让组合变多,就得加专家,参数随之线性增长。作者还指出,功能相近的层(尤其是网络前部)各自重新学了一批重复的专家。论文把原则概括成一句话:some layer functionality should be reused, not replicated。(某些层的功能应该被复用,而不是被重复复制。) 提出的办法: MoRE 把相邻的层分成"reuse block",同一个 block 里的层共用一个专家池,但各自保留自己的路由器。R=2 时,两层共用 2N 个专家。以 N=32、K=4 为例,每层可选的组合从 C(32,4)=35,960 增加到 C(64,4)=635,376。只共享 FFN 专家,注意力、路由器、深度嵌入仍然是每层自己的。实现上就是权重绑定。 深度嵌入。共享之后,专家并不知道是哪一层在调用它。论文给每层加了一个可学习的向量 d,在路由之前加到输入上,x' = x + d,路由器和专家用的都是 x'。作者的说法是,它只是一个加法偏移,开销可以忽略,也不会让专家在不同层里表现得完全不同。这是全文唯一新增的结构。 主要结果: 骨架用 DeepSeek-v3,三个规模 114M、369M、1.15B,在 C4 的 6.55B token 上训练。验证集 PPL(DeepSeek -> MoRE):114M 是 15.98 -> 15.89,369M 是 13.53 -> 13.40,1.15B 是 11.88 -> 11.75。MoEUT 和 Dense 在三个规模上都更差。按物理专家数对齐,1152 个专家时是 14.07 -> 13.97,差距在最大处最宽。下游六个任务的平均准确率(5-shot):114M 是 39.69 -> 40.76,369M 是 41.16 -> 43.62,1.15B 是 47.05 -> 48.12。论文还指出,PPL 的差距没有随规模变大而缩小。 消融: 三组实验,都在 114M、训练 40k 步的设置下。 R 的选择:R 取 2 到 18,PPL 都在 18.69 到 18.75 之间,都好于 DeepSeek 的 18.83,彼此的差异在统计上不显著。作者默认用 R=2,理由有两条:兼容层数为偶数的架构,扩充专家池最温和,能缓解负载均衡和路由坍塌。 深度嵌入:去掉它,PPL 从 18.71 变成 18.76。只留深度嵌入、不共享(R=1)是 18.81,几乎等于 DeepSeek 的 18.83,所以收益主要来自复用。 怎么配对:A-A-B-B-C-C 是 18.71,错位一层的 A-B-B-C-C-A 是 18.82,随机配对平均 18.83,和不共享差不多。作者用 CKA 解释:相邻层的表示相似度是 0.91,距离 5 层降到 0.65,距离 17 层只有 0.29。相邻层算的东西接近,所以适合共用专家池。 路由分析: 论文定义了 reuse rate:同一个 block 里的两层选中同一个专家的比例。MoRE 1.15B 的随机基线是 7/139,约 5.0%,实际是 10.3%,翻了一倍。DeepSeek 的随机基线约 10.1%,实际只有 8.35%。MoRE 的复用集中在网络前部,越深越少。作者联系了 OLMoE 的观察:前部层处理更通用的特征,后部层更偏词汇专门化。 局限: 规模:主实验最大 1.15B。换到 Qwen3MoE 和 Mixtral 做验证只到 114M,提升也小(Qwen3MoE 15.71 -> 15.57,Mixtral 20.75 -> 20.64)。100B 以上会怎样,作者说还需要验证,最优的 R 也可能随深度变化。 速度:峰值显存 48.76GB,对 DeepSeek 的 47.17GB,基本持平。吞吐方面,原版 Hugging Face 实现用 Python for 循环遍历专家,专家数翻倍的 MoRE 吃亏。换成 SonicMoE 之后,能到 DeepSeek 吞吐的 96%。 范围:专家并行和分布式负载均衡不在这次研究里。 如果您手上有一套现成的 MoE 训练代码,改动量就是两处:把相邻两层的专家参数绑在一起,再给每层加一个向量。 简单总结一下就是:MoRE 用"相邻层共用专家池、各层自带路由器、再加一个深度嵌入"这三件事,在不增加物理专家的前提下,扩大了每层的路由组合。在 114M 到 1.15B 的范围内,PPL 和下游平均分都好于 DeepSeek-v3,复用率也确实翻了一倍。 http://arxiv.org/abs/2609.18176
曝光 234 · 评论 2 · 点赞 5 · 书签 0
查看原帖