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

ops/2025/4/2 2:39:05/

本文将介绍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.ppmy.cn/ops/167725.html

相关文章

UE4学习笔记 FPS游戏制作7 敌人的自动寻路

添加一个敌人角色 新建一个蓝图,命名为RobotShooter,为蓝图选择敌人的骨骼mesh 新建一个动画蓝图,命名为RobotShooter_BP,添加一个idle动作,将动作设为Loop,然后为角色蓝图指定这个动画蓝图 将角色蓝图拖入…

【操作系统安全】任务5:Windows 文件与文件系统

目录 一、引言 二、文件系统信息查看 2.1 磁盘与分区信息 2.1.1 diskpart 工具 2.1.2 wmic 查询 2.2 文件系统类型检查 2.3 文件属性查看 2.3.1 dir 命令 2.3.2 attrib 命令 三、文件系统权限配置 3.1 NTFS 权限管理 3.1.1 icacls 命令 3.1.2 特殊权限设置 3.2 所…

鸿蒙NEXT开发之开屏广告实现

1. 广告请求服务的实现 首先,你需要创建一个广告请求服务来处理广告的加载和展示。你已经在代码中实现了 requestAd 函数,接下来需要处理广告加载、显示、点击等事件。可以考虑以下结构: 1.1 创建广告加载函数 import { advertising, iden…

Oracle静默安装方法

Web服务器上面的Linux一般是不会有图形界面的,所有通过图形界面来安装Linux的方式在没有图形界面的Linux上面是行不通的,我们要使用的安装方式叫做Linux的静默安装。即在没有图形界面的Linux上面安装。 1. 下载地址 http://www.oracle.com/technetwork…

SpringSecurity配置(自定义认证过滤器)

文末有本篇文章的项目源码文件可供下载学习 在这个案例中,我们已经实现了自定义登录URI的操作,登录成功之后,我们再次访问后端中的API的时候要在请求头中携带token,此时的token是jwt字符串,我们需要将该jwt字符串进行解析,查看解析后的User对象是否处于登录状态.登录状态下,将…

C# 语法糖

三元运算符 &#xff1f;&#xff1a; 使用前 int value -2; if (value < 0) {value 0; } else {value 1; } 使用后 int value -2; value value < 0 ? 0 : 1; Null 合并操作符 &#xff1f;&#xff1f; 使用前 string value GetString(); if (value null…

边缘云原生操作系统的设计与思考

资料来源&#xff1a;火山引擎-开发者社区 边缘云行业现状和发展历程 从 06 年 AWS 推出 EC2 、S3 到今天已经过去了 18 年&#xff0c;云计算早已不是一个新鲜词汇&#xff0c;从当前业务来看&#xff0c;我们能看到云计算从中心到中心边缘的发展趋势&#xff0c;为什么会有 这…

C++内存分配方式

文章目录 1、静态内存分配2、栈内存分配3、堆内存分配4、内存池分配5、placement new语法工作原理示例 placement new应用场景 在C 中&#xff0c;内存分配主要有以下几种方式&#xff1a; 1、静态内存分配 特点&#xff1a;在编译时就确定了内存的分配和释放&#xff0c;内存…