MoE 与稠密模型有什么作用?
核心优势:参数规模大,计算量基本不变
稠密模型每个 token 都要经过全部参数。MoE 把 FFN 拆成多个专家,每个 token 只激活其中少数几个。
设:
- 稠密模型 FFN 参数量为PPP;
- MoE 有EEE个专家,每个专家参数量也是PPP;
- 每个 token 激活kkk个专家。
则:
| 指标 | 稠密模型 | MoE |
|---|---|---|
| 总参数量 | PPP | E×PE \times PE×P |
| 每 token 计算量 | PPP | k×Pk \times Pk×P |
| 参数/计算比 | 1 | E/kE/kE/k |
数值例子:
设P=1P = 1P=1亿,E=8E = 8E=8,k=2k = 2k=2。
- 稠密模型:总参数 1 亿,每 token 计算 1 亿;
- MoE:总参数 8 亿,每 token 计算 2 亿。
MoE 参数量是稠密的 8 倍,但计算量只是 2 倍,参数/计算比从 1 提升到 4。这就是“容量大、计算省”的来源。
天然支持专家并行
每个专家是独立的 FFN,可以放在不同设备上。路由器根据 token 把请求发到对应设备,计算在专家所在设备独立完成。
数值例子:
8 个专家分布在 8 块 GPU 上。一批 1024 个 token,Top-2 路由。
- 每个 token 选 2 个专家;
- 平均每个专家收到 1024 × 2 / 8 = 256 个 token;
- 每块 GPU 只处理 256 个 token 的 FFN,而不是 1024 个。
这种结构切分让 MoE 能扩展到上百块 GPU,是超大规模模型的重要基础。
为什么 MoE 往往收敛更快、表现更好?
直观原因:
- 参数容量大:更多专家意味着更大的表示空间,能存储更多知识;
- 专家专业化:不同专家处理不同语义模式的 token,分工明确,减少干扰;
- 稀疏激活:每个 token 只走少数专家,计算聚焦,梯度更新更有针对性。
但这不是绝对的,依赖数据规模、训练配方和评测任务。数据不足时,MoE 的专家可能训练不充分,反而不如稠密模型。
数值直觉:
设稠密模型有 1 亿参数,要拟合 10 种语义模式,每种模式平均只有 1000 万参数可用,容易互相干扰。
MoE 有 8 个专家、总参数 8 亿,Top-2 激活。理想情况下,每种模式可以由 1~2 个专家专门处理,每个专家有 1 亿参数专注一种模式,干扰更小,拟合更好。
两条实践路径:稠密→稀疏升级 vs 从零训练 MoE
路径一:稠密→稀疏升级(Upcycling)
做法:
- 先训练一个稠密模型;
- 把稠密 FFN 复制成EEE份,作为EEE个专家的初始权重;
- 加一个随机初始化的路由器;
- 继续训练,让专家逐渐分化。
数值例子:权重复制与早期输出
设稠密 FFN 对某个 token 的输出为:
h_dense = [1.0, 2.0]Upcycle 成 4 个专家,初始时每个专家权重都等于原稠密 FFN,所以:
Expert0(h) = [1.0, 2.0] Expert1(h) = [1.0, 2.0] Expert2(h) = [1.0, 2.0] Expert3(h) = [1.0, 2.0]路由器随机初始化,假设 Top-2 选中 Expert0 和 Expert2,权重各 0.5:
输出 = 0.5 * [1.0, 2.0] + 0.5 * [1.0, 2.0] = [1.0, 2.0]早期所有专家输出相同,路由器收到的梯度信号很弱,专家分化慢。这就是 upcycling 的“起点优势”——输出已经不错,但“分工”需要时间。
路径二:从零训练 MoE
做法:
- 专家和路由器都随机初始化;
- 专家和路由器从头共同演化。
数值例子:早期专家输出
4 个专家随机初始化,对同一 token 输出:`
Expert0(h) = [0.3, -0.1] Expert1(h) = [-0.5, 0.8] Expert2(h) = [0.9, 0.2] Expert3(h) = [0.1, -0.7]路由器也随机,Top-2 选中 Expert1 和 Expert2,权重 0.6、0.4:
输出 = 0.6 * [-0.5, 0.8] + 0.4 * [0.9, 0.2] = [-0.3 + 0.36, 0.48 + 0.08] = [0.06, 0.56]早期输出远离目标,但路由器梯度信号强,专家分化速度快。代价是前期收敛慢,需要更多 token 才能追上 upcycled 模型
25% vs 120% 的大差异怎么来的?
两个实验的结论
| 实验 | 路由策略 | 从零训练追上 upcycled 所需 token |
|---|---|---|
| OLMoE | TC | 约 500-600B,约为原稠密训练计算预算的 25% |
| Komatsuzaki 等 | EC | 约为原稠密训练量的 120% |
数值例子:
设原稠密模型训练了 2T tokens 达到 loss 1.80。
- OLMoE(TC):从零训练 MoE 约 2T × 25% = 500B tokens 时追上 upcycled 模型;
- Komatsuzaki(EC):从零训练 MoE 约 2T × 120% = 2.4T tokens 才追上 upcycled 模型。
同样是“从零训练”,差距 4 倍以上。
为什么差这么多?
原因一:TC 与 EC 的早期动态不同
- TC(Token Choice):每个 token 主动选专家。早期热门专家被大量 token 选中,迅速过载并更新,冷门专家闲置。专家分化快,但负载不均。
- EC(Expert Choice):每个专家主动选 token。负载天然均衡,但早期部分 token 可能不被任何专家选中,信息丢失,专家分化慢。
数值例子:TC vs EC 的专家负载
4 个 token,3 个专家,Top-1。
TC 路由得分:
| token | E0 | E1 | E2 | TC 选中 |
|---|---|---|---|---|
| t0 | 0.8 | 0.1 | 0.1 | E0 |
| t1 | 0.7 | 0.2 | 0.1 | E0 |
| t2 | 0.2 | 0.5 | 0.3 | E1 |
| t3 | 0.1 | 0.3 | 0.6 | E2 |
TC 负载:E0=2,E1=1,E2=1。E0 快速更新,分化快。
EC 转置后每个专家选 Top-1:
| 专家 | t0 | t1 | t2 | t3 | EC 选中 |
|---|---|---|---|---|---|
| E0 | 0.8 | 0.7 | 0.2 | 0.1 | t0 |
| E1 | 0.1 | 0.2 | 0.5 | 0.3 | t2 |
| E2 | 0.1 | 0.1 | 0.3 | 0.6 | t3 |
EC 负载:各 1 个,但 t1 被丢弃。t1 没有梯度,学习信号缺失,早期收敛慢。
原因二:模型范式不同
- Decoder 架构(OLMoE)和 Encoder 架构(Komatsuzaki)训练目标、信息流不同;
- Upcycling 的收益随范式变化,不能直接横向比较。
原因三:实验设置不同
数据规模、学习率、训练配方、评测任务都会影响追赶点。
OLMoE 指出的 upcycling 两个结构性问题
问题一:旧权重导致“遗忘与重学困难”
稠密权重已经编码了强通用能力。MoE 化后,这些参数需要部分“遗忘”旧表征,再重塑为专家专业化能力。但梯度流仍受旧表示影响,新学习信号容易被历史分布干扰。
数值直觉:
设稠密权重对某类 token 的输出是 [1.0,2.0],已经很好。
Upcycle 后,专家0 想专攻这类 token,专家1 想专攻另一类。
但专家0 初始权重就是稠密权重,它对另一类 token 也输出 [1.0,2.0]。
要让它“忘记”另一类、只专注第一类,需要较大梯度更新;而旧权重的强输出会持续干扰梯度方向,导致重学困难。
问题二:路由器学得太晚
路由器随机初始化,早期近似随机或均衡分配,前半程难形成清晰专家分工。等路由器逐渐稳定时,学习率往往已经衰减,专家“特长”划分仍模糊。
数值例子:
设训练 10000 步,学习率余弦衰减。
- 前 3000 步:路由器输出接近均匀,Top-2 选择近似随机,专家分工不清晰;
- 第 3000~7000 步:路由器开始分化,但学习率已从峰值降到一半以下;
- 第 7000 步后:学习率很小,路由器调整缓慢,专家分工基本定型但仍模糊。
结果:路由器“学得太晚”,专家专业化不充分。
Qwen1.5-MoE 的成功案例
工程实践中也有成功 upcycling 的案例。
Qwen1.5-MoE 通过把已有稠密模型改造为 MoE,在保持或提升性能的同时显著提升计算参数效率,激活参数更少也能匹配更大稠密模型的表现。
这说明 upcycling 不是必然失败,关键在于训练配方、路由器初始化和学习率调度是否处理得当。
总结对比
| 对比项 | 稠密模型 | MoE |
|---|---|---|
| 总参数 | PPP | E×PE \times PE×P |
| 每 token 计算 | PPP | k×Pk \times Pk×P |
| 参数/计算比 | 1 | E/kE/kE/k |
| 并行方式 | 张量并行、流水线并行 | 天然专家并行 |
| 收敛优势 | 稳定、简单 | 容量大、专家专业化,但依赖数据和配方 |
| 路径 | 做法 | 优点 | 缺点 |
|---|---|---|---|
| Upcycling | 稠密权重复制成专家,加路由器继续训练 | 复用训练成果,起点好 | 旧权重干扰,路由器学得晚 |
| 从零训练 | 专家和路由器随机初始化,共同演化 | 专家分化自由,TC 下收敛快 | 前期慢,需要更多 token |
| 差异来源 | 说明 |
|---|---|
| TC vs EC | TC 专家分化快但负载不均;EC 负载均衡但早期 token 丢失,分化慢 |
| 模型范式 | Decoder vs Encoder,训练目标和信息流不同 |
| 实验设置 | 数据规模、学习率、训练配方影响追赶点 |
一句话:MoE 用“参数多、计算省”的稀疏架构扩大模型容量,天然支持专家并行;它往往比稠密模型收敛更快、表现更好,但依赖数据规模和训练配方。Upcycling 复用稠密权重,起点好但专家分化和路由器学习受旧权重干扰;从零训练专家分化自由,但前期慢。OLMoE 用 TC 约 25% 预算追上 upcycled,Komatsuzaki 用 EC 需约 120%,差异来自路由策略、模型范式和实验设置。Qwen1.5-MoE 证明 upcycling 在合适配方下也能成功。