掘金 人工智能 19小时前
什么是MoE?MoE 架构详解
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文详细介绍了专家混合模型(MoE)的演进历程、核心原理及其在现代大模型中的应用。MoE通过引入“专家”子网络和“门控网络”,实现了模型容量的巨大提升,同时有效控制了计算成本。文章追溯了MoE从奠基工作到RNN、Transformer时代的演变,并重点阐述了其在FFNN部分的稀疏激活机制、路由(门控网络)、Top-K专家选择、负载均衡以及辅助损失等关键技术。此外,还探讨了MoE在知识混合、冗余和专家同质化等方面的挑战,以及DeepseekMoE提出的解决方案,如细颗粒度专家划分和动态专业化路由。理解MoE架构对于把握大模型技术发展趋势至关重要。

💡 MoE(专家混合模型)是一种通过让模型在不同输入下调用不同子网络(专家)来提升效率和模型容量的架构。它解决了传统Transformer模型中“更大模型=更强能力但计算成本更高”的矛盾,通过训练时只激活部分子模型,在保持巨大参数量的同时节省算力。

🚀 MoE架构在发展过程中经历了从奠基性工作到RNN时代的架构形成,再到Transformer时代的效果提升,最终在GPT时代实现智能涌现。其核心在于通过门控网络(Gating Network)根据输入动态选择Top-K个专家进行计算,实现了稀疏激活。

⚖️ 负载均衡是MoE训练中的关键挑战,为解决部分专家被过度使用而另一些专家被闲置的问题,引入了辅助损失(Auxiliary Loss)或负载均衡Loss。通过计算专家的Importance(在batch中被分配的token数量或概率)和其Coefficient of Variation (CV),最小化该损失可以鼓励门控网络更均衡地选择专家,提升模型容量的利用率和泛化能力。

⚙️ MoE层计算过程包括:输入token通过门控网络FFNN计算专家得分,Softmax转化为概率分布,根据Top-K规则激活相应专家,若选择多个专家则加权求和得到最终输出。专家容量(Expert Capacity)是为防止单个专家在单次前向传播中处理过多token而设定的上限。

本篇博客内容主要参考:ZOMI酱的视频

本篇博客主要用于记录自己学习过程,可能存在犯错。请大家在学习过程中遇到疑惑还多查证。

本文内容框架:

    MoE的前世今生
    a. MoE是什么
    b. MoE架构发展过程(论文概述)MoE架构原理

MoE的前世今生

MoE是什么?

MoE(Mixture of Experts)即专家混合模型,在当今流行的大模型架构中基本上已是不可或缺的一部分,根本原因是因为MoE设计可以节省训练成本,提升训练效率。


那么MoE到底是什么?

MoE是一种让模型“在不同输入情况下调用不同子网络”的架构设计思路。MoE就像一个“专家团队”,每次输入进来,系统只调用其中一部分专家来处理,从而提升效率和模型容量。每个MoE层通常由一组N个专家和一个“门控网络(Gate Network)”构成。每个专家都有各自擅长的任务,而门控网络则是负责决定将什么任务分配个哪位专家。


为什么要用MoE?

传统 Transformer 模型存在一个矛盾:

    更大的模型 --> 更强的能力;更大的模型 --> 更高的计算代价

MoE 的目标就是为了解决这个矛盾:训练时只激活部分子模型(Experts)--> 节省算力,同时保持参数量巨大 --> 表现好,效率高。

下文将更详细的对MoE架构进行介绍,如果不想看MoE相关背景研究的话,可以直接跳到MoE架构原理


MoE架构发展过程

本文对每篇论文细节不做展开,只做概述。有兴趣的话可以自行搜索查阅哈。

MoE发展时间线





MoE架构原理

MoE核心原理可视化


从Decoder Only到稀疏模型

首先,让我们来从上到下对Decoder Only模型架构进行拆解,这能帮助我们更好地了解MoE原理。

Decoder-Only架构由多个Decoder Block堆叠而成。每个 Decoder Block 通常包含两层 LayerNorm,分别用于Masked Self-Attention 和 FFNN 的输入,外加对应的残差连接。Masked Self-Attention 用于建模序列的前向依赖,FFNN 则由两层全连接层和中间的激活函数组成。而 MoE 架构之所以能在扩增模型参数量的同时节省算力其实就是在 FFNN 部分做的文章。


MoE 模型在 FFNN 部分引入稀疏激活(每次只激活部分)的多个专家模块,每个专家模块都是一个单独的,小体量的 FFNN层!所以 MoE 的架构长得如下图所示,图中标注的 FFNN 块是当前输入中被选中的专家,而其他专家不参与计算。

那么问题来了:我们怎么知道每次计算对应选择哪个专家呢?


路由机制决定了每次输入调用哪些专家。门控网络是由一个FFNN和Softmax所组成的。门控网络的FFNN对当前token输入进行投影,计算各Expert的分数,确定哪些Expert被激活以参与后续计算。而Softmax层将所计算的打分转化为“概率分布”,方便分析。

路由/门控网络组成


在路由过程中,当我们根据输入token计算得到了各Expert的分数之后,我们通常只会选择Top-K个专家来进行计算,K值通常设置为 1 或 2。


不同Expert在训练过程中被选中参与计算的频率可能会出现不均的情况。例如:某些专家被过度使用,而另一些专家则被打入冷宫,学不到东西。这会影响模型容量利用率和泛化能力,这个现象被称为****负载失衡(Load Imbalance)** **。

为了解决少数Expert被频繁选中导致负载失衡的问题,会在训练中引入一个 **辅助损失(Auxiliary Loss) **,即负载均衡Loss,用于惩罚不同Expert被选中的概率差异,鼓励门控网络平衡地选择各Expert,从而达到负载均衡


为了计算辅助损失,我们首先会计算每个专家在当前batch中被选中的总概率和总次数,这个值被称为 Importance(重要性系数)。

Importance 的具体含义是:

对于一个给定的 Expert,它在当前 batch 中被分配到多少 token(或者说被分配了多大的概率和权重)。可以理解成衡量每个专家重要性的一个指标,这是一个相对局部指标

在实现时:对于每个Expert,我们会累加当前 batch 内所有 token 被分配给该 Expert 的概率。如果一个 Expert 被频繁选中, 它的 Importance 就会较大;如果一个 Expert 很少被选中,它的 Importance 就会较小。

举个例子:

假设当前有 4 个 Expert, 门控网络对 8 个 token 的分配概率如下:

此时,Expert 1的 Importance 最大,说明它在当前 batch 中被使用得最大,而 Expert 4被使用得最少。


为了量化 Importance 分布的均衡程度,我们计算其 Coefficient of Variation (CV) ,这是一个相对全局指标,衡量全部专家的重要性分布均衡程度,它定义为:

当 CV 值越高,说明部分 Expert 被选中过度使用,而部分 Expert 很少被选中,负载失衡严重;当 CV 值越低,说明所有 Expert 被均匀使用。

在训练过程中,我们将:

作为辅助损失(Auxiliary Loss)的核心,乘以一个常数权重后加入总损失,用于惩罚负载失衡。

通过最小化 Auxiliary Loss,模型会通过反向传播自动调整门控网络参数,使得未来各 Expert 被选中的概率更加均匀,从而实现负载均衡(Load Balancing),充分利用 MoE 架构的模型容量,避免部分 Expert 长期闲置影响泛化能力。


每个 Expert 在一次前向传播中最多能够接受和处理的 token 数(或样本数)的上限。

为什么需要“专家容量”?

在MoE架构中,每个输入 token 会通过门控网络选择 Top-1 / Top-2 Expert 进行处理。如果不限制,每个 Expert 可能在单次前向中被分配过多 token,导致:显存溢出,加载失衡,训练效率低下等问题。


上面我们逐一过了MoE架构中的各个组成部分与重要设计,现在让我们整体的来梳理一遍 MoE 层的整个计算过程。

MoE层计算过程

如上图所示,在 MoE 层中首先我们输入当前需要被处理的 token。将 token 与门控网络内部FFNN进行矩阵乘法,从而得到每个专家的打分,再利用 Softmax 将打分进行映射得到概率分布。根据 Softmax 的概率值以及Keep Top-k 规则来激活对应的专家进行计算。如果选择了多个专家的话,需要对结果进行加权求和,即可得到最终输出。


Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

MoE 专家混合模型 大模型 Transformer 稀疏激活 门控网络
相关文章