大模型Transformer的MOE架构介绍及方案整理
前言:DeepSeek模型最近引起了NLP领域的极大关注,也让大家进一步对MOE(混合专家网络)架构提起了信心,借此机会整理下MOE的简单知识和对应的大模型。本文的思路是MOE的起源介绍、原理解释、再到现有MOE大模型的整理。
一、MOE的起源和架构
MoE的概念最早由MIT等人在论文中指出:混合专家网络可以看作是多层监督网络的模块化版本。比如元音识别任务,可以分解为多个子任务,每个子任务可以由一个非常简单的专家网络解决。
图1-1:最早的MOE模型(经典之作,其思想沿用至今)-框架图
从让专家之间学会合作->过渡到让专家之间学会竞争:在合作时,各个专家之间是强耦合的,导致解决方案中使用多个专家;当转换为竞争后,将可以得到少数专家活跃的解决方案。这可以通过修改误差函数实现,见图1-2。
图1-2:最早的MOE模型-损失函数
随着稀疏门控MoE的出现(Sparsely-Gated Mixture-of-Experts),特别是在基于Transformer的LLM中成功地集成(Gshard),为这一30年历史的技术注入了新的活力。
小结——MoE框架基于一个简单而强大的理念:模型的不同部分(称为专家)专注于不同的任务。在这种范式下,只有与给定输入相关的专家会被激活,从而使得模型在具备海量专业知识的同时,保持计算成本的可控性。
二、MOE的分类
根据激活专家情况,可以把MOE模型分为Dense MoE和Sparse MoE,接下来分别展开介绍。
图2-1:MOE模型的分类(根据激活专家情况)
2.1 Dense MoE
Dense MoE在每次迭代中激活所有专家网络,优缺点如下:
- 优点:通常能够提供更高的预测准确性
- 缺点:会显著增加计算开销
Dense MoE层的输出可以表示为:
图2-2:Dense MoE层的输出计算
2.2 Sparse MoE
为了解决Dense MoE的"显著增加计算开销"这一问题,谷歌等人提出了Sparse MoE层,即在每次前向传播过程中仅激活选定的一部分专家,GShard便是其中的经典之作。这一策略通过计算加权和的前 k个专家的输出,而不是聚合所有专家的输出,从而实现了稀疏性。稀疏MoE层的结构如图2-1。稀疏门控机制的公式可以修改为:
图2-3:Sparse MoE层的输出计算
尽管稀疏门控显著扩展了模型的参数空间而不增加计算成本,但它可能导致负载均衡问题:即专家之间工作负载分布不均,某些专家频繁使用,而其他专家很少或从未使用。
为了解决这一问题,每个MoE层都引入了一个辅助负载均衡损失(Auxiliary load balancing loss),以促进每个batch中各专家之间token的均匀分布:
图2-4:Sparse MoE引入的辅助负载均衡损失的公式
通过引入辅助loss,模型保持了所有专家之间的平衡,以促使所有时间内专家的工作负载满足均匀分布。
三、MOE各系列大模型技术点汇总
基于MOE思想构建大模型,自2018的提出->到2022年底chatGPT的出现->再到如今DeepSeek大火,已经经历了七年之久,模型更新脉络如下图3-1所示,本文会将代表性MOE(热度高/效果好)大模型总结在本章节。
图3-1:基于MOE的LLM汇总
3.1 Mistral-MOE
Mixtral 8x7B:一种稀疏混合专家(SMoE)语言模型。它具有与Mistral 7B(其结构可参考笔者另一篇文章)相似的架构,不同之处在于每一层由8个FFN模块(即专家)组成。对于每个token,在每一层,路由网络会选择两个专家(topk=2)来处理当前状态并整合它们的输出。尽管每个token只看到2个专家,但选择的专家在每个时间步可能不同。因此,每个token可以访问47B参数,但在推理过程中只使用13B活跃参数。Mixtral使用32k个token的上下文长度进行训练,并在所有评测基准上优于或等于Llama2-70B和GPT-3.5。
图3-2:Mistral-MOE的架构参数
参考: https://arxiv.org/pdf/2401.04088、 假如给我一只AI:LLM开源大模型汇总-截止0218
3.2 LLaMA-MOE
基于LLaMA2-7B 模型(其结构可参考笔者另一篇文章),作者通过"专家构建"和"持续预训练"这两步就获得了 MoE 模型。
图3-3:LLaMA-MOE模型的两步操作——专家构建和持续预训练
- 最终效果:LLaMA-MoE 模型能够保持语言能力,并将输入的 token 路由到特定的专家,且部分参数被激活。
- 实验表明:通过训练 200B token,LLaMA-MoE-3.5B 模型在性能上显著优于包含类似激活参数的Dense模型。
1)专家构建:将原始FFN层的参数分割成多个专家
图3-4:LLaMA-MOE的专家构建流程梳理
2)持续预训练:进一步训练转换后的 MoE 模型和额外的门网络
在经历"专家构建"后,原始LLaMA模型结构会被重新组织为MoE架构,为了恢复其语言建模能力,作者采用"持续预训练"策略进一步训练LLaMA-MoE模型(该策略使用的训练目标与 LLaMA2 相同)。为了提高训练效率,作者探索了不同的'数据采样策略"和"数据过滤策略"。
如果要采用"持续预训练策略",可能遇到问题见表3-1:
表3-1:持续预训练可能遇到的问题
文章具体采用的方法:1)采用"数据过滤",得到去噪且流畅性高的数据;2)对比四种"数据采样策略",实验对比哪种好选择哪种即可。具体总结如下表3-2:
表3-2:4种采样策略和2种数据过滤策略
参考: https://arxiv.org/pdf/2406.16554、 Swish激活函数、 LLaMA2论文)
3.3 Deepseek-MOE
1)DeepSeek-MoE(V1版模型)
解决当前MOE模型存在的两方面问题:
- 专家数量小但token信息丰富:将多样的知识分配给有限的专家,有概率导致专家"试着在有限的参数中学习大量不同类型的知识",然而这些知识又难以同时利用,最终会降低专家的专业性。
- 多个专家之间存在知识冗余:在传统路由策略中,分配token给不同专家时可能需要一些"共享知识"。因此,多个专家可能在各自参数中"收敛于共享知识",这就会导致专家参数冗余。
DeepSeek-MoE给出的解决方案见下图:
图3-5:DeepSeek-MoE的细粒度专家和共享专家
在此基础上,DeepSeek-MOE也具有考虑了负载平衡:即自动学习的路由策略可能会遇到负载不平衡的问题,这会导致两个显著的缺陷:[A] 存在路由崩溃的风险,即模型始终选择少数几个专家,其他专家缺乏充分训练;[B] 如果专家分布在多个设备上,负载不平衡会加剧计算瓶颈。
解决2个问题,分别提出了专家级负载loss和设备级负载loss,问题->解决->公式的解释如下图:
图3-6:DeepSeek-MoE的专家级负载和设备级负载,公式推导见https://zhuanlan.zhihu.com/p/18565423596
2)DeepSeek-V2模型
在DeepSeek-MoE的基础上,新增了一个路由机制和两个负载均衡方法,即设备受限的专家路由机制、通信负载均衡loss和设备级Token丢弃策略,它们的问题->解决->公式的解释如下两图:
图3-7a:DeepSeek-V2的设备受限的专家路由机制
图3-7b:DeepSeek-V2的通信负载均衡和设备级Token丢弃策略
3)DeepSeek-V3模型
相比DeepSeek-V2,DeepSeek-V3在MOE架构上的改进有三点:
- 使用 sigmoid 函数计算亲和度,并对所有选定的亲和度进行归一化以产生门值(图3-8a)。
- 提出了无辅助Loss的负载均衡技术和sequence粒度的负载均衡Loss(图3-8b)。
- 接入了节点限制的路由和无token丢弃策略(图3-8c)。
图3-8a:DeepSeek-V3的亲和度计算公式
图3-8b:DeepSeek-V3的无辅助Loss的负载均衡技术和sequence粒度的负载均衡Loss
图3-8c:DeepSeek-V3的节点限制的路由和无token丢弃策略
代码学习:DeepSeek-MoE源码、DeepSeek-V3源码
参考: DeepSeek-MOE论文、 DeepSeek-V2论文、 DeepSeek-V3论文
3.4 Qwen-MOE
【持续更新】
https://qwenlm.github.io/blog/qwen-moe/
3.5 Nvidia-MOE
【持续更新】
3.6 Grok-MOE
【持续更新】
3.7 Skywork-MOE
【持续更新】
https://arxiv.org/pdf/2406.06563
四、参考文献
- MOE综述:https://arxiv.org/pdf/2407.06204
- 姜富春:deepseek技术解读(3)-MoE的演进之路
- Gshard:https://arxiv.org/pdf/2006.16668
- https://arxiv.org/pdf/1701.06538
- Mistral-moe:https://arxiv.org/pdf/2401.04088
相关文章:

大模型Transformer的MOE架构介绍及方案整理
前言:DeepSeek模型最近引起了NLP领域的极大关注,也让大家进一步对MOE(混合专家网络)架构提起了信心,借此机会整理下MOE的简单知识和对应的大模型。本文的思路是MOE的起源介绍、原理解释、再到现有MOE大模型的整理。 一…...

零基础掌握Linux SCP命令:5分钟实现高效文件传输,小白必看!
引言 “为什么我传个文件到服务器要折腾半小时?” 如果你也曾在Linux系统中为文件传输抓狂,今天这篇保姆级教程就是你的救星!SCP命令——一个基于SSH协议的高效传输工具,只需5分钟,彻底告别FTP客户端和繁琐操作&#…...
分类评价指标
基础概念解释 TP、TN、FP、FN 这里T是True,F是False,P为Positive,N为Negative TP:被模型正确地预测为正样本(原本为正样本,预测为正样本) TN:被模型正确地预测为负样本࿰…...

Python项目-基于Django的在线教育平台开发
1. 项目概述 在线教育平台已成为现代教育的重要组成部分,特别是在后疫情时代,远程学习的需求显著增加。本文将详细介绍如何使用Python的Django框架开发一个功能完善的在线教育平台,包括系统设计、核心功能实现以及部署上线等关键环节。 本项…...

子数组问题——动态规划
个人主页:敲上瘾-CSDN博客 动态规划 基础dp:基础dp——动态规划-CSDN博客多状态dp:多状态dp——动态规划-CSDN博客 目录 一、解题技巧 二、最大子数组和 三、乘积最大子数组 四、最长湍流子数组 五、单词拆分 一、解题技巧 区分子数组&…...

linux设置pem免密登录和密码登录
其实现在chatgpt 上面很多东西问题都可以找到比较好答案了,最近换了一个服务器,记录一下。 如果设置root用户,就直接切换到cd .ssh目录下生成ssh key即可,不需要创建用户创建用户的ssh文件夹了 比如说我要让danny这个用户可以用p…...

什么是Flask
Flask是Python中一个简单、灵活和易用的Web框架,适合初学者使用。它提供了丰富的功能和扩展性,可以帮助开发者快速构建功能完善的Web应用程序。 以下是Python Flask框架的一些特点和功能: Flask 是一个使用 Python 编写的轻量级 WSGI 微 Web…...

Spark(8)配置Hadoop集群环境-使用脚本命令实现集群文件同步
一.hadoop的运行模式 二.scp命令————基本使用 三.scp命令———拓展使用 四.rsync远程同步 五.xsync脚本集群之间的同步 一.hadoop的运行模式 hadoop一共有如下三种运行方式: 1. 本地运行。数据存储在linux本地,测试偶尔用一下。我们上一节课使用…...

【cocos creator】热更新
一、介绍 试了官方的热更新功能,总结一下 主要用于安卓包热更新 参考: Cocos Creator 2.2.2 热更新简易教程 基于cocos creator2.4.x的热更笔记 二、使用软件 1、cocos creator v2.4.10 2、creator热更新插件:热更新manifest生成工具&…...

黑金风格人像静物户外旅拍Lr调色教程,手机滤镜PS+Lightroom预设下载!
调色教程 针对人像、静物以及户外旅拍照片,运用 Lightroom 软件进行风格化调色工作。旨在通过软件中的多种工具,如基本参数调整、HSL(色相、饱和度、明亮度)调整、曲线工具等改变照片原本的色彩、明度、对比度等属性,将…...

部署vue+django项目(初版)
1.准备 vscode 插件Remote SSH,连接远程,打开远程中home文件夹。 镜像和容器的一些常用命令 docker images docker ps 查看所有正在运行的容器 docker ps -a docker rmi -f tk-django-app 删除镜像 docker rm xxx 删除容器 docker start xxxx …...

Redis7系列:设置开机自启
前面的文章讲了Redis和Redis Stack的安装,随着服务器的重启,导致Redis 客户端无法连接。原来的是Redis没有配置开机自启。此文记录一下如何配置开机自启。 1、修改配置文件 前面的Redis和Redis Stack的安装的文章中已经讲了redis.config的配置…...

HarmonyOS学习第18天:多媒体功能全解析
一、开篇引入 在当今数字化时代,多媒体已经深度融入我们的日常生活。无论是在工作中通过视频会议进行沟通协作,还是在学习时借助在线课程的音频讲解加深理解,亦或是在休闲时光用手机播放音乐放松身心、观看视频打发时间,多媒体功…...

在rocklinux里面批量部署安装rocklinx9
部署三台Rockylinux9服务器 实验要求 1. 自动安装ubuntu server20以上版本 2. 自动部署三台Rockylinux9服务器,最小化安装,安装基础包,并设定国内源,设静态IP 实验步骤 安装软件 # yum源必须有epel源 # dnf install -y epel-re…...

Manus:成为AI Agent领域的标杆
一、引言 官网:Manus 随着人工智能技术的飞速发展,AI Agent(智能体)作为人工智能领域的重要分支,正逐渐从概念走向现实,并在各行各业展现出巨大的应用潜力。在众多AI Agent产品中,Manus以其独…...

【Java开发指南 | 第三十四篇】IDEA没有Java Enterprise——解决方法
读者可订阅专栏:Java开发指南 |【CSDN秋说】 文章目录 1、新建Java项目2、单击项目名,并连续按两次shift键3、在搜索栏搜索"添加框架支持"4、勾选Web应用程序5、最终界面6、添加Tomcat 1、新建Java项目 2、单击项目名,并连续按两次…...

WinForm模态与非模态窗体
1、模态窗体 1)定义: 模态窗体是指当窗体显示时,用户必须先关闭该窗体,才能继续与应用程序的其他部分进行交互。 2)特点: 窗体以模态方式显示时,会阻塞主窗体的操作。用户必须处理完模态窗体上…...

静态时序分析:SDC约束命令set_ideal_network详解
相关阅读 静态时序分析https://blog.csdn.net/weixin_45791458/category_12567571.html?spm1001.2014.3001.5482 set_ideal_network命令可以将当前设计中的一组端口或引脚标记为理想网络源(设置端口或引脚对象的ideal_network_source属性为true)&#…...

【学习方法】技术开发者的提问智慧:如何高效获得解答?
技术开发者的提问智慧:如何高效获得解答? 在技术开发过程中,每个人都会遇到无法解决的问题。此时,我们通常会向团队、社区或论坛求助。然而,为什么有些人的问题能迅速得到解答,而有些人的问题却石沉大海&a…...

C++:入门详解(关于C与C++基本差别)
目录 一.C的第一个程序 二.命名空间(namespace) 1.命名空间的定义与使用: (1)命名空间里可以定义变量,函数,结构体等多种类型 (2)命名空间调用(…...

服务器上的nginx因漏洞扫描需要升级
前言 最近客户联系说nginx存在安全漏洞 F5 Nginx 安全漏洞(CVE-2024-7347) F5Nginx是美国F5公司的一款轻量级Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like协议下发行。F5 Nginx存在安全漏洞,该漏洞源于可能允许攻击者使用特制的…...

1688商品列表商品详情API接口全面解析
1688作为中国领先的B2B电子商务平台,汇聚了海量的商品资源,为商家和采购商提供了丰富的交易机会。为了更方便地获取和利用这些商品信息,1688平台提供了商品列表API接口,允许第三方开发者通过编程方式获取平台上的商品列表数据。本…...

【爬虫】开篇词
一、网络爬虫概述 二、网络爬虫的应用场景 三、爬虫的痛点 四、需要掌握哪些技术? 在这个信息爆炸的时代,如何高效地获取和处理海量数据成为一项核心技能。无论是数据分析、商业情报、学术研究,还是人工智能训练,网络爬虫&…...

如何在SpringBoot中灵活使用异步事件?
在现代的应用开发中,事件驱动的架构越来越受到欢迎。当我们在使用SpringBoot时,了解如何实现异步事件变得尤为重要。通过事件机制,我们能够在系统中实现松耦合的组件,让不同模块之间能够有效沟通,而无需直接依赖。本文…...

S19文件格式详解:汽车ECU软件升级中的核心镜像格式
文章目录 引言一、S19文件格式的起源与概述二、S19文件的核心结构三、S19在汽车ECU升级中的应用场景四、S19与其他格式的对比五、S19文件实例解析六、工具链支持与安全考量七、未来趋势与挑战结语引言 在汽车电子控制单元(ECU)的软件升级过程中,S19文件(也称为Motorola S-…...

git安装(windows)+vscode配置
安装git for windows在使用 Git 之前,建议设置全局的用户名称和电子邮件地址,这样每次提交代码时就可以自动关联您的身份信息。设置一次后,您无需每次都输入这些信息,Git 将自动使用您配置的全局用户信息。如果需要针对特定项目使…...

Python性能优化面试题及参考答案
目录 解释字典与列表在查找操作中的时间复杂度差异,如何利用哈希表特性提升性能? 为什么在只读场景下使用元组(tuple)比列表(list)更高效? 如何用 collections.deque 优化频繁的队列插入 / 删除操作? defaultdict 相比普通字典在哪些场景下能减少冗余代码并提升效率…...

【十四】Golang 接口
💢欢迎来到张胤尘的开源技术站 💥开源如江河,汇聚众志成。代码似星辰,照亮行征程。开源精神长,传承永不忘。携手共前行,未来更辉煌💥 文章目录 接口接口定义接口初始化接口嵌套空接口存储任意类…...

ngx_openssl_create_conf
ngx_openssl_create_conf 声明在 src\event\ngx_event_openssl.c static void *ngx_openssl_create_conf(ngx_cycle_t *cycle); 定义在 src\event\ngx_event_openssl.c static void * ngx_openssl_create_conf(ngx_cycle_t *cycle) {ngx_openssl_conf_t *oscf;oscf ngx_…...

54-WLAN 无线局域网配置方案-三层
一、网络拓扑说明 本 WLAN 网络由交换机(LSW1)、无线控制器(AC1)、无线接入点(AP1\2)以及无线客户端(STA1)组成。 用途VLANAC100AP200业务300 二、设备配置 二、设备配置 &#x…...