为了账号安全,请及时绑定邮箱和手机立即绑定

DeepSeek-V3 解析 1:多头潜在注意力机制详解

DeepSeek-V2 和 DeepSeek-V3 背后的架构上的关键创新,实现更快的推理

使用ChatGPT生成的图片(由作者创作)。

这是我们新系列文章“DeepSeek-V3 解析”中的第一篇文章,在这里我们将尝试为您解释 DeepSeek-V3 [1, 2],这是 DeepSeek 最新开放源代码的模型 DeepSeek-V3。

在这个系列中,我们将讨论两个主要主题。

  • DeepSeek-V3 中的重大架构创新,包括 MLA(多头潜在注意力)[3]、DeepSeekMoE [4]、无辅助损失的负载均衡 [5] 以及多令牌预测。
  • DeepSeek-V3 的训练流程,包括预训练、微调和强化学习对齐。

这篇文章主要讨论的是多头注意力机制,该机制首先在DeepSeek-V2的开发中提出,随后也在DeepSeek-V3中得到了应用。

目录:

  • 背景信息:我们从标准的MHA开始,解释为什么在推理阶段需要使用键值缓存,以及MQA和GQA如何优化,RoPE的工作原理等。
  • 多头隐注意力机制:对MLA进行深入介绍,包括其动机、解耦RoPE的必要性及其性能。
  • 参考资料。
背景情况:

为了更好地理解MLA并让这篇文章自成一体,我们将在这一部分重新审视一些相关概念,然后再来详细了解MLA的相关细节。

Transformer中的仅解码器MHA

请注意,MLA是为了加快自回归文本生成过程的推理过程的速度而开发的,这里的MHA指的是仅在解码器端的Transformer。

下面的图表比较了三种在解码时使用的Transformer架构,其中(a)展示了原始论文“Attention Is All You Need”中提出的编码器和解码器。随后,[6] 对其解码器部分进行了简化,从而得到仅包含解码器的Transformer模型,如(b)所示。此模型后来被许多生成模型,如GPT [8] 等使用。

如今,大语言模型更常选择如(c)所示的结构来实现更稳定的训练,归一化操作是在输入端进行的,而不是在输出端,并将LayerNorm(层归一化)升级为RMS Norm(均方根归一化)。这将作为我们在本文中讨论的基础架构。

图1. Transformer架构图。(a)[6]中提出的编码器-解码器模型。(b)[7]中提出的仅解码器的Transformer模型,在GPT [8]中使用。(c)在注意力层前增加RMS归一化的(b)的优化版本。

在此背景下,MHA的计算过程基本上按照文献[6]中的方法进行,如下图所示:

图2展示了缩放点积注意力机制和多头注意力机制的区别。图片来自参考[6]。

我们假设存在n_h个注意力头,每个的维度是d_h,这样拼接后的维度就是(n_h·d_h)。

给定一个具有l层的模型,如果我们把该层第t个token的输入表示为h_t,其维度是d,我们需要通过线性映射矩阵将h_t的维度从d映射到(h_n×d_h)。

更正式地讲,我们有(如下方程式来自[3]):

其中 W^QW^KW^V 是线性映射矩阵。

经过这样的映射,q_tk_tv_t 将拆分,以计算缩放点积注意力机制:

W^O 是用来把 (h_n · d_h) 这个维度逆向映射回 d 的投影矩阵:

请注意,以下方程(1)到(8)描述的过程仅针对单个令牌。在进行推理时,我们需要为每个新生成的令牌重复此过程,这会产生大量的重复计算。这导致了一种称为键值缓存技术的方法。

键值缓存区

正如其名,键值缓存技术是一种通过缓存和重用之前的键值,而不是在每一步解码中重新计算这些键值,来加快自回归流程的技术。

注意,KV(键值)缓存通常仅用于推理阶段,因为在训练阶段,我们仍需并行处理完整的输入序列。

KV缓存通常实现为一个滚动缓存。在每个解码步骤中,只需计算新的查询Q,而缓存中的K和V会被重复使用,这样注意力计算就会使用新的Q和之前的K、V。同时,新词的K和V也会被添加到缓存中供后续使用。

然而,通过KV缓存实现的加速需要占用更多内存,因为KV缓存通常按 批量大小 × 序列长度 × 隐藏维度 × 头的数量 增长,当批量较大或序列较长时,会导致内存瓶颈。

这进一步引出了两种旨在解决这一限制问题的技术:多查询注意机制和分组查询注意机制等方法。

MQA vs GQA,这两个术语分别指的是多查询注意力机制和分组查询注意力机制。

下图对比了原始的MHA、分组查询注意力机制(GQA)[10]和多查询注意力机制(MQA)[9]。

图3. MHA [6],GQA [10] 和 MQA [9]。图片引自 [10]。

MQA的基本理念是让所有查询头共享同一个密钥和值头,这可以显著降低内存使用量,但也会在注意力准确性方面带来影响。

GQA可以被视为一种介于MHA和MQA之间的插值方法,其中一组查询头共享一对键值头,而不是由所有查询共享。但这种方法的效果仍然会比MHA差。

在后面的章节中,我们将看到MLA是如何做到在内存利用率和模型准确性之间找到平衡点的。

RoPE (旋转位置编码)

最后要提到的一点背景信息是RoPE(旋转位置编码)[11],它通过在多头注意力中的查询和键向量上使用正弦函数进行旋转,从而将位置信息编码进注意力机制,从而将位置信息编码进注意力机制。

更具体地说,RoPE对每个标记的查询和键向量应用了一个位置相关的旋转矩阵,虽然使用正弦和余弦作为基础,但通过独特的方式应用它们。

为了看看它为什么依赖位置,考虑一个简化了的嵌入向量,例如 (x_1, x_2, x_3, x_4)。

要使用RoPE,首先我们将连续的维度配对。

  • 例如:(x_1, x_2) -> 位置1:
  • 例如:(x_3, x_4) -> 位置2:

接着,我们使用旋转矩阵对每一对进行旋转。

图4. 旋转矩阵施加于一对标记的说明。作者提供。

其中 θ = θ(p) = p ⋅ θ_0​,θ_0​ 是一个 基本频率。在我们的 4 维例子中,这表示 (x_1, x_2) 将旋转 θ_0,(x_3, x_4) 将旋转 2 ⋅ θ_0。

这就是为什么我们将这种旋转矩阵称为位置相关的:在每个位置(或每对),我们将使用不同的旋转矩阵,旋转角度会根据位置变化。

RoPE 在现代大型语言模型中被广泛使用,因为在编码长序列时效率很高,如上公式所示,它对 Q 和 K 都是对位置敏感的,这使得它在某些方面与 MLA 不兼容。

多头注意力机制

终于我们可以进入到MLA部分了。在这节中,我们将首先阐述MLA的高层次概念,然后更深入探讨为什么它需要修改RoPE。最后,我们将展示MLA的详细算法以及它的表现。

MLA:高层次的想法

MLA的基本思想是将注意力输入h_t压缩成一个低维度的潜在向量,其维度为d_c,其中d_c远低于原始高维空间(h_n·d_h)。在需要计算注意力时,可以将这个潜在向量重新映射回高维空间,从而恢复键和值。因此,只需存储潜在向量,从而大大节省了内存。

这一过程可以用以下方程更正式地描述,其中c^{KV}_t是潜在向量,W^{DKV}是压缩矩阵,将h_t的维度从(h_n · d_h)压缩到维度d_c(这里的上标D表示“降维”,意味着压缩维度),而W^{UK}W^{UV}是升维矩阵,将这个共享的潜在向量映射回原来的高维空间。

同样,我们也可以这样做:将查询映射到低维潜在向量,然后再映射回原来的高维空间中。

为什么我们需要解耦的RoPE

正如我们之前提到的,RoPE 是训练生成模型来处理长序列时常用的策略。如果我们直接应用上述 MLA 方法,那将与 RoPE 不兼容,无法直接应用。

要更清楚地看出这一点,考虑使用公式(7)计算注意力时会发生什么:当我们把转置后的qk相乘时,矩阵W^QW^{UK}会出现在中间位置,它们的组合相当于从d_cd的一个映射过程。

在原论文 [3] 中,作者们描述为 W^{UK} 可以被“合并”到 W^Q 中,不需要将 W^{UK} 存储在缓存中,从而进一步降低了内存占用。

然而,当我们考虑图(4)中的旋转矩阵时,情况将不会如此,因为RoPE会在W^{UK}左侧应用一个旋转矩阵,这个旋转矩阵最终会位于转置后的W^QW^{UK}之间。

正如我们在背景部分所解释的,这个旋转矩阵是位置相关的,意味着每个位置的旋转矩阵都不同。因此,W^{UK} 无法被 W^Q吸收。

为了解决这一冲突,作者们提出他们所谓的“解耦的RoPE”,即引入额外的查询向量和一个共享的键向量,并在RoPE过程中仅用这些额外的向量,而让原有的键向量不参与旋转矩阵的运算。

MLA的整个过程可以总结如下:方程式编号沿用附录C中的[3],流程如下。

图5. MLA流程,图片由作者根据[3]中的公式编辑。

哪里

  • 式 (37) 到 (40) 描述了如何处理查询令牌。
  • 式 (41) 和 (42) 描述了如何处理键令牌(密钥令牌)。
  • 式 (43) 和 (44) 描述了如何使用额外的共享键进行 RoPE,需要注意的是,(42) 的输出不参与 RoPE 操作
  • 式 (45) 描述了如何处理值令牌。

在这个过程中,只有带有方框的蓝色变量需要缓存。下面的流程图可以更清楚地说明这个过程。

图6. MLA的流程图。图片来源:[3]。

MLA的性能

下表比较了每个令牌所需的KV缓存元素数量以及MHA、GQA、MQA和MLA之间的模型容量,这表明MLA确实可以在内存效率和模型容量之间取得更好的平衡。

有意思的是,MLA的建模能力甚至比原来的MHA模型更强。

1见于参考文献[3]。

更具体地说,如下表所示,MHA、GQA和MQA在7B规模的模型中的性能,其中,MHA的表现明显优于MQA和GQA。

参见表8 [3]。

[3]的作者还对MHA和MLA进行了比较分析,结果如下表所示,MLA的整体结果更好。

参考文献[3]中的表9,

参考文献
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消