DeepSeek面试——模型架构和主要创新点

本文将介绍DeepSeek的模型架构多头潜在注意力(MLA)技术,混合专家(MoE)架构, 无辅助损失负载均衡技术,多Token 预测(MTP)策略。

一、模型架构

DeepSeek-R1的基本架构沿用了DeepSeek-V3 的架构。其特点是多头潜在注意力 (MLA) 用于高效推理,混合专家模型(MoE)用于经济训练,多标记预测 (MTP) 提高评估基准的整体性能,辅助无损失负载均衡策略来减轻因确保负载平衡而引起的性能下降。其中前两个是DeepSeekV2使用并验证效果,后两个是DeepSeekV3提出。

总的来说,DeepSeek-R1 是一种改进的Transform 架构,其中每个Transform块由一个Attention模块和一个FFN组成。然而,对于Attention和 FFN,DeepSeek设计并采用了新的架构。针对注意力设计了 MLA,支持高效推理。针对 FFN采用高性能DeepSeekMoE 架构,能够以经济成本训练强大模型的架构。DeepSeek 的架构如下图所示:

二、MLA

多头潜在注意力MLA(Multi-Head Latent Attention)如上图右下角,核心原理是利用低秩KV联合压缩来消除推理时间键值缓存和计算量

其实现步骤可以看成三步:

第一步:输入映射到低秩潜在空间,输入h_{t}分别乘以QKV的低秩权重矩阵得到c_{t}^{Q}c_{t}^{KV}此时矩阵的秩远远小于h_{t}的秩。类似下图,利用矩阵乘法将输入映射到潜在空间,实现低秩压缩。

同时对输入h_{t}c_{t}^{Q}乘以携带旋转位置编码(RoPE)的解耦键的矩阵;apply RoPE表示应用 RoPE 矩阵的操作;多个框层叠在一起表示计算i次后拼接。需要注意的是,对于 MLA,在生成过程中仅需缓存c_{t}^{KV}k_{t}^{R},这在保持与标准多头注意力(MHA)相当性能的同时,显著减少了键值(KV)缓存量。

第二步:潜在空间中的多头注意力计算

在潜在空间上进行Multi head attention计算。

第三步:映射回原始空间

第一步的反向操作,将低秩潜在空间映射回原始空间

MLA的优势

1. 性能保持:MLA通过低秩压缩减少了KV缓存和激活内存,但仍然能够保持与标准多头注意力(MHA)相当的性能。

2. 效率提升:通过在低维潜在空间中执行注意力计算,复杂度由O(n2d) 降至 O(n2k),在推理过程中,MLA只需要缓存压缩后的键和值,显著减少了内存占用,有效降低复杂度。

3. 旋转位置嵌入(RoPE):RoPE通过旋转操作将位置信息嵌入到键和查询中,有效处理了长序列中的位置依赖问题,使得模型能够更好地捕捉长距离依赖关系。

三、MOE

混合专家架构MOE(Mixture-of-Experts)首次出现于1991年的论文Adaptive Mixture of Local Experts中。DeepSeekMoE中包含 2048 个领域专家模型,通过门控网络动态分配查询请求。与 传统 FFN 架构相比,DeepSeekMoE 使用更细粒度的专家,并将一些专家隔离为共享专家。

共享专家(share experts)所有输入均参与计算,路由专家(routed experts)使用 sigmoid 函数计算亲和分数,并对所有选中的亲和分数进行归一化以生成门控值。取门控制TopK的专家参与计算。

MoE的核心思想是“分而治之”,由多个专家组成,每个专家都是一个局部模型,专门处理输入空间的一个子集。MoE 使用门控网络来决定每个数据应该被哪个模型去训练,从而减轻不同类型样本之间的干扰,理想实现是某类数据由某类专家来判定结果。

MoE的优势:

1. 专家协作:能够处理不同输入数据中的共性特征,实现跨不同类型输入数据的知识共享,这有助于减少模型参数的冗余。而路由专家则专注于处理具有特定模式或特征的数据,从而提升模型对各种数据的适应性和处理效率。

2. 专家分配:引入了更为精细化的专家分配机制,使得门控网络能够更准确地分析输入数据的特征,并将其导向最匹配的专家,从而增强模型处理复杂数据的能力。

3. 专家激活:每个输入Token激活8个路由专家,这在确保模型处理效果的同时,有效避免了因过度激活专家而导致的计算资源浪费,从而提升了计算效率并降低了计算成本。

四、无辅助损失负载均衡技术

无辅助损失负载均衡技术(Auxiliary-Loss-Free Load Balancing)在MoE大模型训练过程中,输入会根据路由规则分配到不同的专家模型进行处理,这个过程中可能会出现负载不均衡的情况,即某些专家模型被频繁调用,而另一些专家模型则很少被使用,这会导致训练效率和模型性能下降。

常规解决方案通常依赖于辅助损失以避免负载不平衡,然而,过大的辅助损耗会损害模型性能。为了在负载均衡和模型性能之间实现更好的权衡,DeepSeek提出了一种辅助无损负载均衡策略来确保负载均衡。具体来说,为每个专家引入了可学习的一个偏差项B_{i},并且将其添加到相应专家的分数中。在训练过程中该偏置项会动态调整每个专家的匹配得分,基于得分和对各专家利用率的实时监测,动态调整路由策略,将输入Token分配给负载较低的专家。

即每个步骤结束时,如果相应的专家过载,则减少偏差项,如果相应的专家欠载,将增加偏差项。通过动态调整,DeepSeek在训练过程中保持平衡的专家负载,并取得了比通过纯辅助损失鼓励负载均衡的模型更好的性能。

序列平衡辅助损失(Complementary Sequence-Wise Auxiliary Loss)。虽然 DeepSeek-V3 主要依靠辅助无损失策略进行负载均衡,但为了防止任何单个序列内的极端不平衡,还采用了序列平衡损失。对序列中的每个 Token 进行精细化的分析和处理,根据 Token 在序列中的位置、上下文信息等更合理地分配到各个专家,序列平衡损失每个序列上的专家负载保持平衡。

五、MTP

多Token 预测MTP(Multi-Token Prediction)。包含主模型Main Model(基础的下一个令牌预测)和 D个顺序MTP模块MTP Module(扩展预测未来D个Token)。每个MTP模块由以下组件构成:
• 共享嵌入层(Embedding Layer):与主模型共用,减少参数冗余;
• 共享输出头(Output Head):与主模型共用输出层;
• 独立Transformer块(TRMₖ):每个模块有专属的Transformer块;
• 线性投影矩阵(Linear Projection):用于结合当前令牌表示与未来令牌嵌入;
• 均方根归一化(RMSNorm):替代传统LayerNorm,提升计算效率。

训练目标:每个MTP模块单独计算交叉熵损失L_{MTP},总损失为每个MTP模块损失的加权平均:

λ值调节:通过实验确定最优权重以平衡主模型与MTP模块的训练信号。最终使用L_{Main}+L_{MTP}作为最终损失函数。

优势:
训练阶段通过输入单个Token使用MTP的方式增加模型的学习能力,模型可以通过单Token得到多个平均后的损失,使模型增加单位数据的训练信号量,有利于模型稳定和加速收敛。

推理阶段可单独使用Main Model(丢弃MTP模块),保持常规生成能力。MTP模块仅作用于训练阶段,当然也可以用作推理阶段加速使用,不过要调整代码。

MTP和传统单Token预测区别

DeepSeek MTP传统单Token预测
预测深度多层级(D≥1)单层级(仅下一个令牌)
参数共享嵌入层、输出头与主模型共享无共享
训练目标多损失加权优化单一交叉熵损失
推理灵活性支持推测解码加速仅自回归生成

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/899080.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【web3】

检测钱包是否安装 方法一 // npm install metamask/detect-provider import detectEthereumProvider from metamask/detect-provider// 检测钱包是否安装 const isProvider await detectEthereumProvider() if(!isProvider) {proxy.$modal.msgError("请安装钱包")…

husky的简介以及如果想要放飞自我的解决方案

husky 是一个 Git Hooks 管理工具,它的主要作用是 在 Git 提交(commit)、推送(push)等操作时执行自定义脚本,比如代码检查(Lint)、单元测试(Test)、格式化代码…

JVM之类的加载过程

加载 这一阶段是将类的字节码从外部存储(如磁盘)加载到JVM的内存中。加载时,JVM会根据类的全限定名(包括包名和类名)查找相应的字节码文件(.class文件),并将其读入内存。 链接 链接…

Java Collection API增强功能系列之六 改进的 ConcurrentHashMap:归约、搜索、计数与 Set 视图详解

Java 8 改进的 ConcurrentHashMap:归约、搜索、计数与 Set 视图详解 Java 8 对 ConcurrentHashMap 进行了重大优化,不仅提升了并发性能,还引入了许多函数式编程方法,使其在处理高并发场景时更加高效和灵活。本文将深入解析 Concu…

AI生成移动端贪吃蛇游戏页面,手机浏览器打开即可玩

贪吃蛇游戏可计分&#xff0c;可穿墙&#xff0c;AI生成适配手机浏览器的游戏&#xff0c;代码如下&#xff1a; <!DOCTYPE html> <html lang"zh-CN"> <head> <meta charset"UTF-8"> <meta name"viewport" …

【动手学深度学习】#4 深度学习计算

主要参考学习资料&#xff1a; 《动手学深度学习》阿斯顿张 等 著 【动手学深度学习 PyTorch版】哔哩哔哩跟李牧学AI 概述 为了实现更复杂的网络&#xff0c;我们需要研究比层更高一级的单元块&#xff0c;在编程中由类表示。通过自定义层和块&#xff0c;我们能更灵活地搭建网…

如何在 Windows 上安装并使用 Postman?

Postman 是一个功能强大的API测试工具&#xff0c;它可以帮助程序员更轻松地测试和调试 API。在本文中&#xff0c;我们将讨论如何在 Windows 上安装和使用 Postman。 Windows 如何安装和使用 Postman 教程&#xff1f;

php写入\查询influxdb数据

namespace app\index\controller;use InfluxDB2\Client; use InfluxDB2\Model\WritePrecision; use InfluxDB2\Point;class Demo {/*** 显示资源列表** return \think\Response*/public function index(){$token 你的TOKEN;$org zzlichi;$bucket initdb;$client new Client…

26考研——图_图的基本概念(6)

408答疑 文章目录 一、图的基本概念图的定义非空性非线性结构 顶点和边的表示顶点边 有向图 & 无向图有向图有向图 G 1 G_1 G1​ 的表示 无向图无向图 G 2 G_2 G2​ 的表示 简单图 & 多重图简单图多重图 顶点的度、入度和出度顶点的度有向图的度 路径、路径长度和回路…

面向对象软件工程实践软件案例

智力运动-数字化思维训练课程介绍 数字化思维训练是科技赋能素质教育创新实践项目&#xff0c;通过数字化信息化手段&#xff0c;深度融合优质原创智力运动教育课程资源&#xff0c;服务幼儿园与小学&#xff0c;提供信息时代校园素质教育教学解决方案。在《面向对象软件工程》…

Linux学习笔记(应用篇一)

基于I.MX6ULL.MINI开发板 标准I/O库链接目录删除文件正则表达式系统标识时间堆内存信号标准信号 进程进程组进程间通信线程互斥锁线程安全 本文章是入门篇的概念&#xff0c;有点零散&#xff0c;后续需要补充复习 **inode&#xff08;索引节点&#xff09;**是 Linux 和 Unix …

Modbus RTU ---> Modbus TCP透传技术实现(Modbus透传、RS485透传、RTU透传)分站代码实现、协议转换器

文章目录 Modbus RTU到Modbus TCP透传技术实现1. 透传技术概述1.1 透传基本原理- 协议帧格式转换- 地址映射与管理- 通信时序适配- 错误检测与处理 2. 透传网关硬件架构2.1 典型硬件结构- 微控制器/处理器(ARM、STM32等)- RS-485/RS-232收发器- 以太网控制器(如W5500)- 电源管理…

MySQL数据库中常用的命令

登录&#xff1a; mysql -u username -h ip地址 -P 端口 -p 密码 mysql -u username -S /path/mysql.sock -P -p 用户管理&#xff1a; select user,host from mysql.user;//查看数据库中所用用户信息 create user username%;//创建用户 create user username% identifie…

医学交互作用分析步骤和目的(R语言)

医学交互作用分析的目的和用途&#xff08;R语言&#xff09; 医学交互作用分析一直是医学数据分析的组成部分&#xff0c;总结最近的一些认识。 目的&#xff1a; 在独立危险因素鉴定的研究中&#xff0c;&#xff08;独立危险因素的&#xff09;交互作用可以作为独立危险因…

Javaweb后端登录会话技术jwt令牌

jwt生成与校验 是base4补位的 最后面是签名&#xff0c;签名不是base64&#xff0c;是通过签名算法加密后来的 令牌长度不是固定的&#xff0c;长度取决于原始内容&#xff0c;载荷&#xff0c;大小 头有&#xff0c;类型&#xff0c;签名算法 base64可以对任意的二进制数据进…

Mybatis操作数据库(注解+xml两个方式)

文章目录 1.个人回顾2.关于mybatis注解的说明3.字段和属性不匹配的解决方案3.1第一个方案3.2第二个方案3.3第三个方案 4.xml路径配置5.xml里面的字段映射 1.个人回顾 刚刚翻看了一下自己的这个之前写的博客&#xff0c;上一次和这个javaee相关的博客还是去年写的&#xff0c;也…

SysVinit和Systemd的系统运行级别

Linux运行级别 SysVinit系统(init守护进程)Linux系统运行级别SysVinit系统(init守护进程)查看Linux运行级别SysVinit系统(init守护进程)修改运行级别&#xff1a; Systemd守护进程Linux系统运行级别systemd查看运行级别Systemd查看系统当前运行级别 systemd修改运行级别multi-u…

Mysql-经典实战案例(11):深度解析Sysbench压测(从入门到MySQL服务器性能验证)

引言 如何用Sysbench压测满足mysql生产运行的服务器&#xff1f; Sysbench返回的压测结果如何解读&#xff1f; 别急&#xff0c;本文会教大家如何使用并且如何解读压测的结果信息&#xff0c;如何对mysql服务器进行压测&#xff01; 一、Sysbench核心功能全景解析 1.1 工…

vscode终端不识别npm 无法解析npm

vscode 用以管理员打开识别npm vscode 用普通用户打开不识别npm 刚换了一台新电脑&#xff0c;寻思安装各种环境&#xff0c;一顿操作猛如虎&#xff0c;当最后一个打开vscode后&#xff0c;运行项目发现&#xff0c;新建终端>npm run dev 无法识别。 在cmd 中 打node -…

springboot body 转对象强验证属性多余属性抛错误

在Spring Boot中&#xff0c;当使用RequestBody注解来接收HTTP请求中的JSON数据并将其转换为Java对象时&#xff0c;Spring默认会忽略额外的属性。这意味着如果发送的JSON包含一些目标对象中没有定义的属性&#xff0c;Spring不会报错&#xff0c;这些额外的属性会被简单地忽略…