博客

训练之后,一个 Mixture-of-Experts 被撕裂到什么程度?

2026年6月25日

English
一张面向读者的 MoE 路由解释图。隐藏态经过 router 打分,top-k 只选择少数专家,被选专家的输出再加权求和。图中高亮了 top-k 边界这道 C0 撕裂:极小的跨界移动会换专家。

A Geometric Diagnostic for Routing Discontinuity in Released Weights

这是 DeepSeek V4 与流形撕裂 的姊妹篇。那一篇是论点——loss spike 是几何撕裂,不是优化爆掉。这一篇是测量:我做了一个诊断工具,把它对准已发布的 MoE 权重,问一句:它到底被撕到什么程度。

在 DeepSeek 那篇里,我用了一个跟 Max Ma 聊天时聊出来的词:MoE 层不是在弯折表示,它会撕裂表示。(这个词本身比那次聊天更老——它出自 Lee 和 Verleysen 的流形学习工作,讲的是把拓扑上非平凡的数据流形撕开;Max Ma 和 Gen-Hua Shi 的 Deep Manifold 论文提供的是神经网络流形视角这个动机。)弯折是连续的、无害的;撕裂是离散的,是病灶。当时文章里比喻讲得不错。但比喻之后,总要把撕裂亮出来,说清它有多大,再老实承认它会、和不会造成什么。

所以这篇是一篇被压进博客的测量论文:一个几何诊断,跑在已发布的 OLMoE 和 Qwen 权重上,带负对照和 known-answer 自检。


一个欠了测量的比喻

一个 MoE 层把每个 token 路由到一小撮 top-kk 专家。这个离散选择让层间映射变成 C0C^0 不连续:两个任意接近、却落在路由边界两侧的隐藏态会被发往不同的专家——于是块输出可以跳变 O(1)O(1)。这个跳变就是撕裂。

已有工作从两个方向逼近它,却都没在真实模型上把它量出来:

  • 连续化路由修法——ReMoE 明确把 top-kk 刻画成一次 jump discontinuity,并用 ReLU 路由替代它;Soft MoE、sparsemax/α-entmax 是它的亲戚。这些是把不连续消掉,而不是去量已发布权重里那一个。
  • 路由翻转率——R3 router-replay 研究报告:训练引擎与推理引擎之间,约 10% 的 router、94% 的 token 至少翻转一个专家。那测的是专家集合多久变一次,不是这变化诱发的输出跳变

没有人去测那个真正支配真实模型传输映射的量:已发布 LLM-MoE 权重上的输出跳变几何——跳变有多大、坐在哪、由哪个方向触发。这就是缺口。

撕裂到底是什么

一个 MoE 块把 hRdh \in \mathbb{R}^d 映为

y(h)=ewe(h)Ee(h),y(h) = \sum_e w_e(h)\, E_e(h),

其中路由 logit 为 ge=Wehg_e = W_e h,top-kk 取最大的若干个,ww 是在全部路由 logit 上的 softmax,并在 top-kk slot 上不再重归一化地取出(已发布的 OLMoE 与 Qwen1.5-MoE 均为 norm_topk_prob=false)。把 logit 排序 g(1)g(k)g(k+1)g_{(1)} \ge \cdots \ge g_{(k)} \ge g_{(k+1)},k/(k+1)k/(k{+}1) 活跃集边界就是

g(k)=g(k+1),g_{(k)} = g_{(k+1)},

一个法向为 n=W(k)W(k+1)n = W_{(k)} - W_{(k+1)} 的超平面。越过它,你就换掉了第 kk 个专家,块输出跳变 αE(k)(h)E(k+1)(h)\alpha\lVert E_{(k)}(h) - E_{(k+1)}(h)\rVert,其中 α\alpha 是边界 slot 取出的路由权重——所以未加权的 E(k)E(k+1)\lVert E_{(k)} - E_{(k+1)}\rVert(也就是下文的 M2 悬崖)只是上界,真正决定大小的是这个 α\alpha 加权跳变,也就是下文那个每块跳变。这是一次货真价实的 C0C^0 不连续——对照一个 ReLU MLP,它是 C0C^0 连续的、只带 C1C^1 折角。

那怎么把真撕裂和又陡又光滑的斜坡分开?放大来看。 沿一条越界的短路径走,测输出每走一步动多少——差商 Δy/Δx\lVert \Delta y\rVert / \lVert \Delta x\rVert——然后看得更近、再更近(我在路径上采 500、2000、8000 个点)。光滑的斜坡会随放大变平:步子更细,跳变成比例地更小。真撕裂正相反——你凑得再近,它都是一堵垂直的墙,于是测到的陡度随放大同步往上爬。

这是个干脆的是/否判据,但它给出的那个数容易误读,这里先把情况说明一下。我放大了 16 倍(从 500 到 8000 个采样点),所以真撕裂的陡度恰好涨 16×,而光滑映射几乎不动。把这个增长叫 hardG。要点在于:这个 16 只是放大倍数。任何真撕裂——任意层、任意 kk、任意模型——都会落在 16×,因为 16=8000/50016 = 8000/500所以 16× 不告诉你撕裂有多严重,它只告诉你撕裂是真的——是墙,不是坡。 有多严重,要看另一个数(跳变的大小,见下)。两个天生光滑的对照替判据把关——一个 tied-expert 换专家(no-op),一个连续性有保证的 soft 门控——它俩都回到 1×\approx 1\times(不增长),本该如此。

概念上,这个测试很简单:光滑映射在网格变细时仍停在 1×1\times 附近;真跳变会跟着放大倍数一起涨。在一个带精确已知撕裂的小MoE模型块上做一次 sanity check,把这条定律钉死:一放大,陡度就完美地跟着放大倍数走——一条干净的线性律(R2=1.000R^2 = 1.000),横跨 64 倍的分辨率范围——而光滑对照保持平坦。正是这个 known-answer 自检告诉我们:在真实权重上看到的 16× 是撕裂的指纹,不是探针的怪癖。

一张简化版 zoom test 图。光滑映射在 500、2000、8000 个采样点下都接近 1×;真 MoE 撕裂随着测量网格变细,从 1× 到 4× 再到 16×。

从中长出三个核心测量:

  • M1 边界占比: margin g(k)g(k+1)g_{(k)} - g_{(k+1)} 的分布,以及贴近边界的 token 比例。
  • M2 专家悬崖: 归一化的 E(k)E(k+1)\lVert E_{(k)} - E_{(k+1)}\rVert,外加被换专家对的余弦。cos ≈ 1 是冗余(没有真撕裂);cos ≈ 0 是非冗余、停在 2/2\sqrt{2}/2 基线;cos < 0 才是真专精。这把"过度专精"和"仅仅非冗余"分开了。
  • M3 连续性签名: 上面那个放大判据——陡度随放大往上爬(撕裂)还是变平(光滑)?——概括为 hardG,带它的两个对照。
一张三面板的 MoE 撕裂测量总结图。M1 展示边界占比,许多 token 靠近 margin 为零的边界;M2 展示专家悬崖,OLMoE 的余弦约为 +0.02,M2 norm 约为 0.70;M3 展示 hardG 约为 16×,两个光滑对照约为 1×。

所以严重度不在连续性签名里。它由每块跳变和 M2 承载——下文都请记住这个区分。

结果:已发布的 router 每一层都被撕开

撕裂不是玩具LLM模型的产物。在 OLMoE-1B-7B(16 层、64 专家、k=8k=8)上,放大判据在每一层都是阳性——陡度随放大同步涨 16×(hardG 16×\approx 16\times,区间 15.93–16.01),而两个光滑对照保持平坦(1.0×\approx 1.0\times)。就是下面这张测量图。还是那句提醒:这个 16× 只意味着"每层都是真撕裂",它不是大小的度量。大小是另外两个数。第一,跳变本身 0.239\approx 0.239——一个 token 越过边界时,约 MoE 子层输出的 24% 发生位移(一个块级几何量,不是模型最终答案、logits 或任务精度的变化;作为加到残差流上的扰动,它还要更小,这与下文很小的下游 KL 一致)。第二,专家悬崖 M2 0.70\approx 0.70——余弦 0.025\approx 0.025,正好在两个无关向量的基线上,所以被换的专家确实不同,但并非高度专精。而且几乎每个 token 都贴在边界一线之间(margin 中位数 1.5×103\approx 1.5\times 10^{-3})。

已发布 OLMoE-1B-7B 上的差商连续性签名。随着测量放大,硬 top-k 的陡度涨约 16×——真撕裂的指纹——在 16 层里每一层都如此,而两个光滑对照(soft-edge 门控与 tied-expert)都平稳停在约 1×。

表 1 — OLMoE-1B-7B 逐层诊断(24 条文本)。hardG 是放大判据的增长(8000 处陡度 ÷ 500 处陡度);对真撕裂它等于放大倍数 16,所以它逐层的平稳是判据的属性,不是模型的。块跳变列是每块输出跳变(占块输出范数的比例)。hardG、块跳变与两个对照是 8 条越界路径的中位数;margin、M2、cos 是层内逐 token 中位数。跨层来看:hardG 中位数 15.99×、M2 0.704、cos 0.025;块跳变均值 0.239;soft/tied 对照 ≈1.00

marginM2 悬崖coshardG块跳变soft 对照tied 对照
00.00120.6940.05616.000.2381.0051.001
10.00090.7010.03315.980.3091.0031.002
20.00100.7020.02815.990.2461.0041.001
30.00110.7040.02216.000.2481.0041.002
40.00110.7030.02515.990.2821.0031.002
50.00120.7020.03016.000.2881.0041.002
60.00110.7040.02315.990.2841.0021.003
70.00140.7040.02616.010.2331.0031.002
80.00150.7040.02516.000.2491.0031.002
90.00190.7030.02616.010.2661.0031.002
100.00190.7080.01515.990.2121.0031.002
110.00210.7090.01215.980.2441.0031.002
120.00260.7070.02115.970.2261.0031.002
130.00230.7090.01515.990.1571.0031.002
140.00230.7030.03515.960.2221.0031.002
150.00280.6000.30115.930.1231.0031.002

第 15 层(末块)是唯一的轻微离群——悬崖更低(M2 0.60)、余弦更高(0.30 → 专家更冗余)——但它的不连续(hardG 15.93×)毫不减弱。

这不是 OLMoE 的怪癖。Qwen1.5-MoE-A2.7B(24 层、60 个路由专家、k=4k=4)复现了同一套模式:

指标OLMoEQwen1.5-MoE
hardG(连续性签名)≈16× 全层15.99×(15.96–16.02)
M2 专家悬崖≈0.700.710
cos(Ek,Ek+1)\cos(E_k, E_{k+1})≈0.0250.010
近边界比例(margin < 0.05)≈100%98.2%
整块跳变≈0.2390.368
tied / soft 对照≈1.0×1.002× / 1.003×
静态撕裂指标在 OLMoE-1B-7B 与 Qwen1.5-MoE-A2.7B 上的跨模型复现:两个家族 hardG 都约 16×、M2 悬崖都约 0.70,近边界占比与整块跳变也都偏高。

这个 16× 会不会只是 k=8k=8 的产物? 不会——而且现在有三重直接证据。干净的理由:16 是放大倍数(8000/500),所以任何真撕裂都会落在它上面,与 kk 无关。交叉验证:Qwen 路由 k=4k=4,却落在与 OLMoE 的 k=8k=8 相同的 16× 上。直接测试:我在同一个模型上把 kk 从 1、2、4 拨到 8——这个数纹丝不动(每次 hardG 都是 16.00,总区间 15.92–16.03)。它跟着放大倍数走,不跟 kk 走。

已发布 OLMoE-1B-7B 上的同模型 k-扫描(第 0/8/15 层;每格 64 条边界路径)。hardG 在 k = 1、2、4、8 上都被钉在 16——直接确认这个值由探针的放大倍数(8000/500)决定,而非 top-k。64 条路径的误差须紧贴中位数;soft 与 tied 对照在约 1 附近(在量程外)。

一句话总结:训练并不会把这道缝补上。 已发布的 router 在两个家族、每一层,都带着这道撕裂——放大判据阳性,每块跳变实打实地约 24%,而悬崖 M2 ≈0.70 贴在无关向量基线上。

撕裂是方向性的——而这才是意外之处

直觉在这里栽了。最显然的抗扰动测试是:随机扰动隐藏态,看消掉撕裂会不会让块更稳。答案是一个 null——而且这个 null 很有信息量。

哪怕扰动大到翻掉 67.6% 的 token 的 top-kk 集合,硬-vs-软的块跳变也只差 2.6%(0.581 vs 0.566)。杀掉撕裂,几乎不改变块对随机噪声的响应。这个 null 不是说专家从不翻——这个幅度下 67.6% 的确翻了——而是说随机翻转在软门控本已产生的平滑响应之上,几乎不增加额外的不连续过量

原因是几何的:随机扰动几乎总是切向于边界。 改成沿 raw-logit 边界法向扰动,取到撕裂距离的 2×2\times,画面就反过来了:

OLMoE 层法向翻转率切向翻转率法向跳变切向跳变法向 ΔKL切向 ΔKL
00.9150.0090.0980.00670.0063−0.0003
80.9450.0040.1790.01110.01610.0050
150.9440.0040.0840.00810.00170.0001

到撕裂的距离极小——中位数只有 h\lVert h\rVert0.24–0.34%——所以模型就住在边界上。一个不到 1% 相对幅度的法向轻推就翻掉专家(0.9\approx 0.9 概率),并产生 O(0.1)O(0.1) 的每块输出跳变(占块输出范数的一部分,不是模型输出),带可测的下游 KL;而等幅度的随机/切向轻推几乎什么都不做。撕裂是可被利用的,但只沿一个特定的低维方向。

一张方向性脆弱性的概念图。边界法向扰动跨过 MoE 路由边界,诱发 O(0.1) 的块跳变;同等幅度的随机或切向扰动没有跨界,只产生约 0.8% 的切向跳变。

而且你没法廉价地把它重门控掉。连续化重门控能消除静态撕裂(softG 1×\approx 1\times),但全层在推理期施加,会把困惑度从 10.04 抬到 159.94(15.9×)——还是最温和阈值下的数。单层重门控则温和得多(1.2×\approx 1.2\times)。所以任何实用缓解要么针对特定层,要么像 DeepSeek-V4 那样并进训练,而不是事后外挂。

训练期:它被分解,而非被引爆

这是诚实的负面结果,也是让比喻不至于过界的那一段。为了探训练,我用了一个受控的从零开始的 GPT-MoE 探针,几何对齐到 OLMoE-近似量级(E=64、k=8、约 308M 参数)——不是那个 7B 模型的预训练。

机制(真实、但不大): 参数空间的差商探针发现硬路由比连续性匹配的软门控更粗糙——2.0× vs 1.4×。方向上与合成的 4.5× 一致,但随着几何变现实而变弱。

结果: 自然训练是多尖峰但收敛的,而撕裂不会自愈。8000 步里有 196 个 >0.3 的尖峰(最大 0.585),却没有发散(终损 3.27)。M2 维持 0.711 → 0.690、hardG 全程 16×\approx 16\times,而操作性的整块跳变早期就塌(0.431 → ≈0.15),随后进入一条噪声带。训练压住的是撕裂的后果,不是它的拓扑

受控 E=64/k=8 从零训练探针。M2 专家悬崖与 hardG 连续性签名贯穿训练始终,而操作性整块跳变早期塌缩后进入平台。

再往边界推一把,用一个跨两个种子、贴在稳定边缘的撕裂幅度旋钮:

种子tear_level>0.3 尖峰数最大尖峰是否发散
00.0 / 0.5 / 1.03 / 2 / 40.42 / 0.42 / 4.21否 / 否 / 否
10.0 / 0.5 / 1.07 / 5 / 60.53 / 0.52 / 5.28否 / 否 / 否

没有一次运行发散。 尖峰数甚至不随撕裂幅度单调。但满撕裂会可复现地催生一个罕见的严重但可恢复尖峰(最大 ≈4–5 vs ≈0.5)。诚实的说法:撕裂带来优化粗糙度和罕见的尖峰严重度,但在这个尺度上,单凭它不足以导致崩溃——动量和 Adam 优化器把它吸收了。尺度依赖性仍未解决,而那恰恰是 DeepSeek-V4 的工程开始相关的地方。

跨两个种子的撕裂幅度旋钮(tear_level 0.0 / 0.5 / 1.0):尖峰数非单调、无一发散,但满撕裂可复现地催生一个罕见的严重但可恢复尖峰(最大约 4–5 vs 约 0.5)。

用几何读 DeepSeek-V4 的三道防线

这里就接回了 DeepSeek 那篇。关键的提醒是:路由不连续 ≠ loss spike。 不连续只是若干可分因子里的第一个:

  1. 路由不连续——方向性的,几何入口(上文)。
  2. 专家离群幅度——跳变随它放大;我测得 h\lVert h\rVertk/(k+1)k/(k{+}1) 换专家跳变的相关 +0.437(高范数 token 跳得更多)。
  3. 时序 backbone/router 失配——我这次未测(未来工作)。
  4. 跨层传播增益——下游 KL / 注入跳变 0.020.09\approx 0.02\text{–}0.09(一个非膨胀残差给它封了顶)。
  5. 优化器吸收——上面那个训练结果。

DeepSeek-V4 的三道干预落在因子 2–4 上——可以读作作用于后果,而非拓扑:SwiGLU clamping(因子 2)、Anticipatory Routing(因子 3)、流形约束的 hyper-connections(因子 4——一个在 Birkhoff polytope 上的残差映射,谱范数 ≤ 1,非膨胀)。这些是对 DeepSeek 自述机制的解读——DeepSeek 并未声称在处理本文定义的这道撕裂。

第一个可以直接验。一个 SwiGLU-clamp 扫描跑在已发布 OLMoE 上,拓扑保持平坦——hardG 16.03 → 16.02、M2 0.705 → 0.701——同时压低绝对幅度(专家悬崖 2.90 → 1.97、绝对 hardJump 0.214 → 0.164);相对跳变保持尺度不变(0.310 → 0.303)。clamp 压的是跳变的幅度,不是它的存在——这是把 DeepSeek 的分解量出来,而不是断言出来。

已发布 OLMoE 上的 SwiGLU-clamp 分解。收紧 clamp 让拓扑保持平坦(hardG 与 M2 基本不动),同时压低绝对专家悬崖与绝对跳变,代价是 hook 路径上的困惑度。

在 DeepSeek 那篇里我画过这张表,论点是 V4 的四个机制在不同位置做着同一种事——承认权重和激活是几何对象:

位置机制几何动作
优化器Muon把更新投影到等距群
路由Anticipatory Routing在源点几何里做决定
前向残差mHC把残差约束到 Birkhoff polytope(非膨胀)
激活SwiGLU clamping给曲率封顶

这里的测量说:那些机制所尊重的几何是真切在那儿的——在已发布的权重里,每一层都是一道真撕裂——无论优化器在训练时有没有恰好撞上它。

它是什么,不是什么

这是一个测量/分析结果,我想这样定义它的边界:

  • 提出新门控、不提出新的 C0/C1C^0/C^1 分类法、也不声称首次发现这个不连续。那些归 ReMoE、Puigcerver 等人(2022)和样条理论那条线所有。
  • 它增加的是:一个能跑在已发布权重上、带负对照和 known-answer 自检的诊断;一个跨模型刻画(OLMoE + Qwen);一个方向性的推理结果外加缓解上界;以及一个诚实的训练期分解,拒绝过度声张:)

底线:MoE 路由撕裂是真实、可测、跨模型的——一次真撕裂(放大判据在每一层都是阳性:陡度随放大往上爬,光滑对照保持平坦),被训练后的路由器一直携带而非缝合。它在跳变本身上是严重的(约为块输出的 24%)——在那个 16×(那是放大倍数,不是大小),也在专家有多专精上(M2 贴在无关向量基线上)。它的推理后果是方向性的:随机输入错过它,不到 1% 幅度的边界法向输入命中它,而你没法事后免费把它重门控掉。它的训练期角色是一个分解,而非单一成因——这恰恰是为什么工程手段压的是幅度,而不是移除撕裂。

DeepSeek 那篇说,把网络当几何对象正从哲学立场变成工程默认。这一篇,补上了那个立场一直缺的数字。


几句直说的注意。放大判据只告诉你有没有撕裂、在哪——不告诉你多大;它的 16× 是任意真撕裂都必然给出的放大倍数,不是模型属性,也不是"越大越糟"。这里每个数都是隐藏态上的几何量:约 24% 的块跳变和边界法向脆弱性并不绑定端到端任务精度(GSM8K、MMLU),而且跳变是逐层测的,撕裂如何跨叠层传播、复合则未测。此外:两个模型家族、24 条短文本;一个小规模 308M 训练探针(尖峰严重度信号可能依赖尺度);hardJump 轨迹每步只用一条路径(多路径重采样才能给误差棒);clamp 质量在 hook 路径内部测;时序失配因子点了名但未测。Deep Manifold(Ma & Shi)仅作动机引用——它是外部既有工作,不是我自己的框架。数字的真值来源是一组 result JSON(我都发布在了 GitHub 上);每张定量结果图都用一个仅依赖标准库的 SVG 脚本从中重新生成。

论文与代码: github.com/waylandzhang/moe-tearing

参考文献

  • Ziteng Wang, Jun Zhu, Jianfei Chen. ReMoE: Fully Differentiable Mixture-of-Experts with ReLU Routing. ICLR 2025. arXiv:2412.14711
  • Joan Puigcerver, Carlos Riquelme, Basil Mustafa, Neil Houlsby. From Sparse to Soft Mixtures of Experts. ICLR 2024. arXiv:2308.00951
  • André F. T. Martins, Ramón Fernandez Astudillo. From Softmax to Sparsemax. ICML 2016. arXiv:1602.02068
  • Ben Peters, Vlad Niculae, André F. T. Martins. Sparse Sequence-to-Sequence Models. ACL 2019. arXiv:1905.05702
  • Joan Puigcerver, Rodolphe Jenatton, Carlos Riquelme, Pranjal Awasthi, Srinadh Bhojanapalli. On the Adversarial Robustness of Mixture of Experts. NeurIPS 2022. arXiv:2210.10253
  • Wenhan Ma, Hailin Zhang, Liang Zhao, Yifan Song, Yudong Wang, Zhifang Sui, Fuli Luo. Stabilizing MoE Reinforcement Learning by Aligning Training and Inference Routers (R3). 2025. arXiv:2510.11370
  • Boris Hanin, David Rolnick. Complexity of Linear Regions in Deep Networks. ICML 2019. arXiv:1901.09021
  • Randall Balestriero, Richard Baraniuk. A Spline Theory of Deep Networks. ICML 2018. arXiv:1805.06576
  • Guido Montúfar, Razvan Pascanu, Kyunghyun Cho, Yoshua Bengio. On the Number of Linear Regions of Deep Neural Networks. NeurIPS 2014. arXiv:1402.1869
  • William Fedus, Barret Zoph, Noam Shazeer. Switch Transformers. JMLR 2022. arXiv:2101.03961
  • Barret Zoph et al. ST-MoE: Designing Stable and Transferable Sparse Expert Models. 2022. arXiv:2202.08906
  • Dmitry Lepikhin et al. GShard: Scaling Giant Models with Conditional Computation and Automatic Sharding. ICLR 2021. arXiv:2006.16668
  • DeepSeek-AI. DeepSeek-V4: Towards Highly Efficient Million-Token Context Intelligence. 2026. arXiv:2606.19348
  • Max Y. Ma, Gen-Hua Shi. Deep Manifold Part 1: Anatomy of Neural Network Manifold. 2024. arXiv:2409.17592
  • Max Y. Ma, Gen-Hua Shi. Deep Manifold Part 2: Neural Network Mathematics. 2025. arXiv:2512.06563
  • John A. Lee, Michel Verleysen. Nonlinear Dimensionality Reduction of Data Manifolds with Essential Loops. Neurocomputing 67, 2005. DOI:10.1016/j.neucom.2004.11.042
  • Niklas Muennighoff et al. OLMoE: Open Mixture-of-Experts Language Models. 2024. arXiv:2409.02060
  • Qwen Team. Qwen1.5-MoE: Matching 7B Model Performance with 1/3 Activated Parameters. 2024. Model blog

延伸阅读:DeepSeek V4 与流形撕裂 · 神经网络的四重境界