23、DeepSeek-V2论文笔记

DeepSeek-V2

  • 1、背景
  • 2、KV缓存优化
  • 3、DeepSeekMoE
  • 4、相对策略优化 (GRPO)
        • 强化学习算法
        • 训练策略
  • 5、DeepSeek-V2-Lite
  • 6、数学:矩阵分块计算,多token的矩阵分成单个token相乘
      • 向量与多维矩阵乘法
      • 矩阵分块计算
      • 多Token矩阵分块处理
      • 分块计算的优势
      • 总结

DeepSeek-V2
• 标题:DeepSeek-V2: A Strong, Economical, and Efficient Mixture-of-Experts Language Model
• 时间:2024年5月
• 链接:arXiv:2405.04434
• 突破:引入多头潜在注意力(MLA)机制,减少推理时KV缓存需求,使推理速度提升40%,训练成本降低50%。最后,我们遵循 DeepSeekMath (Shao et al., 2024) 采用组相对策略优化 (GRPO) 来进一步使模型与人类偏好保持一致,并产生 DeepSeek-V2 Chat (RL)。

1、背景

我们介绍了 DeepSeek-V2,这是一种强大的专家混合 (MoE) 语言模型,其特点是经济的训练和高效的推理。它总共包含 236B 个参数,其中每个 Token 激活了 21B,并支持 128K Token 的上下文长度。DeepSeek-V2 采用创新架构,包括多头潜在注意力 (MLA) 和 DeepSeekMoE。MLA 通过将键值 (KV) 缓存显著压缩为潜在向量来保证高效推理,而 DeepSeekMoE 则通过稀疏计算以经济的成本训练强大的模型。与 DeepSeek 67B 相比,DeepSeek-V2 的性能明显更强,同时节省了 42.5% 的训练成本,KV 缓存减少了 93.3%,并将最大生成吞吐量提升到 5.76 倍。我们在由 8.1T 词元组成的高质量多源语料库上对 DeepSeek-V2 进行预训练,并进一步执行监督微调 (SFT) 和强化学习 (RL) 以充分释放其潜力。评估结果表明,即使只激活了 21B 参数,DeepSeek-V2 及其聊天版本在开源模型中仍然取得了顶级的性能。模型检查点可在 https://github.com/deepseek-ai/DeepSeek-V2 获取。

我们用我们提出的多头潜在注意力 (MLA) 和 DeepSeekMoE 优化了 Transformer 框架(Vaswani et al., 2017)中的注意力模块和前馈网络 (FFN)。(1) 在注意力机制的背景下,多头注意力 (MHA) 的键值 (KV) 缓存(Vaswani et al., 2017)对 LLM 的推理效率构成了重大障碍。已经探索了各种方法来解决这个问题,包括分组查询注意力 (GQA) (Ainslie et al., 2023) 和多查询注意力 (MQA) (Shazeer, 2019)。但是,这些方法在尝试减少 KV 缓存时通常会牺牲性能。为了实现两全其美的效果,我们引入了 MLA,这是一种配备了低秩键值联合压缩的注意力机制。从经验上讲,MLA 实现了优于 MHA 的性能,同时显著降低了推理过程中的 KV 缓存,从而提高了推理效率。(2) 对于前馈网络 (FFN),我们遵循 DeepSeekMoE 架构 (Dai et al., 2024),该架构采用细粒度的专家分割和共享的专家隔离,以提高专家专业化的潜力。与 GShard 等传统 MoE 架构相比,DeepSeekMoE 架构表现出巨大的优势(Lepikhin et al., 2021),使我们能够以经济的成本训练强大的模型。由于我们在训练期间采用专家并行性,因此我们还设计了补充机制来控制通信开销并确保负载平衡。通过结合这两种技术,DeepSeek-V2 同时具有强大的性能(图 1(a))、经济的训练成本和高效的推理吞吐量(图 1(b))。

我们构建了一个由 8.1T 词元组成的高质量、多源预训练语料库。与 DeepSeek 67B(我们的上一个版本)(DeepSeek-AI,2024 年)中使用的语料库相比,该语料库具有扩展的数据量,尤其是中文数据,并且数据质量更高。我们首先在完整的预训练语料库上对 DeepSeek-V2 进行预训练。然后,我们收集 1.5M 个对话会话,其中包括数学、代码、写作、推理、安全等各个领域,以执行 DeepSeek-V2 Chat (SFT) 的监督微调 (SFT)。最后,我们遵循 DeepSeekMath (Shao et al., 2024) 采用组相对策略优化 (GRPO) 来进一步使模型与人类偏好保持一致,并产生 DeepSeek-V2 Chat (RL)。

架构
在这里插入图片描述
图 2 |DeepSeek-V2 架构图示。MLA 通过显著减少生成的 KV 缓存来确保高效推理,而 DeepSeekMoE 可以通过稀疏架构以经济的成本训练强大的模型。

2、KV缓存优化

2.0 KV缓存(Cache)的核心原理

Transformer 的 KV Cache(Key-Value Cache) 是一种针对自回归生成任务(如文本生成)的推理优化技术,通过缓存中间计算结果减少重复运算,显著提升模型效率。以下从原理、作用、实现等角度详细解析:


一、KV Cache 的核心原理

  1. 自注意力机制的计算冗余问题
    在 Transformer 的自注意力机制中,每个 token 需计算对应的 Query(Q)、Key(K)、Value(V)矩阵。生成新 token 时,若未缓存 K 和 V,模型需重新计算所有历史 token 的 K 和 V,导致计算复杂度为 O(n²)(n 为序列长度)。

  2. KV Cache 的缓存机制
    • 首次推理:处理初始 token 时,完整计算并存储 K 和 V 矩阵。

• 后续推理:生成新 token 时,仅计算当前 token 的 Q,并从缓存中读取历史 K 和 V,避免重复计算。复杂度降至 O(n)。

• 动态更新:将新 token 的 K 和 V 追加至缓存,供后续步骤复用。


  • 传统Transformer的缺陷
    在自注意力机制中,每个token的输出依赖于对所有历史token的注意力计算:

    1. 查询(Query, Q)键(Key, K)值(Value, V) 由输入通过线性层生成:
      Q = X W Q , K = X W K , V = X W V Q = XW_Q, \quad K = XW_K, \quad V = XW_V Q=XWQ,K=XWK,V=XWV
    2. 注意力分数计算为:
      Attention ( Q , K , V ) = softmax ( Q K T d k ) V \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V Attention(Q,K,V)=softmax(dk QKT)V
      在生成任务(如逐个token生成文本)中,若每次生成新token都重新计算所有历史token的K和V,会导致计算量随序列长度呈平方增长(时间复杂度为 O ( n 2 ) O(n^2) O(n2)),效率极低。
  • KV缓存的核心思想
    缓存历史层的K和V,避免重复计算
    在推理阶段(生成任务),当处理第 i i i 个token时,仅计算当前token的Q,而K和V则复用之前 i − 1 i-1 i1 个token的缓存结果。具体步骤如下:

    1. 首次计算:处理第1个token时,生成其K₁和V₁,存入缓存。
    2. 后续生成:处理第 n n n 个token时:
      • 计算当前token的Qₙ。
      • 从缓存中获取前 n − 1 n-1 n1 个token的K₁₋ₙ₋₁和V₁₋ₙ₋₁,与当前Kₙ、Vₙ拼接后,用于计算注意力。
      • 将新的Kₙ和Vₙ添加到缓存中,供下一个token使用。

    通过这种方式,每次生成新token的时间复杂度降至 O ( n ) O(n) O(n)(仅新增一次线性计算和拼接操作),大幅提升长序列生成效率。


二、KV Cache 的适用场景与限制

  1. 适用场景
    • 自回归模型:如 GPT、LLaMA 等生成式模型。

• 实时交互任务:聊天机器人、翻译等对延迟敏感的场景。

  1. 限制
    • 因果性要求:仅适用于因果掩码(Causal Mask)模型,如 Decoder-only 架构。

• 显存瓶颈:长序列生成时缓存占用显存,需权衡速度与内存。


三、KV Cache 的核心作用

  1. 加速推理
    • 通过避免重复计算 K 和 V,推理速度提升 2-3 倍。例如,某聊天机器人的响应时间从 0.5 秒降至 0.2 秒。

• 实验表明,开启 KV Cache 后,生成 1000 个 token 的耗时从指数级增长(如 332 秒)变为线性增长(29 秒)。

  1. 降低显存占用
    • 复用缓存减少中间张量的存储需求。例如,某移动设备上的内存占用从 1GB 降至 0.6GB。

• 尽管缓存占用显存(如 Llama3-70B 在 4k token 时需约 10.5GB),但整体效率仍显著优化。

  1. 支持长序列生成
    • 长文本生成时,KV Cache 维持对历史上下文的完整理解,确保语义连贯性。

2.1 KV缓存优化

我们用我们提出的多头潜在注意力 (MLA) 和 DeepSeekMoE 优化了 Transformer 框架(Vaswani et al., 2017)中的注意力模块和前馈网络 (FFN)。(1) 在注意力机制的背景下,多头注意力 (MHA) 的键值 (KV) 缓存(Vaswani et al., 2017)对 LLM 的推理效率构成了重大障碍。已经探索了各种方法来解决这个问题,包括分组查询注意力 (GQA) (Ainslie et al., 2023) 和多查询注意力 (MQA) (Shazeer, 2019)。但是,这些方法在尝试减少 KV 缓存时通常会牺牲性能。为了实现两全其美的效果,我们引入了 MLA,这是一种配备了低秩键值联合压缩的注意力机制。从经验上讲,MLA 实现了优于 MHA 的性能,同时显著降低了推理过程中的 KV 缓存,从而提高了推理效率。(2) 对于前馈网络 (FFN),我们遵循 DeepSeekMoE 架构 (Dai et al., 2024),该架构采用细粒度的专家分割和共享的专家隔离,以提高专家专业化的潜力。与 GShard 等传统 MoE 架构相比,DeepSeekMoE 架构表现出巨大的优势(Lepikhin et al., 2021),使我们能够以经济的成本训练强大的模型。由于我们在训练期间采用专家并行性,因此我们还设计了补充机制来控制通信开销并确保负载平衡。通过结合这两种技术,DeepSeek-V2 同时具有强大的性能(图 1(a))、经济的训练成本和高效的推理吞吐量(图 1(b))。

2.2 性能对比

2.1 多头潜在注意力:提升推理效率
传统Transformer模型通常采用多头注意力(MHA,Vaswani等人,2017),但在生成过程中,其庞大的键值(KV)缓存会成为限制推理效率的瓶颈。为减少KV缓存,研究者提出了多查询注意力(MQA,Shazeer,2019)和分组查询注意力(GQA,Ainslie等人,2023)。这些方法需要的KV缓存规模较小,但性能不及MHA(附录D.1提供了MHA、GQA和MQA的消融实验结果)。
针对DeepSeek-V2,我们设计了一种创新的注意力机制——多头潜在注意力(MLA)。通过低秩键值联合压缩,MLA在实现比MHA更强性能的同时,仅需显著更少的KV缓存。以下将介绍其架构,并在附录D.2中提供MLA与MHA的对比。

我们在表 1 中演示了不同注意力机制之间每个令牌的 KV 缓存的比较。MLA 只需要少量的 KV 缓存,相当于只有 2.25 组的 GQA,但可以达到比 MHA 更强的性能。

在这里插入图片描述
表 1 不同注意力机制之间每个令牌的 KV 缓存比较。 n h n_{h} nh 表示关注头的数量, d h d_{h} dh 表示每个关注头的维度,l 表示层数, n g n_{g} ng 表示 GQA 中的组数, d c d_{c} dc d h R d_{h}^{R} dhR 分别表示 MLA 中解耦查询和 key 的 KV 压缩维度和每头维度。KV 缓存量由元素数量来衡量,与存储精度无关。对于 DeepSeek-V2, d c d_{c} dc 设置为 4 d h 4 d_{h} 4dh d h R d_{h}^{R} dhR 设置为 d h 2 \frac{d_{h}}{2} 2dh。因此,它的 KV 缓存等于只有 2.25 组的 GQA,但其性能比 MHA 强。

2.3 架构

在这里插入图片描述
在这里插入图片描述

图 3 |多头注意力 (MHA)、分组查询注意力 (GQA)、多查询注意力 (MQA) 和多头潜在注意力 (MLA) 的简化图示。MLA 通过将 key 和 values 联合压缩成一个 latent vector,显著降低了推理过程中的 KV 缓存。

2.4多头注意力 (MHA)

预备知识:标准多头注意力
首先介绍标准MHA机制作为背景。设d为嵌入维度, n h n_{h} nh为注意力头数, d h d_{h} dh为每头维度, h t ∈ R d h_{t} \in \mathbb{R}^{d} htRd为第t个token在注意力层的输入。标准MHA通过三个矩阵WQ、WK、 W V ∈ R d h n h × d W^{V} \in \mathbb{R}^{d_{h} n_{h} ×d} WVRdhnh×d分别生成qt、kt、 v t ∈ R d h n h v_{t} \in \mathbb{R}^{d_{h} n_{h}} vtRdhnh

n h n_{h} nh be the number of attention heads, d h d_{h} dh be the dimension
per head, and h t ∈ R d h_{t} \in \mathbb{R}^{d} htRdbe the attention input of the
𝑡-th token at an attention layer. Standard MHA first produces q t q_{t} qt
,kt, v t ∈ R d h n h v_{t} \in \mathbb{R}^{d_{h} n_{h}} vtRdhnh through three matrices
w Q w^{Q} wQ , W K W^{K} WK , W V ∈ R d h n h × d W^{V} \in \mathbb{R}^{d_{h} n_{h} ×d} WVRdhnh×d ,
respectively:

q t = W Q h t , ( 1 ) q_{t}=W^{Q} h_{t}, \quad(1) qt=WQht,(1)

k t = W K h t , ( 2 ) k_{t}=W^{K} h_{t}, (2) kt=WKht,(2)

v t = W V h t , ( 3 ) v_{t}=W^{V} h_{t}, (3) vt=WVht,(3)

随后,qt、kt、vt被切分为nh个头以进行多头注意力计算:
[ q t , 1 ; q t , 2 ; … ; q t , n h ] = q t , ( 4 ) [q_{t,1}; q_{t,2}; \dots; q_{t,n_h}] = q_t, \quad (4) [qt,1;qt,2;;qt,nh]=qt,(4)

[ k t , 1 ; k t , 2 ; … ; k t , n h ] = k t , ( 5 ) [k_{t,1}; k_{t,2}; \dots; k_{t,n_h}] = k_t, \quad (5) [kt,1;kt,2;;kt,nh]=kt,(5)

[ v t , 1 ; v t , 2 ; … ; v t , n h ] = v t , ( 6 ) [v_{t,1}; v_{t,2}; \dots; v_{t,n_h}] = v_t, \quad (6) [vt,1;vt,2;;vt,nh]=vt,(6)

o t , i = ∑ j = 1 t Softmax j ( q t , i T k j , i d h ) v j , i , ( 7 ) o_{t,i} = \sum_{j=1}^t \text{Softmax}_j \left( \frac{q_{t,i}^T k_{j,i}}{\sqrt{d_h}} \right) v_{j,i}, \quad (7) ot,i=j=1tSoftmaxj(dh qt,iTkj,i)vj,i,(7)

u t = W O [ o t , 1 ; o t , 2 ; … ; o t , n h ] , ( 8 ) u_t = W^O [o_{t,1}; o_{t,2}; \dots; o_{t,n_h}], \quad (8) ut=WO[ot,1;ot,2;;ot,nh],(8)
其中q𝑡,𝑖, k𝑡,𝑖, v t , i ∈ R d k v_{t, i} \in \mathbb{R}^{d_{k}} vt,iRdk分别表示第 i 个注意力头的查询、键和值; W O ∈ R d × d h n h W^{O} \in \mathbb{R}^{d ×d_{h} n_{h}} WORd×dhnh 为输出投影矩阵。推理时,所有键和值需缓存以加速计算,因此MHA每个token需缓存 2 n h d h l 2 n_{h} d_{h} l 2nhdhl个元素( l l l 表示层数)。在模型部署中,这种庞大的KV缓存是限制最大批量大小和序列长度的主要瓶颈。

注意: KV,不是超参数 W K W^{K} WK , W V ∈ R d h n h × d W^{V} \in \mathbb{R}^{d_{h} n_{h} ×d} WVRdhnh×d ,而是相乘后的KV矩阵: k t = W K h t , ( 2 ) 、 v t = W V h t , ( 3 ) k_{t}=W^{K} h_{t}, (2)、v_{t}=W^{V} h_{t},(3) kt=WKht,(2)vt=WVht,(3)

where q𝑡,𝑖, k𝑡,𝑖, v t , i ∈ R d k v_{t, i} \in \mathbb{R}^{d_{k}} vt,iRdk denote the
query, key, and value of the 𝑖-th attention head, respectively;
W O ∈ R d × d h n h W^{O} \in \mathbb{R}^{d ×d_{h} n_{h}} WORd×dhnh denotes the output projection matrix. During inference, all keys and values need,
to be cached to accelerate inference, so MHA needs to cache 2 n h d h l 2 n_{h} d_{h} l 2nhdhl elements for each token. In model deployment, this heavy KV cache is a large bottleneck that limits the maximum batch size and sequence length.

2.5 多头潜在注意力 (MLA)

2.5.1 低秩键值联合压缩 (Low-Rank Key-Value )

MLA的核心是通过键值的低秩联合压缩来减少KV缓存:
c t K V = W D K V h t , ( 9 ) c_t^{KV} = W^{DKV} h_t, \quad (9) ctKV=WDKVht,(9)

k t C = W U K c t K V , ( 10 ) k_t^C = W^{UK} c_t^{KV}, \quad (10) ktC=WUKctKV,(10)

v t C = W U V c t K V , ( 11 ) v_t^C = W^{UV} c_t^{KV}, \quad (11) vtC=WUVctKV,(11)
其中, c t K V ∈ R d c c_t^{KV} \in \mathbb{R}^{d_c} ctKVRdc 是键和值的压缩潜向量; 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} WDKVRdc×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} WUKWUVRdhnh×dc 分别是键和值的上投影矩阵。推理时,MLA仅需缓存 c t K V c_t^{KV} ctKV,因此其KV缓存仅包含 d c l d_c l dcl 个元素( l l l 表示层数)。此外,由于推理时 W U K W^{UK} WUK 可融入 W Q W^Q WQ W U V W^{UV} WUV 可融入 W O W^O WO,我们甚至无需显式计算注意力的键和值。图3直观展示了MLA通过键值联合压缩减少KV缓存的过程。

为减少训练时的激活内存,我们还对查询进行低秩压缩(尽管这不会减少KV缓存):
c t Q = W D Q h t , ( 12 ) c_t^Q = W^{DQ} h_t, \quad (12) ctQ=WDQht,(12)

q t C = W U Q c t Q , ( 13 ) q_t^C = W^{UQ} c_t^Q, \quad (13) qtC=WUQctQ,(13)
其中, c t Q ∈ R d c ′ c_t^Q \in \mathbb{R}^{d'_c} ctQRdc 是查询的压缩潜向量; d c ′ ( ≪ d h n h ) d'_c \ (\ll d_h n_h) dc (dhnh) 表示查询压缩维度; W D Q ∈ R d c ′ × d 、 W U Q ∈ R d h n h × d c ′ W^{DQ} \in \mathbb{R}^{d'_c \times d}、W^{UQ} \in \mathbb{R}^{d_h n_h \times d'_c} WDQRdc×dWUQRdhnh×dc 分别是查询的下投影和上投影矩阵。

解释:“ W U K W^{UK} WUK 可融入 W Q W^Q WQ W U V W^{UV} WUV 可融入 W O W^O WO

在MLA的低秩键值联合压缩中,“ W U K W^{UK} WUK 可融入 W Q W^Q WQ W U V W^{UV} WUV 可融入 W O W^O WO”是指通过矩阵运算的结合律,将键/值的上投影矩阵与注意力模块的输入/输出投影矩阵合并,从而在推理时跳过显式计算键和值的步骤。以下结合公式和实例具体解释:

  1. 矩阵吸收的数学原理
    假设:

    • W Q W^Q WQ 是标准MHA中生成查询的投影矩阵,形状为 R d h n h × d \mathbb{R}^{d_h n_h \times d} Rdhnh×d
    • W U K W^{UK} WUK 是键的上投影矩阵,形状为 R d h n h × d c \mathbb{R}^{d_h n_h \times d_c} Rdhnh×dc
    • W D K V W^{DKV} WDKV 是键值的下投影矩阵,形状为 R d c × d \mathbb{R}^{d_c \times d} Rdc×d

    根据公式(9)(10),键的生成过程为:
    k t C = W U K c t K V = W U K ( W D K V h t ) = ( W U K W D K V ) h t k_t^C = W^{UK} c_t^{KV} = W^{UK} (W^{DKV} h_t) = (W^{UK} W^{DKV}) h_t ktC=WUKctKV=WUK(WDKVht)=(WUKWDKV)ht
    这里, W U K W^{UK} WUK W D K V W^{DKV} WDKV 可合并为一个新的矩阵 W ′ Q = W U K W D K V W'^Q = W^{UK} W^{DKV} WQ=WUKWDKV,使得:
    k t C = W ′ Q h t k_t^C = W'^Q h_t ktC=WQht
    此时,生成键的过程被转化为一次矩阵乘法,等价于将 W U K W^{UK} WUK 的操作“吸收”到 W Q W^Q WQ 中(实际是与 W Q W^Q WQ 合并)。同理,值的生成矩阵 W U V W^{UV} WUV 可与输出投影矩阵 W O W^O WO 合并,避免显式计算 v t C v_t^C vtC

  2. 举例说明(简化维度)
    假设:

    • d = 512 d = 512 d=512(输入维度), d c = 128 d_c = 128 dc=128(KV压缩维度), d h n h = 1024 d_h n_h = 1024 dhnh=1024(单头维度×头数)
    • W D K V W^{DKV} WDKV 128 × 512 128×512 128×512 的下投影矩阵, W U K W^{UK} WUK 1024 × 128 1024×128 1024×128 的键上投影矩阵

    标准MHA流程(需显式计算键):

    1. c t K V = W D K V h t c_t^{KV} = W^{DKV} h_t ctKV=WDKVht(128维向量)
    2. k t C = W U K c t K V k_t^C = W^{UK} c_t^{KV} ktC=WUKctKV(1024维键,需存储)

    MLA优化后(吸收矩阵,跳过键计算):

    • 合并矩阵: W ′ Q = W U K W D K V W'^Q = W^{UK} W^{DKV} WQ=WUKWDKV(形状为 1024 × 512 1024×512 1024×512
    • 直接计算: k t C = W ′ Q h t k_t^C = W'^Q h_t ktC=WQht(无需单独存储 W U K W^{UK} WUK c t K V c_t^{KV} ctKV,推理时仅需缓存 c t K V c_t^{KV} ctKV

数学推导与示例
1. 键(Key)的融合
• 原始计算:
k t C = W U K ⋅ c t K V = W U K ⋅ ( W D K V ⋅ h t ) k_t^C = W^{UK} \cdot c_t^{KV} = W^{UK} \cdot (W^{DKV} \cdot h_t) ktC=WUKctKV=WUK(WDKVht)
• 合并权重:

W U K ⋅ W D K V W^{UK} \cdot W^{DKV} WUKWDKV合并为新的查询权重矩阵 W Q ′ W^{Q'} WQ
W Q ′ = W Q ⋅ ( W U K ⋅ W D K V ) W^{Q'} = W^Q \cdot (W^{UK} \cdot W^{DKV}) WQ=WQ(WUKWDKV)
此时,查询计算简化为:
q t ′ = W Q ′ ⋅ h t q_t' = W^{Q'} \cdot h_t qt=WQht
实际计算注意力时,直接使用 q t ′ q_t' qt,无需单独存储 k t C k_t^C ktC

2. 值(Value)的融合
• 原始计算:
v t C = W U V ⋅ c t K V = W U V ⋅ ( W D K V ⋅ h t ) v_t^C = W^{UV} \cdot c_t^{KV} = W^{UV} \cdot (W^{DKV} \cdot h_t) vtC=WUVctKV=WUV(WDKVht)
• 合并到输出矩阵:

W U V ⋅ W D K V W^{UV} \cdot W^{DKV} WUVWDKV合并到输出矩阵 W O W^O WO中:
W O ′ = W O ⋅ ( W U V ⋅ W D K V ) W^{O'} = W^O \cdot (W^{UV} \cdot W^{DKV}) WO=WO(WUVWDKV)
最终输出计算为:
u t = W O ′ ⋅ Attention ( q t ′ , k t ′ , v t ′ ) u_t = W^{O'} \cdot \text{Attention}(q_t', k_t', v_t') ut=WOAttention(qt,kt,vt)


实例说明
假设模型参数为:
• 输入维度 d = 512 d=512 d=512,压缩维度 d c = 128 d_c=128 dc=128,头数 n h = 8 n_h=8 nh=8,每头维度 d h = 64 d_h=64 dh=64

W D K V ∈ R 128 × 512 W^{DKV} \in \mathbb{R}^{128 \times 512} WDKVR128×512 W U K ∈ R 512 × 128 W^{UK} \in \mathbb{R}^{512 \times 128} WUKR512×128 W Q ∈ R 512 × 512 W^Q \in \mathbb{R}^{512 \times 512} WQR512×512

推理优化步骤:

  1. 合并键的投影:
    W Q ′ = W Q ⋅ ( W U K ⋅ W D K V ) ∈ R 512 × 512 W^{Q'} = W^Q \cdot (W^{UK} \cdot W^{DKV}) \in \mathbb{R}^{512 \times 512} WQ=WQ(WUKWDKV)R512×512
    实际计算查询时:
    q t ′ = W Q ′ ⋅ h t q_t' = W^{Q'} \cdot h_t qt=WQht
    原始需要存储 k t C ∈ R 512 k_t^C \in \mathbb{R}^{512} ktCR512,优化后直接通过 q t ′ q_t' qt隐式包含键信息。

  2. 合并值的投影:
    W O ′ = W O ⋅ ( W U V ⋅ W D K V ) ∈ R 512 × 512 W^{O'} = W^O \cdot (W^{UV} \cdot W^{DKV}) \in \mathbb{R}^{512 \times 512} WO=WO(WUVWDKV)R512×512
    输出计算直接使用合并后的 W O ′ W^{O'} WO,无需单独计算值向量 v t C v_t^C vtC


2.5.2. 解耦旋转位置嵌入(Dcoupled RoPE )

一、核心问题:传统RoPE与低秩KV压缩的冲突

DeepSeek-V2在设计MLA时遇到一个关键矛盾:

  1. RoPE的位置敏感性:RoPE通过旋转矩阵对键(K)和查询(Q)添加位置信息,要求键和查询在计算时携带与位置相关的参数(如不同位置的旋转矩阵 R t \mathbf{R}_t Rt)。
  2. 矩阵吸收失效:在MLA的低秩压缩中,键的生成需要将上投影矩阵 W U K W^{UK} WUK 融入查询投影矩阵 W Q W^Q WQ(见2.1.2节),以跳过显式计算键值对。但RoPE的旋转矩阵会插入在 W Q W^Q WQ W U K W^{UK} WUK 之间,导致:
    传统流程: k t C = W U K ⋅ R t ⋅ W D K V h t \text{传统流程:} \quad k_t^C = W^{UK} \cdot \mathbf{R}_t \cdot W^{DKV} h_t 传统流程:ktC=WUKRtWDKVht
    由于矩阵乘法不满足交换律, W U K W^{UK} WUK 无法与 W Q W^Q WQ 合并,必须为每个位置 t t t 单独计算 k t C k_t^C ktC,导致推理时需重新计算所有前缀token的键,计算量随序列长度呈平方级增长(例如128K序列时,每次生成新token需计算128K次键,效率极低)。

在DeepSeek-V2模型中,将旋转位置编码(RoPE)与低秩KV压缩技术结合时,由于矩阵乘法不满足交换律,导致推理过程中必须重新计算所有前缀token的键(Key),从而显著降低效率。以下是该问题的技术细节及实例分析:


核心矛盾:RoPE与低秩KV压缩的互斥性

  1. 低秩KV压缩的原理
    • 压缩过程:输入向量 h t h_t ht通过低秩矩阵 W D K V ∈ R d c × d W^{DKV} \in \mathbb{R}^{d_c \times d} WDKVRdc×d d c d_c dc为压缩维度, d d d为原始维度)压缩为潜在向量 c t K V c_t^{KV} ctKV
    c t K V = W D K V ⋅ h t c_t^{KV} = W^{DKV} \cdot h_t ctKV=WDKVht
    • 还原键值:通过上投影矩阵 W U K ∈ R d × d c W^{UK} \in \mathbb{R}^{d \times d_c} WUKRd×dc W U V W^{UV} WUV还原完整键值:
    k t C = W U K ⋅ c t K V , v t C = W U V ⋅ c t K V k_t^C = W^{UK} \cdot c_t^{KV}, \quad v_t^C = W^{UV} \cdot c_t^{KV} ktC=WUKctKV,vtC=WUVctKV
    理想情况下,推理时可通过矩阵结合律将两步合并,例如将 W U K ⋅ W D K V W^{UK} \cdot W^{DKV} WUKWDKV融入 W Q W^Q WQ,从而避免显式计算 k t C k_t^C ktC
    W Q ′ = W Q ⋅ ( W U K ⋅ W D K V ) ∈ R 512 × 512 W^{Q'} = W^Q \cdot (W^{UK} \cdot W^{DKV}) \in \mathbb{R}^{512 \times 512} WQ=WQ(WUKWDKV)R512×512

  2. RoPE的位置敏感性
    • RoPE的作用:RoPE通过旋转矩阵 R t R_t Rt对查询(Query)和键(Key)引入位置相关的相位偏移:
    q t = R t ⋅ ( W Q ⋅ h t ) , k t = R t ⋅ ( W U K ⋅ c t K V ) q_t = R_t \cdot (W^Q \cdot h_t), \quad k_t = R_t \cdot (W^{UK} \cdot c_t^{KV}) qt=Rt(WQht),kt=Rt(WUKctKV)
    • 冲突点:RoPE矩阵 R t R_t Rt与低秩矩阵 W U K W^{UK} WUK的位置耦合,导致矩阵乘法顺序不可交换。


数学推导与冲突示例

  1. 原始计算流程
    • 键的计算:
    k t C = R t ⋅ ( W U K ⋅ c t K V ) = R t ⋅ W U K ⋅ W D K V ⋅ h t k_t^C = R_t \cdot (W^{UK} \cdot c_t^{KV}) = R_t \cdot W^{UK} \cdot W^{DKV} \cdot h_t ktC=Rt(WUKctKV)=RtWUKWDKVht
    • 理想合并:若矩阵乘法可交换,可将 W U K ⋅ W D K V W^{UK} \cdot W^{DKV} WUKWDKV提前合并到 W Q W^Q WQ中:
    W Q ′ = W Q ⋅ ( W U K ⋅ W D K V ) W^{Q'} = W^Q \cdot (W^{UK} \cdot W^{DKV}) WQ=WQ(WUKWDKV)
    此时查询计算简化为 q t ′ = R t ⋅ W Q ′ ⋅ h t q_t' = R_t \cdot W^{Q'} \cdot h_t qt=RtWQht,无需显式存储 k t C k_t^C ktC

  2. 实际冲突分析
    • 交换律失效:由于 R t R_t Rt W U K W^{UK} WUK的乘法顺序不可交换,即:
    R t ⋅ W U K ≠ W U K ⋅ R t R_t \cdot W^{UK} \neq W^{UK} \cdot R_t RtWUK=WUKRt
    导致无法将 W U K W^{UK} WUK吸收到 W Q W^Q WQ中。
    • 示例:假设 W U K ∈ R 512 × 128 W^{UK} \in \mathbb{R}^{512 \times 128} WUKR512×128 R t ∈ R 512 × 512 R_t \in \mathbb{R}^{512 \times 512} RtR512×512,则:
    R t ⋅ W U K ∈ R 512 × 128 , W U K ⋅ R t ∈ R 128 × 512 ( 维度不匹配 ) R_t \cdot W^{UK} \in \mathbb{R}^{512 \times 128}, \quad W^{UK} \cdot R_t \in \mathbb{R}^{128 \times 512} \quad (\text{维度不匹配}) RtWUKR512×128,WUKRtR128×512(维度不匹配)
    即使维度匹配(如方阵),数值结果仍不同:
    若 W U K = [ 1 2 3 4 ] , R t = [ 0 1 1 0 ] , 则 R t ⋅ W U K = [ 3 4 1 2 ] ≠ W U K ⋅ R t = [ 2 1 4 3 ] \text{若} \quad W^{UK} = \begin{bmatrix}1 & 2 \\ 3 & 4\end{bmatrix}, R_t = \begin{bmatrix}0 & 1 \\ 1 & 0\end{bmatrix}, \quad \text{则} \quad R_t \cdot W^{UK} = \begin{bmatrix}3 & 4 \\ 1 & 2\end{bmatrix} \neq W^{UK} \cdot R_t = \begin{bmatrix}2 & 1 \\ 4 & 3\end{bmatrix} WUK=[1324],Rt=[0110],RtWUK=[3142]=WUKRt=[2413]


二、解耦RoPE策略:分离位置信息的“双重表示”

为解决上述问题,DeepSeek-V2提出解耦策略:将查询和键拆分为位置无关的压缩部分(用于高效计算)和位置相关的RoPE部分(用于捕获序列顺序),两者独立处理后拼接使用。

三、关键公式与实例解析
1. 符号定义(简化维度示例)

假设:

  • 输入维度 d = 512 d = 512 d=512,压缩维度 d c = 128 d_c = 128 dc=128,查询压缩维度 d c ′ = 256 d'_c = 256 dc=256
  • 注意力头数 n h = 32 n_h = 32 nh=32,每头维度 d h = 16 d_h = 16 dh=16,解耦位置维度 d h R = 8 d_h^R = 8 dhR=8(每头位置相关子空间维度)
  • c t Q c_t^Q ctQ:查询的压缩潜向量(256维,来自2.1.2节的查询压缩)
  • h t h_t ht:输入隐藏层向量(512维)
2. 位置相关查询 q t R q_t^R qtR 的生成(公式14)

[ q t , 1 R ; q t , 2 R ; … ; q t , 32 R ] = q t R = RoPE ( W Q R c t Q ) [q_{t,1}^R; q_{t,2}^R; \dots; q_{t,32}^R] = q_t^R = \text{RoPE}\left( W^{QR} c_t^Q \right) [qt,1R;qt,2R;;qt,32R]=qtR=RoPE(WQRctQ)

  • W Q R W^{QR} WQR:投影矩阵(形状 32 × 8 × 256 32 \times 8 \times 256 32×8×256,将256维压缩查询投影到32头×8维的位置子空间)
  • 实例
    • c t Q = [ x 1 , x 2 , . . . , x 256 ] c_t^Q = [x_1, x_2, ..., x_{256}] ctQ=[x1,x2,...,x256](压缩后的查询)
    • W Q R c t Q W^{QR} c_t^Q WQRctQ 生成32个8维向量(每头一个),经RoPE添加位置信息后,得到每头的位置相关查询 q t , i R ∈ R 8 q_{t,i}^R \in \mathbb{R}^8 qt,iRR8
3. 共享位置键 k t R k_t^R ktR 的生成(公式15)

k t R = RoPE ( W K R h t ) k_t^R = \text{RoPE}\left( W^{KR} h_t \right) ktR=RoPE(WKRht)

  • W K R W^{KR} WKR:投影矩阵(形状 8 × 512 8 \times 512 8×512,将512维输入投影到8维位置空间)
  • 实例
    • h t h_t ht W K R W^{KR} WKR 投影为8维向量,再经RoPE处理,得到共享的位置键 k t R ∈ R 8 k_t^R \in \mathbb{R}^8 ktRR8(所有头共用,减少参数和计算量)。
4. 查询与键的拼接(公式16-17)

q t , i = [ q t , i C ; q t , i R ] , k t , i = [ k t , i C ; k t R ] q_{t,i} = [q_{t,i}^C; q_{t,i}^R], \quad k_{t,i} = [k_{t,i}^C; k_t^R] qt,i=[qt,iC;qt,iR],kt,i=[kt,iC;ktR]

  • 实例
    • 压缩部分 q t , i C ∈ R 16 q_{t,i}^C \in \mathbb{R}^{16} qt,iCR16(每头原始维度),位置部分 q t , i R ∈ R 8 q_{t,i}^R \in \mathbb{R}^8 qt,iRR8,拼接后查询维度为 16 + 8 = 24 16+8=24 16+8=24
    • 键的压缩部分 k t , i C ∈ R 16 k_{t,i}^C \in \mathbb{R}^{16} kt,iCR16,位置部分 k t R ∈ R 8 k_t^R \in \mathbb{R}^8 ktRR8,拼接后键维度为 16 + 8 = 24 16+8=24 16+8=24
5. 注意力计算(公式18)

o t , i = ∑ j = 1 t Softmax j ( q t , i T k j , i 24 ) v j , i C o_{t,i} = \sum_{j=1}^t \text{Softmax}_j \left( \frac{q_{t,i}^T k_{j,i}}{\sqrt{24}} \right) v_{j,i}^C ot,i=j=1tSoftmaxj(24 qt,iTkj,i)vj,iC

  • 分母 d h + d h R = 16 + 8 = 24 \sqrt{d_h + d_h^R} = \sqrt{16+8} = \sqrt{24} dh+dhR =16+8 =24 是拼接后维度的归一化因子,确保注意力分数稳定。
四、核心优势:通过“分离-拼接”实现高效与位置建模的双赢
  1. 保留矩阵吸收(高效推理)

    • 压缩部分 q t C , k t C q_t^C, k_t^C qtC,ktC 不含位置信息,其投影矩阵 W U K , W U V W^{UK}, W^{UV} WUK,WUV 仍可被吸收到 W Q , W O W^Q, W^O WQ,WO 中(如 W Q = W U Q ⋅ W D Q W^Q = W^{UQ} \cdot W^{DQ} WQ=WUQWDQ),避免重新计算前缀键。
    • 实例:若序列长度为128K,传统RoPE需缓存 2 × 32 × 16 × 128 K × l 2 \times 32 \times 16 \times 128K \times l 2×32×16×128K×l 个元素,而解耦策略仅需缓存 ( 128 + 8 ) × l × 128 K (128 + 8) \times l \times 128K (128+8)×l×128K 个元素,缓存量减少93.3%(与文档表1数据一致)。
  2. 精准位置建模

    • 位置相关部分 q t R , k t R q_t^R, k_t^R qtR,ktR 专门处理序列顺序,通过RoPE捕获长距离依赖,例如:
      • 当token位置从 t t t t + 1 t+1 t+1 q t R q_t^R qtR q t + 1 R q_{t+1}^R qt+1R 的旋转矩阵不同,确保模型区分前后顺序。
  3. 计算量控制

    • 共享键 k t R k_t^R ktR 对所有头生效,无需为每个头单独计算位置键,计算量从 O ( n h d h l ) O(n_h d_h l) O(nhdhl) 降至 O ( ( d c + d h R ) l ) O((d_c + d_h^R) l) O((dc+dhR)l),支持128K长上下文高效处理(见文档图4,DeepSeek-V2在128K时性能稳定)。
五、与传统RoPE的对比(以1头为例)
步骤传统RoPE(直接应用)解耦RoPE(MLA策略)
键生成 k t = W K h t ⋅ R t k_t = W^K h_t \cdot \mathbf{R}_t kt=WKhtRt(含位置矩阵) k t = [ k t C ; k t R ] k_t = [k_t^C; k_t^R] kt=[ktC;ktR] k t C k_t^C ktC 无位置, k t R k_t^R ktR 含RoPE)
矩阵吸收不可吸收( R t \mathbf{R}_t Rt 阻断)可吸收( k t C k_t^C ktC W U K W^{UK} WUK 融入 W Q W^Q WQ
前缀键重计算每次生成新token需重算所有历史键仅需计算一次共享 k t R k_t^R ktR k t C k_t^C ktC 可快速生成
KV缓存(1层) 2 × 16 × 1 = 32 2 \times 16 \times 1 = 32 2×16×1=32 元素 128 ( d c ) + 8 ( d h R ) = 136 128(d_c) + 8(d_h^R) = 136 128dc+8dhR=136 元素(虽略增,但远低于MHA的 2 × 16 × 32 = 1024 2 \times 16 \times 32 = 1024 2×16×32=1024 元素)
六、总结:解耦策略如何让MLA“两全其美”

通过将位置信息从压缩的键/查询中分离,解耦RoPE策略实现了三大突破:

  1. 技术兼容:在低秩KV压缩的同时,保留RoPE的位置建模能力,避免传统RoPE导致的推理瓶颈。
  2. 效率提升:通过矩阵吸收和共享位置键,将键值对的计算复杂度从 O ( n 2 ) O(n^2) O(n2) 降至 O ( n ) O(n) O(n),支持128K长上下文高效生成。
  3. 性能保障:实验表明(见文档附录D.2),解耦后的MLA在保持KV缓存大幅减少的同时,性能优于传统MHA,实现了“高效+强性能”的平衡。

这一设计是DeepSeek-V2能在长上下文场景(如128K序列)中保持高吞吐量的关键技术之一,也是其架构创新的核心亮点。

2.5.3.MLA完整计算过程

为了展示MLA的完整计算过程,我们在下面给出其完整公式:
在这里插入图片描述

其中,蓝色框选的向量在生成时需要缓存。在推理过程中,原始公式需要从 c t K V c_{t}^{K V} ctKV 中恢复 k t c k_{t}^{c} ktc v t c v_{t}^{c} vtc 用于注意力计算。幸运的是,由于矩阵乘法的结合律,我们可以将 W U K W^{U K} WUK 合并到 W U Q W^{UQ} WUQ 中,将 W U V W^{U V} WUV 合并到 w o w^{o} wo 中。因此,我们无需为每个查询计算键值对。通过这种优化,我们避免了推理过程中重新计算 k r C k_{r}^{C} krC v t C v_{t}^{C} vtC 的计算开销。

3、DeepSeekMoE

详细原理参考(20、 DeepSeekMoE论文笔记):https://blog.csdn.net/weixin_44986037/article/details/147409399?spm=1001.2014.3001.5501

对于 FFN,我们采用 DeepSeekMoE 架构(Dai et al., 2024)。DeepSeekMoE 有两个关键思想:将专家细分为更精细的粒度,以实现更高的专家专业化和更准确的知识获取,以及隔离一些共享专家以减少路由专家之间的知识冗余。在激活参数和总专家参数数量相同的情况下,DeepSeekMoE 的性能可以大大优于 GShard 等传统 MoE 架构(Lepikhin et al., 2021)。

u t u_{t} ut 为第 t 个令牌的 FFN 输入,我们计算 FFN 输出 h t ′ h_{t}' ht,如下所示:
在这里插入图片描述

其中 N 5 N_{5} N5 N r N_{r} Nr 分别表示共享专家和路由专家的数量; F F N i ( s ) ( ⋅ ) FFN_{i}^{(s)}(\cdot) FFNi(s)() F F N i ( r ) ( ⋅ ) FFN_{i}^{(r)}(\cdot) FFNi(r)() 分别表示第 i 个共享专家和第 i 个路由专家; K 1 K_{1} K1 表示已激活的路由专家数量; g i , t g_{i, t} gi,t 是第 i 个专家的门值; s i , t s_{i, t} si,t 是 tokento-expert 的亲和力; e i e_{i} ei 是该层中第 i 个路由专家的质心;Topk ( ⋅ , K ) (\cdot, K) (,K) 表示在为第 t 个标记和所有路由的 EA 计算的亲和力分数中包含 K 个最高分数的集合。

4、相对策略优化 (GRPO)

参考:DeepSeekMath论文笔记

强化学习
为进一步释放DeepSeek-V2的潜力并使其符合人类偏好,我们通过强化学习(RL)调整其偏好。

强化学习算法

为节省RL训练成本,我们采用组相对策略优化(GRPO)(Shao等人,2024),该方法省去了通常与策略模型规模相同的评论家模型,转而通过组分数估计基线。具体而言,对于每个问题𝑞,GRPO从旧策略𝜋𝜃𝑜𝑙𝑑中采样一组输出{𝑜₁, 𝑜₂, · · · , 𝑜𝐺},然后通过最大化以下目标优化策略模型𝜋𝜃:
J GRPO ( θ ) = E [ q ∼ P ( Q ) , { o i } i = 1 G ∼ π θ old ( O ∣ q ) ] 1 G ∑ i = 1 G ( min ⁡ ( π θ ( o i ∣ q ) π θ old ( o i ∣ q ) A i , c l i p ( π θ ( o i ∣ q ) π θ old ( o i ∣ q ) , 1 − ε , 1 + ε ) A i ) − β D K L ( π θ ∥ π ref ) ) , ( 32 ) \begin{aligned} J_{\text{GRPO}}(\theta) &= \mathbb{E}\left[q \sim P(Q), \{o_i\}_{i=1}^G \sim \pi_{\theta_{\text{old}}}(O|q)\right] \\ &\frac{1}{G} \sum_{i=1}^G \left( \min\left( \frac{\pi_\theta(o_i|q)}{\pi_{\theta_{\text{old}}}(o_i|q)} A_i, clip\left( \frac{\pi_\theta(o_i|q)}{\pi_{\theta_{\text{old}}}(o_i|q)}, 1-\varepsilon, 1+\varepsilon \right) A_i \right) - \beta \mathbb{D}_{KL}\left( \pi_\theta \| \pi_{\text{ref}} \right) \right), \quad (32) \end{aligned} JGRPO(θ)=E[qP(Q),{oi}i=1Gπθold(Oq)]G1i=1G(min(πθold(oiq)πθ(oiq)Ai,clip(πθold(oiq)πθ(oiq),1ε,1+ε)Ai)βDKL(πθπref)),(32)

D K L ( π θ ∥ π ref ) = π ref ( o i ∣ q ) π θ ( o i ∣ q ) − log ⁡ π ref ( o i ∣ q ) π θ ( o i ∣ q ) − 1 , ( 33 ) \mathbb{D}_{KL}\left( \pi_\theta \| \pi_{\text{ref}} \right) = \frac{\pi_{\text{ref}}(o_i|q)}{\pi_\theta(o_i|q)} - \log \frac{\pi_{\text{ref}}(o_i|q)}{\pi_\theta(o_i|q)} - 1, \quad (33) DKL(πθπref)=πθ(oiq)πref(oiq)logπθ(oiq)πref(oiq)1,(33)
其中𝜀和𝛽为超参数,𝐴𝑖为优势函数,使用与每个组内输出对应的一组奖励{𝑟₁, 𝑟₂, · · · , 𝑟𝐺}计算得出:
A i = r i − mean ( { r 1 , r 2 , ⋯ , r G } ) std ( { r 1 , r 2 , ⋯ , r G } ) . ( 34 ) A_i = \frac{r_i - \text{mean}(\{r_1, r_2, \cdots, r_G\})}{\text{std}(\{r_1, r_2, \cdots, r_G\})}. \quad (34) Ai=std({r1,r2,,rG})rimean({r1,r2,,rG}).(34)

训练策略

初步实验发现,针对代码和数学等推理数据的RL训练具有与通用数据训练不同的特性。例如,模型的数学和编码能力可在较长训练步骤中持续提升。因此,我们采用两阶段RL训练策略:先进行推理对齐,再进行人类偏好对齐。

  • 第一阶段(推理对齐):训练针对代码和数学推理任务的奖励模型𝑅𝑀𝑟𝑒𝑎𝑠𝑜𝑛𝑖𝑛𝑔,并通过其反馈优化策略模型:
    r i = R M reasoning ( o i ) . ( 35 ) r_i = R\text{M}_{\text{reasoning}}(o_i). \quad (35) ri=RMreasoning(oi).(35)
  • 第二阶段(人类偏好对齐):采用多奖励框架,结合有用性奖励模型𝑅𝑀ℎ𝑒𝑙𝑝𝑓𝑢𝑙、安全性奖励模型𝑅𝑀𝑠𝑎𝑓𝑒𝑡𝑦和规则奖励模型𝑅𝑀𝑟𝑢𝑙𝑒。响应𝑜𝑖的最终奖励为:
    r i = c 1 ⋅ R M helpful ( o i ) + c 2 ⋅ R M safety ( o i ) + c 3 ⋅ R M rule ( o i ) , ( 36 ) r_i = c_1 \cdot R\text{M}_{\text{helpful}}(o_i) + c_2 \cdot R\text{M}_{\text{safety}}(o_i) + c_3 \cdot R\text{M}_{\text{rule}}(o_i), \quad (36) ri=c1RMhelpful(oi)+c2RMsafety(oi)+c3RMrule(oi),(36)
    其中𝑐₁、𝑐₂、𝑐₃为对应系数。

为获得可靠的奖励模型,我们精心收集偏好数据并进行质量过滤和比例调整:代码偏好数据基于编译器反馈,数学偏好数据基于真实标签。奖励模型以DeepSeek-V2 Chat(SFT)初始化,采用点损失或对损失训练。实验表明,RL训练能充分挖掘模型潜力,使其从可能的响应中选择正确且令人满意的答案。

5、DeepSeek-V2-Lite

为了促进 MLA 和 DeepSeekMoE 的进一步研究和开发,我们还为开源社区发布了 DeepSeek-V2-Lite,这是一个配备 MLA 和 DeepSeekMoE 的较小模型。它总共有 15.7B 个参数,其中每个 token 激活了 2.4B。有关 DeepSeek-V2-Lite 的详细说明,请参阅附录 B。

6、数学:矩阵分块计算,多token的矩阵分成单个token相乘

详细解释举例说明:向量与多维矩阵乘法,矩阵分块计算,多token的矩阵如何分成单个token去相乘

向量与多维矩阵乘法

定义:向量与矩阵相乘时,需满足维度匹配。若矩阵为 A ∈ R m × n A \in \mathbb{R}^{m \times n} ARm×n,向量为 v ∈ R n v \in \mathbb{R}^n vRn,则乘积 A v Av Av 的结果为 R m \mathbb{R}^m Rm 的向量。计算方式为矩阵每行与向量的点积。

示例

  • 设矩阵 A = [ 1 2 3 4 ] A = \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix} A=[1324],向量 v = [ 5 6 ] v = \begin{bmatrix} 5 \\ 6 \end{bmatrix} v=[56]
  • 计算 A v Av Av
    A v = [ 1 × 5 + 2 × 6 3 × 5 + 4 × 6 ] = [ 17 39 ] . Av = \begin{bmatrix} 1 \times 5 + 2 \times 6 \\ 3 \times 5 + 4 \times 6 \end{bmatrix} = \begin{bmatrix} 17 \\ 39 \end{bmatrix}. Av=[1×5+2×63×5+4×6]=[1739].

矩阵分块计算

定义:将大矩阵划分为小块(子矩阵),通过块间运算简化计算。分块需满足乘法规则:若 A A A 分块为 [ A i j ] [A_{ij}] [Aij] B B B 分块为 [ B j k ] [B_{jk}] [Bjk],则乘积 C = A B C = AB C=AB 的块 C i k = ∑ j A i j B j k C_{ik} = \sum_j A_{ij}B_{jk} Cik=jAijBjk

示例

  • 矩阵 A = [ A 11 A 12 A 21 A 22 ] A = \begin{bmatrix} A_{11} & A_{12} \\ A_{21} & A_{22} \end{bmatrix} A=[A11A21A12A22] B = [ B 11 B 12 B 21 B 22 ] B = \begin{bmatrix} B_{11} & B_{12} \\ B_{21} & B_{22} \end{bmatrix} B=[B11B21B12B22],其中每个子块为 2 × 2 2 \times 2 2×2 矩阵。
  • 计算块 C 11 C_{11} C11
    C 11 = A 11 B 11 + A 12 B 21 . C_{11} = A_{11}B_{11} + A_{12}B_{21}. C11=A11B11+A12B21.
  • 所有块计算完成后,合并得到 C C C

多Token矩阵分块处理

场景:在自然语言处理中,多个token(如词向量)按行排列成矩阵 X ∈ R k × d X \in \mathbb{R}^{k \times d} XRk×d,需计算 X W XW XW W ∈ R d × h W \in \mathbb{R}^{d \times h} WRd×h)。

分块策略

  1. 按行分块:将 X X X 拆分为单个token的行向量。

    • 例如, X = [ —  x 1 — —  x 2 — ⋮ —  x k — ] X = \begin{bmatrix} \text{---} \ x_1 \ \text{---} \\ \text{---} \ x_2 \ \text{---} \\ \vdots \\ \text{---} \ x_k \ \text{---} \end{bmatrix} X=  x1  x2  xk  ,每个 x i ∈ R 1 × d x_i \in \mathbb{R}^{1 \times d} xiR1×d
    • 每个token独立计算: y i = x i W y_i = x_i W yi=xiW(结果 y i ∈ R 1 × h y_i \in \mathbb{R}^{1 \times h} yiR1×h)。
    • 合并结果: Y = [ y 1 y 2 ⋮ y k ] ∈ R k × h Y = \begin{bmatrix} y_1 \\ y_2 \\ \vdots \\ y_k \end{bmatrix} \in \mathbb{R}^{k \times h} Y= y1y2yk Rk×h
  2. 批量分块:将 X X X 划分为多个子矩阵,每个子矩阵含多个token。

    • 例如,将 X X X 分为 X 1 ∈ R k 1 × d X_1 \in \mathbb{R}^{k_1 \times d} X1Rk1×d X 2 ∈ R k 2 × d X_2 \in \mathbb{R}^{k_2 \times d} X2Rk2×d,则:
      Y = [ X 1 W X 2 W ] . Y = \begin{bmatrix} X_1W \\ X_2W \end{bmatrix}. Y=[X1WX2W].
      示例
  • X = [ 1 2 3 4 5 6 ] X = \begin{bmatrix} 1 & 2 \\ 3 & 4 \\ 5 & 6 \end{bmatrix} X= 135246 W = [ 0.5 1 1.5 2 ] W = \begin{bmatrix} 0.5 & 1 \\ 1.5 & 2 \end{bmatrix} W=[0.51.512]
  • 按行分块
    • x 1 = [ 1 2 ] → y 1 = [ 1 × 0.5 + 2 × 1.5 , 1 × 1 + 2 × 2 ] = [ 3.5 , 5 ] x_1 = [1\ 2] \rightarrow y_1 = [1 \times 0.5 + 2 \times 1.5,\ 1 \times 1 + 2 \times 2] = [3.5,\ 5] x1=[1 2]y1=[1×0.5+2×1.5, 1×1+2×2]=[3.5, 5]
    • 同理计算 x 2 , x 3 x_2, x_3 x2,x3,合并得 Y = [ 3.5 5 8.5 11 13.5 17 ] Y = \begin{bmatrix} 3.5 & 5 \\ 8.5 & 11 \\ 13.5 & 17 \end{bmatrix} Y= 3.58.513.551117

分块计算的优势

  1. 并行计算:不同块可分配到多个处理器加速计算。
  2. 内存优化:处理大矩阵时,分块减少内存占用。
  3. 灵活性:支持动态加载数据,适合分布式系统。

总结

  • 向量乘矩阵:按行或列的点积计算。
  • 矩阵分块:通过子矩阵运算简化复杂计算。
  • 多Token处理:按行分块后独立计算,或批量处理子矩阵,灵活平衡效率与资源。

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

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

相关文章

MySQL OCP试题解析(2)

试题如下图所示: 一、题目背景还原 假设存在以下MySQL用户权限配置: -- 创建本地会计用户CREATE USER accountinglocalhost IDENTIFIED BY acc_123;-- 创建匿名代理用户(用户名为空,允许任意主机)CREATE USER % IDENTI…

深度学习Y7周:YOLOv8训练自己数据集

🍨 本文为🔗365天深度学习训练营中的学习记录博客🍖 原作者:K同学啊 一、配置环境 1.官网下载源码 2.安装需要环境 二、准备好自己的数据 目录结构: 主目录 data images(存放图片) annotati…

英伟达Blackwell架构重构未来:AI算力革命背后的技术逻辑与产业变革

——从芯片暴力美学到分布式智能体网络,解析英伟达如何定义AI基础设施新范式 开篇:当算力成为“新石油”,英伟达的“炼油厂”如何升级? 2025年3月,英伟达GTC大会上,黄仁勋身披标志性皮衣,宣布了…

CurrentHashMap的整体系统介绍及Java内存模型(JVM)介绍

当我们提到ConurrentHashMap时,先想到的就是HashMap不是线程安全的: 在多个线程共同操作HashMap时,会出现一个数据不一致的问题。 ConcurrentHashMap是HashMap的线程安全版本。 它通过在相应的方法上加锁,来保证多线程情况下的…

Android开发-设计规范

在Android应用开发中,遵循良好的设计规范不仅能够提升用户体验,还能确保代码的可维护性和扩展性。本文将从用户界面(UI)、用户体验(UX)、性能优化以及代码结构等多个维度探讨Android开发中的设计规范&#…

泛型加持的策略模式:打造高扩展的通用策略工具类

一、传统策略模式的痛点与突破 1.1 传统策略实现回顾 // 传统支付策略接口 public interface PaymentStrategy {void pay(BigDecimal amount); }// 具体策略实现 public class AlipayStrategy implements PaymentStrategy {public void pay(BigDecimal amount) { /* 支付宝支…

物联网从HomeAssistant开始

文章目录 一、什么是home-assistant?1.核心架构2.集成架构 二、在树梅派5上安装home-assistant三、接入米家1.对比下趋势2.手动安装插件3.配置方式 四、接入公牛1.手动安装插件2.配置方式 五、接入海尔1.手动安装插件2.配置方式 六、接入国家电网 一、什么是home-assistant? …

系统架构-嵌入式系统架构

原理与特征 嵌入式系统的典型架构可概括为两种模式,即层次化模式架构和递归模式架构 层次化模式架构,位于高层的抽象概念与低层的更加具体的概念之间存在着依赖关系,封闭型层次架构指的是,高层的对象只能调用同一层或下一层对象…

计算机图形学编程(使用OpenGL和C++)(第2版)学习笔记 09.天空和背景

天空和背景 对于 3D 场景,通常可以通过在远处的地平线附近创造一些逼真的效果,来增强其真实感。我们可以采用天空盒、天空柱(Skydome)或天空穹(Skydome)等技术来模拟天空。 天空盒 天空盒(Sk…

【Leetcode 每日一题】1550. 存在连续三个奇数的数组

问题背景 给你一个整数数组 a r r arr arr,请你判断数组中是否存在连续三个元素都是奇数的情况:如果存在,请返回 t r u e true true;否则,返回 f a l s e false false。 数据约束 1 ≤ a r r . l e n g t h ≤ 10…

面试题解析 | C++空类的默认成员函数(附生成条件与底层原理)

在C面试中,“空类默认生成哪些成员函数”是考察对象模型和编译器行为的高频题目。许多资料仅提及前4个函数,但完整的答案应包含6个核心函数,并结合C标准深入解析其生成规则与使用场景。 一、空类默认生成的6大成员函数 1. ​缺省构造函数​ …

视频编解码学习7之视频编码简介

视频编码技术发展历程与主流编码标准详解 视频编码技术是现代数字媒体领域的核心技术之一,它通过高效的压缩算法大幅减少了视频数据的体积,使得视频的存储、传输和播放变得更加高效和经济。从早期的H.261标准到最新的AV1和H.266/VVC,视频编码…

使用Stable Diffusion(SD)中,步数(Steps)指的是什么?该如何使用?

Ⅰ定义: 在Stable Diffusion(SD)中,步数(Steps) 指的是采样过程中的迭代次数,也就是模型从纯噪声一步步“清晰化”图像的次数。你可以理解为模型在画这张图时“润色”的轮数。 Ⅱ步数的具体作…

消息队列如何保证消息可靠性(kafka以及RabbitMQ)

目录 RabbitMQ保证消息可靠性 生产者丢失消息 MQ丢失消息 消费端丢失了数据 Kakfa的消息可靠性 生产者的消息可靠性 Kakfa的消息可靠性 消费者的消息可靠性 RabbitMQ保证消息可靠性 生产者丢失消息 1.事务消息保证 生产者在发送消息之前,开启事务消息随后生…

如何查看项目是否支持最新 Android 16K Page Size 一文汇总

前几天刚聊过 《Google 开始正式强制 Android 适配 16 K Page Size》 之后,被问到最多的问题是「怎么查看项目是否支持 16K Page Size」 ?其实有很多直接的方式,但是最难的是当你的项目有很多依赖时,怎么知道这个「不支持的动态库…

HttpServletResponse的理解

HttpServletResponse 是 Java Servlet API 提供的一个接口 常用方法 方法用途setContentType(String type)设置响应内容类型(如 "application/json"、"text/html")setStatus(int sc)设置响应状态码(如 200、404&#x…

可灵 AI:开启 AI 视频创作新时代

在当今数字化浪潮中,人工智能(AI)技术正以前所未有的速度渗透到各个领域,尤其是在内容创作领域,AI 的应用正引发一场革命性的变革。可灵 AI 作为快手团队精心打造的一款前沿 AI 视频生成工具,宛如一颗璀璨的…

用 AltSnap 解锁 Windows 窗口管理的“魔法”

你有没有遇到过这样的场景:电脑屏幕上堆满了窗口,想快速调整它们的大小和位置,却只能拖来拖去,费时又费力?或者你是个多任务狂魔,喜欢一边写代码、一边看文档、一边刷视频,却发现 Windows 自带的…

深度策略梯度算法PPO

一、策略梯度核心思想和原理 从时序差分算法Q学习到深度Q网络,这些算法都侧重于学习和优化价值函数,属于基于价值的强化学习算法(Value-based)。 1. 基于策略方法的主要思想(Policy-based) 基于价值类方…

【LaTeX】Word插入LaTeX行间公式如何编号和对齐

在 Word 文档中插入公式,需要用到 LaTeX \LaTeX LATE​X 。但遗憾的是,Word 只支持部分 LaTeX \LaTeX LATE​X 语法,这就导致很多在 Markdown 能正常渲染的公式在 Word 中无法正常显示。 “内嵌”和“显示” 首先介绍一下 Word 的“内嵌”…