Note

Transformer 的自注意力机制如何工作?

从 Q、K、V 到缩放点积注意力,解释并行计算与长距离依赖。

请详细解释一下 Transformer 模型中的自注意力机制是如何工作的?它为什么比 RNN 更适合处理长序列?

自注意力(Self-Attention)机制是Transformer模型的核心,它使得模型能够动态地衡量输入序列中不同单词之间的重要性,并据此生成每个单词的上下文感知表示。

工作原理如下:

  1. 生成Q, K, V向量: 对于输入序列中的每一个词元(token)的嵌入向量,我们通过乘以三个可学习的权重矩阵 W^Q, W^K, W^V ,分别生成三个向量:查询向量(Query, Q)、键向量(Key, K)和值向量(Value, V)。

    • Query (Q): 代表当前词元为了更好地理解自己,需要去“查询”序列中其他词元的信息。
    • Key (K): 代表序列中每个词元所“携带”的,可以被查询的信息标签。
    • Value (V): 代表序列中每个词元实际包含的深层含义。
  2. 计算注意力分数: 为了确定当前词元(由Q代表)应该对其他所有词元(由K代表)投入多少关注,我们计算当前词元的Q与其他所有词元的K的点积。这个分数衡量了两者之间的相关性。

    Score(Qi,Kj)=Qi⋅Kj\text{Score}(Q_i, K_j) = Q_i \cdot K_j

  3. 缩放(Scaling): 将计算出的分数除以一个缩放因子 dk\sqrt{d_k}( d_k 是K向量的维度)。这一步是为了在反向传播时获得更稳定的梯度,防止点积结果过大导致Softmax函数进入饱和区。

    Q⋅KTdk\frac{Q \cdot K^T}{\sqrt{d_k}}

  4. Softmax归一化: 将缩放后的分数通过一个Softmax函数,使其转换为一组总和为1的概率分布。这些概率就是“注意力权重”,表示在当前位置,每个输入词元所占的重要性。

    AttentionWeights=softmax(QKTdk)\text{AttentionWeights} = \text{softmax}\left(\frac{Q K^T}{\sqrt{d_k}}\right)

  5. 加权求和: 最后,将得到的注意力权重与每个词元对应的V向量相乘并求和,得到最终的自注意力层输出。这个输出向量融合了整个序列的上下文信息,且权重由模型动态学习得到。

    Output=AttentionWeights⋅V\text{Output} = \text{AttentionWeights} \cdot V

为什么比RNN更适合处理长序列?

  1. 并行计算能力: 自注意力机制在计算时,可以一次性处理整个序列,计算所有位置之间的关联,是高度并行的。而RNN(包括LSTM、GRU)必须按照时间顺序依次处理每个词元,无法并行化,导致处理长序列时速度非常慢。
  2. 解决长距离依赖问题: 在自注意力中,任意两个位置之间的交互路径长度都是O(1),因为可以直接计算它们的注意力分数。而在RNN中,序列首尾两个词元的信息传递需要经过整个序列的长度,路径为O(N),这极易导致梯度消失或梯度爆炸,使得模型难以捕捉长距离的依赖关系。