当前位置: 首页 > news >正文

三、大模型原理:图文解析MoE原理

2025年几乎所有领先的大型语言模型都采用了混合专家(Mixture of Experts,简称MOE)架构。

从GPT-4到DeepSeek V3,从Llama 4到Grock,这种稀疏激活的架构已经成为构建高性能AI系统的标准方法。

MOE(Mixture of Experts) 架构

MOE架构的主要组成部分

回顾下Transformer架构,我们会将token输入到Transformer中,Transformer架构是由N个编码器和N个解码器组成。编码器/解码器内部是由两部分组成:

  1. 注意力机制:残差+多头+LN
  2. 神经网络:残差+神经网络+LN
    在这里插入图片描述

而MOE架构主要修改的是Transformer模型中的神经网络部分。由左图中可知MOE包含两部分:

  1. 稀疏 MoE 层: 这我们只需将 Transformer 的神经网络多拷贝几份(后文会将这一层称为专家层),在复杂运用中也可能是多个MoE层。
  2. 路由层: 这个部分用于决定哪些token被发送到哪个神经网络中。例如,在下图中,“More”这个令牌可能被发送到第二个神经网络,而“Parameters”这个令牌被发送到第一个神经网络。有时,一个令牌甚至可以被发送到多个神经网络。该路由方式是由预训练学习的参数所得到的
    在这里插入图片描述

1. 专家层

我们无需在 Transformer 的每个前馈层都使用MOE层。即有的使用MOE有的保持神经网络。研究表明“交错”的 MoE 层可以在最终模型的性能和效率之间取得更好的平衡。

基于 MoE 的 LLM 为模型架构引入了稀疏性,使我们能够显著增加模型规模,但不会增加推理成本。

2. 路由

这一层决定每个token将会激活哪些专家,由此很容易联想到用softmax来评估概率。如下为路由层架构
在这里插入图片描述
经过softmax会输出概率,把专家层和路由串联起来即得到MOE层。我们仅激活概率最高的Top-K个专家(通常K=1或2):
在这里插入图片描述

当K>1时我们MoE的输出时对其的概率加权和

负载均衡

防止有的专家太忙有的专家不干活。为了打破这种不平衡,MoE引入了两个计算去实现这个目标。

噪声注入技术

它会对那些被频繁选择的专家施加更大的抑制作用,降低它们的得分,从而给其他专家更多被选择的机会。噪声注入的具体实现方式如下:

在路由计算中加入高斯噪声:

H(X) = X·W + Noise

值得注意的是,这里添加的噪声并非完全随机,而是有选择性的。

辅助损失

仅有噪声注入和keepTopK机制还不足以完全解决专家不平衡问题。为此,MoE引入了辅助损失

辅助损失的核心思想是在模型的总损失函数中添加一个惩罚项,当专家选择分布不均衡时增加额外损失。它的计算步骤如下:

  1. 计算每个专家的重要性:对所有token的路由概率分布进行累加,得到每个专家的整体重要性分数
  2. 计算变异系数(Coefficient of Variation, CV):使用标准差除以均值,来衡量专家之间的使用不平衡程度
  3. 将CV作为惩罚项添加到模型的总损失中

例如,如果某些token总是倾向于选择专家1,而很少选择其他专家,那么专家1的重要性分数会显著高于其他专家。此时,高CV值会产生较大的惩罚损失,促使模型在训练过程中调整路由机制,更均衡地使用所有专家。

专家容量限制的实例解析

让我们通过一个具体例子来理解专家容量限制的工作方式。

假设我们有4个专家(FFN1-FFN4),一个批次中有多个token需要处理,专家容量上限C设为3。在应用专家容量限制前,token的分配情况可能是:

  • FFN1:处理7个token
  • FFN2:处理2个token
  • FFN3:处理1个token
  • FFN4:处理0个token

这种分配明显不均衡,FFN1过载而FFN4闲置。

应用专家容量限制后,分配变为:

  • FFN1:处理3个token(达到容量上限)
  • FFN2:处理2个token
  • FFN3:处理1个token
  • FFN4:处理4个token(接收了原本分配给FFN1的溢出token)

通过这种重新分配,所有专家都被适当激活,计算负载更加均衡。

MoE 模型的规模与参数

在评估 MoE 模型规模时,需要考虑多个维度:

  • 总参数量: 模型中所有参数的数量
  • 激活参数量: 处理每个输入时实际使用的参数数量
  • 专家数量: 模型中专家的总数量

此外,还需要考虑隐藏层大小 (d_model)、FFN 中间层大小 (d_FFN)、专家层大小 (d_expert)、网络层数 (L)、注意力头数量 (H) 和注意力头维度 (d_head) 等参数。

相关文章:

  • 【Axure视频教程】中继器表格——未选、半选和全选
  • MySQL从入门到精通(四):SQL语言—DML
  • 题解 洛谷 Luogu P1073 [NOIP 2009 提高组] 最优贸易 强连通分量 Tarjan 缩点 拓扑排序 动态规划 C++
  • 卷积神经网络基础(六)
  • 基于深度学习的交通标志识别系统
  • 在Ubuntu 22.04 上安装 JDK 1.8.0_281,同时保留现有的 JDK 17.0.15
  • 基于LVS实现负载均衡,对NAT模式的介绍和使用案例
  • 模型中台建设全流程指南
  • 体育培训的实验室管理痛点 质检LIMS如何重构体育检测价值链
  • 经典密码学算法实现
  • [20250507] AI边缘计算开发板行业调研报告 ​​(2024年最新版)​
  • STM32的看门狗
  • C/C++ Python绑定工具: nanobind 使用指南与示例
  • 如何用命令行判断一个exe是不是c#wpf开发的
  • 金融企业如何借力运维监控强化合规性建设?
  • Linux系列:如何用perf跟踪.NET程序的mmap泄露
  • 点云采集学习个人记录
  • Mkdocs文档引用相对地址的一些问题
  • 从D盘分配空间为C盘扩容?利用工具1+1>2
  • uni-app实现完成任务解锁拼图功能
  • 农行深圳市分行原副行长王国彪涉嫌严重违纪违法被查
  • 打击网络谣言、共建清朗家园,中国互联网联合辟谣平台2025年4月辟谣榜
  • 科学家用AI寻找外星生命
  • 人民日报评“组团退演出服”:市场经济诚信原则需全社会维护
  • 乌克兰议会批准美乌矿产协议
  • 中消协点名新能源汽车行业:定金退款争议频发