01
—
前言
02
—
Decoder-only Transformer 中的多头注意力机制
需要说明的是,MLA 主要用于加速基于自回归机制的文本生成,所以在本文中讨论的MHA 都是基于Decoder-only Transformer而言的。
对 MHA 和 Transformer 模型不熟悉的读者可以参考本公众号往期文章:
详解 Transformer(二):Multi-Head Attention
详解 Transformer (三):Positional Encoding
03
—
Key-value cache
Key-Value Cache是一种用于加速自回归生成过程的技术。它通过缓存并重用先前的 Key 和 Value,避免在每个解码步骤中重新进行计算,从而显著提高了推理速度。
需要注意的是,KV 缓存通常只在推理阶段使用,因为在训练阶段我们仍然需要并行处理整个输入序列。
KV 缓存通常实现为一种滚动缓冲区(rolling buffer)。在每个解码步骤中,模型只需要计算新的 Query,而缓存中保存的 Key 和 Value 会被重复使用。同时,当前新生成的 token 所对应的
然而,KV 缓存带来的速度提升是以显著的内存开销为代价的。当batch size 较大或序列较长时,这种扩展会造成内存瓶颈。因此,研究者提出了两种技术来缓解这一问题,分别是Multi-Query Attention和Grouped-Query Attention。
04
—
Multi-Query Attention和Grouped-Query Attention
下图分别比较了原始的MHA, MQA 和GQA。
MQA的基本思想是让所有的query head共享同一个 Key head和同一个 Value head。这种方式能显著减少内存使用,但也会对注意力的精度造成一定影响。
GQA可以被视为介于 MHA 与 MQA 之间的一种插值方法。它让一组query head共享同一组 Key 和 Value head,而不是让所有查询都共享。尽管如此,GQA 的效果通常仍然略逊于 MHA。
在后续章节中,我们将看到 MLA(Multi-Head Latent Attention,多头潜变量注意力) 如何更巧妙的平衡内存效率与模型精度。
05
—
RoPE (Rotary Positional Embeddings)
旋转位置编码RoPE(Rotary Positional Embedding) [11]是近年来在支持长输入序列的模型中较为流行的一种位置编码方法。它通过在多头注意力中利用正弦函数对查询向量(Query)和键向量(Key)进行旋转,从而将位置信息直接融入注意力机制之中。
具体而言,RoPE 在每个 token 的 Query 和 Key 向量上施加一个与位置相关的旋转矩阵。该矩阵以正弦和余弦函数为基础,但采用了一种独特的方式来实现向量的旋转操作,从而在不引入额外参数的情况下,编码相对位置信息。
其中,θ = θ(p) = p ⋅ θ₀,而 θ₀ 是一个基础频率(base frequency)。在我们的一个四维示例中,(x₁, x₂) 这对分量会按照角度 θ₀ 进行旋转,而 (x₃, x₄) 则会按照 2 × θ₀ 的角度旋转。
这也正是为什么我们称其为与位置相关的旋转矩阵(position-dependent rotation matrix):在每一个位置(或每一对分量)上,我们都会应用一个不同的旋转矩阵,而这个旋转矩阵的旋转角度是与这个位置相关的。
RoPE 在现代大型语言模型(LLM)中被广泛使用,因为它在长序列的位置信息编码方面非常高效。但正如上面的公式所示,RoPE 对 Q(Query)和 K(Key) 都具有位置敏感性,这也导致它在某些方面与 MLA(Multi-Head Latent Attention) 存在不兼容之处。

