如何免费申请公司网站,河北网站备案查询系统,建设银行个人网上银行登录,网站建设方案大全本文深入探讨了 DeepSeek-R1 模型架构。让我们从输入到输出追踪 DeepSeek-R1 模型#xff0c;以找到架构中的新发展和关键部分。DeepSeek-R1 基于 DeepSeek-V3-Base 模型架构。本文旨在涵盖其设计的所有重要方面。 #x1f4dd; 1. 输入上下文长度
DeepSeek-R1的输入上下文长… 本文深入探讨了 DeepSeek-R1 模型架构。让我们从输入到输出追踪 DeepSeek-R1 模型以找到架构中的新发展和关键部分。DeepSeek-R1 基于 DeepSeek-V3-Base 模型架构。本文旨在涵盖其设计的所有重要方面。 1. 输入上下文长度
DeepSeek-R1的输入上下文长度为128K。
DeepSeek-R1 从其基础模型 DeepSeek-V3-Base 继承了 128K 上下文长度。最初DeepSeek-V3 使用 4K 上下文长度进行预训练。然后利用 YaRN 技术两阶段上下文长度扩展首先将其增加到 32K然后增加到 128K。
YaRN另一种 RoPE 扩展方法是一种旨在有效扩展使用旋转位置嵌入 (RoPE)的大型语言模型 (LLM) 的上下文窗口的技术。RoPE 使用旋转矩阵对位置信息进行编码而 YaRN 则修改这些旋转频率的缩放方式。它不是简单地推断频率这通常会导致性能下降而是平滑地插入和调整这些频率从而能够更好地推广到更长的上下文。它在计算上是高效的并且无需大量重新训练即可扩展模型上下文长度。 2. 总层数
DeepSeek-R1 由一个嵌入层、其后的 61 个变换器层以及输出阶段的多个预测头组成。
DeepSeek-R1 在所有 Transformer 层上采用多头潜在注意力 (MLA) 层而不是标准多头注意力。前三个 Transformer 层与其他层不同使用标准前馈网络 (FFN) 层。从第 4 层到第 61 层混合专家 (MoE) 层取代了 FFN 层。MLA 和 MoE 的细节将在以下部分中探讨。
带有维度的完整模型架构描述 DeepSeek-V3使用多标记预测 (MTP) 技术利用最后两个预测头预测接下来的2 个标记。第二个预测标记的接受率介于85% 和 90%之间表明在各个生成主题中均具有很高的可靠性。 DeepSeek-R1 (DeepSeek-V3) 总共包含 671B 个参数其中每个标记激活 37B 个。在这里插入图片描述 3. 前 3 个 DeepSeek-R1 层
前 3 层由多头潜在注意力 (MLA) 和标准 FFN 层组成。这些通常被称为“密集 LLM 层”因为 FFN 层不会被 MoE 层取代相比之下 MoE 层被认为更稀疏。 DeepSeek-R1 中的前 3 个 Transformer 层 4. DeepSeek-R1 的第 4 层至第 61 层
这些层由 MLA 层和 MoE 层组成。我们将在接下来的部分中了解什么是 MLA 层和 MoE 层以及它们如何工作。 MoE Transformer 层 5.多头潜在注意力MLA
现在让我们了解什么是 MLA。
MLA 首次在 DeepSeek-V2 中引入并已延续到 DeepSeek-V3 和 DeepSeek-R1。
为什么要开发MLA
以下是 DeepSeek-V2 论文/技术报告中的一份声明它清楚地阐述了开发 MLA 背后的原因。 “传统的Transformer模型通常采用多头注意力机制MHA但在生成过程中其繁重的键值KV缓存会成为限制推理效率的瓶颈。为了减少KV缓存提出了多查询注意力机制MQA和分组查询注意力机制GQA。它们需要的KV缓存量级较小但性能不如MHA。 对于 DeepSeek-V2我们设计了一种创新的注意力机制称为多头潜在注意力 (MLA)。MLA 配备了低秩键值联合压缩性能优于 MHA但所需的 KV 缓存量却少得多。” MLA 与 MHA、GQA 和 MQA 的比较来自 DeepSeek-V2 的图表 MLA 如何实现减少 KV 缓存以加快推理速度 “MLA 的核心是对注意力键和值进行低秩联合压缩以减少推理过程中的键值 (KV) 缓存。” — DeepSeek-V2 让我们一步一步地理解这个图
步骤 1Q、K 和 V 的下投影
MLA 层的输入是 h t h_t ht。为清楚起见我们假设 h t h_t ht 的形状为 (input_sequence_length×2000)。
在传统的 Transformer 层中权重矩阵用于将 h_t 投影到查询 (Q)、键 (K) 和值 (V) 表示中。这些表示中的每一个通常都保留与输入相同的隐藏维度从而导致 Q、K、V 具有 (input_sequence_length×2000) 的形状。
MLA 层的输入是 h t h_t ht。为清楚起见我们假设 h t h_t ht 的形状为 (input_sequence_length×2000)。
在传统的 Transformer 层中权重矩阵用于将 h_t 投影到查询 (Q)、键 (K) 和值 (V) 表示中。这些表示中的每一个通常都保留与输入相同的隐藏维度从而导致 Q、K、V 具有 (input_sequence_length×2000) 的形状。
然而在具有多头潜在注意力 (MLA) 的 Transformer 层中权重矩阵生成的 Q、K 和 V 的尺寸明显小于输入。MLA 不会保留完整的隐藏维度而是会减小它们的尺寸。例如如果输入 h t h_t ht 的形状为 (序列长度 × 2000)则生成的 Q、K 和 V 的形状可能为 (序列长度 × 100)。
在实施过程中通常会融合 Q、K 和 V 的权重矩阵以提高GPU 上的计算和内存效率。不是应用单独的投影而是使用组合权重矩阵来优化操作。在 MLA 中 K和V的生成遵循这一原则。具体而言在方程中使用单个权重矩阵表示为 W D K V W^{DKV} WDKV 。这里 W D K V W^{DKV} WDKV 中的“D”代表下投影权重矩阵反映了其在降低维度以实现高效注意力计算方面的作用。 潜在 K 和 V 嵌入 此投影的输出是包含 K 和 V 的连接表示。可以使用简单的切片机制轻松提取它们。结果输出的形状为 (序列长度 × 200)其中第一个 (序列长度 × 100) 对应于 K其余 (序列长度 × 100) 对应于 V。
压缩的 K 和 V 输出在推理期间被缓存从而显著减少了 KV 缓存的内存占用。
类似地Q 也在MLA中被压缩。Q 的结果形状为(序列长度 × 100)。
第 2 步Q、K 和 V 的向上投影 压缩后Q、K 和 V被向上投影回更大的尺寸以进行注意力计算。这个更大的尺寸可以匹配原始输入 h t h_t ht 也可以遵循基于注意力头配置的结构。
例如向上投影的形状可以是
(序列长度×2000)与输入大小匹配。序列长度×3200其中3200来自于64×50有64 个注意力头每个头有 50 个维度。 K 和 V 向上投影 Q 向上投影 Q、K 和 V的上投影是使用专用权重矩阵执行的
W_UK 表示K 向上投影W_UV 用于垂直向上投影W_UQ 用于Q 向上投影
这里“U”代表向上投影表示将压缩表示扩展回更大维度的空间以进行注意力计算。 注意每个注意力头的输入维度将进行调整以适应旋转位置嵌入 (RoPE)。此调整将在接下来的部分中变得更加清晰。 步骤 3Q 和 K 中的 RoPE 嵌入用于编码位置信息 此步骤用于计算 RoPE 嵌入来编码位置信息。
旋转位置嵌入RoPE的结合
解耦 RoPE 策略为了整合位置信息DeepSeek-V2随后是 DeepSeek-V3 和 DeepSeek-R1采用了解耦 RoPE 方法。这涉及创建专门用于携带位置信息的额外查询 (Q) 和密钥 (K) 向量。连接这些 RoPE 增强的 Q 和 K 向量与上投影的 Q 和 K 向量连接。 这是 MLA 中比较棘手的部分。
我将尝试按照我从 DeepSeek 的技术报告中理解的方式来解释它。
在传统的 Transformer 层中RoPE 操作直接作用于 Q 和 K。它不改变 Q 和 K 的维度而是改变 Q 和 K 中的语义表示Q 和 K 中的数值来编码位置信息。因此得到的 Q 和 K 同时具有语义和位置信息。
但是在具有 MLA 的transformer层中RoPE 被应用于分离新生成的查询Q和键K嵌入并将其连接到上投影的 Q 和 K。 步骤 3.1为 Q 生成 RoPE 嵌入
传统上RoPE旋转位置嵌入会根据查询 (Q) 和键 (K) 向量在序列中的位置对它们应用旋转矩阵。此转换会直接在 Q 和 K 中编码相对位置信息从而无需使用正弦或绝对编码等显式位置嵌入。
但是在 MLA 中不是将 RoPE 应用于上投影的 Q q t C q_t^C qtC而是从 c t Q c_t^Q ctQ 生成新的 Q 嵌入 q t R q_t^R qtR并对其应用 RoPE。
通过将 c t Q c_t^Q ctQ 与权重矩阵 W Q R W^{QR} WQR 相乘可以生成完全独立的查询嵌入。这些新的独立查询嵌入经过 RoPE 转换为我们提供位置编码查询嵌入 ( q t R q_t^R qtR)。 q t R q_t^R qtR 的生成方式是它们可以连接到每个注意力头的输入查询嵌入以便每个注意力头都具有位置信息。 [从等式来看这个说法似乎是正确的但需要进一步验证。]
步骤 3.2为 K 生成 RoPE 嵌入 类似地不是将 RoPE 应用于上投影的 K而是生成新的 K 嵌入并对其应用 RoPE。 但是与 RoPE 嵌入的 q t R q_t^R qtR有两个关键区别
新的 K 嵌入是由 h t h_t ht输入嵌入而不是向下投影的 K c t K c_t^K ctK生成的。 相同的 RoPE 嵌入 K键连接到每个注意力头的输入。但是单独的 RoPE 嵌入 Q查询被计算并连接到每个注意力头如步骤 3.1 所示。[从等式来看这个说法似乎是正确的但需要进一步验证。]
为什么不从向上投影的 K 即 k t C k_t^C ktC 生成
DeepSeek-V2报告中的推理 “如果我们将 RoPE 应用于键k _ 将与位置敏感的 RoPE 矩阵耦合。这样 在推理过程中就不能再被吸收到_ 中因为与当前生成的 token 相关的 RoPE 矩阵将位于 _ 和 之间而矩阵乘法不遵循交换律。” 从下面的解释截图可以更好地理解这一点 K 的 RoPE 嵌入第 1 部分 K 的 RoPE 嵌入第 2 部分 K 的 RoPE 嵌入第 3 部分 因此为了提高推理效率位置嵌入的 K关键嵌入是从输入嵌入 h t h_t ht 生成的。
在 MLA 中引入额外的权重矩阵不会导致内存和计算效率低下吗
为了解决这些开销DeepSeek-V2 报告
“此外在推理过程中由于 可以被吸收到 中而 可以被吸收到 中我们甚至不需要计算键和值来引起注意。”
为了进一步减少内存消耗 “此外为了减少训练期间的激活内存我们还对查询执行低秩压缩即使它不能减少 KV 缓存” 步骤4计算注意力输出 连接过程会增加 Q 和 K 向量的维数。为了管理这种增加的维数模型可以采取以下任一方式
增加注意力头的数量这将保持原始的每个头的维度但需要更多的计算资源。调整每个头的维数保持头的数量不变但增加每个头的维数以适应连接的向量。
注意力输出是使用这些标准注意力方程来计算的 O_t_i 是注意力得分u_t 是注意力输出。W_o 表示输出投影权重矩阵。输出被投影回与输入相同的维度就像在我们的例子中这个形状将是 input_sequence_length x 2000 6.混合专家MoE 什么是混合专家 (MoE) 为了清楚地理解什么是 MoE首先让我们看看它在 Transformer 中的具体用途以及它的架构简介。标准 Transformer 层中的 FFN 被 MoE 取代。 从本质上讲MoE 遵循标准 Transformer 设计但通过引入多个并行专家网络(FFN) 而不是单个密集 FFN来修改前馈层。其工作原理如下
1. 多个 FFN而非一个
MoE 不使用单个共享的 FFN而是使用多个并行训练的FFN 层专家 。
2. 输入处理和令牌路由
每个 token 都像往常一样经过 transformer自注意力层。它不是由单个 FFN 处理而是被发送到路由器由路由器决定哪些专家应该处理它。
3. 通过路由器选择专家
一个小型的、可训练的路由器决定哪个专家子集FFN应该处理每个标记。通常每个 token仅选择 1 或 2 个专家以保持效率例如 top-1 或 top-2 门控。DeepSeek -V3DeepSeek-R1使用 9 个专家其中 1 个是共享专家其他 8 个是路由专家。选择通常基于softmax 评分机制其中路由器为每个专家分配概率。具体来说在 DeepSeek-V3 (DeepSeek-R1) 中使用 Sigmoid 而不是 softmax。
4. 专家稀疏计算
只有选定的专家才能处理令牌而其他人则保持不活动状态。专家输出使用加权求和进行组合并传递到下一个 Transformer 层。在 DeepSeek-V3/R1 中权重是归一化的 S 型输出。这种稀疏激活可确保任何时候仅使用模型的一小部分从而保持计算可管理。 为什么要用 MoE 取代单一 FFN 可扩展性— MoE 允许模型使用更多参数进行扩展而无需线性增加计算量。高效学习— 专家专注于数据的不同方面从而提高泛化能力。计算节省— 由于每个 token 仅使用专家子集因此与相同大小的密集模型相比MoE 模型的运行成本更低。DeepSeek-V3/R1 共有 6710 亿个参数其中每个 token 激活 370 亿个参数。 MoE 在 DeepSeek-R1 中如何发挥作用 以下来自 DeepSeek-V3 技术报告的公式显示了每个 MoE 层中的计算。在 DeepSeek 系列模型中MoE 架构首次在 DeepSeekMoE 模型中引入并且正在 DeepSeek-V2、DeepSeek-V3 和 DeepSeek-R1 中使用。
路由器计算
在 DeepSeek-V3 、 DeepSeek-R1 和其他一些现代混合专家 (MoE) 模型中e_i 表示学习到的质心有助于将输入路由到正确的专家。与传统的 MoE 架构中基于 FFN 的路由器计算门控分数不同此方法预定义了一组可学习向量e_i每个向量对应一位专家。
关键思想
每个专家 i 都有一个相关的质心向量 e i e_i ei。我们不是将输入 u t u_t ut 传递给 FFN 来获取专家概率而是通过点积来计 u t u_t ut 和每个 e i e_i ei 之间的相似度 该分数决定了专家与给定输入的相关程度。仅激活具有最高 s i , t s_{i,t} si,t 值的Top-K专家进行处理。 在 S 型输出中添加了一个偏差项以创建无辅助损失的 MoE 负载平衡。
DeepSeek-V3 论文中的这段描述进一步阐明了它的用途以及它在训练过程中的计算方式 使用选定的 top-k 值对输出值进行标准化。 专家计算 u t u_t ut是 MoE 层的输入。等式中的第二项表示输入与共享专家相乘。每个专家由 FFN前馈网络组成因此用“FFN”表示。在 DeepSeek-R1 中只有 1 个共享专家。因此Ns1。同样等式中的第三项表示输入与活跃的个人专家相乘。在 DeepSeek-R1 中总共有 256 个个人专家。但每个 token 只有 8 个活跃因此 Nr8。每个活跃的个人专家都将具有与等式 13 中关联的 g i , t g_{i,t} gi,t。它用于计算第三项。
输出 h t h_t ht表示 MoE 层的输出。 u t u_t ut 是 MoE 层的输入。专家计算结果添加到输入 u t u_t ut 中得到 MoE 层的输出。 7. 多标记预测MTP 什么是多标记预测 多标记预测是语言建模中的一种高级方法其中模型不是一次预测一个序列中的下一个单词而是同时预测多个未来标记。此方法使模型能够并行预测多个即将到来的单词从而提高学习效率并加速文本生成。 Meta 引入了一种多标记预测架构可训练语言模型同时预测多个未来标记从而提高采样效率并加快推理速度。在此概念的基础上DeepSeek-V3 整合了多标记预测 (MTP) 目标使模型能够同时预测多个标记。这种方法使训练信号密集化并能够更好地预先规划标记表示从而提高复杂基准测试的性能。
DeepSeek-V3/R1 和 Meta 的多令牌预测有两个关键区别 “与 Gloeckle 等人2024 年[Meta Research] 使用独立输出头并行预测 个额外标记不同我们按顺序预测其他标记并在每个预测深度保留完整的因果链。” — DeepSeek-V3 Meta 的模型预测了4 个 token而 DeepSeek-V3 预测了2 个 token。Meta 模型中的预测头是独立的而 DeepSeek-V3 的预测头是顺序连接的。 MTP 在 DeepSeek-R1 中如何工作 让我们一步一步地看一下该图表。
在训练期间输入标记位于左下角穿过嵌入层然后传播到所有变压器块/层。
第一个预测头包括输出头直接连接到主模型的最终 Transformer 层。输出头通常是前馈网络 (FFN)其输出维度与模型的词汇量相匹配。该头负责按顺序预测下一个标记。给定输入标记t₁、t₂、t₃、t₄它会预测t₂、t₃、t₄、t₅ 。但是在推理过程中只计算最终标记t₅ 。
第二个预测头通过添加额外的可学习层扩展了这种方法。它从主模型的最终 Transformer 层获取输出应用 RMSNorm 进行归一化然后将其与输入嵌入连接起来。这些输入嵌入是从主模型中使用的相同嵌入层获得的。与第一个预测头不同这个头从t₂而不是t₁开始处理输入标记。然后使用线性投影层将连接的输出投影到合适的嵌入大小然后使用可学习的 Transformer 块/层进行进一步处理。在训练期间这个头将t₃预测为t₆但在推理中只计算t₆ 。
类似地第三个预测头从第二个预测头的transformer器块/层获取输入以及相应的输入嵌入现在从t₃开始到t₆。它遵循与前几个头相同的结构在训练期间预测t₄到t₇但在推理期间仅计算t₇。
每个预测头使用交叉熵计算损失。然后这些损失用因子λ加权取其平均值作为最终损失值。 单独预测头损失 最终损失 在 DeepSeek-V3 和 R1 中MTP 仅在训练期间使用而不在推理期间使用 “推理中的 MTP我们的 MTP 策略主要是为了提高主模型的性能因此在推理过程中我们可以直接丢弃 MTP 模块主模型可以独立正常运行。”——DeepSeek-V3 参考资料
https://arxiv.org/pdf/2412.19437https://arxiv.org/pdf/2405.04434https://arxiv.org/pdf/2402.03300https://arxiv.org/pdf/2401.02954https://arxiv.org/pdf/2401.06066https://arxiv.org/pdf/2404.19737