目录
写在前面
加性注意力(Additive Attention)和点积注意力(Multiplicative Attention,也称为缩放点积注意力,Scaled Dot-Product Attention)是两种常见的注意力机制,用于计算不同序列元素之间的相关性。加性注意力最初用在seq2seq;点积注意力最初用在Transformer。总的来说点积注意力更符合当下的NLP模型,使用的更广泛。
一、加性注意力
加性注意力通过将查询(Query)和键(Key)向量进行拼接,然后通过一个全连接计算注意力分数。具体步骤如下:
1.线性变换:将查询向量 Q 和键向量 K 通过线性变换得到新的表示。
2.拼接并计算注意力分数:将变换后的查询和键向量拼接,并通过一个前馈神经网络(通常是一个单层感知机,MLP)计算注意力分数。
其中,W是一个可训练的权重矩阵, [q,k] 表示拼接后的向量。
3.归一化:使用softmax函数将注意力分数归一化为概率分布。
4.加权求和:将注意力权重与值向量 VV 进行加权求和,得到最终的输出。
二、点积注意力
点积注意力(Multiplicative Attention / Scaled Dot-Product Attention)通过直接计算查询向量和键向量的点积来获得注意力分数。缩放点积注意力则是在点积结果上进行缩放,以防止数值过大。具体步骤如下:
1.线性变换:将查询向量 QQ、键向量 KK 和值向量 VV 分别通过线性变换得到新的表示。
2.计算点积:计算查询和键的点积以获得注意力分数。
3.缩放:为了防止点积结果过大,导致softmax的梯度变得很小,对点积结果进行缩放,通常缩放因子为,其中 dkdk 是键向量的维度。
4.应用掩码(可选):如果需要掩盖部分位置(如解码阶段的未来标记),则将这些位置的分数设置为负无穷大。
5.归一化:使用softmax函数将缩放后的分数归一化为概率分布。
6.加权求和:将注意力权重与值向量V进行加权求和,得到最终的输出。
下面这个图上面的过程描述了上面的过程,其中、
、
是矩阵中的向量,带颜色的线表示先点乘(score是相乘)再相加:
三、QKV的理解
这里简答说一下QKV的理解,两种注意力机制都用到了查询向量(Q)、键向量(K)和值向量(V)。Q和K都是输入经过线性变换的到来的,操作是相似的,但我们习惯给他们赋予不同的角色,其实是便于理解。
1.查询向量(Q)
Query代表的是当前位置对其他位置的查询信号。它是从当前位置的角度出发,试图找出哪些位置的信息是重要的,应该被更多地关注。
2.键向量(K)
Key代表的是每个位置提供的信息的一种表征,用于响应来自Query的查询。Key的作用是为每个位置的信息建立一个索引,以便Query可以用来评估每个位置的相关性。
3.值向量(V)
Value在自注意力机制中扮演的是内容提供者的角色。每个位置的Value包含了该位置的具体信息,这些信息将根据计算得到的注意力分数被加权求和,以生成该位置的输出表示。
使用QKV有如下好处:
1. 可解释性:Q和K的乘积提供了一种解释性强的方式来表示不同元素之间的相互作用。每个元素的Query与其他所有元素的Key进行点积,可以看作是评估它们之间相似度的一种方式。
2. 参数共享:在使用QK计算注意力分数时,相同的Query和Key矩阵被用于所有的输入位置,这意味着模型可以在不同位置间共享学习到的特征表示,从而减少模型参数并提高泛化能力。
3. 动态性:通过Q和K的乘积,模型可以根据输入数据的不同长度动态调整注意力分布。这种动态性是全连接层难以实现的,因为全连接层通常生成固定的输出,而不是基于输入之间相互作用的动态输出。
四、总结
加性注意力:由于涉及拼接向量和通过前馈神经网络进行计算,计算复杂度相对较高。在处理较小的维度时表现良好,因为前馈神经网络能够捕捉更复杂的关系。
点积注意力:主要操作是矩阵乘法和缩放,计算复杂度相对较低,特别是当使用并行计算时。在处理较高维度时表现更好,因为点积操作能够更有效地计算相似性,并且缩放可以防止数值不稳定。
加性注意力和点积注意力是两种重要的注意力机制,各有优劣。在现代深度学习模型中,特别是Transformer架构中,点积注意力由于其计算效率和并行化能力,得到了更广泛的应用。
加性注意力还是点积注意力就介绍到这里,关注不迷路(#^.^#)