Note
Transformer 的自注意力机制如何工作?
从 Q、K、V 到缩放点积注意力,解释并行计算与长距离依赖。
请详细解释一下 Transformer 模型中的自注意力机制是如何工作的?它为什么比 RNN 更适合处理长序列?
自注意力(Self-Attention)机制是Transformer模型的核心,它使得模型能够动态地衡量输入序列中不同单词之间的重要性,并据此生成每个单词的上下文感知表示。
工作原理如下:
-
生成Q, K, V向量: 对于输入序列中的每一个词元(token)的嵌入向量,我们通过乘以三个可学习的权重矩阵
W^Q, W^K, W^V,分别生成三个向量:查询向量(Query, Q)、键向量(Key, K)和值向量(Value, V)。- Query (Q): 代表当前词元为了更好地理解自己,需要去“查询”序列中其他词元的信息。
- Key (K): 代表序列中每个词元所“携带”的,可以被查询的信息标签。
- Value (V): 代表序列中每个词元实际包含的深层含义。
-
计算注意力分数: 为了确定当前词元(由Q代表)应该对其他所有词元(由K代表)投入多少关注,我们计算当前词元的Q与其他所有词元的K的点积。这个分数衡量了两者之间的相关性。
-
缩放(Scaling): 将计算出的分数除以一个缩放因子 (
d_k是K向量的维度)。这一步是为了在反向传播时获得更稳定的梯度,防止点积结果过大导致Softmax函数进入饱和区。 -
Softmax归一化: 将缩放后的分数通过一个Softmax函数,使其转换为一组总和为1的概率分布。这些概率就是“注意力权重”,表示在当前位置,每个输入词元所占的重要性。
-
加权求和: 最后,将得到的注意力权重与每个词元对应的V向量相乘并求和,得到最终的自注意力层输出。这个输出向量融合了整个序列的上下文信息,且权重由模型动态学习得到。
为什么比RNN更适合处理长序列?
- 并行计算能力: 自注意力机制在计算时,可以一次性处理整个序列,计算所有位置之间的关联,是高度并行的。而RNN(包括LSTM、GRU)必须按照时间顺序依次处理每个词元,无法并行化,导致处理长序列时速度非常慢。
- 解决长距离依赖问题: 在自注意力中,任意两个位置之间的交互路径长度都是O(1),因为可以直接计算它们的注意力分数。而在RNN中,序列首尾两个词元的信息传递需要经过整个序列的长度,路径为O(N),这极易导致梯度消失或梯度爆炸,使得模型难以捕捉长距离的依赖关系。