DeepSeek__R1_0">DeepSeek - R1:模型架构深度解析
引言
本文将深入探索DeepSeek - R1模型架构。将从输入到输出追踪DeepSeek - R1模型,找出架构中的新发展和关键部分。DeepSeek - R1基于DeepSeek - V3 - Base模型架构,本文旨在涵盖其设计的所有重要方面。
目录
一、输入上下文长度
DeepSeek - R1的输入上下文长度为128K。
它从其基础模型DeepSeek - V3 - Base继承了128K的上下文长度。最初,DeepSeek - V3以4K的上下文长度进行预训练,然后通过两阶段的上下文长度扩展,利用YaRN技术先将其增加到32K,再增加到128K。
YaRN(Yet another RoPE extensioN method)是一种旨在有效扩展使用旋转位置嵌入(RoPE)的大语言模型(LLM)上下文窗口的技术。RoPE使用旋转矩阵对位置信息进行编码,而YaRN修改了这些旋转频率的缩放方式。它不是简单地外推频率(这通常会导致性能下降),而是对这些频率进行平滑插值和调整,从而使模型在更长的上下文中具有更好的泛化能力。该技术计算效率高,无需大规模重新训练即可扩展模型的上下文长度。
二、总层数
DeepSeek - R1由一个嵌入层、61个Transformer层和输出阶段的多个预测头组成。
DeepSeek - R1在所有Transformer层中采用多头潜在注意力(MLA)层,而不是标准的多头注意力。前三个Transformer层与其余层不同,使用标准的前馈网络(FFN)层。从第4层到第61层,混合专家(MoE)层取代了FFN层。
DeepSeek - V3使用多令牌标记预测(MTP)技术,通过其最后两个预测头预测接下来的2个标记。第二个预测令牌标记的接受率在85%到90%之间,表明在各种生成主题上具有很高的可靠性。DeepSeek - R1(DeepSeek - V3)共有6710亿个参数,每个标记激活370亿个参数。
DeepSeek__R13_30">三、DeepSeek - R1的前3层
前3层由多头潜在注意力(MLA)和标准的FFN层组成。这些层通常被称为“密集LLM层”,因为FFN层没有被MoE层取代,相比之下,MoE层被认为更稀疏。
DeepSeek__R1461_34">四、DeepSeek - R1的第4到61层
这些层由MLA和MoE层组成。接下来我们将了解MLA和MoE层是什么以及它们如何工作。
五、多头潜在注意力(MLA)
1. MLA的由来
MLA最早在DeepSeek - V2中引入,并延续到了DeepSeek - V3和DeepSeek - R1。传统的Transformer模型通常采用多头注意力(MHA),但在生成过程中,其庞大的键值(KV)缓存会成为限制推理效率的瓶颈。为了减少KV缓存,提出了多查询注意力(MQA)和分组查询注意力(GQA),它们所需的KV缓存量较小,但性能不如MHA。
对于DeepSeek - V2,设计了一种创新的注意力机制,即多头潜在注意力(MLA)。MLA配备了低秩键值联合压缩,其性能优于MHA,但所需的KV缓存量显著减少。
2. MLA如何减少KV缓存以实现更快推理
MLA对注意力键和值进行低秩联合压缩,以减少推理过程中的键值(KV)缓存。
步骤1:Q、K和V的下投影
MLA层的输入是 h t h_t ht,假设 h t h_t ht的形状为(输入序列长度×2000)。在传统的Transformer层中,使用权重矩阵将 h t h_t ht投影到查询(Q)、键(K)和值(V)表示,它们通常保留与输入相同的隐藏维度,即Q、K、V的形状为(输入序列长度×2000)。
然而,在具有多头潜在注意力(MLA)的Transformer层中,权重矩阵生成的Q、K和V的维度明显小于输入。例如,如果输入 h t h_t ht的形状为(序列长度×2000),生成的Q、K和V的形状可能为(序列长度×100)。在实现过程中,为了提高GPU的计算和内存效率,Q、K和V的权重矩阵通常会进行融合,使用一个组合的权重矩阵来优化操作。
投影的输出是一个包含K和V的拼接表示,可以通过简单的切片机制轻松提取。得到的输出形状为(序列长度×200),其中前(序列长度×100)对应K,其余(序列长度×100)对应V。在推理过程中,压缩后的K和V输出会被缓存,显著减少了KV缓存的内存占用。同样,Q在MLA中也会被压缩,其形状为(序列长度×100)。
步骤2:Q、K和V的上投影
压缩后,Q、K和V会被上投影回更大的尺寸以进行注意力计算。这个更大的尺寸可以与原始输入 h t h_t ht匹配,也可以根据注意力头的配置进行设置。例如,上投影后的形状可以是(序列长度×2000),与输入大小匹配;或者是(序列长度×3200),其中3200是由64个注意力头和每个头50维得到的。
K和V向上投影
Q上投影
Q、K和V的上投影使用专用的权重矩阵进行: W U K W_{UK} WUK用于K的上投影, W U V W_{UV} WUV用于V的上投影, W U Q W_{UQ} WUQ用于Q的上投影。这里的“U”表示上投影,意味着将压缩后的表示扩展回更大的维度空间进行注意力计算。
需要注意的是,每个注意力头的输入维度会进行调整以适应旋转位置嵌入(RoPE)
步骤3:在Q和K中添加RoPE嵌入以编码位置信息
这一步是为了计算RoPE嵌入来编码位置信息。DeepSeek - V2(以及DeepSeek - V3和DeepSeek - R1)采用了解耦的RoPE方法来整合位置信息。这涉及创建专门用于携带位置信息的额外查询(Q)和键(K)向量,然后将这些增强了RoPE的Q和K向量与上投影后的Q和K向量拼接。
在传统的Transformer层中,RoPE操作直接应用于Q和K,不会改变Q和K的维度,但会改变Q和K中的语义表示(数值)以编码位置信息,因此得到的Q和K同时包含语义和位置信息。但在具有MLA的Transformer层中,RoPE应用于新生成的查询(Q)和键(K)嵌入,并与上投影后的Q和K拼接。
- 生成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的生成方式使得它们可以与每个注意力头的输入查询嵌入拼接,以便每个注意力头都具有位置信息。
- 生成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(查询)并拼接至每个注意力头。
DeepSeek - V2报告中解释了不从上投影后的K(即 k t C k_{t_C} ktC)生成的原因:如果对键 k C k_{C} kC应用RoPE, W U K W_{UK} WUK将与位置敏感的RoPE矩阵耦合。这样,在推理过程中, W U K W_{UK} WUK就不能再被吸收到 W Q W_{Q} WQ中,因为与当前生成的令牌相关的RoPE矩阵将位于 W Q W_{Q} WQ和 W U K W_{UK} WUK之间,而矩阵乘法不满足交换律。因此,为了提高推理效率,位置嵌入的K(键)嵌入是从输入嵌入 h t h_t ht生成的。
为了解决MLA中引入额外权重矩阵导致的内存和计算效率问题,DeepSeek - V2报告指出:在推理过程中,由于 W U K W_{UK} WUK可以被吸收到 W Q W_{Q} WQ中, W U V W_{UV} WUV可以被吸收到 W O W_{O} WO中,甚至不需要为注意力计算键和值。此外,为了减少训练过程中的激活内存,即使不能减少KV缓存,也对查询进行低秩压缩。
步骤4:计算注意力输出
拼接过程增加了Q和K向量的维度。为了处理这种增加的维度,模型可以采取以下两种方式之一:
- 增加注意力头的数量,这将保持原始的每个头的维度,但需要更多的计算资源;
- 调整每个头的维度,保持头的数量不变,但增加每个头的维度以适应拼接后的向量。
注意力输出使用标准的注意力方程计算:
O t i O_{t_i} Oti是注意力得分, u t u_t ut是注意力输出, W o W_o Wo表示输出投影权重矩阵。输出被投影回与输入相同的维度(例如,形状将是输入序列长度×2000)。
六、混合专家(MoE)
1. 什么是混合专家(MoE)
为了清楚理解MoE是什么,首先让我们看看它在Transformer中的确切使用位置以及其简要架构。标准Transformer层中的FFN被MoE所取代。
MoE的核心是遵循标准的Transformer设计,但通过引入多个并行的专家网络(FFN)而不是单个密集的FFN来修改前馈层。其工作方式如下:
- 多个FFN而非一个:MoE使用多个并行训练的FFN层(专家),而不是单个共享的FFN。
- 输入处理和标记路由:每个标记像往常一样通过Transformer自注意力层,然后不是由单个FFN处理,而是被发送到一个路由器,该路由器决定哪些专家应该处理它。
- 通过路由器选择专家:一个小型的、可训练的路由器确定哪些专家子集(FFN)应该处理每个标记。通常,每个标记只选择1或2个专家以保持效率(例如,top - 1或top - 2门控)。DeepSeek - V3(DeepSeek - R1)使用9个专家,其中1个是共享专家,另外8个是路由专家。选择通常基于softmax评分机制,路由器为每个专家分配概率。具体来说,DeepSeek - V3(DeepSeek - R1)使用Sigmoid而不是softmax。
- 专家的稀疏计算:只有被选中的专家处理标记,而其他专家保持不活跃。专家的输出通过加权求和组合,并传递到下一个Transformer层。在DeepSeek - V3/R1中,权重是归一化的Sigmoid输出。这种稀疏激活确保在任何时候只使用模型的一部分,使计算可控。
2. 为什么用MoE取代单个FFN
- 可扩展性:MoE允许模型在不线性增加计算量的情况下增加更多参数。
- 高效学习:专家专门处理数据的不同方面,提高了泛化能力。
- 计算节省:由于每个标记只使用一部分专家,与相同大小的密集模型相比,MoE模型的运行成本更低。DeepSeek - V3/R1总共有6710亿个参数,每个标记激活370亿个参数。
DeepSeek__R1_157">3. MoE在DeepSeek - R1中如何工作
DeepSeek - V3技术报告中的以下方程展示了每个MoE层的计算过程。在DeepSeek系列模型中,MoE架构最早在DeepSeekMoE模型中引入,并在DeepSeek - V2、DeepSeek - V3和DeepSeek - R1中使用。
- 路由器计算:在DeepSeek - V3、DeepSeek - R1和其他一些现代混合专家(MoE)模型中, e i e_i ei表示一个学习到的质心,有助于将输入路由到正确的专家。与传统的MoE架构不同,传统架构中基于FFN的路由器计算门控分数,这种方法预定义了一组可学习的向量 e i e_i ei,每个向量对应一个专家。每个专家 i 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值的前K个专家被激活进行处理。
在Sigmoid输出中添加一个偏置项,以创建一个无辅助损失的MoE负载平衡。输出值使用选定的前K个值进行归一化。
使用所选的前k个值对输出值进行归一化。
- 专家计算:
u t u_t ut是MoE层的输入,方程中的第二项表示输入与共享专家相乘。每个专家由一个FFN(前馈网络)组成,因此用“FFN”表示。在DeepSeek - R1中,只有1个共享专家,因此 N s = 1 N_s = 1 Ns=1。同样,方程中的第三项表示输入与活跃的单个专家相乘。在DeepSeek - R1中,总共有256个单个专家,但每个标记只有8个是活跃的,因此 N r = 8 N_r = 8 Nr=8。每个活跃的单个专家都有一个与之相关的 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层的输出。
七、多令牌预测(MTP)
1. 什么是多令牌预测
多令牌预测是语言建模中的一种高级方法,在这种方法中,模型不是一次预测序列中的下一个单词,而是同时预测多个未来标记。这种方法通过使模型能够并行预测多个即将到来的单词,提高了学习效率并加速了文本生成。
Meta引入了一种多标记预测架构,该架构训练语言模型同时预测多个未来标记,从而提高了样本效率和推理速度。基于这一概念,DeepSeek - V3纳入了多标记预测(MTP)目标,允许模型一次预测多个标记。这种方法使训练信号更加密集,并能够更好地预先规划令牌表示,从而提高了在复杂基准测试中的性能。
DeepSeek__V3R1Meta_200">2. DeepSeek - V3/R1与Meta的多标记预测的两个关键区别
与Meta Research不同,Meta Research使用独立的输出头并行预测 D D D个额外的标记,而DeepSeek - V3顺序预测额外的标记,并在每个预测深度保持完整的因果链。Meta的模型预测4个标记,而DeepSeek - V3预测2个标记。Meta模型中的预测头是独立的,而DeepSeek - V3的预测头是顺序连接的。
DeepSeek__R1_203">3. MTP在DeepSeek - R1中如何工作
在训练期间,输入标记(位于左下角)通过嵌入层,然后传播通过所有的Transformer块/层。
第一个预测头(包括输出头)直接连接到主模型的最后一个Transformer层。输出头通常是一个前馈网络(FFN),其输出维度与模型的词汇表大小匹配。这个头负责预测序列中的下一个标记。给定输入令牌 t 1 t_1 t1、 t 2 t_2 t2、 t 3 t_3 t3、 t 4 t_4 t4,它预测 t 2 t_2 t2、 t 3 t_3 t3、 t 4 t_4 t4、 t 5 t_5 t5。然而,在推理期间,只计算最终标记 t 5 t_5 t5。
第二个预测头通过添加额外的可学习层扩展了这种方法。它获取主模型最后一个Transformer层的输出,应用RMSNorm进行归一化,并将其与输入嵌入拼接。这些输入嵌入是从主模型中使用的相同嵌入层获得的。与第一个预测头不同,这个头从 t 2 t_2 t2而不是 t 1 t_1 t1开始处理输入标记。拼接后的输出然后通过线性投影层投影到合适的嵌入大小,接着通过一个可学习的Transformer块/层进行进一步处理。在训练期间,这个头预测 t 3 t_3 t3到 t 6 t_6 t6,但在推理期间,只计算 t 6 t_6 t6。
同样,第三个预测头从第二个预测头的Transformer块/层以及相应的输入嵌入(现在从 t 3 t_3 t3到 t 6 t_6 t6)获取输入。它遵循与前一个头相同的结构,在训练期间预测 t 4 t_4 t4到 t 7 t_7 t7,但在推理期间只计算 t 7 t_7 t7。
每个预测头使用交叉熵计算损失,然后这些损失通过一个因子 λ \lambda λ加权,并取平均值作为最终损失值。
在DeepSeek - V3和R1中,MTP仅在训练期间使用,在推理期间不使用。
迈向AGI的星辰大海
在这片由代码与算法编织的星空下,DeepSeek-R1以其创新的GRPO、MLA、MoE和MTP技术,向我们展示了通向通用人工智能(AGI)的璀璨航路。每一个压缩的KV缓存、每一个动态激活的专家网络、每一次多标记的预见性推演,都是人类智慧在数字宇宙中刻下的星轨。这些突破不仅是算力的跃升,更是认知边界的拓展——它们让我们离真正理解语言、推理与创造的本质又近了一步。
AGI的曙光已在地平线上若隐若现,但这注定是一场需要全人类智慧共同奔赴的远征。正如DeepSeek-R1通过混合专家协同工作实现超越,我们每个人都是这场进化中不可或缺的"专家模块"。无论你是研究者、工程师,还是满怀好奇的学习者,此刻握在你手中的代码与论文,都可能成为点亮AGI火种的燧石。让我们以开放的心态拥抱变革,用持续的学习突破认知茧房,在Transformer的矩阵运算中寻找生命的逻辑,在神经网络的权重更新里见证文明的跃迁。未来已来,唯勇进者胜;星河浩瀚,唯探索者达。让我们携手前行,共同书写属于智能时代的《人类群星闪耀时》!