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

DeepSeek 细节之 MoE

DeepSeek 细节之 MoE

DeepSeek 团队通过引入 MoE(Mixture of Experts,混合专家) 机制,以“分而治之”的思想,在模型容量与推理成本之间找到了精妙的平衡点,其中的技术实现和细节值得剖思

Transformer 演变至 MoE

标准的 Transformer 层


T表示序列长度,Self-Att(·) 表示自注意力模块,FFN(·) 表示前馈网络 (FFN)

MOE 的 Transformer 层

混合专家模型 (MoE) 是一种利用稀疏门控机制的深度学习模型,它由一组专家模型和一个门控模型组成。MoE 的核心思想是将输入数据根据任务类型划分为多个区域,并为每个区域分配一个或多个专家模型。这样,每个专家模型可以专注于处理特定区域的数据,从而提升模型的整体性能。

MoE 架构的基本原理相对简单,主要包括两个关键组件:GateNet 和 Experts。GateNet 的功能是决定输入样本应由哪个专家模型进行处理。而 Experts 则是由多个相对独立的专家模型组成的集合,每个专家负责处理特定的输入子空间。


如上图右上所示,构建 MoE 语言模型的典型做法通常是用 MoE 层以指定的间隔替换 Transformer 中的FFN。MoE 层由多位专家组成,其中每个专家在结构上与标准 FFN 相同。然后,每个 token 将被分配给一位或两位专家。如果用 MoE 层替换 FFN 层,则其输出隐藏状态如下

门控网络

GateNet:混合专家模型中“门”是一种稀疏门网络,它接收单个数据元素作为输入,然后输出一个权重,这些权重表示每个专家模型对处理输入数据的贡献。一般是通过softmax门控函数通过专家或token对概率分布进行建模,并选择前K个。例如,如果模型有三个专家,输出的概率可能为0.5和0.4、0.1,这意味着第一个专家对处理此数据的贡献为50%,第二个专家为40%,第三个专家为10%,这个时候的K就可以选择为2,我们认为前两个专家模型的建议会更好,可以用于更加精确的回答中,而第三个专家模型的建议可以用于更加富有创意性的答案中。

专家

Experts:在训练的过程中,输入的数据被门控模型分配到不同的专家模型中进行处理;在推理的过程中,被门控选择的专家会针对输入的数据,产生相应的输出。这些输出最后会和每个专家模型处理该特征的能力分配的权重进行加权组合,形成最终的预测结果。

无辅助损失的负载平衡 DeepSeekMoE

对于前馈网络(FFNs),DeepSeek-V3 采用DeepSeekMoE 架构。与传统的MoE 架构如 GShard 相比,DeepSeekMoE 使用更细粒度的专家,并将一些专家隔离为共享的,演化历程如下图从左至右所示。

DeepSeek 中的 MoE 机制如下图所示:

共享专家和路由专家如下式所示进行加权求和,DeepSeek-V3 使用sigmoid 函数来计算亲和度得分,并在所有选定的亲和度得分之间应用归一化以生成门控值。

  • 对于MoE 模型,不平衡的专家负载会导致路由崩溃并在专家并行场景中降低计算效率
    • 传统解决方案通常依赖于辅助损失(例如专家级平衡损失,设备级平衡损失)来避免负载不平衡。然而,过大的辅助损失会损害模型性能
    • 为了在负载平衡和模型性能之间实现更好的权衡,他们首创了一种无辅助损失的负载平衡策略

具体而言,为每个专家引入一个偏置项,并将其添加到相应的亲和度分数中以确定前K个路由,但该偏置项仅用于路由。与FFN 输出相乘的门控值仍然来自原始的亲和度分数,在训练过程中,作者持续监控每个训练步骤的整个批次上的专家负载,在每一步结束时,如果对应的专家超负荷,则该专家将偏置项减少,如果对应的专家负载不足,我们将其偏置项增加,通过动态调整,DeepSeek-V3 在训练过程中保持了平衡的专家负载,并且比通过纯辅助损失鼓励负载平衡的模型表现更好

更多 DeepSeek 技术细节 ~~ DeepSeek 细节之 MLA (Multi-head Latent Attention)

参考文献

一文读懂:混合专家模型 (MoE)-deepseek
一文通透让Meta恐慌的DeepSeek-V3:在MoE、GRPO、MLA基础上提出Multi-Token预测(含FP8训练详解)
一文了解DeepSeek-MoE 架构

http://www.lryc.cn/news/542091.html

相关文章:

  • 【Linux-网络】从逻辑寻址到物理传输:解构IP协议与ARP协议的跨层协作
  • 毕业离校管理系统的开发与需求分析
  • 【NLP 24、实践 ⑤ 计算Bert模型中的参数数量】
  • 一、Spring框架系统化学习路径
  • Midscene.js - AI驱动,轻松实现UI自动化
  • (九)Mapbox GL JS 中 Marker 图层的使用详解
  • 2k1000LA 使能 nand.
  • Junit+Mock
  • maven编译出错,javac: ��Ч��Ŀ�귢�а�: 17
  • Vue使用Three.js加载glb (gltf) 文件模型及实现简单的选中高亮、测距、测面积
  • <el-table>右侧有空白列解决办法
  • Linux网络 网络层
  • 系统讨论Qt的并发编程——逻辑上下文的分类
  • 《Linux Shell 脚本深度探索:原理与高效编程》
  • 深入剖析:基于红黑树实现自定义 map 和 set 容器
  • 在大数据项目中如何设计和优化数据模型
  • JavaScript querySelector()、querySelectorAll() CSS选择器解析(DOM元素选择)
  • Linux系统中处理子进程的终止问题
  • Docker 不再难懂:快速掌握容器命令与架构原理
  • 取消票证会把指定的票证从数据库中删除,同时也会把票证和航班 等相关表中的关联关系一起删除。但在删除之前,它会先检查当前用户是否拥有这张票
  • 力扣-贪心-763 划分字母区间
  • 【Redis 原理】网络模型
  • cpp中的继承
  • DeepSeek全栈接入指南:从零到生产环境的深度实践
  • CSS 真的会阻塞文档解析吗?
  • 大模型的UI自动化:Cline 使用Playwright MCP Server完成测试
  • 碰撞检测 | 图解凸多边形分离轴定理(附ROS C++可视化)
  • Python 基本数据类型
  • 突破“第一崇拜“:五维心理重构之路
  • KubeKey一键安装部署k8s集群和KubeSphere详细教程