【深度解析】图解Deepseek-V3模型架构-混合专家模型(MoE)
一、引言
最近非常火爆的DeepSeek-V3模型,是一个包含6710亿总参数的强大混合专家模型(MoE),其中每个token激活370亿参数。该模型在DeepSeek-V2验证有效的核心架构基础上,采用多头潜在注意力(MLA)机制和DeepSeekMoE架构,显著提升推理效率并降低训练成本。DeepSeek-V3创新性地引入无辅助损失的负载均衡策略,并采用多标记预测训练目标以增强模型性能。
混合专家模型(MoE) 作为突破传统密集模型瓶颈的核心架构,通过任务分治理念实现计算效率与模型容量的双重突破。
DeepSeekMoE的突破性表现印证了该技术的战略价值。MoE架构通过专家拆分、无辅助损失负载均衡等创新,使国产大模型首次在参数效率、训练稳定性等维度超越国际竞品,为构建多模态通用智能底座开辟新路径。
本文将采用图解的方式详细介绍一下混合专家模型(MoE) 的技术原理。
二、什么是混合专家MoE模型
混合专家(Mixture of Experts,简称 MoE)模型,是一种利用多个不同的子模型(或“专家”)来提升大语言模型(LLM)质量的技术。

MoE模型的主要组成部分包括:
专家(Experts): 模型中的每个专家都是一个独立的神经网络,专门处理输入数据的特定子集或特定任务。例如,在自然语言处理任务中,一个专家可能专注于处理与语言语法相关的内容,而另一个专家可能专注于语义理解。
路由或者门控网络(Gating Network): 门控网络的作用是决定每个输入样本应该由哪个专家或哪些专家来处理。它根据输入样本的特征计算出每个专家的权重或重要性,然后根据这些权重将输入样本分配给相应的专家。门控网络通常是一个简单的神经网络,其输出经过softmax激活函数处理,以确保所有专家的权重之和为1。

“专家”并不是专门针对某个领域,如“心理学”或“生物学”。它只是语法层面的专家,具体来说,它们的专长是在特定的上下文中处理特定的标记。

路由器(门控网络)来选择最适合给定输入的专家(们):

每个专家并不是一个完整的 LLM,而是 LLM 架构中的子模型部分。
三、发展历程
-
早期探索:理论奠基与原型构建
混合专家模型(MoE)的起源可追溯至1991年Michael Jordan与Geoffrey Hinton的开创性研究。在论文《Adaptive Mixture of Local Experts》中,他们首次提出通过多个独立网络(专家)协同处理数据子集,并引入门控网络动态分配任务。这一架构突破性地解决了传统神经网络中不同任务间的干扰问题,为后续研究奠定基础。早期MoE模型虽受限于算力和数据规模,但已展现出任务分治思想的潜力——通过专家网络专业化分工,门控网络竞争性选择最优处理路径,显著提升了模型学习效率。 -
关键突破:稀疏计算与动态激活
2017年成为MoE发展的分水岭。谷歌团队在《Sparsely-Gated Mixture-of-Experts》中提出两项革命性创新:
其一,将稀疏门控机制引入LSTM网络,仅激活2-4个专家处理每个token,使模型参数量突破千亿级时仍保持高效推理;
其二,采用token级路由策略,实现细粒度计算资源分配。
这两项突破使MoE在自然语言处理领域大放异彩,Google的GShard项目更将MoE成功整合至Transformer架构,为后续大模型时代铺平道路。 -
当代演进:架构革新与国产突破
GPT-4的发布标志着MoE进入工业化应用阶段。其采用8个220B参数的专家模块,通过动态路由实现万亿级参数规模下的高效推理。这种"模型堆叠"策略突破单一模型扩展瓶颈,使推理成本降低至传统密集模型的1/8。而国产DeepSeekMoE进一步加速了MoE领域的技术创新。该架构通过三大技术创新实现跨越式发展:
首创无辅助损失的负载均衡策略,消除传统路由算法对平衡性约束的依赖;
采用多token预测训练目标,提升专家协作效率;
参数效率达到国际领先水平,6B模型以40%计算量实现LLaMA2 7B性能,145B版本更以28.5%资源匹配67B密集模型表现。
DeepSeekMoE的成功实践证明,通过专家专业化分工与智能路由机制的深度结合,MoE正在重塑大模型的技术范式,为通用人工智能时代的到来提供关键基础设施。
四、架构设计
4.1 专家架构
- 密集层 (Dense Layer)
为了探讨专家(MoE中的E)的代表意义和它们的工作方式,我们首先需要了解 MoE 原本要替代的密集层。
混合专家(MoE)起始于 LLM 相对基础的功能,即前馈神经网络(FFNN)。

密集层(Dense Layer)是前馈神经网络(FFNN)中的全连接层,每个神经元通过权重矩阵与前一层的所有输出相连,利用激活函数实现特征的非线性组合,用于学习输入数据的高阶抽象表示。

传统 Transformer 中的前馈神经网络(FFNN)被称为密集模型,因为所有参数(权重和偏置)都会被激活。没有任何参数被遗漏,所有参数都参与输出计算。
如果我们更仔细地观察这种密集模型,可以发现输入会在某种程度上激活所有参数:

- 稀疏层 (Sparse Layers)
与此相对,稀疏模型仅激活一部分参数,并且与混合专家(MoE)紧密相关。
可以将密集模型切割成多个部分(所谓的专家),重新训练它,并且在给定时间内只激活一组专家:

其底层思想是每个专家在训练过程中学习不同的信息。然后,在进行推理时,仅使用与给定任务最相关的特定专家。

- 专家的架构
将专家视为密集模型中的隐藏层并将其切分成块,它们通常本身就是完整的前馈神经网络(FFNN),

由于大多数 LLM 具有多个解码器块,因此给定文本将在多个专家之间传递,直到文本生成:

所选的专家很可能在标记之间有所不同,这就导致了不同的“路径”被选择:

如果我们更新解码器块的可视化,它现在会包含更多的 FFNN(每个专家一个):

解码器块现在有多个 FFNN(每个都是一个“专家”),可以在推理时使用。
4.2 路由机制
现在我们有了一组专家,那么模型是如何知道应该使用哪些专家的呢?
在专家之前,添加了一个路由器(也叫网关网络),它经过训练来选择哪个专家适合给定的标记。
- 路由器
路由器(或门控网络)也是一种前馈神经网络(FFNN),它根据特定的输入来选择专家。它输出概率,并利用这些概率来选择最匹配的专家:

专家层返回所选专家的输出,并乘以门值(选择概率)。
路由器与专家(其中只有少数几个被选中)一起构成了 MoE 层:

给定的 MoE 层有两种大小,分别是稀疏的混合专家或密集的混合专家模型。
这两者都使用路由器来选择专家,但稀疏 MoE 只选择几个,而密集 MoE 则选择所有专家,但可能以不同的分布进行选择。
给定一组标记,密集MoE 会将标记分配给所有专家,而稀疏 MoE 只选择少数专家。
- 专家的选择
门控网络可以说是任何 MoE 模型中最重要的组成部分,因为它不仅决定了在推理过程中选择哪些专家,还决定了在训练过程中选择哪些专家。
在最基本的形式中,我们将输入(x)与路由器权重矩阵(W)相乘:
然后,我们对输出应用 SoftMax 操作,为每个专家创建概率分布 G(x):

路由器使用这种概率分布来选择与给定输入最匹配的专家。
最后,我们将每个路由器的输出与每个选定的专家相乘,并对结果进行求和。

4.3 混合专家模型流程图
下图显示了输入是如何通过路由器和专家进行流动的。


五、技术优势详解
5.1 计算效率:条件计算带来的FLOPs优化
混合专家模型(MoE)通过稀疏激活机制实现计算效率质的飞跃。每个token仅激活2-4个专家(总专家量可达数千),避免传统密集模型的全参数计算。例如,DeepSeekMoE 16B模型激活参数仅6.5B,却以40%计算量达到LLaMA2 7B的性能。这种效率源于:
-
动态路由:门控网络实时筛选相关性最高的专家
简单的函数常常导致路由器会选择相同的专家,因为某些专家可能比其他专家学习得更快:
选择的专家分布不均,会导致一些专家几乎不会被训练到,这导致在训练和推理过程中都会出现问题。
因此,希望在训练和推理过程中,专家之间具有相等的重要性,这就是我们所说的负载均衡。从某种意义上说,这是为了防止对同一专家的过拟合。 -
负责均衡:KeepTopK
为了平衡专家的重要性,我们需要关注路由器,因为它是决定在特定时刻选择哪些专家的主要组成部分。
负载均衡路由器的一种方法是通过一个简单的扩展,叫做 KeepTopK。通过引入可训练的(高斯)噪声,我们可以防止总是选择相同的专家:
然后,除了你想激活的前 k 个专家(例如 2 个)之外,其余专家的权重将被设置为 -∞:

通过将这些权重设置为 -∞,这些权重上的 SoftMax 输出将导致概率为 0:

-
辅助损失
为了在训练期间获得更均匀的专家分布,辅助损失(也称为负载均衡损失)被添加到网络的常规损失中。
这个辅助损失的第一个组成部分是对整个批次中每个专家的路由器值进行求和:

这给出了每位专家的重要性分数,表示无论如何输入,某位专家被选择的可能性。
我们可以使用这个来计算变异系数(CV),它告诉我们不同专家之间的重要性分数差异有多大。
使用这个 CV 分数,我们可以在训练过程中更新辅助损失,目的是尽可能降低 CV 分数(从而给每个专家相等的重要性):

5.2 扩展能力:模型容量与计算成本的解耦
MoE架构突破参数规模与计算资源的线性关系。DeepSeekMoE 145B模型通过专家拆分策略,在保持计算成本28.5%的情况下,性能超越Google GShard。关键技术包括:
- 专家并行:将专家分布在不同计算节点
不平衡不仅存在于被选择的专家中,也存在于分配给专家的 token 分布中。
例如,如果输入 token 不成比例地分配给某个专家,而忽视了其他专家,那么也可能导致训练不足:

这里的问题不仅是哪些专家被使用,而是它们被使用的频率。
解决这个问题的一种方法是限制每个专家可以处理的 token 数量,即专家容量。当一个专家的容量达到上限时,剩余的 token 会被发送到下一个专家:

如果两个专家的容量都已满,那么 token 将不会被任何专家处理,而是被发送到下一层,这就是 token 溢出。

- 容量因子调节:动态调整专家处理token上限
- Token 选择
KeepTopK 策略是将每个 token 路由发送到少数几个选定的专家。这种方法称为 Token Choice,允许将给定的 token 发送到一个专家(top-1 路由):
或发送到多个专家(top-k 路由):

六、训练优化技术解析
1. 联合训练策略
专家-路由器协同优化采用双路径反向传播:
DeepSeek创新的多token预测目标:

- 同时预测当前token及后续n个token
- 迫使专家学习长程依赖关系
- 训练效率提升30%(相同epoch数下困惑度降低18%)
6.2 分布式训练实践
专家并行架构实现超大规模训练:
DeepSeek关键参数:
- 通信压缩:采用1-bit梯度量化,通信量减少83%
- 流水线并行:重叠计算与通信,GPU利用率达92%
- 检查点策略:每30分钟自动保存,恢复训练仅需2分钟
资源消耗:
- 145B模型全量训练消耗278.8万H800 GPU小时
- 同等规模密集模型需920万GPU小时(成本降低67%)
七、技术突破总结
MoE架构通过计算稀疏化与参数专业化的双重革新,正在重塑大模型技术路线。DeepSeek系列实践证明,国产模型在专家拆分策略(如将单个专家拆分为两个子专家而不增加参数量)、动态路由算法等领域已形成独特技术优势。未来随着万亿级MoE模型的出现,这种架构将成为突破算力瓶颈的核心解决方案。
【参考文献】
本文参考了 Maarten Grootendorst的文章,其是“袋鼠书”Hands-On Large Language Models 的作者,你可以在《袋鼠书》中查看更多关于大语言模型可视化的内容。

《图解大模型》
Jay Alammar,Maarten Grootendorst | 著
李博杰 | 译
美亚 4.7 星评,畅销书 Hands-on 系列新作。只要具备 Python 基础,就可以通过本书学习大语言模型,并将大语言模型的能力应用到真正的 AI 实践中。
本书将为 Python 开发人员提供使用大模型的实用工具和概念,帮助大家掌握实际应用场景。你将学习如何利用预训练的大型语言模型进行文案撰写、文本摘要、语义搜索等任务,构建超越关键词匹配的智能系统。
相关文章:
【深度解析】图解Deepseek-V3模型架构-混合专家模型(MoE)
一、引言 最近非常火爆的DeepSeek-V3模型,是一个包含6710亿总参数的强大混合专家模型(MoE),其中每个token激活370亿参数。该模型在DeepSeek-V2验证有效的核心架构基础上,采用多头潜在注意力(MLA࿰…...
c#判断exe文件是不是7z或者rar的自解压文件
亲测可以实现检测7z的自解压,但是对于rar的自解压格式,最新版不支持,尝试修改回发现几乎检测成了exe文件,这显然是不正确的,其他版本未测试。 如下图所示,可以检测出自解压格式的7z文件,黑色显…...
富士SC2022,C325,C328打印机扫描到网络详细教程
前言: 在开始教程之前,我先声明目前该教程适用于FujiXerox apeos C325Z和FujiXerox DocuCentre SC2022打印机。这次教程以FujiXerox DocuCentre SC2022为例,该打印机IP地址为10.40.11.240。 前提条件 : 1. 安装打印机所需打印机和扫…...
涌现之谜:神经网络中的意识幻象与信息熵变
导言:黑箱中的幽灵剧场 当AlphaGo在棋盘第37手落下超越人类棋谱的"神之一着"时,观者感受到的震颤不亚于目睹意识的曙光。这种认知幻觉暴露了智能研究的基本困境:在权重矩阵的混沌涨落中,究竟诞生的是真正的认知主体&am…...
WEB安全--SQL注入--常见的注入手段
一、联表查询: 1.1原理: 当payload参数被后端查询语句接收到时,其中的非法语句通过union关联显示出其他的数据 1.2示例: #payload: -1 and union select 1,2,database()--#query: $sqlselect * from users where id-1 and union …...
wordpress get_footer();与wp_footer();的区别的关系
在WordPress中,get_footer() 和 wp_footer() 是两个不同的函数,它们在主题开发中扮演着不同的角色,但都与页面的“页脚”部分有关。以下是它们的区别和关系: 1. get_footer() get_footer() 是一个用于加载页脚模板的函数。它的主…...
人工智能3d点云之Pointnet++项目实战源码解读(点云分类与分割)
一.项目文件概述 二.数据读取模块配置 实际代码运行时是先定义与加载好模型,然后再去读取数据进来传入到模型网络中去训练。但现在反过来先读取数据开始。 进入ModelNetDataLoader类的_getitem方法, 做标准化的目的是处理异常大的数值 上面返回的cls是类别,相当于…...
IP 路由基础 | 路由条目生成 / 路由表内信息获取
注:本文为 “IP 路由” 相关文章合辑。 未整理去重。 IP 路由基础 秦同学学学已于 2022-04-09 18:44:20 修改 一. IP 路由产生背景 我们都知道 IP 地址可以标识网络中的一个节点,并且每个 IP 地址都有自己的网段,各个网段并不相同…...
Redis 启用自动内存碎片清理异常
Redis 启用自动内存碎片清理异常 127.0.0.1:6379> config set activedefrag yes (error) DISABLED Active defragmentation cannot be enabled: it requires a Redis server compiled with a modified Jemalloc like the one shipped by default with the Redis source dis…...
java后端开发day16--字符串(二)
(以下内容全部来自上述课程) 1.StringBuilder 因为StringBuilder是Java已经写好的类。 java在底层对他进行了一些特殊处理。 打印对象不是地址值而是属性值。 1.概述 StringBuilder可以看成是一个容器,创建之后里面的内容是可变的。 作用…...
LabVIEW危化品仓库的安全监测系统
本案例展示了基于LabVIEW平台设计的危化品仓库安全监测系统,结合ZigBee无线通信技术、485串口通讯技术和传感器技术,实现了对危化品仓库的实时无线监测。该系统不仅能提高安全性,还能大幅提升工作效率,确保危化品仓库的安全运营。…...
深度学习框架探秘|Keras 应用案例解析以及 Keras vs TensorFlow vs PyTorch
引言 上一篇文章《深度学习框架探秘|Keras:深度学习的魔法钥匙》 我们初步学习了 Keras,包括它是什么、具备哪些优势(简洁易用的 API、强大的兼容性、广泛的应用领域),以及基本使用方法。本文,…...
VINS-mono代码笔记
feature_tracker_node.cpp: 一、通过roslaunch文件的参数服务器获得配置参数 二、获得相机的内参 三、订阅图像,img_callback: 1、第一帧图像只记录时间戳 2、与之前时间戳比较一下,判断是否要发布当前帧,避免高频率发送ÿ…...
Maven下载安装IDEA使用MavenJava在pom.xml配置教程
一、Maven 简介 Maven 是一个强大的项目管理和构建工具,主要用于 Java 项目的构建、依赖管理和文档生成等。它通过一个统一的 XML 文件(pom.xml)来管理项目的整个生命周期,包括编译、测试、打包、发布等环节。 二、Maven 下载与…...
NAT(网络地址转换)技术详解:网络安全渗透测试中的关键应用与防御策略
目录 NAT的作用 NAT类型 NAT工作流程示例 NAT 转换技术的原理 源地址转换(SNAT,Source NAT): 目标地址转换(DNAT,Destination NAT): 端口地址转换(PAT,…...
newgrp docker需要每次刷新问题
每次都需要运行 newgrp docker 的原因: 当用户被添加到 docker 组后,当前会话并不会立即更新组信息,因此需要通过 newgrp docker 切换到新的用户组以使权限生效 如果不想每次都手动运行 newgrp docker,可以在终端中配置一个自动刷新的脚本。…...
【FastAPI 使用FastAPI和uvicorn来同时运行HTTP和HTTPS的Python应用程序】
在本文中,我们将介绍如何使用 FastAPI和uvicorn来同时运行HTTP和HTTPS的 Python应用程序。 简介 FastAPI是一个高性能的Web框架,可以用于构建快速、可靠的API。它基于Python的类型提示和异步支持,使得开发者可以轻松地编写出安全且高效的代…...
容器化部署Kafka的最佳实践:基于KRaft模式的无ZooKeeper方案
一、docker 部署kafka单节点 1.1安装docker 可以参考这篇CentOS 7安装docker并配置镜像加速 1.3 运行kafka(注意修改zookeeper,kafka地址) docker run -d --name kafka -e KAFKA_ADVERTISED_LISTENERSPLAINTEXT://172.16.10.180:9092 -p …...
20250214 随笔 线程安全 线程不安全
1. 什么是线程安全 & 线程不安全? 线程安全(Thread-Safe):在多线程环境下访问同一个对象时,不会产生数据竞争、不会出现数据不一致的问题。线程不安全(Not Thread-Safe):在多线…...
rem、em、vw区别
在前端开发里,rem、em、vw都是用来设置元素大小的单位,下面就用大白话讲讲它们的区别。 参考标准不一样 rem:就像大家都用同一把“大尺子”来量东西,这把“大尺子”就是网页里根元素(也就是 <html> 标签&#…...
【PHP】php+mysql 活动信息管理系统(源码+论文+数据库+数据库文件)【独一无二】
👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。 【PHP】php 活动信息管理系统(源码论文…...
cURL请求与Javascript请求转换工具
cURL请求与Javascript请求在线转换工具(如 curlconverter) 首先,看看各个证据中关于curl的定义。提到cURL是“Client for URLs”的缩写,最初全大写是为了方便记忆,社区也将其解释为“Client URL Request Library”或递归的“Curl URL Request Library”。同时,还指出cURL…...
rv1103b编译opencv
opencv-3.4.16,png的neon会报错,如果想开可以参考 https://blog.csdn.net/m0_60827485/article/details/137561429 rm -rf build mkdir build cd build cmake -DCMAKE_BUILD_TYPERELEASE \ -DCMAKE_C_COMPILERxxx/arm-rockchip831-linux-uclibcgnueabih…...
thingboard告警信息格式美化
原始报警json内容: { "severity": "CRITICAL","acknowledged": false,"cleared": false,"assigneeId": null,"startTs": 1739801102349,"endTs": 1739801102349,"ackTs": 0,&quo…...
OpenHarmonry 5.0.1源码下载与编译
预置环境:硬盘500G、内存32G、Ubuntu 20.04.6 LTS Ubuntu系统下载路径:ubuntu-releases安装包下载_开源镜像站-阿里云 一、必需环境 sudo apt-get update && sudo apt-get install binutils binutils-dev git git-lfs gnupg flex bison gperf…...
【Python深入浅出㊸】解锁Python3中的TensorFlow:开启深度学习之旅
目录 一、TensorFlow 简介1.1 定义与背景1.2 特点 二、Python 3 与 TensorFlow 的关系2.1 版本对应2.2 为何选择 Python 3 三、安装 TensorFlow3.1 安装步骤3.2 验证安装 四、TensorFlow 基本概念与使用方法4.1 计算图(Graph)4.2 会话(Sessio…...
STM32 外部中断和NVIC嵌套中断向量控制器
目录 背景 外部中断/事件控制器(EXTI) 主要特性 功能说明 外部中断线 嵌套向量中断控制器 特性 中断线(Interrupt Line) 中断线的定义和作用 STM32中断线的分类和数量 优先级分组 抢占优先级(Preemption Priority) …...
string类详解(上)
文章目录 目录1. STL简介1.1 什么是STL1.2 STL的版本1.3 STL的六大组件 2. 为什么学习string类3. 标准库中的string类3.1 string类3.2 string类的常用接口说明 目录 STL简介为什么学习string类标准库中的string类string类的模拟实现现代版写法的String类写时拷贝 1. STL简介 …...
DeepSeek教unity------Dotween
1、命名法 Tweener(补间器):一种控制某个值并对其进行动画处理的补间。 Sequence(序列):一种特殊的补间,它不直接控制某个值,而是控制其他补间并将它们作为一个组进行动画处理。 Tw…...
AIP-146 泛化域
编号146原文链接AIP-146: Generic fields状态批准创建日期2019-05-28更新日期2019-05-28 API中的大多数域,无论是在请求、资源还是自定义应答中,都有具体的类型或模式。这个模式是约定的一部分,开发者依此约定进行编码。 然而,偶…...
