详细摘要 摘要

生成:2025-05-13 23:54

摘要详情

音频文件
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 23:54:54

概览/核心摘要 (Executive Summary)

本讲座(Stanford CS336, Spring 2025, Lecture 04)深入探讨了“专家混合”(Mixture of Experts, MoE)架构,指出其已成为构建和部署现代高性能语言模型(如GPT-4传闻、Grok、DeepSeek、Llama 4)的关键技术。MoE的核心优势在于,通过稀疏激活机制,模型可以在不显著增加计算量(FLOPs)的情况下拥有更多参数,从而提升性能,尤其是在记忆世界知识方面。讲座强调,在相同的训练FLOPs下,MoE模型通常比密集模型表现更好,训练损失下降更快。

MoE架构主要对Transformer模型中的前馈网络(FFN/MLP)层进行修改,将其替换为一个路由器(router)和多个较小的“专家”(即多个FFN副本)。路由器负责为每个输入token选择激活少数几个专家。关键设计挑战包括路由机制的选择(“token choice top-k”已成主流)、专家数量与大小的配置(细粒度专家和共享专家是重要创新)、以及如何训练非微分的路由决策(启发式平衡损失函数是当前主流方案)。

讲座还讨论了MoE带来的系统复杂性、训练不稳定性、并行化优势(专家并行),并回顾了早期研究(如Google的GShard、Switch Transformer)和近期开源进展,特别强调了中国团队(如Qwen、DeepSeek)在MoE领域的早期开源贡献。最后,详细剖析了DeepSeek系列MoE架构的演进(V1至V3),包括其在路由、平衡损失、以及如多头潜在注意力(MLA)等非MoE组件上的创新。尽管MoE带来了复杂性,但其在FLOPs受限场景下的成本效益已得到广泛证实。

引言与MoE核心价值

Speaker 1指出,专家混合(MoE)已从去年的一个“有趣的附加讲座”转变为今年“更为关键的讲座”,因为大量研究者和模型(如Grok、DeepSeek、Llama 4,甚至传闻中的GPT-4)已采用MoE架构。

  • MoE的普及

    • Nvidia泄露信息暗示GPT-4可能是某种MoE变体(如传闻中的“GPT moe one bt”)。
    • Grok、DeepSeek、以及最新的Llama 4均采用MoE架构。
    • Speaker 1认为:“在2025年,MoE相对于密集架构的优势已非常明显。”
    • “几乎所有计算规模下,良好实现的MoE模型训练都将优于密集模型。”
  • MoE的基本理念

    • MoE并非指领域专家(如编码专家、语言专家),而是一种具有多个稀疏激活子组件(专家)的特定网络架构。
    • 核心改动在于Transformer模型中的前馈网络(FFN)/多层感知机(MLP)部分。
    • 标准Transformer的单个大型FFN被替换为一个选择器层(路由器)多个较小的FFN副本(专家)
    • 路由器在每个前向传播中为每个token选择激活一小部分专家(例如,只选一个)。
  • MoE的核心优势:更多参数,相同FLOPs

    • 如果一个专家的大小与原密集模型的FFN相同,且只激活一个专家,则MoE模型与密集模型的前向传播FLOPs相同。
    • “你拥有了更多参数,而没有影响你的FLOPs。”
    • 这对于需要大量参数记忆世界知识的模型而言是巨大优势。
  • 性能提升证据

    • 大量研究表明,在相同训练FLOPs下,MoE模型性能优于密集模型。
    • 引用Fedus et al. (2022) 的经典Google论文:
      • 在FLOPs匹配的训练下,增加专家数量,训练损失持续下降。
      • Switch Base模型(128个专家)比密集模型更快达到更优的困惑度(perplexity)。
    • 引用OLMo (AI2) 论文的消融实验,同样证实MoE(粉线)训练损失下降速度远快于密集模型(青线)。
    • DeepSeek V2论文展示图:x轴为激活参数量,y轴为MMLU性能,DeepSeek V2以较少激活参数实现了高MMLU性能。
      • “如果你只关心训练和推理的FLOPs,激活参数是关键。”

MoE的系统复杂性与并行化

  • 系统复杂性 (Speaker 2 提问关于非FLOPs开销):

    • Speaker 1承认MoE存在显著的系统复杂性,这是其未成为标准教学内容的原因之一。
    • “高效实现MoE,尤其是在每个专家位于不同设备上时,需要大量基础设施投入和复杂工程。”
    • 但如果实现得当,所有FLOPs都能得到有效利用。
  • 专家并行 (Expert Parallelism)

    • MoE提供了新的并行维度。
    • 可以将不同专家放置在不同设备上。
    • 由于专家稀疏激活,只需将token路由到相应设备进行计算。
    • “这是一种自然的模型切分方式,便于将大模型分片到不同设备。”
    • 这是MoE流行的另一个原因,尤其对于超大模型。
  • 开源MoE的演进

    • MoE最初在Google等闭源实验室发展。
    • 开源领域的MoE成果早期多来自中国团队,如Qwen (原文为Quan/Quen) 和 DeepSeek
    • 近期西方开源社区(如Mixtral、Llama)也开始更多采用MoE。
    • Llama 4 最新发布,也是稀疏MoE架构。

早期开源MoE探索:Qwen与DeepSeek

  • Qwen 1.5 (讲者口述为Quan/Quen 1.5)

    • 是最早一批大规模、经过良好测试和文档记录的MoE模型之一。
    • 采用一种“upcycle”技巧,将Qwen 1.5密集模型转换为MoE模型。
    • 在计算效率方面展现显著增益。
  • DeepSeek (早期工作)

    • 在DeepSeek V3成名前,其早期MoE论文已奠定了开源MoE研究的基础。
    • 其论文包含详细的对比实验:
      • 密集模型 vs. 朴素MoE vs. 智能路由MoE (Switch MoE)。
      • 结果一致显示,在固定FLOPs下,从密集模型到稀疏MoE,各项基准指标均有提升。
    • Speaker 1指出:“DeepSeek V3是这一系列工作的顶峰... 他们很早就掌握了核心架构,只是在工程上不断优化。”

MoE的挑战与设计考量

尽管MoE效果显著,但其复杂性和“混乱性”使其推广受阻。

  • 主要挑战

    1. 基础设施复杂:尤其在多节点训练时,跨模型分片专家才显现最大优势。
    2. 路由学习困难:将token路由到特定专家的决策是离散的,难以通过梯度下降直接优化。
      • “路由决策是不可微的,因为我们必须选择并提交给特定的专家。”
      • 训练目标要么是启发式的,要么不稳定。
  • MoE主要作用于FFN层

    • 经典MoE是将FFN层拆分/复制,并进行稀疏路由。
    • 理论上也可以对注意力层进行稀疏路由,但实践中罕见,因其“更不稳定,难以持续训练”。
  • 核心设计问题

    1. 如何路由 (Routing Function)?
    2. 专家数量与大小 (Number and Size of Experts)?
    3. 如何训练路由器 (Training the Router)?

路由机制 (Routing Mechanisms)

参考Fedus et al. (2022) 的综述,路由机制主要有三种:

  1. Token Choice (令牌选择):每个token为不同专家打分,选择Top-K个专家。

    • 这是目前绝大多数大型MoE模型(如DeepSeek V1/V2, Qwen, Grok, Mixtral, DBRX, Llama 4)采用的机制。
    • OLMo论文的消融实验表明,Token Choice在验证损失上表现更优,收敛更快。
    • 路由器的实现通常很简单:token的隐藏状态向量 x 与每个专家的学习向量 E_i 做内积,然后通过Softmax(或其他归一化)得到分数。
    • K的选择:通常 K=2 是经典选择。早期MoE论文认为 K>=2 有助于探索(exploration),避免模型只利用(exploit)最优专家。K=2 会使激活参数和FLOPs翻倍(相较于K=1且专家大小与密集FFN相同时)。
    • 输出合并:当 K>1 时,多个被选中专家的输出会通过加权平均(权重来自路由器的打分)或直接求和的方式合并。
  2. Expert Choice (专家选择):每个专家对所有token打分,选择Top-K个token进行处理。

    • 优点:可以确保每个专家的负载均衡。
  3. Global Assignment (全局分配):通过解决优化问题,实现专家和token之间的平衡映射。

  4. 令人惊讶的发现:随机哈希路由也有效

    • “即使使用哈希函数(完全没有语义信息)将token映射到专家,基于哈希的MoE仍然能带来收益,这相当疯狂。”
    • 这表明MoE的部分收益可能来自参数量的增加本身,而非完全依赖智能路由。
  5. 被放弃的路由方法

    • 强化学习 (RL):早期工作尝试用RL学习路由策略,但计算成本过高,且稳定性问题使其未被广泛采用。
    • 线性分配/最优传输:虽然理论优雅,但实际成本远超收益。
  6. 主流Top-K路由详解 (以DeepSeek V1/V2, Qwen, Grok为例)

    1. 输入:残差流输入 U_t
    2. 计算亲和度:U_t 与每个专家的可学习向量 E_i 做内积。
    3. Softmax归一化:得到每个token对各专家的概率分布 S_i(t)
    4. Top-K选择:选出得分最高的K个专家,其余置零,形成门控信号 G_i(t)
    5. 加权输出:Output = Σ G_i(t) * Expert_i(U_t)
    6. 残差连接:Final_Output = U_t + Output
    7. Speaker 1强调,Softmax在此处主要起归一化作用,使后续加权平均的权重和为1。Top-K选择是保证稀疏性的关键,否则训练时会激活所有专家,失去效率。
    8. 关于Softmax后Top-K导致权重不再和为1的问题:一些架构会重新归一化,一些则不会,因为后续层(如LayerNorm)可以调整尺度。

专家配置:细粒度专家与共享专家

这是DeepSeek MoE引入并被广泛采用的重要创新,灵感可能来自DeepSpeed MoE和Qwen。讲座中提及了多个模型的MoE配置,据讲者口述及提及的论文信息,总结如下:

  • 标准MoE:将密集模型的FFN复制多份作为专家。若Top-2路由,则激活参数量约为原密集模型的两倍。
  • 细粒度专家 (Fine-grained Experts)
    • 动机:希望拥有大量专家,但不想承担过高的参数成本。
    • 做法:将每个专家的FFN中间层维度减小。例如,标准FFN的隐藏层维度是输入维度的4倍,细粒度专家可能只用2倍,从而可以用相同参数量得到更多(但更“瘦”)的专家。
    • DeepSeek论文的消融实验及OLMo的复现均表明,增加细粒度专家的数量(如从8到32到64)能持续改进模型性能。
  • 共享专家 (Shared Experts)

    • 动机:某些计算可能对所有token都是通用的,无需通过复杂路由分配给特定专家。
    • 做法:设置一个或多个所有token都会经过的FFN专家。
    • DeepSeek MoE论文显示共享专家有益。
    • OLMo的复现实验中,共享专家带来的收益不明显,最终未使用。因此,共享专家的有效性可能存在争议或依赖特定配置。
  • 常见配置表解读 (X out of Y 表示 Y个总路由专家中激活X个):

    • 早期Google模型 (GShard, Switch Transformer, ST-MoE):专家数量可以非常大。
    • 中期 (Mixtral, DBRX, Grok):通常8-16个专家,激活2个。
    • DeepSeek MoE V1 (原型):64个细粒度专家(每个约为标准大小的1/4),激活6个,外加2个共享专家。
    • 后续模型 (Qwen 1.5, DeepSeek V3, Minimax, OLMo, Llama 4):普遍采用细粒度专家。Llama 4据提及有非常大量的总专家并使用1个共享专家。DeepSeek V3核心MoE单元设计(如路由从64个细粒度专家中选X个,辅以2个共享专家,细粒度专家大小为标准1/4)与V1类似,但总专家数量和激活专家数量均大幅增加以匹配其庞大的模型规模(讲者提到DeepSeek有非常大量的总专家)。
    • 专家大小比例:指专家FFN的中间层维度相对于标准配置(如4倍输入维度)的比例。例如1/4意味着中间层维度是标准配置的1/4。有些模型甚至会小于输入维度(down-projection)。
    • 关于为何需要多个共享专家(如DeepSeek V1的2个):Speaker 1推测可能是为了保持所有激活专家(路由的+共享的)大小一致,便于系统处理,但无明确理论依据。

训练MoE模型

训练MoE的主要挑战在于训练时也需要保持稀疏性,以避免巨大的FLOPs开销,同时路由决策不可微。

  • 被放弃的训练策略

    1. 强化学习 (RL):Clark et al. (2020) 的研究表明RL效果不比哈希路由好,且梯度方差大、实现复杂。
    2. 随机探索 (Stochastic Exploration)
      • Shazeer et al. (2017) 提出在路由打分时加入高斯噪声 Normal(0, W_noise)W_noise可学习,以控制探索-利用平衡。
      • 目标是让专家不那么特化,更鲁棒。
      • 缺点:随机性导致特化不足,效率降低。后续论文发现不如启发式损失方法,逐渐被弃用。
  • 主流训练策略:平衡损失 (Balancing Losses)

    • 核心问题:若无约束,模型倾向于将所有token路由到少数几个“超级专家”,导致其他专家“死亡”,浪费参数。
    • Switch Transformer (Fedus et al., 2022) 提出的辅助损失
      • Loss_balance = α * Σ (f_i * p_i) (遍历所有专家i)
      • f_i:实际分配给专家i的token比例。
      • p_i:路由器分配给专家i的概率总和(Softmax输出,Top-K选择前)。
      • α是超参数。
      • 该损失会惩罚获得过多token的专家(p_i越大,负梯度越大),促使负载均衡。
    • DeepSeek的平衡损失应用
      • 逐专家、逐批次平衡:确保每个批次内,token在各专家间均匀分配。公式与Switch Transformer类似。
      • 逐设备平衡:确保分配到不同设备(GPU)的token数量均衡,优化系统利用率。计算方式类似,但f_i统计的是分配到各设备的token比例。
  • DeepSeek V3的创新:辅助损失重平衡 (Auxiliary Loss Rebalancing)

    • 摒弃传统平衡损失项:不再直接将f_i * p_i加入总损失。
    • 引入偏置项 b_i:在计算路由分数S_i时加入一个可学习的偏置b_iS_i_new = S_i + b_i
    • b_i的在线学习
      • 若某专家i获得的token过少,则b_i增加 ( b_i += γ )。
      • 若获得的token过多,则b_i减少 ( b_i -= γ )。
      • γ是学习率。
      • b_i仅用于路由决策,不参与门控权重的计算。
    • 实际情况:DeepSeek V3论文声称此方法使训练更稳定,但随后又补充道,为了实现序列级别的专家负载均衡(应对推理时可能出现的分布外序列),他们还是加回了一个启发式的辅助损失(称为“互补序列级辅助损失”)。
      • Speaker 1评论:“所以它并不像他们声称的那样完全没有辅助损失。”
    • 为何需要专家平衡(非系统层面):若不进行专家平衡,模型会倾向于只使用少数几个专家,其他专家“死亡”,导致模型实际变小,性能下降。OLMo论文的消融实验证实了这一点:无负载均衡时,少数专家占据了大部分token。

系统层面考量与优化

  • 专家并行 (Expert Parallelism) 的通信

    • token经过路由器后,通过集体通信操作(如all-to-all)分发到持有对应专家的设备。
    • 专家计算完成后,结果再通过集体通信收集并合并。
    • 如果FFN计算足够密集,可以摊销通信成本。
    • 这是工具箱中除数据并行、模型并行外的又一种并行方式。
  • 设备级稀疏性 (Device-level Sparsity)

    • 当单个设备上承载多个专家时,由于计算是稀疏的(不同token激活不同专家),现代GPU的稀疏矩阵乘法引擎(如NVIDIA的cuSPARSELt)和库(如Megablocks)可以高效执行这些操作,避免浪费FLOPs。
  • Token丢弃与随机性 (Token Dropping and Stochasticity)

    • 在推理或训练时,如果一个批次内的许多token都涌向同一个专家,可能超出该专家所在设备的处理容量(内存或设定的最大token数,即load factor)。
    • 此时,多余的token会被“丢弃”,即不经过该专家MLP计算,直接通过残差连接传递。
    • 这会导致即使在temperature=0(确定性采样)时,由于批次内其他查询的不同,同一查询也可能得到不同结果,引入了非预期的随机性。
    • 这是GPT-4 API早期temperature=0仍有随机性的一种可能解释。

MoE的稳定性与微调

  • 训练不稳定性:MoE模型有时会“爆炸”(梯度爆炸/损失突增)。

    • Barret Zoph等人的研究专门探讨如何稳定MoE训练。
    • 技巧1:路由器计算使用FP32精度:Softmax操作是数值不稳定的常见来源,使用更高精度有助于缓解。
    • 技巧2:Z-loss (Log-Sum-Exp Squared Loss):对路由器Softmax的logit应用Z-loss,可以使归一化后的值接近1,增强稳定性。OLMo论文图表显示,移除Z-loss会导致验证损失出现巨大尖峰。
  • 微调挑战

    • 过拟合:MoE参数量巨大,在小规模微调数据上容易过拟合,导致训练集和验证集之间差距过大。
    • 解决方案1 (早期提出,现不常用):采用交替的MoE层和密集层,微调时只调整密集层。
    • 解决方案2 (DeepSeek MoE采用):使用海量SFT数据进行微调(如DeepSeek MoE使用了140万样本)。

模型上采样 (Upcycling)

  • 思想:将一个预训练好的密集模型转换为MoE模型。
    • 取密集模型的MLP层,复制多份作为专家。
    • 可以对副本进行微小扰动。
    • 从头初始化路由器。
    • 以此为起点继续训练MoE模型。
  • 优势
    • 成本效益高,能以较低训练成本获得一个参数量更大的MoE模型。
    • 推理时仍享受MoE的稀疏激活带来的效率。
  • 成功案例
    • MiniCPM:成功将密集模型上采样为MoE,性能显著提升。
    • Qwen (讲者口述为Quan/Quen):早期MoE尝试即采用此方法,用27亿激活参数的MoE达到了70亿参数密集模型的性能水平。

案例研究:DeepSeek MoE架构演进

Speaker 1强调,DeepSeek的MoE架构从V1开始就基本定型,后续主要是工程优化和规模扩展。

  • DeepSeek MoE (V1) (约1.5-2年前)

    • 参数量:160亿总参数,28亿激活参数。
    • 架构:2个共享专家 + 64个细粒度专家(每个约为标准大小的1/4),激活6个。
    • 路由:采用主流的Top-K路由机制(详见前述“路由机制”部分),Softmax在Top-K选择之前。
    • 平衡:辅助损失平衡项(专家级和设备级)。
  • DeepSeek V2

    • 参数量:2360亿总参数,210亿激活参数。
    • MoE架构:与V1相同,仅专家数量和激活数量调整。
    • 路由:Top-K选择器与V1相同。
    • 新增技巧:Top-M设备选择
      • 背景:细粒度专家数量多、激活专家多时,通信成本可能很高(token需发往大量设备)。
      • 做法:在选择Top-K专家前,先选择Top-M个“候选设备”。即,先基于路由分数选出最相关的M个设备,然后在这些设备上的专家中再为每个token选择Top-K个。
      • 目的:控制通信开销,提高大规模训练效率。
    • 新增平衡损失:通信平衡损失
      • 考虑输出通信成本(token计算完后需返回原设备),增加平衡损失项以均衡输出通信。
  • DeepSeek V3

    • 参数量:6710亿总参数,370亿激活参数。
    • MoE架构:与V1/V2核心部分相同,即延续了V1的“2个共享专家 + 64个细粒度专家(选6激活)”这类MoE单元的核心设计模式,并通过复制扩展此类单元以达到非常庞大的总专家数量。
    • 路由机制调整
      • 门控权重归一化到1(Softmax移到Top-K之后,或类似操作)。
      • 使用Sigmoid而非Softmax的指数函数作为激活,更平滑。
    • 平衡损失调整
      • 采用前述的“辅助损失重平衡”技巧(通过b_i偏置项在线调整)。
      • 但仍保留了“序列级辅助损失”以确保单个序列内的专家负载均衡。
    • 保留Top-M设备选择技巧,但移除了V2中的通信平衡损失。
  • DeepSeek V3 非MoE组件创新

    1. 多头潜在注意力 (Multi-Head Latent Attention, MLA)
      • 目的:优化KV Cache大小。
      • 做法:
        • 输入H_t先投影到一个低维的“潜在表示”C
        • 缓存这个较小的C
        • 需要K, V时,从C上采样回K, V。
        • K = C * W_kV = C * W_v
        • 计算注意力时 Q * K^T = Q * (C * W_k)^T = Q * W_k^T * C^T
        • 可以将 Q的投影矩阵W_q与这里的W_k(或其转置)合并,从而不增加额外的矩阵乘法FLOPs。
      • 与RoPE的兼容性:原始MLA与RoPE不直接兼容,DeepSeek有特定解决方案(在非压缩维度上应用RoPE)。
    2. 多令牌预测 (Multi-Token Prediction, MTP)
      • 思想:模型不仅预测下一个token,还预测未来多个token。
      • 做法:在主Transformer输出最终隐状态后,接一个非常轻量级的一层Transformer,用它来预测更远未来的token。
      • 实际应用:尽管图示复杂,DeepSeek V3的MTP仅预测未来1个额外token(即总共预测未来2个token)。

结论

  • MoE已成为构建和部署大规模、高性能语言模型的核心技术。
  • MoE利用稀疏激活思想,在不显著增加FLOPs的情况下扩展模型参数量。
  • 主要挑战在于离散路由的优化和系统复杂性,但启发式方法(如平衡损失)已被证明有效。
  • 大量经验证据表明,在FLOPs受限的场景下,MoE是成本效益高的选择,值得学习和应用。