DeepSeek-V3和DeepSeek-R1显著有效性和效率的核心技术:对MOE架构的改进——特别是多头潜在注意力(MLA)和专家混合(MoE);多Token预测;算法、框架和硬件的联合设计;组相对策略优化(GRPO)强化学习算法;以及训练后技术:如纯强化学习和多阶段迭代训练,该训练在监督微调(SFT)和强化学习之间交替进行。
文章目录
- 1 多头潜在注意力机制
- 1.1 多头注意力机制(MHA)详解
- 1.2 低秩键值联合压缩
- 1.3 解耦旋转位置嵌入(RoPE)
- 2 专家混合(Mixture of Experts)
- 2.1 细粒度专家分割
- 2.2 DeepSeekMoE架构中的MoE层详解
- 2.3 负载均衡问题
- 2.4 设备级别与通信负载均衡
- 2.5 无辅助损失的负载均衡策略
- 2.5 偏差项调整规则
- 2.6 DeepSeek-V3 中的改进
- 3 多Token预测(MTP)
- 4 算法、框架和硬件的联合设计
- 4.1 双管并行
- 2.4.2 FP8混合精度训练
- 5 组内相对策略优化(GRPO)
- PPO 目标函数
- GRPO 的改进
- 优势估计方法
- GRPO 目标函数
- 6 训练后:对基础模型进行强化学习
- 6.1 纯强化学习
- 6.2 强化学习与冷启动
1 多头潜在注意力机制
KV缓存是一种在变压器的多头注意力(MHA)块中使用的技术,通过存储中间键和值来加速推理,避免了重复计算。实际上,KV缓存成为长上下文大型语言模型(LLMs)的瓶颈,因为它们的高内存消耗。减少KV缓存的一种方法是使用较少的注意力头,如多查询注意力(MQA和组查询注意力(GQA)。尽管如此,它们的性能并不及MHA。后来,一种名为多头潜在注意力(MLA)的创新注意力机制被提出用于DeepSeek-V2,它利用极少的KV缓存实现更好性能。
1.1 多头注意力机制(MHA)详解
在标准的多头注意力(Multi-Head Attention, MHA)中,查询、键和值是通过投影矩阵 W Q , W K , W V ∈ R d h n h × d W^Q, W^K, W^V \in R^{d_h n_h \times d} WQ,WK,WV∈Rdhnh×d 获得的。将第 t t t 个令牌的输入 h t ∈ R d h_t \in R^d ht∈Rd 转换为查询、键和值:
q t = W Q h t , k t = W K h t , v t = W V h t , q t , k t , v t ∈ R d h n h q_t = W^Q h_t, \quad k_t = W^K h_t, \quad v_t = W^V h_t, \quad q_t, k_t, v_t \in R^{d_h n_h} qt=WQht,kt=WKht,vt=WVht,qt,kt,vt∈Rdhnh
其中:
- d d d 是输入嵌入的维度;
- n h n_h nh 是头数;
- d h d_h dh 是每个头的维度。
维度 d h × n h d_h \times n_h dh×nh 表示将 q t , k t , v t q_t, k_t, v_t qt,kt,vt 切分为每个头具有维度 d h d_h dh 的 n h n_h nh 个头。
具体地,切分后的表示如下:
[ q t , 1 ; q t , 2 ; … ; q t , n h ] = q t , [ k t , 1 ; k t , 2 ; … ; k t , n h ] = k t , [ v t , 1 ; v t , 2 ; … ; v t , n h ] = v t , \begin{aligned} [q_{t,1}; q_{t,2}; \ldots; q_{t,n_h}] &= q_t, \\ [k_{t,1}; k_{t,2}; \ldots; k_{t,n_h}] &= k_t, \\ [v_{t,1}; v_{t,2}; \ldots; v_{t,n_h}] &= v_t, \end{aligned} [qt,1;qt,2;…;qt,nh][kt,1;kt,2;…;kt,nh][vt,1;vt,2;…;vt,nh]=qt,=kt,=vt,
其中 q t , i , k t , i , v t , i ∈ R d h q_{t,i}, k_{t,i}, v_{t,i} \in R^{d_h} qt,i,kt,i,vt,i∈Rdh 分别表示第 i i i 个头的查询、键和值。
对于每个头 i i i,计算注意力输出 o t , i o_{t,i} ot,i:
o t , i = ∑ j = 1 t Softmax j ( q t , i T k j , i d h ) v j , i , o_{t,i} = \sum_{j=1}^t \operatorname{Softmax}_j \left( \frac{q_{t,i}^T k_{j,i}}{\sqrt{d_h}} \right) v_{j,i}, ot,i=j=1∑tSoftmaxj(dhqt,iTkj,i)vj,i,
最终的多头输出 u t u_t ut 是通过输出投影矩阵 W O ∈ R d × d h n h W^O \in R^{d \times d_h n_h} WO∈Rd×dhnh 得到的:
u t = W O [ o t , 1 ; o t , 2 ; … ; o t , n h ] , u_t = W^O [o_{t,1}; o_{t,2}; \ldots; o_{t,n_h}], ut=WO[ot,1;ot,2;…;ot,nh],
在推理过程中,每个Token需要大小为 2 n h d h l 2 n_h d_h l 2nhdhl 的 KV 缓存,其中 l l l 是层数。
1.2 低秩键值联合压缩
MLA 的核心思想是将投影矩阵分解为两个低秩矩阵:
W
=
W
U
W
D
K
V
,
W = W^U W^{DKV},
W=WUWDKV,
其中:
- W D K V ∈ R d c × d W^{DKV} \in R^{d_c \times d} WDKV∈Rdc×d 是键和值的下投影矩阵;
- W U ∈ R d h n h × d c W^U \in R^{d_h n_h \times d_c} WU∈Rdhnh×dc 是上投影矩阵;
- d c ≪ d h n h d_c \ll d_h n_h dc≪dhnh。
下投影矩阵
W
D
K
V
W^{DKV}
WDKV 将键和值压缩成一个潜在向量
c
t
K
V
c_t^{KV}
ctKV,如下所示:
c
t
K
V
=
W
D
K
V
h
t
,
c
t
K
V
∈
R
d
c
.
c_t^{KV} = W^{DKV} h_t, \quad c_t^{KV} \in R^{d_c}.
ctKV=WDKVht,ctKV∈Rdc.
由于 d c ≪ d h n h d_c \ll d_h n_h dc≪dhnh,对于每个Token,只需保存大小为 d c l d_c l dcl 的 c t K V c_t^{KV} ctKV,而不是同时保存大小为 2 d h n h l 2 d_h n_h l 2dhnhl 的 k t k_t kt 和 v t v_t vt,从而大大减少了 KV 缓存的需求。
键和值是根据潜在向量
c
t
K
V
c_t^{KV}
ctKV 计算出来的,如下:
k
t
C
=
W
U
K
c
t
K
V
,
k_t^C = W^{UK} c_t^{KV},
ktC=WUKctKV,
v
t
C
=
W
U
V
c
t
K
V
,
(7)
v_t^C = W^{UV} c_t^{KV}, \tag{7}
vtC=WUVctKV,(7)
其中:
- W U K , W U V ∈ R d h n h × d c W^{UK}, W^{UV} \in R^{d_h n_h \times d_c} WUK,WUV∈Rdhnh×dc 分别表示键和值的上投影矩阵。
重要的是,在推理过程中, W U K W^{UK} WUK 会被吸收进 W Q W^Q WQ,而 W U V W^{UV} WUV 会被吸收进 W O W^O WO,因此我们不需要显式计算 k t C k_t^{C } ktC 和 v t C v_t^C vtC。MLA 的架构如图 1 所示。
此外,查询的低秩压缩应用于减少训练期间的激活内存:
c
t
Q
=
W
D
Q
h
t
,
(8)
c_t^Q = W^{DQ} h_t, \tag{8}
ctQ=WDQht,(8)
q
t
C
=
W
U
Q
c
t
Q
,
q_t^C = W^{UQ} c_t^Q,
qtC=WUQctQ,
其中:
- c t Q ∈ R d c ′ c_t^Q \in 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 R^{d_c' \times d} WDQ∈Rdc′×d 和 W U Q ∈ R d h n h × d c ′ W^{UQ} \in R^{d_h n_h \times d_c'} WUQ∈Rdhnh×dc′ 分别表示下投影和上投影矩阵。
1.3 解耦旋转位置嵌入(RoPE)
DeepSeek-V2 利用旋转位置嵌入(RoPE)[SAL+24],其核心公式如下:
q
i
T
k
j
=
h
i
T
(
W
Q
)
T
RoPE
Θ
,
j
−
i
(
W
K
h
j
)
q_i^T k_j = h_i^T \left(W^Q\right)^T \operatorname{RoPE}_{\Theta, j-i} \left(W^K h_j\right)
qiTkj=hiT(WQ)TRoPEΘ,j−i(WKhj)
=
h
i
T
(
W
Q
)
T
RoPE
Θ
,
j
−
i
(
W
U
K
W
D
K
V
h
j
)
= h_i^T \left(W^Q\right)^T \operatorname{RoPE}_{\Theta, j-i} \left(W^{UK} W^{DKV} h_j\right)
=hiT(WQ)TRoPEΘ,j−i(WUKWDKVhj)
其中:
- RoPE Θ , j − i ( ⋅ ) \operatorname{RoPE}_{\Theta, j-i}(\cdot) RoPEΘ,j−i(⋅) 表示应用 RoPE 矩阵的操作;
- Θ \Theta Θ 是预定义参数;
- i i i 和 j j j 分别是第 i i i 个和第 j j j 个位置。
由于 RoPE \operatorname{RoPE} RoPE 的引入, W U K W^{UK} WUK 不会合并到 W Q W^Q WQ 中,这导致推理过程中的计算成本显著增加。
为了解决这个问题,DeepSeek-V2 提出将 RoPE 解耦为单独的一组查询和键:多头查询
q
t
,
i
R
∈
R
d
h
R
q_{t,i}^R \in R^{d_h^R}
qt,iR∈RdhR 和所有头共享的键
k
t
R
∈
R
d
h
R
k_t^R \in R^{d_h^R}
ktR∈RdhR,其中
d
h
R
d_h^R
dhR 表示解耦后的查询和键的每头维度。这种解耦策略本质上计算了两组独立的注意力权重,然后将它们相加。完整的 MLA 计算如下:
[
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,1}^R; q_{t,2}^R; \ldots; q_{t,n_h}^R] = q_t^R = \operatorname{RoPE}(W^{QR} c_t^Q),
[qt,1R;qt,2R;…;qt,nhR]=qtR=RoPE(WQRctQ),
k
t
R
=
RoPE
(
W
K
R
h
t
)
,
k_t^R = \operatorname{RoPE}(W^{KR} h_t),
ktR=RoPE(WKRht),
q
t
,
i
=
[
q
t
,
i
C
;
q
t
,
i
R
]
,
q_{t,i} = [q_{t,i}^C; q_{t,i}^R],
qt,i=[qt,iC;qt,iR],
k
t
,
i
=
[
k
t
,
i
C
;
k
t
R
]
,
k_{t,i} = [k_{t,i}^C; k_t^R],
kt,i=[kt,iC;ktR],
o
t
,
i
=
∑
j
=
1
t
Softmax
j
(
q
t
,
i
T
k
j
,
i
d
h
+
d
h
R
)
v
j
,
i
C
,
o_{t,i} = \sum_{j=1}^t \operatorname{Softmax}_j \left(\frac{q_{t,i}^T k_{j,i}}{\sqrt{d_h + d_h^R}}\right) v_{j,i}^C,
ot,i=j=1∑tSoftmaxj⎝⎛dh+dhRqt,iTkj,i⎠⎞vj,iC,
u
t
=
W
O
[
o
t
,
1
;
o
t
,
2
;
…
;
o
t
,
n
h
]
,
(17)
u_t = W^O [o_{t,1}; o_{t,2}; \ldots; o_{t,n_h}], \tag{17}
ut=WO[ot,1;ot,2;…;ot,nh],(17)
其中:
- W Q R ∈ R d h R n h × d c ′ W^{QR} \in R^{d_h^R n_h \times d_c'} WQR∈RdhRnh×dc′ 和 W K R ∈ R d h R × d W^{KR} \in R^{d_h^R \times d} WKR∈RdhR×d 分别表示用于生成解耦查询和键的矩阵;
- RoPE ( ⋅ ) \operatorname{RoPE}(\cdot) RoPE(⋅) 指的是应用 RoPE 矩阵的操作(下标省略);
- [ ⋅ ; ⋅ ] [\cdot; \cdot] [⋅;⋅] 表示串联操作。
在推理过程中,维度为
d
h
R
d_h^R
dhR 的解耦键
k
t
R
k_t^R
ktR 也会被缓存。因此,每个Token总共需要缓存大小为
(
d
c
+
d
h
R
)
l
(d_c + d_h^R)l
(dc+dhR)l 的数据。
对于 DeepSeek-V2,其中
d
c
=
4
d
h
d_c = 4d_h
dc=4dh 且
d
h
R
=
d
h
2
d_h^R = \frac{d_h}{2}
dhR=2dh,每个Token的 KV 缓存大小为:
9
2
d
h
l
.
\frac{9}{2} d_h l.
29dhl.
MLA 使用低秩矩阵,本质上包含的信息比原始的键和值投影矩阵要少,但MLA 的性能优于 MHA。因此,这种性能提升很可能归因于引入了与原始 RoPE 不同的解耦 RoPE。然而,尚未有关于解耦 RoPE 的消融研究。
2 专家混合(Mixture of Experts)
专家混合(MoE)是一种旨在降低计算成本的同时扩展模型参数的架构。在MoE模型中,通常会在指定的间隔用MoE层替换Transformer中的前馈网络(FFN)层。每个MoE层由多个专家组成,所有专家在结构上与标准FFN相同。Tokens被路由到一个或两个专家。DeepSeekMoE架构引入了两个关键创新:细粒度专家分割和共享专家隔离。这些创新是在传统MoE的基础上构建的。
2.1 细粒度专家分割
在图 (a) 所示的传统 MoE 架构之上,通过均匀划分 FFN 隐藏维度,每个 FFN 被分割成 m 个更小的专家。因此,在传统的 MoE 中,如果 Expert 总数为 N,每个 Token 的激活 Experts 数量为 K,则 Experts 总数增加到 mN,激活的 Experts 数量增加到 mK,如图 (b) 所示。这种精细的细分策略大大提高了已激活专家的组合灵活性。
2.2 DeepSeekMoE架构中的MoE层详解
共享专家致力于在不同环境中捕获公共知识,从而减少不同专家之间的参数冗余。具体来说,保留 K s K_s Ks 个专家作为共享专家,并且除了各自的已路由专家外,每个令牌总是会被分配给这些共享专家。为了保持恒定的计算成本,路由专家的总数 N r N_r Nr 减少到 m N − K s mN - K_s mN−Ks,每个token的路由专家数量是 m K − K s mK - K_s mK−Ks。
通过细粒度专家分割和共享专家隔离的新策略,DeepSeekMoE架构中的MoE层定义如下:
h
t
l
=
∑
i
=
1
K
s
F
F
N
i
(
u
t
l
)
+
∑
i
=
K
s
+
1
m
N
(
g
i
,
t
F
F
N
i
(
u
t
l
)
)
+
u
t
l
h_t^l = \sum_{i=1}^{K_s} FFN_i(u_t^l) + \sum_{i=K_s+1}^{mN} \left(g_{i,t} FFN_i(u_t^l)\right) + u_t^l
htl=i=1∑KsFFNi(utl)+i=Ks+1∑mN(gi,tFFNi(utl))+utl
h
t
l
h_t^l
htl 是第
l
l
l 层MoE模块的输出,由三部分组成:
- 前 K s K_s Ks 个共享专家的输出之和。
- 路由到的非共享专家的加权输出之和。
- 输入隐藏状态
u
t
l
u_t^l
utl 的残差连接。
g i , t = { s i , t , s i , t ∈ Topk ( { s j , t ∣ K s + 1 ≤ j ≤ m N } , m K − K s ) , 0 , otherwise , g_{i,t} = \begin{cases} s_{i,t}, & s_{i,t} \in \operatorname{Topk}(\{s_{j,t} \mid K_s+1 \leq j \leq mN\}, mK-K_s), \\ 0, & \text{otherwise}, \end{cases} gi,t={si,t,0,si,t∈Topk({sj,t∣Ks+1≤j≤mN},mK−Ks),otherwise,
g i , t g_{i,t} gi,t 是门控值,用于决定是否选择第 i i i 个专家。如果 s i , t s_{i,t} si,t 在前 m K − K s mK - K_s mK−Ks 个最高亲和度集合中,则选择该专家,否则将其门控值设为 0。
s i , t = Softmax i ( u t l T e i l ) s_{i,t} = \operatorname{Softmax}_i \left( {u_t^l}^T e_i^l \right) si,t=Softmaxi(utlTeil)
s i , t s_{i,t} si,t 是通过 softmax 函数计算的Token与专家的亲和度,衡量Token与专家之间的匹配程度。
其中: - F F N i ( ⋅ ) FFN_i(\cdot) FFNi(⋅) 表示第 i i i 个专家的前馈神经网络(FFN)。
- u t l ∈ R d u_t^l \in \mathbb{R}^d utl∈Rd 是第 l l l 个注意力模块后第 t t t 个Token的隐藏状态。
- h t l ∈ R d h_t^l \in \mathbb{R}^d htl∈Rd 是第 l l l 个MoE层后第 t t t个Token的输出隐藏状态。
- g i , t g_{i,t} gi,t 代表第 i i i 个专家的门控值。
- s i , t s_{i,t} si,t 是Token到专家的亲和度。
- Topk ( ⋅ , K ) \operatorname{Topk}(\cdot, K) Topk(⋅,K) 提供为第 t t t 个Token计算的所有 N N N 个专家中前 K K K 个亲和度的集合。
- e i l e_i^l eil 表示第 i i i 个专家在第 l l l 层的质心。
通过引入共享专家和细粒度路由机制,DeepSeekMoE架构能够在以下方面提升性能:
- 减少参数冗余:共享专家提取通用知识,避免重复学习。
- 保持计算效率:通过调整路由专家数量,确保计算成本恒定。
- 增强模型表达能力:结合共享专家和特定任务专家,提升了模型对复杂任务的适应性。
2.3 负载均衡问题
自动学习的路由策略可能会面临负载不平衡的问题:
- 专家负载不均:一些专家总是被选中,而其他专家训练不足。
- 跨设备通信成本高:被激活的专家分布在多个设备上,导致显著的跨设备通信开销。
这些问题通常通过一个用于负载均衡的辅助损失来解决[FZS22]。以下是专家级别的平衡损失公式:
L ExpBal = α ∑ i = 1 N ′ f i P i \mathcal{L}_{\text{ExpBal}} = \alpha \sum_{i=1}^{N'} f_i P_i LExpBal=αi=1∑N′fiPi
f i = N ′ K ′ T ∑ t = 1 T 1 ( Token t selects Expert i ) , P i = 1 T ∑ t = 1 T s i , t f_i = \frac{N'}{K' T} \sum_{t=1}^T 1(\text{Token } t \text{ selects Expert } i), \quad P_i = \frac{1}{T} \sum_{t=1}^T s_{i, t} fi=K′TN′t=1∑T1(Token t selects Expert i),Pi=T1t=1∑Tsi,t
其中:
- α \alpha α 是一个超参数。
- N ′ = m N − K s N' = mN - K_s N′=mN−Ks 和 K ′ = m K − K s K' = mK - K_s K′=mK−Ks。
- 1 ( ⋅ ) 1(\cdot) 1(⋅) 表示指示函数,当条件成立时值为 1,否则为 0。
- s i , t s_{i, t} si,t 是Token到专家的亲和度得分。
- f i f_i fi 表示第 i i i 个专家被选择的频率。
- P i P_i Pi 表示第 i i i 个专家的平均亲和度得分。
辅助损失
L
ExpBal
\mathcal{L}_{\text{ExpBal}}
LExpBal 用于推动专家之间的负载均衡。通过最小化该损失,目标是使得每个专家的负载均匀分布。
当负载在专家之间均匀分布时,
L
ExpBal
\mathcal{L}_{\text{ExpBal}}
LExpBal 的最小值为
K
′
K'
K′,即:
∑
i
=
1
N
′
f
i
P
i
=
N
′
⋅
1
⋅
K
′
N
′
=
K
′
.
\sum_{i=1}^{N'} f_i P_i = N' \cdot 1 \cdot \frac{K'}{N'} = K'.
i=1∑N′fiPi=N′⋅1⋅N′K′=K′.
进一步定义标准化版本:
f
i
′
=
f
i
N
′
,
P
i
′
=
P
i
K
′
,
f_i' = \frac{f_i}{N'}, \quad P_i' = \frac{P_i}{K'},
fi′=N′fi,Pi′=K′Pi,
使得
f
i
′
f_i'
fi′ 和
P
i
′
P_i'
Pi′ 都形成概率分布。
局限性分析
当 P i ′ P_i' Pi′ 均匀分布时,即对所有 i i i 有 P i ′ = 1 N ′ P_i' = \frac{1}{N'} Pi′=N′1,那么对于任何 f i ′ f_i' fi′
的分布,我们都有: ∑ i = 1 N ′ f i ⋅ P i = ∑ i = 1 N ′ f i ′ ⋅ K ′ = K ′ . \sum_{i=1}^{N'} f_i \cdot P_i = \sum_{i=1}^{N'} f_i' \cdot K' = K'. i=1∑N′fi⋅Pi=i=1∑N′fi′⋅K′=K′. 在这种情况下,辅助损失无法推动实现专家利用的平衡。如果 P i ′ P_i' Pi′ 的均匀分布本质上会产生
f i ′ f_i' fi′ 的均匀分布,那么在损失函数中包含 f i f_i fi 似乎就是多余的。鉴于这种公式被广泛采用,值得研究其理论依据并探索潜在的改进。
2.4 设备级别与通信负载均衡
除了专家级别的负载均衡外,还有设备级别和通信负载均衡。为了确保不同设备之间计算和通信的平衡,提出了类似的损失函数。这些损失函数的公式遵循类似的模式。
2.5 无辅助损失的负载均衡策略
由于辅助损失可能会降低模型性能,因此提出了一种无辅助损失的负载均衡策略,以在负载平衡和模型性能之间取得更好的权衡。
具体来说,为每个专家 i i i 添加一个偏差项 b i b_i bi 到亲和度得分 s i , t s_{i, t} si,t 中,以确定前 K K K 个选择[LFX+24],公式如下:
g i , t ′ = { s i , t , s i , t + b i ∈ Topk ( { s j , t + b j ∣ 1 ≤ j ≤ N r } , K r ) , 0 , otherwise , (24) g_{i, t}' = \begin{cases} s_{i, t}, & s_{i, t} + b_i \in \operatorname{Topk}\left(\left\{s_{j, t} + b_j \mid 1 \leq j \leq N_r\right\}, K_r\right), \\ 0, & \text{otherwise}, \end{cases} \tag{24} gi,t′={si,t,0,si,t+bi∈Topk({sj,t+bj∣1≤j≤Nr},Kr),otherwise,(24)
其中:
- N r N_r Nr 代表已路由的专家数量。
- K r K_r Kr 是激活的路由专家数量。
- b i b_i bi 是偏差项,在训练过程中动态调整。
2.5 偏差项调整规则
- 如果专家过载,偏差项 b i b_i bi 将减少 γ \gamma γ。
- 如果专家欠载,偏差项 b i b_i bi 将增加 γ \gamma γ。
- γ \gamma γ 是一个超参数。
注意,偏差项仅用于顶部 K K K 项的选择,而门控值仍然使用原始的亲和度分数 s i , t s_{i, t} si,t。
2.6 DeepSeek-V3 中的改进
在 DeepSeek-V3 中,还采用了补充的序列级辅助损失来避免任何单个序列内部的极端不平衡。这种策略进一步提升了模型的鲁棒性和性能。
3 多Token预测(MTP)
DeepSeek-V3 采用多Token预测(MTP)来提高训练性能。对于每个Token,MTP 不是仅预测下一个Token,而是在因果链中预测 D 个额外的Token。
如图所示,在每个深度
k
k
k 的多任务处理(MTP)模块中,包含以下组件:
- 一个共享的嵌入层和共享的输出头。
- 一个独立的变压器块。
- 一个独立的线性投影层。
线性投影层的输入是当前深度的嵌入与上一个深度的输出嵌入的拼接。
多任务处理训练目标 L M T P \mathcal{L}_{MTP} LMTP 是每个深度 k ∈ { 1 , 2 , ⋯ , D } k \in \{1, 2, \cdots, D\} k∈{1,2,⋯,D} 的交叉熵损失 L M T P k \mathcal{L}_{MTP}^k LMTPk 的平均值:
L
M
T
P
k
=
CrossEntropy
(
P
2
+
k
:
T
+
1
k
,
t
2
+
k
:
T
+
1
)
=
−
1
T
∑
i
=
2
+
k
T
+
1
log
P
i
k
[
t
i
]
\mathcal{L}_{MTP}^k = \text{CrossEntropy}\left(P_{2+k: T+1}^k, t_{2+k: T+1}\right) = -\frac{1}{T} \sum_{i=2+k}^{T+1} \log P_i^k[t_i]
LMTPk=CrossEntropy(P2+k:T+1k,t2+k:T+1)=−T1i=2+k∑T+1logPik[ti]
每个深度
k
k
k 的损失
L
M
T
P
k
\mathcal{L}_{MTP}^k
LMTPk 定义为交叉熵损失,衡量模型在深度
k
k
k 下对真实Token
t
i
t_i
ti 的预测概率
P
i
k
[
t
i
]
P_i^k[t_i]
Pik[ti] 的准确性。损失仅计算从位置
2
+
k
2+k
2+k 到
T
+
1
T+1
T+1 的范围内的Token。
L
M
T
P
=
λ
D
∑
k
=
1
D
L
M
T
P
k
\mathcal{L}_{MTP} = \frac{\lambda}{D} \sum_{k=1}^{D} \mathcal{L}_{MTP}^k
LMTP=Dλk=1∑DLMTPk
总体多任务处理损失
L
M
T
P
\mathcal{L}_{MTP}
LMTP 是所有深度
k
k
k 的损失的加权平均值,权重由超参数
λ
\lambda
λ 和深度总数
D
D
D 决定。
其中:
- T T T 表示输入序列的长度。
- t i t_i ti 是第 i i i 个位置的真实Token。
- P i k [ t i ] P_i^k[t_i] Pik[ti] 表示在深度 k k k 处对 t i t_i ti 的预测概率。
- λ \lambda λ 是一个超参数,用于调整多任务处理损失的权重。
多任务预测(MTP)的优势
多任务预测(MTP)的主要优势在于其在训练期间的更高样本效率,从而提升性能。通过在不同深度同时预测多个任务,模型能够更高效地利用训练数据,并学习到更具泛化能力的表示。
MTP 的局限性
然而,由 MTP 模块形成的因果链引入了超出传统下一个Token预测的训练时间开销。这是 DeepSeek-V3 中 MTP 的抽象研究未解决的一个因素。
具体来说:
- MTP 模块需要在每个深度上进行独立的预测,导致额外的计算负担。
- 因果链的设计增加了训练复杂性,可能影响整体训练效率。
尽管如此,MTP 的潜在收益仍然使其成为一种值得探索的策略,尤其是在需要高样本效率的场景中。
4 算法、框架和硬件的联合设计
通过算法、框架和硬件的联合设计,并进行精细的工程优化,DeepSeek-V3显著提高了训练效率,并在14.8万亿个Token上完成了模型的预训练,使用了278.8万个H800 GPU小时。
4.1 双管并行
为了减少跨节点专家并行引入的通信开销,提出了一种名为 DualPipe 的创新管道并行算法,以重叠一对单独的前向和后向块内的计算和通信。该算法将每个 chunk 分为四个部分,向后计算 chunk 进一步分为两部分,分别用于 input 和 weight ,以减少管道气泡。特定比例的 GPU SM 专用于通信,确保通信在执行过程中保持完全隐藏,有效实现接近零的 all-to-all 通信开销。DualPipe 算法采用双向管道调度,从管道的两端馈送数据,如上图所示。DualPipe 需要保留 models 参数的两个副本,这会导致额外的内存消耗。事实证明,双向部分是不必要的,可以通过 “切入” 程序去除。
Penghui Qi, Xinyi Wan, Guangxing Huang, and Min Lin. Zero bubble pipeline paral- lelism. arXiv preprint arXiv:2401.10241, 2023. 7
Penghui Qi, Xinyi Wan, Guangxing Huang, and Min Lin. Dualpipe could be better without the dual. https://hackmd.io/@ufotalent/r1lVXsa9Jg, 2025. Blog.
2.4.2 FP8混合精度训练
引入了用于训练 DeepSeek-V3 的混合精度框架,以实现高效训练而不会降低精度。为了加速训练,大多数核心计算内核 —— 广义矩阵乘法 (GEMM)—— 都以 FP8 精度实现。尽管 FP8 格式具有效率优势,但由于某些算子对低精度计算敏感,DeepSeek-V3 保持了原始精度,以平衡训练效率和数值稳定性。这些运算符包括 embedding module、output head、MoE 门控模块、normalization 运算符和 attention 运算符。
该框架利用细粒度量化策略来扩展 FP8 格式的动态范围:使用
1×Nc元素进行分块分组,或使用 Nc×Nc元素进行分块分组,其中
Nc是通道大小,在 DeepSeek-V3 模型中为Nc=128。
低精度 GEMM 运算的准确性在很大程度上取决于高精度累积。DeepSeek-V3 采用提升到 CUDA 核心的策略以获得更高的精度,以间隔 Nc定期将中间结果复制到 CUDA 核心上的 FP32 寄存器,以实现全精度 FP32 累积。
5 组内相对策略优化(GRPO)
deepseekmath: Pushing the limitsof mathematical reasoning in open language models. arXiv preprint arXiv:2402.03300提出的组内相对策略优化(GRPO)是近端策略优化(PPO)的一种高效且有效的变体。GRPO 通过直接估计优势来消除 PPO 中的价值函数近似,显著减少了内存使用。在大型语言模型(LLM)的背景下,通常只有最后一个Token被赋予奖励,因此在 PPO 中训练价值函数是具有挑战性的。简化的 GRPO 可以在更高效的同时实现相当的性能。
PPO 目标函数
PPO 最大化以下目标 :
J P P O ( θ ) = E [ q ∼ P ( Q ) , o ∼ π θ old ( O ∣ q ) ] 1 ∣ o ∣ ∑ t = 1 ∣ o ∣ min [ π θ ( o t ∣ q , o < t ) π θ old ( o t ∣ q , o < t ) A t , clip ( π θ ( o t ∣ q , o < t ) π θ old ( o t ∣ q , o < t ) , 1 − ϵ , 1 + ϵ ) A t ] , (27) \mathcal{J}_{PPO}(\theta) = \mathbb{E}\left[q \sim P(Q), o \sim \pi_{\theta_{\text{old}}}(O \mid q)\right] \frac{1}{|o|} \sum_{t=1}^{|o|} \min\left[\frac{\pi_\theta(o_t \mid q, o_{<t})}{\pi_{\theta_{\text{old}}}(o_t \mid q, o_{<t})} A_t, \operatorname{clip}\left(\frac{\pi_\theta(o_t \mid q, o_{<t})}{\pi_{\theta_{\text{old}}}(o_t \mid q, o_{<t})}, 1-\epsilon, 1+\epsilon\right) A_t\right], \tag{27} JPPO(θ)=E[q∼P(Q),o∼πθold(O∣q)]∣o∣1t=1∑∣o∣min[πθold(ot∣q,o<t)πθ(ot∣q,o<t)At,clip(πθold(ot∣q,o<t)πθ(ot∣q,o<t),1−ϵ,1+ϵ)At],(27)
其中:
- q q q 和 o o o 分别代表问题和输出。
- π θ \pi_\theta πθ 和 π θ old \pi_{\theta_{\text{old}}} πθold 分别是当前和旧的策略模型。
- ϵ \epsilon ϵ 是与剪辑相关的超参数。
- A t A_t At 表示优势,通过奖励和学习到的价值函数来估计。
GRPO 的改进
GRPO 不依赖于训练价值函数,而是通过从旧策略 π θ old \pi_{\theta_{\text{old}}} πθold 中采样一组输出 { o 1 , o 2 , ⋯ , o G } \{o_1, o_2, \cdots, o_G\} {o1,o2,⋯,oG} 来直接估计优势,生成 G G G 个奖励 r = { r 1 , r 2 , ⋯ , r G } r = \{r_1, r_2, \cdots, r_G\} r={r1,r2,⋯,rG},由奖励模型评分。
优势估计方法
-
结果监督
在每次输出的末尾提供一个奖励,并将所有Token的优势 A ^ i , t \hat{A}_{i,t} A^i,t 设置为相同的标准化奖励:
A ^ i , t = r ~ i = r i − mean ( r ) std ( r ) , (28) \hat{A}_{i,t} = \tilde{r}_i = \frac{r_i - \operatorname{mean}(r)}{\operatorname{std}(r)}, \tag{28} A^i,t=r~i=std(r)ri−mean(r),(28)
其中 mean ( r ) \operatorname{mean}(r) mean(r) 和 std ( r ) \operatorname{std}(r) std(r) 分别表示奖励集合的均值和标准差。 -
过程监督
对每个中间步骤提供奖励,然后通过对后续步骤获得的标准化奖励求和来计算每个Token的优势。
GRPO 目标函数
GRPO 最大化以下目标:
J G R P O ( θ ) = E [ q ∼ P ( Q ) , { o i } i = 1 G ∼ π θ old ( O ∣ q ) ] 1 G ∑ i = 1 G 1 ∣ o i ∣ ∑ t = 1 ∣ o i ∣ { min [ π θ ( o i , t ∣ q , o i , < t ) π θ old ( o i , t ∣ q , o i , < t ) A ^ i , t , clip ( π θ ( o i , t ∣ q , o i , < t ) π θ old ( o i , t ∣ q , o i , < t ) , 1 − ϵ , 1 + ϵ ) A ^ i , t ] − β D K L [ π θ ∣ π ref ] } , (29) \begin{aligned} \mathcal{J}_{GRPO}(\theta) &= \mathbb{E}\left[q \sim P(Q), \{o_i\}_{i=1}^G \sim \pi_{\theta_{\text{old}}}(O \mid q)\right] \\ & \quad \frac{1}{G} \sum_{i=1}^G \frac{1}{|o_i|} \sum_{t=1}^{|o_i|} \Bigg\{\min\Bigg[\frac{\pi_\theta(o_{i,t} \mid q, o_{i,<t})}{\pi_{\theta_{\text{old}}}(o_{i,t} \mid q, o_{i,<t})} \hat{A}_{i,t}, \operatorname{clip}\left(\frac{\pi_\theta(o_{i,t} \mid q, o_{i,<t})}{\pi_{\theta_{\text{old}}}(o_{i,t} \mid q, o_{i,<t})}, 1-\epsilon, 1+\epsilon\right) \hat{A}_{i,t}\Bigg] \\ & \quad - \beta D_{KL}[\pi_\theta \mid \pi_{\text{ref}}]\Bigg\}, \end{aligned} \tag{29} JGRPO(θ)=E[q∼P(Q),{oi}i=1G∼πθold(O∣q)]G1i=1∑G∣oi∣1t=1∑∣oi∣{min[πθold(oi,t∣q,oi,<t)πθ(oi,t∣q,oi,<t)A^i,t,clip(πθold(oi,t∣q,oi,<t)πθ(oi,t∣q,oi,<t),1−ϵ,1+ϵ)A^i,t]−βDKL[πθ∣πref]},(29)
其中:
- π ref \pi_{\text{ref}} πref 是参考策略模型,通常是初始的基础模型或 SFT 模型。
- D K L [ π θ ∣ π ref ] D_{KL}[\pi_\theta \mid \pi_{\text{ref}}] DKL[πθ∣πref] 是 KL 散度正则项,用于限制新策略与参考策略之间的偏差。
- β \beta β 是正则化系数。
GRPO 的优势
- 减少内存使用:通过直接估计优势,避免了对价值函数的显式建模,从而减少了内存开销。
- 更高的效率:在 LLM 场景下,尤其是仅对最后一个Token进行奖励的情况下,GRPO 提供了一种更高效的替代方案。
- 灵活性:支持结果监督和过程监督两种优势估计方式,适应不同的应用场景。
GRPO 算法的流程如图 5 所示。算法的核心在于:
- 从旧策略中采样多个输出序列。
- 使用奖励模型对这些序列进行评分。
- 根据评分直接估计优势,并最大化 GRPO 目标函数。
6 训练后:对基础模型进行强化学习
6.1 纯强化学习
DeepSeek-R1-Zero 在没有监督微调(SFT)数据的情况下,通过纯强化学习(RL)在基础模型DeepSeek-V3-Base上进行训练。DeepSeek-R1-Zero在RL训练过程中的表现持续提升。推理行为,包括反思和探索替代方法,自然地在训练过程中出现,证明了纯RL的有效性以及模型仅通过RL学习和泛化的能力。
DeepSeek-R1-Zero采用GRPO算法。奖励函数包括两种类型的奖励:
- 准确性奖励,用于评估模型响应的正确性;
- 格式奖励,它强制模型将其思维过程包含在标签 “<think>” 和 “</think> 中。
设计了一个训练模板来指导模型遵循特定的格式,首先生成一个推理过程,然后再呈现最终答案。
尽管DeepSeek-R1-Zero通过纯强化学习取得了显著的性能,但它遇到了诸如可读性差和语言混杂等挑战。为了缓解这些问题并进一步提升模型,引入了DeepSeek-R1,它采用了一种迭代训练方法,在SFT和RL之间交替进行。
6.2 强化学习与冷启动
DeepSeek-R1采用一个包含四个阶段的训练流程:
- 冷启动 为了减轻 RL 训练早期冷启动阶段的不稳定性,收集了数千个长思维链 (CoT)示例来微调 DeepSeekV3-Base 模型,然后作为后续强化学习的基础。
- 面向推理的 RL 在根据冷启动数据微调 DeepSeek-V3-Base 后,该模型经历了与 DeepSeek-R1-Zero 中采用的相同的 RL 训练过程。为了解决语言混合问题,引入了额外的语言一致性奖励,以 CoT 中目标词的比例来衡量。
- 拒绝抽样和 SFT 此阶段的目标是提高模型在写作、角色扮演和其他通用任务方面的性能。一旦面向推理的 RL 收敛,通过检查点的拒绝采样收集 600k 个与推理相关的训练样本,仅保留正确的响应。此外,还收集了大约 200k 个非推理训练样本,这些样本来自 DeepSeek-V3 的 SFT 数据集的一部分,或者由 DeepSeek-V3 生成。
- RL 对齐 此阶段旨在通过提高模型的有用性和无害性,同时完善其推理能力,使模型更好地与人类偏好保持一致。有用性是根据响应的效用和相关性来衡量的,而无害性则在整个响应中进行评估,以减少潜在风险、偏见或有害内容。
引用论文:A Review of DeepSeek Models’ Key Innovative Techniques
在本文中,我们回顾了促进DeepSeek模型成功的关键创新技术。这些包括MoE架构的创新、提高样本效率的技术、算法、框架和硬件的联合设计,以及GRPO强化学习算法和在训练后阶段应用强化学习。希望未来DeepSeek会给我们更多的惊喜