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

三、大模型原理:图文解析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) 等参数。

http://www.xdnf.cn/news/4490.html

相关文章:

  • NGINX `ngx_http_charset_module` 字符集声明与编码转换
  • 【CSS】Grid 的 auto-fill 和 auto-fit 内容自适应
  • goland无法debug
  • 做PPT的感想
  • 在IPv6头部中,Next Header字段
  • 基于 ISO 22301 与国产化实践的 BCM 系统菜单设计指南
  • 计算机网络中相比于RIP,路由器动态路由协议OSPF有什么优势?
  • 服务器数据恢复—硬盘坏道导致EqualLogic存储不可用的数据恢复
  • 2023年华为杯研究生数学建模竞赛B题DFT类矩阵的整数分解逼近
  • ActiveMQ 源码剖析:消息存储与通信协议实现(二)
  • 英伟达发布Llama-Nemotron系列新模型,性能超越DeepSeek-R1
  • 初学Python爬虫
  • Spring AI 之 AI核心概念
  • 第十一节:图像处理基础-图像阈值处理
  • ES6入门---第三单元 模块七: Proxy的使用+Reflect的使用
  • 【备考高项】模拟预测题(二)综合知识及答案详解
  • PostgreSQL 常用SQL操作命令
  • 南京市出台工作方案深化“智改数转网联”,物联网集成商从“困局”到“蓝海”!
  • Linux 安全加固
  • Python与C++类型对照及常用操作
  • 以太联-Intellinet 561648 户外防破坏千兆PoE延长器-- 稳定可靠,全天候守护网络连接
  • 神经网络在模式识别中的应用:从语音到视觉的智能解析
  • fedora系统详解详细版本
  • 鸿蒙开发——3.ArkTS声明式开发:构建第一个ArkTS应用
  • 基于QT(C++)实现(图形界面)校园导览系统
  • Failed building wheel for pycuda
  • AI工场全面激活电商创意链
  • 数据库系统概论-基础理论
  • PCB设计流程及注意事项
  • Czkawka:跨平台重复文件清理