详细摘要 摘要
生成:2025-05-13 17:13摘要详情
- 音频文件
- Stanford CS336 Language Modeling from Scratch | Spring 2025 | 04 Mixture of experts
- 摘要类型
- 详细摘要
- LLM 提供商
- openai
- LLM 模型
- gemini-2.5-pro-exp-03-25
- 已创建
- 2025-05-13 17:13:02
摘要内容
概览/核心摘要 (Executive Summary)
本讲座(Stanford CS336, Spring 2025)深入探讨了“混合专家模型”(Mixture of Experts, MoE)的架构、优势、挑战及最新进展。讲师强调,MoE已成为构建和部署现代高性能语言模型(如Grok, DeepSeek, Llama 4)的关键技术,其核心优势在于能在相似的FLOPs(计算量)下实现比密集模型更优的性能,通过稀疏激活大量参数来提升模型能力,尤其在记忆世界知识方面。
讲座详细解析了MoE的基本原理:将传统Transformer中的前馈网络(FFN)替换为一个路由器(Router)和多个小型FFN(专家),每次前向传播时,路由器仅选择性激活一小部分专家(如top-k)。这带来了参数量增加但计算量(FLOPs)可控的好处。尽管MoE带来了系统复杂性(如多节点训练、路由学习的非微分性、负载均衡),但其性能增益已得到广泛证实。讲座回顾了关键研究(如Fedus et al. 2022, AI2 Olmo),展示了MoE在训练损失和困惑度上的优势。
核心议题包括路由机制(主流为Token Choice Top-K)、专家配置(DeepSeek推广的共享专家和细粒度专家)、训练路由器的挑战及解决方案(如启发式负载均衡损失函数,DeepSeek V3的在线调整b_i因子)。此外,还讨论了MoE的系统级并行(专家并行)、稳定性问题(如使用float32进行路由计算、Z-loss)以及微调挑战(如过拟合和upcycling技术)。最后,以DeepSeek系列模型(V1, V2, V3)为例,详细剖析了其MoE架构的演进和关键技术创新,如分层路由和多头潜在注意力(MLA)。讲座结论指出,MoE因其成本效益,已成为大规模语言模型领域值得学习和应用的核心架构。
引言与MoE的重要性
Speaker 1指出,混合专家模型(MoE)已从一个有趣的附加讲座内容演变为一个至关重要的议题,因为当前(2025年)许多最先进的高性能系统都采用MoE架构。
* 业界采用情况:
* Nvidia曾有泄露信息暗示GPT-4可能是MoE架构("GPT moe one bt" [不确定,原文为1bt,可能指1 trillion parameters])。
* Grok、DeepSeek、以及新发布的Llama 4均已采用MoE架构。
* MoE的优势:
* 在2025年,MoE相对于密集(Dense)架构的优势已非常明显。
* 在几乎所有计算规模下,良好训练的MoE模型能提供优于密集模型的性能。
* “如果你想在有限的FLOPs下构建最好的模型,理解MoE将非常重要。”
MoE的核心概念与架构
Speaker 1澄清了MoE的常见误解,并解释了其基本工作原理。
* 概念澄清:
* MoE并非指专家针对不同领域(如编码专家、英语专家)进行特化。
* 它是一种具有多个子组件(称为“专家”)并进行稀疏激活的特定网络架构。
* “当你思考混合专家时,你应该关注MLPs(多层感知机),这是所有行动发生的地方。”
* 架构对比:
* MoE与非MoE架构在大部分组件上相似,主要区别在于前馈网络(FFN)部分。
* 密集模型:FFN是一个单一的大模块。
* 稀疏模型(MoE):将原FFN拆分或复制成多个较小的FFN副本,并引入一个路由器(Router)在每次前向传播中选择其中一小部分(例如top-k)进行激活。
* 示意图解释:用一个选择器层(Selector Layer)和多个小型FFN替代了原先单个大型FFN。
* MoE的核心优势:
* 更多参数,相同FLOPs:如果MoE稀疏激活(例如只选一个专家),且该专家大小与原密集FFN相同,则MoE模型与密集模型在前向传播中执行的FLOPs(浮点运算次数)相同。
* “你可以在不影响FLOPs的情况下拥有更多的参数。”
* 这对于需要大量参数来记忆世界知识等任务非常有利。
MoE的性能验证
Speaker 1引用了多项研究来证明MoE在相同FLOPs下的性能优势。
* Fedus et al. (2022) 的研究 (Google):
* 在FLOPs匹配的训练条件下(即训练所用总计算量相同),增加专家数量能持续降低语言模型的训练损失。
* 图表显示:随着专家数量增加(例如到256个),测试损失(test loss)显著下降。
* SwitchBase模型(128个专家)比较:训练时间越长,拥有更多专家的模型能更快达到更优的困惑度(perplexity)。
* 数据点:该研究展示了拥有多个专家可以带来高达“7倍的加速”(原文指性能提升或训练效率,此处指性能)。
* AI2 Olmo 论文:
* 在现代架构和规模下,MoE的优势依然存在。Olmo论文进行了仔细的消融实验和对比。
* 图表比较:MoE(粉色线)的训练损失下降速度远快于密集模型(青色线)。
* DeepSeek V2 论文:
* 展示了MoE在实际部署系统中的效果。
* X轴为“激活参数量”(activated parameters),Y轴为MMLU性能。
* DeepSeek V2以较少的激活参数实现了非常好的MMLU性能。
* “如果你只关心训练和推理的FLOPs,激活参数量就是关键。”
MoE的系统级优势与复杂性
Speaker 1讨论了MoE在系统层面的好处以及其固有的复杂性。
* 专家并行 (Expert Parallelism):
* MoE提供了新的并行维度。可以将不同的专家放置在不同的设备(如GPU)上。
* 由于专家是稀疏激活的,只需将token路由到相应的设备进行计算。
* “这是一种自然的切割点,可以将你的模型分片到不同的设备上。”
* 这是MoE流行的另一个原因,尤其对于超大规模模型的并行化至关重要。
* 发展历程:
* MoE最初在Google等闭源实验室发展。
* 开源领域的MoE成果早期主要来自中国团队,如Qwen和DeepSeek。
* 近期西方开源社区(如Mixtral, Llama)也开始更多地采用MoE。Llama 4也是稀疏MoE架构。
* 早期开源贡献:
* Qwen 1.5:是最早进行大规模、良好测试和文档化MoE的模型之一。他们采用了一种“upcycle”(升级改造)技巧,将密集模型转换为MoE,并在计算效率上取得显著提升。
* DeepSeek MoE (原始论文):进行了许多基础性的开源MoE研究,包括对不同路由策略(如naive MoE vs Switch MoE)与密集模型在固定FLOPs下的仔细比较,结果显示从密集到稀疏,各项基准指标均有一致性提升。
* MoE的复杂性与挑战:
* 基础设施复杂:MoE的最大优势通常在多节点训练(当模型必须被拆分时)才能体现,此时跨模型分片专家变得自然。
* 路由学习困难:决定将token路由到哪个专家是一个难以学习的非可微(non-differentiable)决策。
* 训练目标不稳定:相关的训练目标要么是启发式的,要么可能不稳定,需要仔细的工程调优。
MoE架构的关键设计选择
Speaker 1详细阐述了MoE设计中的几个核心问题。
* MoE主要应用于FFN:
* 经典MoE是将FFN层进行拆分和稀疏路由。
* 虽然理论上也可以对注意力层进行稀疏路由(有少量研究和模型尝试),但这在主流模型中非常罕见,据称更不稳定且难以训练。
* 核心设计问题:
1. 如何路由 (Routing Function)?
2. 专家数量与大小 (Number and Size of Experts)?
3. 如何训练路由器 (Training the Router)?(针对其非可微特性)
路由机制 (How to Route?)
- 路由类型概述 (Fedus et al. 2022 survey):
- Token Choice:每个token为其选择亲和度最高的top-k个专家。这是目前绝大多数MoE采用的机制。
- Expert Choice:每个专家选择亲和度最高的top-k个token。优点是能实现专家间的负载均衡。
- Global Assignment:通过解决复杂的优化问题来实现专家与token的平衡映射。
- Token Choice Top-K 的优势:
- Olmo论文的消融实验显示,Token Choice在验证损失(validation loss)上表现更好,损失下降更快。
- 学生提问:token如何知道哪个专家好?讲师回答:这是路由器的作用,通过计算token的隐藏状态与专家特定向量的内积来评分。
- Top-K中的K值选择:
- K是一个超参数。早期MoE论文认为K应大于等于2,以实现一定的探索(exploration)。K=1可能导致模型只利用已知最佳的专家。K=2是经典且流行的选择。
- 选择K个专家意味着FLOPs会相应增加(例如K=2会使FFN部分的FLOPs翻倍,如果专家大小与原FFN相同)。输出通常是这K个专家输出的加权平均或直接求和。
- 主流Top-K路由实现:
- 几乎所有主流MoE(Switch Transformer, GShard, Grok, Mixtral, DeepSeek各版本)都使用Top-K路由。
- 过程:
- 输入
x(残差流中的token表示) 进入路由器。 - 路由器计算
x与每个专家的可学习向量E_i的内积(亲和度)。 - 通过Softmax归一化得到分数
S_i(t)。 - 选择得分最高的Top-K个专家,生成门控信号
G_i(t)(非Top-K的专家权重为0)。 - 将输入
x分别送入被选中的K个专家 FFN_i。 - 最终输出是K个专家输出的加权和(权重为
G_i(t)),再加上原始输入x(残差连接)。Output = sum(G_i(t) * FFN_i(x)) + x
- 输入
- Softmax的位置:DeepSeek V1/V2, Qwen, Grok 在Top-K选择前使用Softmax。DeepSeek V3, Mixtral, DBRX 则在Top-K选择后对门控值
G_i(t)进行Softmax(或类似归一化)。这是一个细微的实现差异。
- 其他路由思想:
- Hashing路由:令人惊讶的是,即使使用哈希函数(无任何语义信息)将token映射到专家,依然能获得性能提升。
- 强化学习 (RL) 路由:早期MoE工作尝试过,但因计算成本过高和稳定性问题,目前基本无人使用。
- 最优传输/线性分配:理论上优雅,但实际成本远超收益,未被广泛采用。
专家配置 (Expert Configuration)
- DeepSeek MoE的创新:共享专家 (Shared Experts) 与细粒度专家 (Fine-grained Experts)
- 背景:增加专家数量有益,但参数成本也随之增加。
- 细粒度专家:将每个专家的FFN做得更小。例如,标准FFN的中间层维度是隐藏层的4倍,细粒度专家可能只用2倍。这样可以在总参数量近似的情况下拥有更多专家。
- 共享专家:引入一个或多个所有token都会经过的MLP,用于处理通用的、共享的计算模式,避免了路由开销。
- 此配置最初由DeepSeek MoE提出(灵感可能来自DeepSpeed MoE和Qwen)。后续几乎所有开源MoE都采纳了这些创新,尤其是细粒度专家。
- 效果验证:
- DeepSeek MoE论文消融实验:
- GShard (基础MoE) < GShard + 1个共享专家 < GShard + 1个共享专家 + 细粒度专家。组合使用效果最佳。
- 图示中,"X out of Y" 表示Y个总专家中激活X个。
- Olmo论文佐证:
- 细粒度专家从8个增加到32个再到64个,损失持续下降,性能提升明显。
- 共享专家在Olmo的实验设置中未显示明显增益,因此他们最终未使用共享专家。这表明共享专家的效果可能依赖于具体设置。
- DeepSeek MoE论文消融实验:
- 常见MoE配置汇总表 (讲师根据近期模型发布整理):
| 模型/系列 | 总专家数 (Routed) | 激活专家数 (Active) | 共享专家数 | 专家大小比例 (Ratio) | 备注 |
| ----------------- | ----------------- | ------------------- | ---------- | -------------------- | -------------------------------------- |
| GShard, Switch-T | 较大 (e.g., 2048) | 1-2 | - | - | 早期Google论文 |
| Mixtral, DBRX, Grok | 8-16 | 2 | 0 | ~1 (full size) | |
| DeepSeek MoE V1 | 64 | 6 (fine-grained) | 2 (shared) | 1/4 | 细粒度+共享 |
| Qwen 1.5, DeepSeek V3, Minimax | 类似DeepSeek V1 | 变化 | 常有 | 细粒度 | 遵循细粒度专家思路 |
| Olmo, Llama 4 | 较多 | 变化 | Llama 4有 | 细粒度 | Llama 4 (e.g., 128 total, 8 active) |- 专家大小比例 (Ratio):指每个路由专家的大小相对于标准密集FFN中间层大小的比例(如标准是hidden_dim4,1/4比例意味着hidden_dim1)。
- 学生提问关于共享专家数量的直觉:讲师认为,从1个到多个共享专家的收益并不明确,DeepSeek V1用2个共享专家可能是为了保持与激活的细粒度专家大小一致,从而总共有8个大小相似的活跃专家单元。
训练路由器 (Training the Router)
- 核心挑战:训练时必须保持稀疏性以控制FLOPs,但稀疏的门控决策(选择哪些专家)是不可微的,类似RL问题。
- 尝试过的方法:
- 强化学习 (RL):理论上最符合原则,但实际效果不佳,梯度方差大,复杂度高,难以使用。Clark et al. (2020) 的研究显示RL不如其他方法。
- 随机近似 (Stochastic Approximations):
- Shazeer et al. (2017) 提出在计算专家亲和度时加入噪声:
H(x) = W_g*x + Normal_noise * W_noise。W_noise是可学习的噪声尺度,用于控制探索-利用平衡。 - 这能使专家不那么特化,更鲁棒,但也可能损失效率。
- 这类随机路由技巧在后续研究中被启发式损失方法取代,目前已基本被弃用。
- Shazeer et al. (2017) 提出在计算专家亲和度时加入噪声:
- 启发式负载均衡损失 (Load Balancing Losses):这是目前实际应用中最关键和最普遍的技巧。
- 动机:若无负载均衡,模型倾向于将所有token路由到少数几个专家,导致其他专家“死亡”(从未被激活),浪费参数。
- Switch Transformer (Fedus et al. 2022) 辅助损失
L_aux:L_aux = α * Σ_i (f_i * P_i)f_i:该批次中,路由到专家i的token比例。P_i:路由器分配给专家i的概率(Softmax输出,Top-K选择前)。- 此损失项会惩罚(降低权重)那些被分配了过多token的专家。
- DeepSeek的平衡策略:
- V1/V2:采用类似的
f_i * P_i结构,实现了:- 每批次专家间负载均衡 (Per-expert balancing per batch)。
- 设备间负载均衡 (Per-device balancing):衡量token到不同设备的分配情况,确保GPU利用率均衡。
- V3的“无辅助损失”重平衡 (Auxiliary Loss Free Rebalancing):
- 最初宣称移除了上述专家平衡损失项。
- 改为在Softmax分数
S_i上加一个可调整的偏置项b_i:S_i_new = S_i + b_i。 b_i通过在线学习调整:若专家itoken过少,则增加b_i;若过多,则减少b_i。- 然而,DeepSeek V3最终还是引入了一个“互补的序列级辅助损失 (complementary sequence-wise auxiliary loss)”,其结构与原先的辅助损失类似,目的是在单个序列级别平衡专家负载,特别是在推理时应对分布外序列。所以并非完全“无辅助损失”。
- V1/V2:采用类似的
- 负载均衡的重要性:Olmo论文的消融实验显示,若移除负载均衡损失,少数专家会主导所有token,其他专家失效,导致整体性能下降。
MoE的系统级实现与考量
- 专家并行实践:
- 将专家分布在不同设备上。Token经过路由器后,通过集体通信操作(如all-to-all)分发到相应设备上的专家进行计算,然后再收集结果。
- 如果FFN计算足够密集,可以覆盖通信开销。
- 设备内稀疏性与硬件加速:
- 即使多个专家在同一设备上,现代GPU和库(如MegaBlocks)可以利用稀疏矩阵乘法优化,有效执行多个小而稀疏的矩阵乘法,避免浪费FLOPs。
- Token Dropping 带来的随机性:
- 当一个专家接收到的token数量超过其容量(由一个“负载因子”控制)时,多余的token会被丢弃(dropped)。
- 被丢弃的token对应的MLP计算将为零,仅通过残差连接传递。
- 这意味着,即使在推理时设置temperature为0,模型的输出也可能因为批处理中其他查询的不同而产生差异(因为哪些token被丢弃可能不同)。这可能是GPT-4在T=0时仍表现出随机性的一个原因。
MoE的稳定性与微调
- 训练不稳定性:MoE有时会“爆炸”(blow up),尤其在微调时。
- Barret Zoph等人的研究专门探讨了稳定MoE训练的方法。
- 稳定技巧:
- Router计算使用float32精度:Softmax操作对精度敏感。
- 辅助Z-loss (Auxiliary Z-loss):对路由器Softmax的logit应用Z-loss (
log(sum(exp(logits)))^2),促使其标准化器的值接近1,增强稳定性。移除Z-loss会导致验证损失出现尖峰。
- 微调挑战:
- 过拟合:MoE参数量巨大,在小规模微调数据上容易过拟合,导致训练集和验证集之间差距较大。
- 解决方案:
- 交替使用密集层和MoE层:只微调密集层(早期方法,目前不常用)。
- 使用大量SFT数据:DeepSeek MoE使用了140万个训练样本进行SFT。
- Upcycling(升级改造):
- 将一个预训练好的密集模型作为MoE的初始化。具体做法:复制密集模型的MLP层多次(可加扰动),然后从头初始化路由器,再进行训练。
- 这是一种成本效益很高的方法来获得MoE模型,因为MoE在推理时是稀疏激活的,能以较少训练成本获得等效更大参数模型的推理能力。
- 成功案例:MiniCPM, Qwen。均通过upcycling实现了性能提升。
案例研究:DeepSeek MoE架构的演进
Speaker 1详细介绍了DeepSeek从V1到V3在MoE架构上的迭代。
* DeepSeek MoE (V1):
* 参数:16B总参数,2.8B激活参数。
* 架构:2个共享专家 + 64个细粒度专家(1/4大小),激活其中6个。
* 路由:标准Top-K路由,Softmax在Top-K选择之前。
* 平衡:使用辅助损失进行专家级和设备级负载均衡。
* DeepSeek V2:
* 参数:236B总参数,21B激活参数。
* MoE架构本身(专家类型和数量比例)与V1相同。
* 路由选择器(Top-K)与V1相同。
* 新增特性:
* 分层路由 (Hierarchical Routing):为了控制大规模训练时的通信成本。首先选择Top-M个设备,然后在这些选定的设备内部再为每个token选择Top-K个专家。
* 通信平衡损失 (Communication Balancing Loss):除了输入侧的负载均衡,还增加了针对输出通信成本的平衡损失。
* DeepSeek V3:
* 参数:671B总参数,37B激活参数。
* MoE架构本身仍与V1/V2一致。
* 路由机制变化:
* 门控值计算:使用Sigmoid而非Softmax,然后对门控值进行归一化(概念上类似Softmax在Top-K之后)。
* 损失函数变化:
* 采用“无辅助损失”的 b_i 偏置项调整专家负载。
* 但仍保留了序列级辅助损失。
* 保留与移除:保留了V2的分层路由(Top-M设备选择),但移除了V2的通信平衡损失。
* DeepSeek V3的非MoE创新:
* MLA (Multi-head Latent Attention):一种KV Cache优化技术。
* 将输入 H 投影到低维潜在表示 C,缓存 C。
* 从 C 再上投影回 K 和 V。
* 通过矩阵结合律,将上投影矩阵 W_k 与查询投影矩阵 W_q 合并,不增加额外矩阵乘法。
* 与RoPE兼容性:通过对非压缩维度应用RoPE来解决。
* MTP (Multi-token Prediction):并行预测未来多个token。
* 在最终预测前,将隐藏状态通过一个轻量级单层Transformer来预测更远的token(如n+2)。
* 实际应用中,DeepSeek V3的MTP仅用于预测未来1个额外token(即总共预测n+1和n+2)。
结论
Speaker 1总结,MoE已成为构建和部署高性能、大规模语言模型的核心技术。
* 它们利用稀疏激活的思想,即并非所有参数在任何时候都需要被激活。
* 离散路由是主要挑战,但启发式方法(如负载均衡损失)已被证明行之有效。
* 大量经验证据表明,在FLOPs受限的情况下,MoE是一种成本效益高的方法,值得学习和应用。