DeepSeekMoE: Towards Ultimate Expert Specialization in Mixture-of-Experts Language Models
论文地址:https://arxiv.org/abs/2401.06066
项目页面:https://github.com/deepseek-ai/DeepSeek-MoE
学术交流群:922230617
目录
1. 引言:大模型的成本困局与 MoE 的机遇
2. 预备知识:Transformer 中的 MoE 基础
3. DeepSeekMoE 架构:两大核心策略
3.1 细粒度专家分割
3.2 共享专家隔离
3.3 负载均衡考量
4. 验证实验:2B 规模下的初步探索
4.1 实验设置
4.2 主要结果
4.3 逼近 MoE 上界
4.4 消融实验
4.5 专家专精分析
5. 扩展到 16B:媲美 LLaMA2 7B 仅需 40% 计算
5.1 设置
5.2 内部对比:与 DeepSeek 7B (dense)
5.3 与开源模型对比
6. 对齐微调:MoE 也能从 SFT 受益
7. 145B 大规模初步尝试
8. 相关工作
参考
1. 引言:大模型的成本困局与 MoE 的机遇
近年来,大语言模型(LLM)的规模持续增长,从数十亿到数千亿参数,性能也随之跃升。但随之而来的计算成本也令人望而却步。混合专家(Mixture-of-Experts, MoE)架构成为缓解这一矛盾的重要方向:它通过条件计算,只激活模型中的一小部分参数,从而在保持总参数巨大的同时,控制每次前向传播的计算量。
然而,传统的 MoE 架构(如 GShard、Switch Transformer)通常采用Top-K 路由(K=1 或 2),每个 token 被分配给少数几个专家。这种做法带来了两个核心问题:
知识混合(Knowledge Hybridity):由于专家数量有限,每个专家被迫学习多种不同类型的知识,难以形成真正聚焦的专长。
知识冗余(Knowledge Redundancy):不同专家可能学到相似的基础知识,导致参数冗余,浪费了模型容量。
这两个问题共同限制了专家的“专精化”(specialization),进而影响了 MoE 模型的上限性能。
为此,文中提出了DeepSeekMoE架构,旨在通过两种创新策略实现极致的专家专精:
细粒度专家分割(Fine-Grained Expert Segmentation)
共享专家隔离(Shared Expert Isolation)
实验表明,DeepSeekMoE 在 2B、16B 乃至 145B 规模上均显著优于传统 MoE,且能以更少的计算量媲美 dense 模型。
2. 预备知识:Transformer 中的 MoE 基础
在标准的 Transformer 中,每一层包含一个自注意力子层和一个前馈网络(FFN)子层。MoE 的做法是将某些层的 FFN 替换为多个并行的专家 FFN,并为每个 token 动态选择其中 K 个专家进行计算。
公式上,对于第 l 层,输出为:
其中 g_{i,t} 为路由权重,只有 Top-K 个专家非零。这种稀疏性保证了计算效率。
3. DeepSeekMoE 架构:两大核心策略
3.1 细粒度专家分割
传统做法是将 FFN 中间维度设为较大的值(如 4 倍隐藏维度),每个专家容量大但数量少。DeepSeekMoE 反其道而行之:将每个专家的中间维度缩小为原来的 1/m,同时将专家总数扩大到 mN,激活的专家数也增至 mK。
这样做的效果是:
每个专家变得更 “小”,只能学习更聚焦的知识片段。
组合灵活度暴增:例如 N=16,K=2 时组合数为 C(16,2)=120;若 m=4,则总专家 64,激活 8,组合数高达 C(64,8)≈44亿。这种巨大的组合空间让模型能更精确地匹配每个 token 所需的知识。
Fine-Grained Expert 并非是无成本的,N 越大,Expert 之间的负载往往越不均衡,并且 Expert 之间的通信和协调成本也会增加,所以 N 也不能无限增加,有一个效果和效率都友好的舒适区间。
3.2 共享专家隔离
在常规路由中,多个专家可能都需要处理一些通用的基础知识(如语法、常识)。这会导致冗余。为此,DeepSeekMoE 设置K_s 个共享专家,它们始终被激活,专门负责捕捉所有 token 都可能需要的公共知识。
这样一来,其余的路由专家可以专注于更独特、更差异化的知识,避免了冗余。同时,为了保持计算量不变,从路由专家中减去 K_s 个激活名额。
最终,DeepSeekMoE 层的输出为共享专家输出 + 路由专家输出之和。
3.3 负载均衡考量
为了规避路由崩溃(某些专家始终被选中,其他专家得不到训练),论文采用了专家级负载均衡损失,鼓励各专家被选中的频率均匀。
同时,在更大规模分布式训练时,还引入了设备级负载均衡损失,确保计算负载在各 GPU 间均衡,不牺牲性能。
4. 验证实验:2B 规模下的初步探索
4.1 实验设置
模型:9 层,隐藏维度 1280,总参数约 2B,激活参数约 0.3B。
训练数据:100B tokens,多语言混合。
对比基线:Dense,Hash Layer,Switch Transformer,GShard。
4.2 主要结果
DeepSeekMoE 显著超越同规模 GShard,甚至与 1.5 倍专家参数的 GShard 持平。
4.3 逼近 MoE 上界
与dense 模型 ×16(即 FFN 参数扩大 16 倍)对比,
- DeepSeekMoE 的 Pile loss 仅为 1.808,而 Dense×16 为 1.806,差距极小。
- 这说明 DeepSeekMoE 几乎达到了同等总参数下 MoE 的理论性能上限。
4.4 消融实验
共享专家隔离:单独引入共享专家即可提升多数指标。
细粒度分割:从 1 个专家分割到 2、4 个,性能持续提升。
共享专家数量:不同的比例对性能影响微小;1:3 的共享专家/激活的路由专家比例表现整体略优,在 scaling 时,固定这个比例。
虽然从图里看 1:7 最优,但可能作者考虑到更大的计算量(激活的专家)仅换取微小的性能提升。综合考虑,1:3 为最优。
4.5 专家专精分析
冗余度更低(图 4):当禁用 top 路由专家时,DeepSeekMoE 的性能下降更剧烈,说明每个专家更不可替代。
共享专家不可替代:禁用共享专家后,即使增加一个路由专家,Pile loss 从 1.808 飙升到 2.414,凸显其独特作用。
文中未给出对比图,但从图 3 的性能对比,也可得出结论。
更精准的知识获取:只用 4 个路由专家就能达到 GShard 同等性能,说明知识更聚焦。
5. 扩展到 16B:媲美 LLaMA2 7B 仅需 40% 计算
5.1 设置
模型:28 层,隐藏维度 2048,总参数 16.4B,激活参数 2.8B。
每个 MoE 层:2 个共享专家 + 64 个路由专家(激活 6 个)。
训练数据:训练 2T tokens,与 LLaMA2 7B 相同数据量。
5.2 内部对比:与 DeepSeek 7B (dense)
在多数任务上持平或略优,尤其是在语言建模和知识密集任务上。
5.3 与开源模型对比
在 Open LLM Leaderboard 上,DeepSeekMoE 16B 显著优于同激活参数量的模型(如 GPT-J 6B、Pythia 2.8B),且与 LLaMA2 7B(约 2.5 倍激活参数)性能相当。
特别优势:代码生成(HumanEval 26.8% vs LLaMA2 14.6%)、数学推理(GSM8K 18.8 vs 15.5)、中文任务(CMMLU 42.5 vs 32.6)。
6. 对齐微调:MoE 也能从 SFT 受益
以往认为 MoE 模型微调效果不佳,但文中通过指令微调(SFT)证明了 DeepSeekMoE 16B 同样能获得显著提升。
训练数据:1.4M 条多任务指令(中英双语)。
超参数:batch size 1024,学习率 1e-5,训练 8 轮。
结果:DeepSeekMoE Chat 16B 与 LLaMA2 SFT 7B、DeepSeek Chat 7B 相比,在大多数任务上持平或更优,而计算量仅为其 40%。尤其在代码和中文任务上优势明显。
7. 145B 大规模初步尝试
进一步将模型扩展到 145B 总参数(激活 22.2B),训练 245B tokens。
对比 GShard 137B 和 DeepSeek 67B(dense):
相比 GShard 137B,DeepSeekMoE 145B 全面领先。
与 DeepSeek 67B 相比,仅用 28.5% 的计算量即可达到相近性能(若再减半激活专家,仅需 18.2%)。
这再次验证了 DeepSeekMoE 架构在大规模下的有效性和扩展性。
8. 相关工作
MoE 研究历经从 LSTM 到 Transformer 的演变,经典工作包括 GShard、Switch Transformer、Hash Layer、StableMoE、Expert Choice 等。这些工作多采用固定数量的专家和简单路由,而 DeepSeekMoE 首次系统性地从专家专精角度进行架构创新,并通过细粒度和共享策略取得突破。
参考
https://spaces.ac.cn/archives/10945