系列综述:
💞目的:本系列是个人整理为了学习DeepSeek相关知识
的,整理期间苛求每个知识点,平衡理解简易度与深入程度。
🥰来源:材料主要源于DeepSeek官方技术报告
进行的,每个知识点的修正和深入主要参考各平台大佬的文章,其中也可能含有少量的个人实验自证。
🤭结语:如果有帮到你的地方,就点个赞和关注一下呗,谢谢🎈🎄🌷!!!
🌈未完待续,请先收藏!!!
文章目录
- 概述
- 引言
- 概述
- 核心优化
- 架构
- 基本架构
- MLA架构
- DeepSeekMoE
- 基础架构
- 计算动态特征加权系数
- 计算动态特征评分
- 二级标签
- 参考博客
😊点此到文末惊喜↩︎
- MTP,MLA与MOE的技术实现细节; 2. MOE模型的训练算力与显存需求的定量计算方法;3. FP8混合精度训练每个阶段的的显存与算力消耗计算;4. 存储IO操作,通信与GPU计算发生的阶段与交互细节
概述
- Deepseek战绩
- DeepSeek-V3 以 “模块化智能调度” 实现与 GPT-4 比肩的复杂推理能力,价格只有其数十分之一
- DeepSeek-R1 发布,进入世界大模型推理能力第一梯队,并且将训练资源消耗压缩至传统方法的 1/5,千亿参数大模型的训练成本从数亿美元骤降至千万级
- 同时登顶苹果 App Store 和谷歌 Play Store 全球下载榜首
- 干翻美股AI科技巨头,如英伟达、微软等收跌10%以上
- 开源了 DeepSeek-R1-Zero、DeepSeek-R1,以及基于 Qwen 和 Llama 架构从 DeepSeek-R1 知识蒸馏获得的六个稠密模型(1.5B、7B、8B、14B、32B、70B)。
- 2025.2.6:DeepSeek-V3-Base 已成为当前性能最强的开源基础模型,尤其在代码和数学领域表现卓越,甚至与领先的闭源模型相匹敌
- 与其他友商性能对比
- 项目开源地址
- 技术报告地址
引言
概述
- 开源阵营正在努力所有与闭源模型的性能差距
- DeepSeek 系列:性能比肩GPT4等高性能模型,训练和调用成本很低,但相对较新,生态成熟度稍欠(问题不大)
- LLaMA 系列:由Meta背书,开源影响力大。架构灵活可拓展,并且参数规模可选,原始性能较差需要微调
- Qwen 系列:由阿里云开源的,中文处理能力强,但依赖于阿里云平台部署
- Mistral 系列:在推理速度方面表现卓越,能够快速响应生成文本内容,但深度推理能力较差
- 设计目标
- 提升性能
- 降低成本
核心优化
- 高效的架构设计
- Multi-head Latent Attention (MLA):MLA 通过对注意力键和值进行低秩联合压缩,减少了推理时的 KV 缓存,同时保持了与标准多头注意力(MHA)相当的性能。
- DeepSeekMoE:DeepSeekMoE 采用了更细粒度的专家分配策略,每个 MoE 层包含 1 个共享专家和 256 个路由专家,每个令牌激活 8 个专家,确保了计算的高效性。
- 性能提升策略
- 无辅助损失的负载均衡:避免了传统方法中因
强制负载均衡
而导致的模型性能下降。通过动态调整专家偏置,确保专家负载均衡,而无需依赖传统的辅助损失函数。 - 序列级负载均衡:防止单个序列内的极端不平衡,确保每个序列内的专家负载均衡。
- 多 token 预测训练目标:使用多个顺序模块来预测未来的多个令牌,每个模块包含共享的嵌入层、输出头和 Transformer 块,确保了预测的因果链完整性。并显著提升了推理生成速度,大约1.8倍
- 无辅助损失的负载均衡:避免了传统方法中因
- 显著提升训练效率
- FP8 混合精度框架:大多数计算密集型操作(如 GEMM)在 FP8 精度下执行,而少数关键操作(如嵌入模块和注意力操作)仍保持高精度(BF16 或 FP32),确保了训练的数值稳定性。
- 精细量化策略:通过分块量化(Tile-wise Quantization)和块级量化(Block-wise Quantization),DeepSeek-V3 有效减少了量化误差,尤其是在处理激活梯度时,避免了模型发散。
- DualPipe 算法:通过该算法实现高效的流水线并行处理,减少了流水线停滞情况,同时采用计算和通信并行处理的方式,大幅降低了训练过程中的通信开销,确保即便模型规模进一步扩大,只要维持适当的计算通信比例,就能在不同节点间实现细粒度专家分配,还能将全节点间的通信开销控制在接近于零的水平。
- 优化通信内核:对跨节点的全节点通信内核进行优化,充分利用 InfiniBand(IB)和 NVLink 的带宽性能,并且经过精细的内存优化,使得训练无需依赖成本高昂的张量并行技术,进一步提升训练效率并控制成本。
- 推理优化
- YaRN 扩展技术:DeepSeek-V3 采用了 YaRN 技术进行上下文扩展,逐步将上下文窗口从 4K 扩展到 32K,再扩展到 128K,确保了模型在长上下文任务中的稳定性。
- 冗余专家部署:在推理时,DeepSeek-V3 通过冗余专家部署策略,确保每个 GPU 处理近似数量的令牌,避免了负载不均衡。
- 动态路由策略:DeepSeek-V3 探索了动态冗余策略,在每个推理步骤中动态选择激活的专家,进一步优化了推理效率。
- 思维链 (CoT) 模型:将 R1 的验证和反思机制整合到 DeepSeek-V3 中,显著提升了其推理能力,同时有效控制了输出的风格和长度。
架构
基本架构
- 基本架构
- Transformer Bloc:DeepSeek中有多个 Transformer Block堆叠,每个Bloc主要有两个部分组成
- 自注意力机制(Self - Attention):允许模型在处理序列数据时,计算序列中
每个元素
与其他所有元素
之间的关联程度
(权重),从而捕捉到序列中的长距离依赖关系
。具体计算时,会将输入向量线性变换为 Query(查询)、Key(键)和 Value(值)三个向量,通过 Query 与 Key 的点积运算及 softmax 函数计算注意力权重,再用权重对 Value 进行加权求和得到输出。 - 前馈神经网络(Feed - Forward Network,FFN):将自注意力机制处理完的输入数据进行
非线性变换
,从而提升模型理解和处理复杂信息的能力
- 层归一化(Layer Normalization,LN):每个子层前后一般都有层归一化操作,部分模型中会使用 RMSNorm(均方根层归一化)替代 LN
- 自注意力机制(Self - Attention):允许模型在处理序列数据时,计算序列中
- MoE(Mixture - of - Experts,专家混合模型):
- Router(路由模块):对输入的
前网络层处理后的特征
( 以 H i d d e n u t Hidden\ u_t Hidden ut表示),按照特定策略分配
到不同的专家(Expert)
中,即从两类专家中挑选出最合适的部分专家(V3 是 256 选 8路由+1共享)来处理输入 - Expert(两类专家):在
不显著增加计算量
的基础上,扩展模型参数规模,提升模型的表达能力以及训练效率- Routed Expert(路由专家):根据输入数据的特征为
每个词
计算与各个路由专家
的亲和力
,然后选取得分最高的前k个专家(top-k)来处理该词,从而对复杂任务进行分治处理,保证稀疏激活的低成本(DeepSeek-V3 中每个 Token 选择 8 个路由专家的策略) - Shared Expert(共享专家):接收
输入的全部token
进行通用特征
的提取
,都会被确定性地分配给这些共享专家,从而保证了模型基础能力的下限。(在 DeepSeek 的中每个MoE层只有 1 个共享专家) - 示例:处理句子 “我很高兴收到了一份礼物” 时,“高兴” 可能会被路由到擅长处理情感词汇的专家,“收到” 可能会被路由到擅长处理语法结构的专家,而整个句子会被共享专家处理。
- Routed Expert(路由专家):根据输入数据的特征为
- Router(路由模块):对输入的
- Multi - Head Latent Attention(MLA,多头潜在注意力)
- Multi - Head Attention(多头注意力):从
多个维度
并行捕获
数据不同方面的特征
,然后综合
捕获的所有维度特征
,从而提高模型对数据的理解和处理能力 - Latent(潜在变量):
- concatenate(拼接操作):将
不同维度
下经潜在变量调整后的向量信息整合
成一个新向量
,进一步丰富特征表达。(如将外貌特征【高大,眼大】和性格特征【高大,眼大】拼接成一个新向量【高大,眼大,高大,眼大】) - apply RoPE(旋转位置嵌入):借助潜在变量,为数据元素增加一个按规律变化的
位置特征
(序列位置、空间位置等),从而增强模型在多维度下对位置特征的捕捉能力( 床前明月光,疑是地上霜。就会出现先有"月光"后有"霜"的位置逻辑联想) - Cached During Inference(中间缓存):在推理过程中,部分由潜在变量参与处理并产生的
中间信息会被缓存
,避免重复计算,从而在多维度特征处理的基础上提高推理效率(类似动态规划中要查的缓存表)
- concatenate(拼接操作):将
- Multi - Head Attention(多头注意力):从
- Transformer Bloc:DeepSeek中有多个 Transformer Block堆叠,每个Bloc主要有两个部分组成
MLA架构
- 概述
- 问题:在传统注意力机制中(如MHA等),键值(KV)相关计算有较大的计算复杂度和内存占用
- MLA: 是一种基于
低秩键值联合压缩技术的注意力机制
,通过压缩键值矩阵
来减少显存占用,同时保持与传统多头注意力(Multi-Head Attention, MHA)相当的模型性能 - 核心优化
低秩键值联合压缩
:在注意力机制中,KV相关计算有较大的时空开销,所以通过压缩潜在变量
来表示高维数据,降低推理过程中的键值(KV)缓存开销,提升模型推理效率
低秩键值联合压缩
的核心算法- c t K V ∈ R d c \mathbf{c}_t^{KV} \in \mathbb{R}^{d_c} ctKV∈Rdc 表示键和值的压缩潜在向量
- d c ( ≪ d h n h ) d_c (\ll d_h n_h) dc(≪dhnh)表示 KV 压缩维度
- W D K V ∈ R d c × d W^{DKV} \in \mathbb{R}^{d_c \times d} WDKV∈Rdc×d为维度下投影变换矩阵
- W U K , W U V ∈ R d h n h × d c W^{UK}, W^{UV} \in \mathbb{R}^{d_h n_h \times d_c} WUK,WUV∈Rdhnh×dc分别为键和值的维度上投影变换矩阵
- W K R ∈ R d h R × d W^{KR} \in \mathbb{R}^{d_h^R \times d} WKR∈RdhR×d用于生成携带旋转位置编码 (Rotary Positional Embedding, RoPE) 的解耦键
- RoPE ( ⋅ ) \text{RoPE}(\cdot) RoPE(⋅)表示旋转位置编码矩阵的应用操作
- [ ⋅ ; ⋅ ] [\cdot; \cdot] [⋅;⋅] 表示向量连接操作
低秩键值联合压缩
的原理-
压缩:将
输入向量
h t \mathbf{h}_t ht 通过下投影矩阵
W D K V \mathbf{W}^{DKV} WDKV 被压缩
为更紧凑的潜在向量
c t K V \mathbf{c}^{KV}_t ctKV c t K V = W D K V h t (1) \mathbf{c}^{KV}_t = \mathbf{W}^{DKV} \mathbf{h}_t \quad \tag{1} ctKV=WDKVht(1),其中 W D K V \mathbf{W}_{DKV} WDKV 是 d c × d d_c \times d dc×d 的矩阵, d c d_c dc 为压缩维度(远小于原始维度),时间步t表示的是序列数据中的一个特定位置或时刻 -
生成内容键集合:将
潜在向量
c t K V \mathbf{c}^{KV}_t ctKV 通过上投影矩阵
W U K \mathbf{W}^{UK} WUK线性变换
为键集合
k t C \mathbf{k}_t^C ktC [ k t , 1 C ; k t , 2 C ; . . . ; k t , n h C ] = k t C = W U K c t K V (2) [\mathbf{k}_{t,1}^C; \mathbf{k}_{t,2}^C; ...; \mathbf{k}_{t,n_h}^C] = \boxed{\mathbf{k}_t^C}= W^{UK} \mathbf{c}_t^{KV} \tag{2} [kt,1C;kt,2C;...;kt,nhC]=ktC=WUKctKV(2) ,其中 W U K \mathbf{W}^{UK} WUK 是 d × d c d \times d_c d×dc 的矩阵,负责将低维潜在向量 c t K V \mathbf{c}_t^{KV} ctKV(维度 d c d_c dc)还原到模型原始维度 d d d。并且通过上投影矩阵的线性变换后,输出结果被拆分为 n h n_h nh 个注意力头对应的子键向量 k t , i C \mathbf{k}_{t,i}^C kt,iC,每个子键向量的维度为 h d = d / n h h_d = d / n_h hd=d/nh,从而使得每个注意力头能够关注输入序列的不同语义特征。 -
生成位置键向量:将
潜在向量
c t K V \mathbf{c}^{KV}_t ctKV和权重矩阵
W K R \mathbf{W}^{KR} WKR的结果通过旋转位置嵌入操作
函数 RoPE \text{RoPE} RoPE转换成包含位置信息的键向量
k t R \mathbf{k}_t^R ktR k t R = RoPE ( W K R h t ) (3) \mathbf{k}_{t}^{R}=\operatorname{RoPE}\left(W^{K R} \mathbf{h}_{t}\right)\tag{3} ktR=RoPE(WKRht)(3)相比传统的绝对位置嵌入那样直接加到向量上,旋转位置嵌入操作可以保持位置信息的相对性,有助于模型更好地处理长序列数据 -
拼接键向量:将前面计算得到的
内容相关键向量
k t , i C k_{t,i}^{C} kt,iC 和位置相关键向量
k t R k_{t}^{R} ktR 进行拼接
,得到键向量
k t , i k_{t,i} kt,i k t , i = [ k t , i C ; k t R ] , (4) \mathbf{k}_{t,i} = [\mathbf{k}_{t,i}^C; \mathbf{k}_t^R], \tag{4} kt,i=[kt,iC;ktR],(4) -
生成值向量集合:在计算注意力时,通过
键和值维度的上投影矩阵
W U V \mathbf{W}^{UV} WUV,将潜在向量
c t K V \mathbf{c}^{KV}_t ctKV还原
为各头的键和值
v t C \mathbf{v}_t^C vtC,再参与计算注意力分数和输出 [ v t , 1 C ; v t , 2 C ; … ; v t , n h C ] = v t C = W U V c t K V , (5) [\mathbf{v}_{t,1}^C; \mathbf{v}_{t,2}^C; \ldots; \mathbf{v}_{t,n_h}^C] = \mathbf{v}_t^C = W^{UV} \mathbf{c}_t^{KV}, \tag{5} [vt,1C;vt,2C;…;vt,nhC]=vtC=WUVctKV,(5) -
在推理过程中,单个token同时缓存每个
时间步t
的 d c + d h R d_{c}+d_{h}^{R} dc+dhR(潜在向量维度+解耦键维度)压缩后的潜在向量
c t K V \mathbf{c}^{KV}_t ctKV:用于动态重构键值细节,通过低维潜在向量保留重要信息,减少计算复杂度解耦后的键向量
k t R \mathbf{k}^{R}_t ktR :独立保存位置特征,通过RoPE操作将位置编码的计算与键值压缩解耦
-
键和值在注意力机制中表示不同的信息
- 键主要用于计算注意力分数,表示输入向量的相关性
- 值则用于加权求和,表示输入向量的实际内容。
-
- 采用
KV低秩联合压缩
的优点降低内存占用(核心)
:相比MHA明显减少了显存需求,KV缓存压缩率达93.3%- 提升推理效率:减少计算复杂度和内存访问次数,推理速度提升(如吞吐量提升576%)
- 支持长序列处理:增强了模型对长文本的理解能力,尤其在资源受限的环境中表现突出
- 性能保持:压缩后的MLA仍保持与标准MHA相当的性能,如在数学推理和代码生成任务中效果稳定
内存优化的计算:假设原始键值维度为 d h n h d_h n_h dhnh(每个头维度 d h d_h dh,头数 n h n_h nh),相比传统MHA需要缓存 2 ⋅ d h n h ⋅ T 2 \cdot d_h n_h \cdot T 2⋅dhnh⋅T 个元素(键值各一份),而MLA仅需缓存 d c ⋅ T d_c \cdot T dc⋅T 个元素。例如当 d c = 8 d_c = 8 dc=8 且 d h n h = 128 d_h n_h = 128 dhnh=128 时,内存占用量可减少至原来的 1 16 \frac{1}{16} 161(约93.3% )。
- 查询优化
- 对于注意力查询(Query)部分,模型同样采用
低秩压缩技术
降低训练过程中的激活值内存占用 - c t Q ∈ R d c ′ \mathbf{c}_t^Q \in \mathbb{R}^{d_c'} ctQ∈Rdc′ 表示查询的压缩潜在向量
- d c ′ ( ≪ d h n h ) d_c' (\ll d_h n_h) dc′(≪dhnh) 表示查询压缩维度
- W D Q ∈ R d c ′ × d W^{DQ} \in \mathbb{R}^{d_c' \times d} WDQ∈Rdc′×d 和 W U Q ∈ R d h n h × d c ′ W^{UQ} \in \mathbb{R}^{d_h n_h \times d_c'} WUQ∈Rdhnh×dc′ 分别为查询的维度降维和升维变换矩阵
- W Q R ∈ R d h n h × d c ′ W^{QR} \in \mathbb{R}^{d_h n_h \times d_c'} WQR∈Rdhnh×dc′ 用于生成携带旋转位置编码的解耦查询矩阵
c t Q = W D Q h t , [ q t , 1 C ; q t , 2 C ; … ; q t , n h C ] = q t C = W U Q c t Q , [ q t , 1 R ; q t , 2 R ; … ; q t , n h R ] = q t R = RoPE ( W Q R c t Q ) , q t , i = [ q t , i C ; q t , i R ] , \begin{aligned} \mathbf{c}_t^Q &= W^{DQ} \mathbf{h}_t, \\ [\mathbf{q}_{t,1}^C; \mathbf{q}_{t,2}^C; \ldots; \mathbf{q}_{t,n_h}^C] &= \mathbf{q}_t^C = W^{UQ} \mathbf{c}_t^Q, \\ [\mathbf{q}_{t,1}^R; \mathbf{q}_{t,2}^R; \ldots; \mathbf{q}_{t,n_h}^R] &= \mathbf{q}_t^R = \text{RoPE}(W^{QR} \mathbf{c}_t^Q), \\ \mathbf{q}_{t,i} &= [\mathbf{q}_{t,i}^C; \mathbf{q}_{t,i}^R], \end{aligned} ctQ[qt,1C;qt,2C;…;qt,nhC][qt,1R;qt,2R;…;qt,nhR]qt,i=WDQht,=qtC=WUQctQ,=qtR=RoPE(WQRctQ),=[qt,iC;qt,iR],最终,通过组合注意力查询( q t , i \mathbf{q}_{t,i} qt,i)、键( k j , i \mathbf{k}_{j,i} kj,i)和值( v j , i C \mathbf{v}_{j,i}^C vj,iC),得到注意力机制的最终输出 u t \mathbf{u}_t ut:
o t , i = ∑ j = 1 t Softmax j ( q t , i T k j , i d h + d h R ) v j , i C , u t = W O [ o t , 1 ; o t , 2 ; … ; o t , n h ] , \begin{aligned} \mathbf{o}_{t,i} &= \sum_{j=1}^t \text{Softmax}_j \left( \frac{\mathbf{q}_{t,i}^T \mathbf{k}_{j,i}}{\sqrt{d_h + d_h^R}} \right) \mathbf{v}_{j,i}^C, \\ \mathbf{u}_t &= W^O [\mathbf{o}_{t,1}; \mathbf{o}_{t,2}; \ldots; \mathbf{o}_{t,n_h}], \end{aligned} ot,iut=j=1∑tSoftmaxj dh+dhRqt,iTkj,i vj,iC,=WO[ot,1;ot,2;…;ot,nh],其中 W O ∈ R d × d h n h W^O \in \mathbb{R}^{d \times d_h n_h} WO∈Rd×dhnh 为输出维度变换矩阵。
- 对于注意力查询(Query)部分,模型同样采用
DeepSeekMoE
基础架构
- 在前馈网络(Feed-Forward Networks, FFN)部分,DeepSeek-V3 采用了
DeepSeekMoE
架构,相比传统MoE,DeepSeekMoE有以下改进:- 专家划分的细粒度化:将
专家
按照更多维度
进行细粒度划分
,从而增加
专家数量
和专业性
,避免传统传统MoE的专家数量少且划分较粗,导致的知识冗余 - 混合专家设计:
共享专家对所有token开放
,负责通用任务。路由专家由动态门控网络选择激活
,提升专业化能力,从而减少参数冗余,使训练成本降低42.5%。 - 无辅助损失的负载均衡:对于 MoE 模型,
不平衡的专家负载
将导致路由崩溃
,并降低专家并行计算效率
。传统解决方案通常依赖辅助损失来避免不平衡负载,但过大的辅助损失可能会损害模型性能
,而DeepSeek-V3通过细粒度路由机制
(Top-K路由策略
,根据输入特征动态选择亲和度最高的部分专家)在671B的总参数中单token仅稀疏激活37B(占比约5.5%)远低于传统MoE的全参数激活模式,推理速度提升2.1倍
- 专家划分的细粒度化:将
- 专家分配算法原理
- 计算更新向量:将
输入向量
u t \mathbf{u}_t ut分别通过静态前馈神经网络组
( FFN i ( s ) \text{FFN}_i^{(s)} FFNi(s))和动态加权前馈神经网络组
( FFN i ( r ) \text{FFN}_i^{(r)} FFNi(r))进行静态特征增强
与动态特征融合
生成更新向量 h t ′ \mathbf{h}_t' ht′- 静态特征提取和增强:使用 N s N_s Ns 个( FFN i ( s ) \text{FFN}_i^{(s)} FFNi(s))对输入数据进行
线性变换
提取特征,并通过非线性激活函数
(如ReLU)进一步增强特征,从而增强模型的表达和泛化能力 - 动态加权融合:通过 N r N_r Nr 个( FFN i ( r ) \text{FFN}_i^{(r)} FFNi(r))处理输入向量,并结合
动态特征加权系数
g i , t g_{i,t} gi,t 对输出进行筛选与加权,从而根据上下文或时间变化动态调整特征权重,实现更精准的特征融合
h t ′ = u t + ∑ i = 1 N s FFN i ( s ) ( u t ) + ∑ i = 1 N r g i , t FFN i ( r ) ( u t ) (1) \mathbf{h}_t' = \mathbf{u}_t + \sum_{i = 1}^{N_s} \text{FFN}_i^{(s)}(\mathbf{u}_t) + \sum_{i = 1}^{N_r} g_{i,t} \text{FFN}_i^{(r)}(\mathbf{u}_t) \quad \tag{1} ht′=ut+i=1∑NsFFNi(s)(ut)+i=1∑Nrgi,tFFNi(r)(ut)(1)其中, FFN i ( s ) \text{FFN}_i^{(s)} FFNi(s) 表示第 i i i 个标准的前馈神经网络, N s N_s Ns 是标准前馈神经网络的数量; FFN i ( r ) \text{FFN}_i^{(r)} FFNi(r) 表示第 i i i 个用于处理动态特征的前馈神经网络, N r N_r Nr 是处理动态特征的前馈神经网络的数量; g i , t g_{i,t} gi,t 是动态特征的加权系数,用于控制动态特征对更新向量的贡献程度。
- 静态特征提取和增强:使用 N s N_s Ns 个( FFN i ( s ) \text{FFN}_i^{(s)} FFNi(s))对输入数据进行
- 计算加权系数:将
动态特征加权系数
g i , t ′ g_{i,t}' gi,t′ 通过归一化操作
转换为归一化加权系数
g i , t g_{i,t} gi,t g i , t = g i , t ′ ∑ j = 1 N r g j , t ′ (2) g_{i,t} = \frac{g_{i,t}'}{\sum_{j = 1}^{N_r} g_{j,t}'} \quad \tag{2} gi,t=∑j=1Nrgj,t′gi,t′(2)其中,归一化操作使得所有动态特征的加权系数之和为 1,即 ∑ i = 1 N r g i , t = 1 \sum_{i = 1}^{N_r} g_{i,t}=1 ∑i=1Nrgi,t=1,从而避免因加权系数过大或过小导致某些动态特征的影响被过度放大或忽略 - 计算动态特征加权系数:将
动态特征评分
s i , t s_{i,t} si,t 通过Top-k选择
和二值化操作
转换为动态特征加权系数
g i , t ′ g_{i,t}' gi,t′。公式如下:
g i , t ′ = { s i , t , s i , t ∈ Topk ( { s j , t ∣ 1 ⩽ j ⩽ N r } , K r ) 0 , otherwise (3) g_{i,t}' = \begin{cases} s_{i,t}, & s_{i,t} \in \text{Topk}(\{s_{j,t} | 1 \leqslant j \leqslant N_r\}, K_r) \\ 0, & \text{otherwise} \end{cases} \quad \tag{3} gi,t′={si,t,0,si,t∈Topk({sj,t∣1⩽j⩽Nr},Kr)otherwise(3)
其中, Topk ( { s j , t ∣ 1 ⩽ j ⩽ N r } , K r ) \text{Topk}(\{s_{j,t} | 1 \leqslant j \leqslant N_r\}, K_r) Topk({sj,t∣1⩽j⩽Nr},Kr) 表示从所有 N r N_r Nr 个动态特征评分中选取评分最高的 K r K_r Kr 个评分组成的集合,并将其评分作为加权系数,其余动态特征的加权系数为 0,从而实现了对动态特征的筛选和加权,使得模型更加关注那些与输入向量相关性较强的动态特征。 - 计算动态特征评分:将
输入向量
u t \mathbf{u}_t ut 和动态特征向量
e i \mathbf{e}_i ei 通过Sigmoid 函数
计算动态特征评分
s i , t s_{i,t} si,t。公式如下: s i , t = Sigmoid ( u t T e i ) (4) s_{i,t} = \text{Sigmoid}(\mathbf{u}_t^T \mathbf{e}_i) \quad \tag{4} si,t=Sigmoid(utTei)(4)其中,Sigmoid 函数的表达式为 Sigmoid ( x ) = 1 1 + e − x \text{Sigmoid}(x)=\frac{1}{1 + e^{-x}} Sigmoid(x)=1+e−x1,它将输入向量和动态特征向量的内积 u t T e i \mathbf{u}_t^T \mathbf{e}_i utTei 转换为 0 到 1 之间的评分。评分越高,表示该动态特征与输入向量的相关性越强,即该动态特征在后续的特征融合过程中可能起到更重要的作用。
- 计算更新向量:将
- 无辅助损失的负载均衡
- 引入偏置项:为
每个专家
引入可学习的偏置项
b i b_i bi,将其添加到 token 与专家的原始亲和度分数 s i , t s_{i,t} si,t 中,形成调整后的路由分数 s i , t ′ = s i , t + b i s'_{i,t} = s_{i,t} + b_i si,t′=si,t+bi,具体如下:- 路由选择:基于调整后的
路由分数
s i , t ′ s_{i, t}' si,t′选择top-K专家
,决定 token 的分配路径。 - 计算门控:基于调整前的
路由分数
s i , t s_{i, t} si,t计门控值(用于加权专家输出),避免偏置项影响模型输出质量。
- 路由选择:基于调整后的
- 动态偏置调整:在每个训练步骤中,系统监控所有批次内专家的负载分布(即分配给各专家的 token 数量),进行动态负载调整
- 专家过载:若某专家负载过高,其偏置项减少 γ \gamma γ(即 b i ← b i − γ b_i \leftarrow b_i - \gamma bi←bi−γ)以降低被选中的概率
- 专家低载:若某专家负载不足,其偏置项增加 γ \gamma γ(即 b i ← b i + γ b_i \leftarrow b_i + \gamma bi←bi+γ)以提高被选中的概率
- 超参数控制: γ \gamma γ是控制调整速度的超参数,需根据实验调优。
- 序列级辅助损失补充机制:引入对序列级平衡损失的补充,防止单个序列中出现显著的负载不均衡现象
- 归一化处理:将第 i i i 个特征在
时间步
t t t 的值 s i , t s_{i,t} si,t 归一化为 s i , t ′ s'_{i,t} si,t′, 使其在时间 t t t 上形成一个概率分布 s i , t ′ = s i , t ∑ j = 1 N r s j , t (1) s'_{i,t} = \frac{s_{i,t}}{\sum_{j=1}^{N_r} s_{j,t}}\tag{1} si,t′=∑j=1Nrsj,tsi,t(1) - 概率因子计算:计算第 i i i 个样本的在所有时间步t上的
平均归一化得分概率
P i P_i Pi( s i , t ′ s'_{i,t} si,t′ 在所有时间步上的平均值),表示该类别在整个序列中的平均重要性 P i = 1 T ∑ t = 1 T s i , t ′ (2) P_i = \frac{1}{T} \sum_{t=1}^{T} s'_{i,t} \tag{2} Pi=T1t=1∑Tsi,t′(2) - 频率因子计算:计算第 i i i个元素的
得分
s i , t s_{i,t} si,t中位于
前 K r K_r Kr个最高得分集合的频率
f i f_i fi,即在所有时间步中第 i i i个元素的得分 s i , t s_{i,t} si,t位于前 K r K_r Kr的次数占总时间步数的比例- N r N_r Nr 是元素或样本的总数。
- K r K_r Kr是在每个时间步中选择的前 K r K_r Kr个元素的数量。
- T T T 是时间步的总数。
- 1 ( s i , t ∈ Topk ( { s j , t ∣ 1 ≤ j ≤ N r } , K r ) ) 1(s_{i,t} \in \text{Topk}(\{s_{j,t} \mid 1 \leq j \leq N_r\}, K_r)) 1(si,t∈Topk({sj,t∣1≤j≤Nr},Kr))是一个指示函数,当 s i , t s_{i,t} si,t在时间步 t t t中进入前 K r K_r Kr时取值为 1,否则取值为 0。
f i = N r K r T ∑ t = 1 T 1 ( s i , t ∈ Topk ( { s j , t ∣ 1 ⩽ j ⩽ N r } , K r ) ) (3) f_i = \frac{N_r}{K_r T} \sum_{t=1}^{T} \mathbf{1}(s_{i,t} \in \text{Topk}(\{s_{j,t} \mid 1 \leqslant j \leqslant N_r\}, K_r)) \tag{3} fi=KrTNrt=1∑T1(si,t∈Topk({sj,t∣1⩽j⩽Nr},Kr))(3)
- 计算平衡损失 L Bal \mathcal{L}_{\text{Bal}} LBal: 对前 N r N_r Nr个特征的
频率因子
f i f_i fi 和概率因子
P i P_i Pi进行求和,再与超参数
α \alpha α相乘得到平衡损失
,从而解决训练过程中不同样本或区域贡献不均衡的问题 L Bal \mathcal{L}_{\text{Bal}} LBal L Bal = α ∑ i = 1 N r f i P i \mathcal{L}_{\text{Bal}} = \alpha \sum_{i=1}^{N_r} f_i P_i LBal=αi=1∑NrfiPi
- 归一化处理:将第 i i i 个特征在
- 节点约束路由机制:
限制 token 的分配节点数量
和优化节点选择依据
,提升整体的训练效率和计算性能。- 限制分配:限制每个 token
最多分配
到 M M M 个计算节点(如 M = 4 M = 4 M=4),从而减少跨节点通信开销
,提高计算和通信的并行度
- 选择依据:选择每个节点上专家的最高 K r M \frac{K_{r}}{M} MKr 相关度分数总和作为
依据
,即token 会被分配到与之最匹配的计算节点上,从而提高计算效率和准确性。 - 作用 :在这种约束下,MoE 训练框架能够实现计算与通信的近乎完全并行处理。
- 限制分配:限制每个 token
- 完整的 Token 保留机制:通过高效的负载均衡策略和特定的推理部署策略,确保了在训练和推理阶段均实现 100% token 保留,提高了模型训练的稳定性
- 训练阶段:基于
无辅助损失负载均衡
,使得所有 token 均可被分配给专家处理,并通过节点限制路由
优化跨节点通信开销,实现了近乎完全的计算-通信并行处理 - 推理阶段:通过
细粒度专家分配
策略和路由优化
,确保每个 token 的激活路径与训练阶段一致,避免推理时因负载突变导致 token 丢弃
- 训练阶段:基于
- 引入偏置项:为
- 多 token 预测机制 (Multi-Token Prediction, MTP)
- 与传统模型的区别:与传统自回归模型的
单Token预测生成
模式(每次只关注当前位置的下一个token)不同,MTP模型在同时能够预测多个后续Token
,训练信号的密度显著增加,提高了单位数据的利用率
,并且能提前规划表征
,从而更准确预测后续 token
。 - 顺序预测:模型按照一定的顺序逐步生成或预测后续的元素
- 因果链保持:模型在预测后续元素时,会考虑之前元素对后续元素的影响,确保预测结果符合因果逻辑
- 与传统模型的区别:与传统自回归模型的
共享参数架构:MTP模块与主模型共享Embedding层和Output Head,仅通过独立的Transformer层实现多步预测,大幅减少参数量与计算开销。
动态适应性
引入动态预测视距机制,根据模型置信度调整每步预测的Token数量,平衡速度与准确性
MLA结构
多token预测
计算动态特征加权系数
计算动态特征评分
二级标签
🚩点此跳转到首行↩︎
参考博客
- 【LLM技术报告】《DeepSeek-R1:通过强化学习提升LLM的推理能力》——DeepSeek-R1技术报告(全文)
- Deepseek v3 技术报告万字硬核解读
- 待定引用
- 待定引用
- 待定引用
- 待定引用
- 待定引用
- 待定引用