Mistral里的MOE是什么?
在 Mistral(指 Mistral.ai 的开源大语言模型)中,MoE 是 Mixture of Experts(专家混合) 的缩写。这是一种在大语言模型中常用的结构,用来在显著提升模型容量的同时控制计算成本。下面我来详细解释它的原理与在 Mistral 中的作用:
🌟 基本概念
在传统的 Transformer 模型中,每一层的前馈网络(Feed-Forward Network, FFN)对所有的输入 token 都执行相同的计算。而在 MoE(Mixture of Experts) 架构中:
- 每一层的 FFN 被 多个“专家网络” (experts) 替代;
- 一个路由器 (router) 根据输入特征,决定每个 token 应该发送到哪几个专家(通常是 Top‑1 或 Top‑2);
- 只有被选中的专家会参与计算,其余专家保持不激活。
这样就实现了:
“模型参数量很大,但每个 token 实际只激活其中很小一部分专家。”
⚙️ 典型结构(以 Mistral-MoE 为例)
在一个 “MoE 层” 中通常包含:
-
Router Layer:
一个小的线性层,根据 token 表征计算一个分配分数(logits),选择最合适的 k 个专家(如 Top‑2)。 -
Experts (FFNs):
每个专家拥有自己独立的前馈网络参数矩阵。 -
Combiner:
将各专家返回的结果按照权重(如 softmax 分配的 gating 权重)进行加权求和,得到最终输出。
📉 MoE 的优势
- 高效扩展:整体参数可以达到数百亿甚至上万亿,但实际每次计算只用到一小部分参数;
- 更强的表达能力:不同专家可专注于不同类型的语言、任务或语义特征;
- 推理成本低:相比等规模的稠密模型(dense model),计算开销要小得多。
⚠️ MoE 的挑战
- 负载均衡问题:如果路由器太偏向某几个专家,会造成“热点专家”过载,导致训练不稳定;
- 通信开销:在分布式训练时,不同专家可能在不同 GPU 上,token 路由需要跨设备通信;
- 推理复杂度:部署层级更复杂,需要高效的 gating 与专家并行机制。
💡 Mistral 中的 MoE 实现
Mistral 官方发表过的部分 MoE 变体包括:
- Mixtral 8x7B:拥有 8 个专家,每层随机激活 2 个,因此虽然总参数约 47B,但每次推理只用约 13B 参数。
- 训练时使用了 balanced routing loss 来防止专家不均衡。
- 模型接口保持兼容标准 Mistral 架构,方便使用。
如果你想,我可以帮你画一个 MoE 层的结构示意图(token → router → experts → combine),更直观地展示它的工作流程。
是否希望我加上这个图?
你提到的 “MoE 模块 ST”,我想先确认一下上下文,以便解释得更准确:
这里的 “ST” 是指哪一种?有几种常见的可能性:
- Sharded Tensor(张量分片)/ Sharded Training(分片训练) —— 在 MoE 模型中常见;
- Switch Transformer(ST) —— Google 提出的早期 MoE 架构;
- Soft Token Routing(ST) 或其它自定义缩写。
你是想问哪一种?
我先给出两种最常见的理解:Switch Transformer (ST) 与 Sharded Training (ST) 的说明,帮助你对 MoE 模块有更清晰的认识。
🧠 情况 1:ST = Switch Transformer
✳️ 概述
Switch Transformer (ST) 是 Google 在 2021 年提出的 MoE 架构(论文 “Switch Transformers: Scaling to Trillion Parameter Models with Simple and Efficient Sparsity”)。
它与传统 Transformer 的主要区别是——在每个 MoE 层只选中一个专家(Top‑1 Expert)。
🧩 架构要点
- 每个 token 输入到一个 router(路由器);
- router 输出一个分配概率(gating logits);
- 取概率最高的一个专家(Top‑1)执行前向计算;
- 输出乘以对应权重返回;
- 加上 load balancing loss 防止某些专家被过度使用。
⚙️ 优点和特点
| 特性 | 说明 |
|---|---|
| 简单 | 相较 Top‑2 MoE,计算和通信更少 |
| 可扩展性强 | 轻松扩展到数千亿参数 |
| 稀疏计算 | 每次只调用一个专家,节省算力 |
| 稳定性 | 比早期 MoE(比如 GShard)更稳定、更好训练 |
Mistral 的 Mixtral 架构部分灵感也来自 Switch Transformer,只不过使用了 Top‑2 Experts(每个 token 选两个专家)以提升表达能力。
⚙️ 情况 2:ST = Sharded Training(分片训练)
在实际训练 MoE 模型(例如 Mistral 的 Mixtral)时,每个专家通常分布在不同 GPU 或节点上。
这时需要 Sharded Training(张量/专家分片训练) 来并行化:
- 每个 GPU 持有不同 subset 的专家;
- Router 决定 token 应该发到哪个 GPU;
- 使用 All‑to‑All 通信 把 token 动态路由到正确专家;
- 计算后再聚合输出。
这种训练方式就是 Sharded Training (ST),能让 MoE 模型在超大规模集群上高效训练。
✅ 小结
| 缩写 | 全称 | 作用 | 是否与 Mistral MoE 相关 |
|---|---|---|---|
| ST (Switch Transformer) | MoE 架构形式 (Top‑1 Routing) | 简化专家选择,提高稀疏性 | ✅ 灵感来源 |
| ST (Sharded Training) | 模型并行训练方式 | 跨 GPU 调度专家计算 | ✅ 技术实现层面的关键 |
你想深入了解哪一种 ST?
- 是想了解 Switch Transformer 架构如何实现 MoE?
- 还是想看 MoE 模块在分布式训练(Sharded Training)中的实现细节?
非常好,这个问题问得非常关键。
Switch Transformer(ST) 是现代 MoE(Mixture of Experts)体系的里程碑式模型,几乎所有后续的 MoE 变体(如 Mixtral、GLaM、DeepSeek-MoE 等)都在它的思想上进行改进。
我们来一步步拆开讲,让思路直观、易理解。
🧠 一、背景:为什么要搞 MoE(专家混合)
在语言模型越做越大之后,一个明显矛盾出现了:
- 我们希望 模型越大越聪明(更多参数,更高容量);
- 但 计算成本也会爆炸(每一步都要用所有参数计算)。
于是,研究者想到:
既然不同句子、不同词的语义差别很大,
为什么非得用「一个模型」处理所有输入?
能不能“让不同的专家处理自己擅长的部分”?
这就是 Mixture of Experts 的思想。
你可以把它类比成 医院的分科制度 👇:
全科医生(dense 模型)虽然什么都懂点,但看病慢、效率低;
MoE 模型相当于有多个「专家医生」(专家网络),
每个病人(token)根据初步诊断(router)分配到最合适的专家去。
🧩 二、Switch Transformer 的核心点:一个 token 只去一个专家
在 2021 年前,Google 已经研究过带有多个专家的 MoE 模型,比如 GShard。
但 GShard 太复杂(每个 token 同时发给多个专家)——通信量大、训练不稳定。
Switch Transformer(简称 ST)做了一件看似小但至关重要的改进:
🔹 每个 token 只选择 1 个专家(Top‑1 routing),而不是多个。
这让架构从复杂飘忽 → 简洁稳定。
🔧 三、Switch Transformer 的工作流程(图像化思维)
我们用一个通俗例子模拟整个过程👇:
假设:
我们正在训练一个 Switch Transformer,有 4 个专家(Expert 0 ~ 3)。
输入一句话:
“Cats chase mice.”
Step 1️⃣:嵌入词向量
模型首先把句子转为 token embedding:
["Cats", "chase", "mice"] → [v1, v2, v3]
Step 2️⃣:Router 路由决定专家分配
每个 token 都会经过一个 router 小模块(可以简单看作一个小的线性层 + softmax)。
它会输出每个专家的“适配程度”,例如:
| Token | Expert 0 | Expert 1 | Expert 2 | Expert 3 |
|---|---|---|---|---|
| Cats | 0.8 | 0.1 | 0.05 | 0.05 |
| chase | 0.2 | 0.6 | 0.1 | 0.1 |
| mice | 0.1 | 0.05 | 0.8 | 0.05 |
然后取最高分的专家(Top‑1):
- “Cats” → Expert 0
- “chase” → Expert 1
- “mice” → Expert 2
Step 3️⃣:每个专家分别处理自己收到的 token
- Expert 0:只接到 “Cats”
- Expert 1:只接到 “chase”
- Expert 2:只接到 “mice”
- Expert 3:这次没有任务
这些专家其实都是前馈网络(Feed‑Forward Network, FFN),但各自的权重不同。
每个被选中的专家独立地计算一次前馈输出。
Step 4️⃣:组合输出(Combine)
专家输出结果之后,回到原来的 token 序列对应位置上,比如:
“Cats” ← Expert 0 output
“chase” ← Expert 1 output
“mice” ← Expert 2 output
整体输出继续传给 Transformer 的下一层,像普通模型一样。
Step 5️⃣:负载均衡(Load Balancing Loss)
如果 router 总是偏爱某几个专家,那么一些专家可能几乎不工作。
Switch Transformer 加了一个额外的损失项,鼓励 router 平均利用所有专家。
⚙️ 四、优点总结
| 特征 | 说明 |
|---|---|
| 超大参数量 | 可扩展到 上万亿参数(但每次只激活一小部分) |
| 计算经济 | 实际每个 token 只激活一个专家 → 减少计算 |
| 稳定训练 | 比 GShard 简单,不容易梯度爆炸 |
| 路由直观 | 每个 token 精准匹配一类专家,利于分析 |
💬 五、通俗类比:学校选导师
想象你是学生(token),学校有很多导师(expert):
- 你提交研究计划(embedding);
- 系里分配器(router)评估哪个导师最合适;
- 你只被分配给一个导师(Top‑1);
- 该导师指导你做项目(前馈计算);
- 最后所有学生的成果汇总成学校报告(combine results)。
这样,导师(模型参数)数量很多,但每个学生不会让所有导师都工作 —— 节约资源!
📊 六、Switch Transformer 的成果
Google 在论文中训练了多个版本,包括:
- 1.6 万亿参数模型(但每个输入只使用约 1/33 的计算量);
- 在语言建模、翻译等任务上显著优于等规模的 Dense Transformer;
- 而计算成本只略高于中型模型。
🧩 七、与后续模型的关系
| 模型 | 路由方式 | 备注 |
|---|---|---|
| GShard (2020) | Top‑2 | 早期 MoE,通信复杂 |
| Switch Transformer (2021) | Top‑1 | 简洁、高效,MoE 成熟标志 |
| GLaM, Mixtral, DeepSeek‑MoE | Top‑2 改进型 | 用两位专家换取更高表达能力 |
如果你愿意,我可以帮你画一个 Switch Transformer 层的结构图示(router → expert → combine),让整个流程一目了然。
要我画一个这样的图吗?
非常好的问题 👍,你已经抓到了 Switch Transformer 架构中最关键、最“工程味”的一环。
确实,负载均衡(Load Balancing Loss) 是让 MoE 类模型可以稳定训练、专家均匀利用的关键机制。下面我分成几步,从直觉到公式、再到例子详细解释它是怎么做到的。
🧠 一、问题:为什么会失衡?
想象一下——Router 是一个门卫,它根据输入 token 的特征打分,把 token 分配给不同专家。
在训练初期,Router 可能偏好某些专家(比如 Expert 0),结果:
- Expert 0 被挤爆(拿到太多 token);
- 其他专家比如 Expert 3 几乎没人用;
- 参数学不动、梯度分布不均,训练发散或浪费算力。
就像一个公司领导只信任某几个人干活,其他人闲着。
我们需要一种“考核机制”来惩罚这种不均衡的分配。
⚖️ 二、思路:希望每个专家的使用率更接近平均
目标很简单:
希望每个专家在一个 batch 内分到的 token 数量、以及 Router 给予的「概率权重」,都尽量均衡。
🪄 三、实现方法(两种方式的结合)
Switch Transformer 在论文中提出了一种很巧妙的近似:
它定义了两个统计量(以一个批次内 TT 个 token 为例):
- fifi — 实际分配比例(fraction of tokens per expert)
表示本 batch 中被分到第 ii 个专家的 token 占比:
- pipi — Router 的平均分配概率
表示 Router 对所有 token 的平均“信任度”:
其中 pi(t)pi(t) 是第 tt 个 token 路由到专家 ii 的概率。
💡 四、负载均衡损失的具体公式
Switch Transformer 让路由器学会:
既要让分配概率 pipi 接近均匀(表示 Router 愿意公平选择),
也要让实际使用比例 fifi 接近均匀。
于是它设计了一个简单的协同项(鼓励两者“对齐”):
这里:
- NN 是专家数量;
- 我们希望这个值 越接近 1 越好 —— 表示路由概率分布与实际分配均匀贴合。
在训练中,我们把这个量反过来:把 减少极端情况 当成惩罚。
实际实现里通常是:
loss += λ * N * sum(f_i * p_i)
其中 λ 是一个很小的系数(通常 0.01)。
直观理解:
- 当某些专家被独占时,fifi 和 pipi 都变得“尖锐”;
- 此时 ∑fipi∑fipi 会变小;
- 梯度会推动 Router 去利用冷门专家,使整体均衡。
🧮 五、一个简单例子
假设我们有 4 个专家(Expert0~3),
在某个 batch 中 Router 的平均行为是这样的:
| Expert | 平均路由概率 pipi | 实际使用比例 fifi |
|---|---|---|
| 0 | 0.70 | 0.75 |
| 1 | 0.15 | 0.12 |
| 2 | 0.10 | 0.10 |
| 3 | 0.05 | 0.03 |
计算:
如果完全均匀分布(每个 0.25),则有
差距越大,表示不均衡越严重,训练会通过梯度自动调整 router 参数,让 fifi, pipi 更平均。
⚙️ 六、在代码和实现中的表现
在框架里(如 TensorFlow、PyTorch),通常的实现逻辑类似这样:
# router_probs: [batch_size, num_experts]
# mask: which expert chosen for each token (one-hot for top1)
expert_mask = one_hot(selected_expert, num_experts)
f_i = expert_mask.mean(dim=0) # 平均实际使用
p_i = router_probs.mean(dim=0) # 平均概率
load_balance_loss = num_experts * (f_i * p_i).sum()
total_loss += lambda_lb * load_balance_loss
🧩 七、小结
| 概念 | 解释 |
|---|---|
| pipi | Router 预测第 i 个专家的平均概率 |
| fifi | 实际有多少 token 落到了第 i 个专家 |
| 目标 | 鼓励 pipi 与 fifi 都接近均匀 |
| Loss 形式 | Lbalance=N∑fipiLbalance=N∑fipi |
| 效果 | 避免专家过载 / 空闲,稳定训练 |
如果你愿意,我可以再帮你画一个简单的可视化图,展示 “router 倾斜 → loss 调整 → 专家重新均衡” 的过程,会更直观。
要我画一下那个图吗?
太好了 ✅
那我们来画一个直观的示意图,看看 Switch Transformer 的路由过程以及 负载均衡机制(Load Balancing Loss) 如何起作用。
🎨 图 1:正常的路由机制(MoE 层结构)
输入 token 流
│
│
▼
┌───────────────────────────────────────────┐
│ Router │
│ (为每个 token 打分,选择最合适的专家) │
└───────────────────────────────────────────┘
│ │ │ │
▼ ▼ ▼ ▼
Expert 0 Expert 1 Expert 2 Expert 3
(擅长动物) (擅长动作) (擅长科技) (擅长金融)
│ │ │ │
└────────┬───┴─────┬─────┴────────────┘
▼
合并(Combine)输出
每个 token 根据 router 的判断,只会送到一个专家(Top‑1 routing)。
这一步计算是稀疏的 —— 只启用部分参数。
⚖️ 图 2:如果没有负载均衡会怎样?
Router 输出倾向太强:
┌──────────────┬──────────────┬──────────────┬──────────────┐
专家编号 │ Expert 0 │ Expert 1 │ Expert 2 │ Expert 3 │
分配比例 │ ██████████ | ██ | ░░ | ░░ │
│ 70% tokens | 20% tokens | 7% tokens | 3% tokens │
- Expert 0 被大量调用,计算负载高、梯度发散;
- Expert 2、3 几乎闲置,权重得不到训练;
- 模型整体利用率低,性能也下降。
🪄 图 3:加上负载均衡损失后的效果
负载均衡 Loss 强制 Router 更“公平”地分配任务。
再看平衡后的结果:
在训练若干步后:
┌──────────────┬──────────────┬──────────────┬──────────────┐
专家编号 │ Expert 0 │ Expert 1 │ Expert 2 │ Expert 3 │
分配比例 │ ██████ │ ██████ │ ██████ │ ██████ │
│ 25% tokens | 25% tokens | 25% tokens | 25% tokens │
Router 变得更加稳健,所有专家都能参与训练、分享梯度信息。
🧩 直觉总结
| 阶段 | Router 行为 | 后果 |
|---|---|---|
| 未平衡前 | 偏爱少数专家(过热) | 训练不稳定,浪费算力 |
| 加权平衡后 | Router 学会平均分配 | 专家充分学习、更准确 |
| 结果 | 更快收敛、性能提升 | 稳定的 MoE 训练 |
如果你愿意,我还能用一个更公式+流程图风格的版本,把 pipi 与 fifi 的计算和 loss 的反馈箭头也画进去(类似论文结构那种 “router feedback loop” 图)。
需要我再扩展成那种内部机制图吗?
非常棒的问题 👏
你追得非常到位 ——
DeepSeek‑MoE(或者简称 DeepSeek) 确实是 2024–2025 这一波最有代表性的 “后 Switch Transformer 时代” MoE 改进架构。
它继承了 ST 的核心思想(稀疏专家激活),但在工程调度、路由策略和专家设计上做了几件非常聪明且工程感爆炸的创新。
我们来系统地拆开看 👇
🧠 一、背景脉络:从 Switch Transformer ➜ DeepSeek-MoE
| 阶段 | 模型代表 | 特点 |
|---|---|---|
| 早期 MoE (e.g. GShard, ST) | Top‑1 或 Top‑2 路由,基础稀疏化 | |
| 进阶 MoE (e.g. GLaM, Mixtral) | Google, Mistral | 更复杂的路由损失、更高容量 |
| 新一代 MoE (DeepSeek‑MoE) | DeepSeek | 引入更高并行度、更精细路由、更高通信效率,服务真实大规模推理 |
DeepSeek 的目标非常工程导向:
不仅要让 MoE 理论上高效,还要在 实际大规模分布式训练与推理 中真正跑得动、稳定、便宜。
⚙️ 二、DeepSeek‑MoE 的总体结构概述
整体来看,DeepSeek‑MoE 仍然是一种 Top‑2 路由的稀疏专家模型(Mixture of Experts),但在关键实现处有多项突破。
典型结构如下:
┌───────────────┐
│ Embedding │
│ + Router │ ← (智能分配 logits)
└──────┬────────┘
│
├──► Expert A (激活)
├──► Expert B (激活)
│
▼
Weighted Combine → 下一层
特点:
- 每层拥有多个专家(如 64+ 个),每次仅激活 2 个;
- 各专家可部署在不同 GPU;
- 专家设计上不完全相同,有“通用专家 + 特化专家”的组合。
💡 三、DeepSeek‑MoE 的几大关键创新
1️⃣ Dual-Route Token Routing(双路由机制)
在传统 MoE(如 Switch Transformer 或 Mixtral)中,一个 token 通过 router logits 选出前若干专家(Top‑1/Top‑2),然后根据 softmax 权重合并输出。
DeepSeek 改了这一点:
它引入 双通道路由 (Dual Routing):主路由 + 辅助路由。
- 主路由(Main Router):负责挑选最合适的专家;
- 辅助路由(Aux Router):防止主路由陷入局部最优、并增强冷门专家的参与率。
在训练时,这两个路由信号融合,从而既保证性能,又保证专家多样性和均衡性。
可理解为——主路由负责精确匹配,辅路由防止过度偏见。
2️⃣ 专家分层设计(Hierarchical Expert Design)
传统 MoE 把专家看作结构相同的一组 FFN 模块。
DeepSeek 发现这太僵化,于是采用:
分层专家(Hierarchical Experts):不同专家的规模、参数化方式不同。
- 一部分专家是“小型、通用”的,负责基础语言模式;
- 另一部分是“大型、特化”的,负责复杂语义或特定技能;
- Router 可动态决定使用哪种层次的专家。
这种设计让模型在相同计算预算下获得更好的“专家多样性”。
3️⃣ 专家通信优化(Expert Parallelism 2.0)
MoE 在分布式训练中最大痛点之一是 All‑to‑All 通信:
token 必须跨 GPU 发送到对应专家,很容易成为瓶颈。
DeepSeek 针对这点做了极大的工程优化:
- 🤝 分组专家(Expert Grouping):在同一 GPU 物理邻近的专家优先组合,减少远程通信;
- 🚚 Token Packing:在发送前对同目标专家的 token 进行 batch 打包;
- 🚀 Overlap 机制:通信与前向计算重叠执行,最大化 GPU 流水并行。
这些细节的结果是——实际训练/推理加速 ~40–60%,
远超早期 MoE 架构。
4️⃣ 动态稀疏激活(Dynamic Sparsity Scheduling)
传统的 MoE 训练中,专家选择数(例如 Top‑2)通常固定。
DeepSeek 提供了一种 动态稀疏度调度机制:
- 前期训练阶段:使用更多专家激活,帮助模型学习全面表示;
- 后期收敛阶段:逐步下降激活数,只保留最有贡献的专家;
结果是计算成本更低,同时保留推理性能。
5️⃣ 改进的负载均衡损失
延续 Switch Transformer 的负载均衡思想(fifi, pipi),DeepSeek 引入了一个加权版本:
其中 α, β 是小常数,用于防止梯度稀疏,
并且在不同层动态调整,以适应专家分布差异。
比 ST 的固定式更鲁棒、训练稳定性更强。
🔬 四、DeepSeek-MoE 的通俗理解类比
你可以把 DeepSeek‑MoE 想像成一个超级多部门的大公司:
| 模型组件 | 类比 |
|---|---|
| Router(双路由) | 人力资源部门 + 辅助顾问,智能分配任务 |
| Experts(特化专家) | 各类专业团队,有大有小 |
| Load Balancing Loss | 管理层 KPI 考核,防止某些团队一直闲着 |
| 通信优化 | 公司内优化流程,减少部门间邮件/沟通成本 |
| 动态稀疏 | 根据项目重要性调整人手分配 |
整合结果:既灵活又高效,资源利用率非常高。
📈 五、效果
据公开报告(DeepSeek‑V2、DeepSeek‑MoE 论文及社区 benchmark):
| 对比 | 计算成本 | 参数总量 | 实际激活参数 | 性能 |
|---|---|---|---|---|
| Switch Transformer | 中 | 百万 ~ 千亿 | 小部分 | 稳定 |
| Mixtral 8×7B | 高 | 47B | ~13B 激活 | 强 |
| DeepSeek‑MoE | 更优 (节能) | >100B | 动态激活 ~10–20B | 性能同 Dense 70B 甚至更好 |
✅ 六、小结 — DeepSeek‑MoE 的核心价值
| 方向 | 改进点 | 收益 |
|---|---|---|
| Routing | Dual‑Router + 动态平衡损失 | 避免偏置、稳定分配 |
| Expert | 分层专家结构 | 提升多样性与表达力 |
| 训练调度 | 动态稀疏激活 | 减少成本、提升效率 |
| 工程优化 | 通信重叠 & 分组 | 真正可在千卡规模上稳定训练 |
| 性能 | 高容量 + 稀疏激活 | 高性价比推理/训练 |
如果你愿意,我可以帮你绘制一个 DeepSeek‑MoE 对比 Switch Transformer 的结构图,
展示二者的主要差异路线(单路由 vs 双路由、均匀专家 vs 分层专家、通信优化等)。
要不要我画一个这样的对比图?
太棒了 👍 那我给你画一个直观的图,对比 Switch Transformer (ST) 和 DeepSeek‑MoE 的结构区别与优化点。
🎨 对比图:Switch Transformer vs DeepSeek‑MoE
(重点从 路由机制、专家结构、通信优化 三个角度展示)
───────────────────────────────────────────────
① Switch Transformer (2021, Google)
───────────────────────────────────────────────
┌────────────────────────┐
Tokens → │ Router │
│ (Top-1 路由算法) │
└──────────┬────────────┘
│
┌───────────┴────────────────┐
│ │
Expert 0 Expert 1 ... N
(结构完全一致的 FFN 专家层)
│ │
└───────────┬────────────────┘
▼
Combine 输出(按权重加权)
------------------------------------------------
特征:
- 📉 简单高效:每个 token 只选 1 个专家 (Top‑1)
- ⚠️ 容易失衡:部分专家过载(靠 Load Balance Loss 调整)
- 🧱 专家同构,缺乏多样性
- 🔁 大量 All‑to‑All 通信,效率有限
───────────────────────────────────────────────
② DeepSeek‑MoE (2024, DeepSeek)
───────────────────────────────────────────────
┌──────────────────────────────┐
Tokens → │ Dual Router (双路由机制) │
│ ├─ 主路由 Main Router │
│ └─ 辅路由 Aux Router │
│ 融合决策 → Top‑2 Experts │
└──────────┬──────────────┘
│
┌──────────────┼────────────────────────┐
│ │ │
Expert Group A Expert Group B Expert Group C ...
├── Expert A1 (小专家, 通用) │
├── Expert A2 (中专家, 特化) │
└── Expert A3 (大专家, 深语义) │
│ │
▼ ▼
Token Packing + Overlap 通信优化 → Combine 输出
------------------------------------------------
新特征:
- 🧭 **双路由系统**:主路由精准选专家;辅路由维持多样性
- 🏗️ **分层专家结构**:小型 + 特化 + 通用混合
- 🔄 **通信优化**:Token 打包,全局分组,通信与计算并行
- ⚖️ **改进平衡损失**:动态调节 α, β,稳定训练
- 🧮 **动态稀疏调度**:训练早期激活多专家,后期自动稀疏化
───────────────────────────────────────────────
效果概览
───────────────────────────────────────────────
| 项目 | Switch Transformer | DeepSeek‑MoE |
|--------------------------------|--------------------|---------------|
| 路由方式 | Top‑1 单路由 | 双路由 (Top‑2) |
| 专家结构 | 同构 FFN | 分层&异构专家 |
| 负载均衡 | 固定 loss | 动态调参 loss |
| 通信策略 | 标准 All‑to‑All | 分组 + Token 打包 |
| 稀疏度 | 固定 | 动态稀疏调度 |
| 训练稳定性 & 性能 | 中等 | 极高 (工业级) |
🧠 一句话总结
Switch Transformer 是 MoE 的“理论范本”;
DeepSeek‑MoE 则是让 MoE 真正“能上生产线”的版本 ——
更稳,更快,更聪明,还节省算力。

浙公网安备 33010602011771号