Deepseek系列博客目录

Model 核心 Date
DeepSeekLLM 探究LLM Scalling Law 2024.01
DeepSeekMath 提出GRPO 2024.04
DeepSeek-V2 DeepSeekMoE, Multi-Head Latent Attention (MLA) 2024.06
DeepSeek-V3 新版DeepSeekMoE, MTP, 混合精度训练 2024.12
DeepSeek-R1 GRPO应用 2025.01

MoE

一、MoE简介

在Transformer模型的上下文中,MoE由两个主要元素组成:

使用稀疏MoE层代替密集前馈网络(FFN)层。 MoE层具有一定数量的“专家”(例如8个),其中每个专家是一个神经网络。在实践中,专家是FFN,但它们也可以是更复杂的网络,甚至是MoE本身,比如分层MoE。

一种网关网络或路由器,用于确定将哪些令牌发送给哪个专家。 例如,在下图中,令牌“More”被发送到第二个专家,令牌“Parameters”被发送到第一个网络。正如我们稍后将探讨的那样,我们可以向多个专家发送令牌。如何将令牌路由给专家是使用MoE时的一个重大决策:路由器由学习到的参数组成,并与网络的其余部分同时进行预训练。

1. 专家层

  • 专家层用于 替换传统的 FFN(前馈神经网络)结构
  • 每个“专家”实际上是一个 独立的小型 FFN
  • 例如,如果有 8 个专家,那么模型可以根据输入数据动态选择其中的一部分来进行计算,而不是每次都用全部参数。

2. 路由层

  • 决定输入 token 发送到哪个专家 进行处理的模块。
  • 也就是说,在每次推理时,只会使用部分参数,而不是整个模型的全部计算单元。
  • 需要注意的是,路由层每次只选择 top-K 个专家进行激活,而不是所有专家一起工作,这样可以提升计算效率。

3. 负载均衡

  • 需要确保所有专家网络的负载均衡,避免只有某几个专家总是被激活,而其他专家几乎不工作。
  • 如果总是激活固定的少数专家,那么模型最终会变成一个普通的密集(Dense)网络,失去 MoE 的优势。
  • 解决方案是引入辅助损失函数,鼓励模型更均匀地选择不同的专家进行计算,从而提升计算资源利用率

二、MoE存在的挑战

尽管与密集模型相比,MoE提供了高效的预训练和更快的推理等优点,但它们也带来了挑战:

训练:MoE可以显著提高预训练的计算效率,但它们在微调过程中一直难以泛化,导致过度拟合。

推理:虽然MoE可能有许多参数,但在推理过程中只使用其中的一些参数。与具有相同数量参数的密集模型相比,这导致更快的推理。但是,所有参数都需要加载到RAM中,因此对内存的要求很高。例如,给定一个MoE(如Mixtral 8x7 B),我们需要有足够的VRAM来容纳密集的47 参数模型。

Note: 为什么是47B参数而不是8 x 7B = 56B?这是因为在MoE模型中,只有FFN层被视为单独的专家,其余的模型参数是共享的。同时,假设每个token只使用两个专家,推理速度(FLOPs)就像使用12B模型(而不是14B模型),因为它尽管需要计算2x7B矩阵乘法,但有一些层是共享的。

三、 DeepSeekMoE 的改进

1.结构

相较于传统 MoE,DeepSeekMoE 引入了共享专家,并做出了以下优化:

1️⃣ 更精细的专家划分,实现更高的专业化

  • 例如 67B 模型中有 256 个路由专家,每次推理时 激活 8 个专家,相比 QwenMoE 模型更加精细化。

2️⃣ 共享专家减少冗余

  • 共享专家可以让多个 token 复用相同的计算单元,减少整体计算成本,提高计算效率。

3️⃣ 计算路由权重时从 softmax 变为 sigmoid(v3)

  • 这可能是为了避免 softmax 的极端权重分布(即部分专家被高度偏向),让更多专家能够均衡参与计算。

4️⃣ 不需要额外的 loss 进行负载均衡,而是通过偏置权重 b_i进行微调 (v3)

  • 计算量更小,但 效果更好,偏置权重仅用于计算路由,不会影响最终输出的加权求和计算。

2. 数学公式解析

(1) 最终隐藏状态计算

\[h'_t = u_t + \sum_{i=1}^{N_s} \text{FFN}^{(s)}(u_t) + \sum_{i=1}^{N_r} g_{i,t} \text{FFN}^{(r)}_i (u_t)
\]
  • $h'_t $:新的隐藏状态
  • $ u_t $:原始输入
  • $ N_s $:共享专家的个数
  • $ \text{FFN}^{(s)}(u_t) $:共享专家处理后的输出
  • $ N_r $:路由专家的个数
  • $ g_{i,t} \text{FFN}^{(r)}_i (u_t) $:选定专家的加权输出

改进点

  • 共享专家 $ \text{FFN}^{(s)} $ 提供基础特征
  • 路由专家 $ \text{FFN}^{(r)} $ 通过 $ g_{i,t} $ 的权重选择特定专家
  • 这种结构比传统 MoE 计算更稳定,并提高了通用性。

(2) 计算路由权重 $ g_{i,t} $(公式 13)

\[g_{i,t} = \frac{g'_{i,t}}{\sum_{j=1}^{N_r} g'_{j,t}}
\]
  • 归一化专家权重,确保所有专家的贡献总和为 1。

(3) 选择 Top-K 专家 (v2)

\[g'_{i,t} =
\begin{cases}
s_{i,t}, & s_{i,t} \in \text{Topk}(\{s_{j,t} | 1 \leq j \leq N_r \}, K_r) \\
0, & \text{otherwise}
\end{cases}
\]
  • 只激活 Top-K 个专家,其余专家权重设为 0。
  • $ s_{i,t} $ 是 token 对专家的分数。

(4) 计算专家分数 $ s_{i,t} $

\[s_{i,t} = \text{Softmax}(u_t^T e_i) ----- v2
\]
\[s_{i,t} = \text{Sigmoid}(u_t^T e_i) ----- v3
\]
  • 通过 sigmoid 计算专家选择分数。
  • 这里 $ u_t^T e_i $ 代表 token 与专家的匹配度。

(5) 偏置权重优化 (v3)

\[g'_{i,t} =
\begin{cases}
s_{i,t} + b_i, & s_{i,t} + b_j \in \text{Topk}(\{s_{j,t} + b_j | 1 \leq j \leq N_r \}, K_r) \\
0, & \text{otherwise}
\end{cases}
\]
  • 增加了偏置项 $ b_i $,用于优化负载均衡,减少额外 loss 的需求。

MLA

DeepSeek-v2的更多相关文章

  1. 如何搭建自己的SPRING INITIALIZR server

    这两天在慕课学Spring boot ,用idea通过spring initializr新建项目 即使用代理连不上.无奈. 参考了 GitHub - spring-io/initializr: A w ...

  2. Atitit. 破解  拦截 绕过 网站 手机 短信 验证码  方式 v2 attilax 总结

    Atitit. 破解  拦截 绕过 网站 手机 短信 验证码  方式 v2 attilax 总结 1. 验证码的前世今生11.1. 第一代验证码 图片验证码11.2. 第二代验证码  用户操作 ,比如 ...

  3. [Android]Android端ORM框架——RapidORM(v2.1)

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/6020412.html [Android]Android端ORM ...

  4. [Android]Android端ORM框架——RapidORM(v2.0)

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5626716.html [Android]Android端ORM ...

  5. JuCheap V2.0响应式后台管理系统模板正式发布beta版本

    JuCheap V1.* 查看地址: http://blog.csdn.net/allenwdj/article/details/49155339 经过半年的努力,JuCheap后台通用响应式管理后台 ...

  6. Atitit. 项目文档目录大纲 总集合  v2

    Atitit. 项目文档目录大纲 总集合  v2 -----Atitti.原有项目源码的架构,框架,配置与环境说明 v3 q511 -----Atitit.开发环境 与 工具 以及技术框架 以及 注意 ...

  7. python gettitle v2.0

    #!/usr/bin/env python # coding=utf-8 import threading import requests import Queue import sys import ...

  8. ".NET Compact Framework v2.0 could not be found."

    参考: http://blog.csdn.net/godcyx/article/details/7348431 问题原因: That's a known issue where VS can't di ...

  9. ASP.NET Identity V2

    Microsoft.AspNet.Identity是微软在MVC 5.0中新引入的一种membership框架,和之前ASP.NET传统的membership以及WebPage所带来的SimpleMe ...

  10. Atitit.自然语言处理--摘要算法---圣经章节旧约39卷概览bible overview v2 qa1.docx

    Atitit.自然语言处理--摘要算法---圣经章节旧约39卷概览bible overview v2 qa1.docx 1. 摘要算法的大概流程2 2. 旧约圣经 (39卷)2 2.1. 与古兰经的对 ...

随机推荐

  1. Linux-两台Linux服务器间设置共享文件夹(NFS服务器)

    一.环境信息服务器1:192.168.120.141        文件夹:/opt服务器2:192.168.120.142        文件夹:/opt将服务器1的/opt文件夹共享到服务器2的/ ...

  2. Superfetch/SysMain

    卡的不要不要的 Windows 服务中有一个叫 Superfetch. 现在换了个马甲叫 SysMain 本意是好的,超级预读功能可以帮助大型软件极大提升启动加载时间,但是经常抽风至少我觉得 导致磁盘 ...

  3. RESTful的连接时间超时时间设定

    dsResrful的连接方式时,如何设定timeout呢? DSRestConnection.HTTP.ConnectTimeout := 5000; 就这么简单.因为封装的indy的TidHTTP. ...

  4. Jenkins pipeline jenkinsfile的两种写作方式声明式和脚本式

    Jenkins pipeline jenkinsfile的两种写作方式,声明式和脚本式. 为什么需要pipeline? 在多年前Jenkins成为最流行的持续集成服务器的Jenkins 1.x时代,所 ...

  5. 查缺补漏——01-BFS

    01bfs 解决的是一类特殊的最段路问题. 在学习它的过程中,我更加深刻地学习到了泛化路径和 bfs. 01-BFS 是什么 首先明确,01-BFS 是一种图论算法.它解决的事最短路径问题.最短路径算 ...

  6. 使用Python可视化洛伦兹变换

    引言 大家好!今天我们将探讨一个非常有趣且重要的物理概念-洛伦兹变换.它是相对论的核心内容之一,描述了在高速运动下,时间.长度以及其他物理量是如何发生变化的.通过使用 Python 进行可视化,我们不 ...

  7. Python科学计算系列5—导数

    1.一元函数的导数 例1:求下列函数的导数 例2:求下列函数的50阶导数 代码如下: from sympy import * x = symbols('x') f1 = diff(tan(x)) f2 ...

  8. 基于Zabbix Low-level discovery 方式 网络质量监控配置手册

  9. AD系列:Windows Server 2025 搭建AD域控和初始化

    简介 本教程主要内容为使用Windows Server 2025 部署Active Directory (ADDS\域控制器)服务. 所有操作尽量使用PowerShell,可提高部署效率和自动化操作. ...

  10. Spring Boot 不能加载 tcnative-2.dll 库(Can't load library: tcnative-2.dll)

    Spring Boot 不能加载 tcnative-2.dll 库 本文将介绍怎样解决 Spring Boot 在启动时抛出 "org.apache.tomcat.jni.LibraryNo ...