Attention 机制
Attention 机制简单来说就是给定 Q(Query), K(Key), V(Value),通过 Query 和 Key 的匹配程度来决定从 Value 中提取多少信息(就是一个加权求和的过程)。这个可以参考数据库中的查询,根据查询键 Q 去匹配数据库中的键 K,找到对应的记录并取出该记录的值 V。Attention 机制与此类似,先通过 $ Q \cdot K^T $ 来计算相似度,由于$Q \cdot K^T$的结果是一个实数值向量,它的取值范围可能会很大,所以跟 V 相乘之前还需要先进行 softmax,softmax 会把它们归一化成一个和为 1 的概率分布,因此可以写成 $softmax(Q \cdot K^T) \cdot V$。不过 Transformer 的原论文《Attention Is All You Need》中还对$Q \cdot K^T$后的结果除了一个缩放因子$\sqrt{d_k}$,因为随着 $d_k$ 增大,点积的方差会变大,softmax 更容易饱和,导致梯度变小,而除以 $\sqrt{d_k}$ 可以避免这种饱和。由此可以得出最终的公式为 $Attention(Q,K,V)=softmax(\frac {Q \cdot K^T}{\sqrt{d_k}}) \cdot V$。由于加了“缩放因子”,所以这种Attention机制也叫Scaled Dot-Product Attention机制。 Self-Attention vs. Cross-Attention Self-Attention 之所以叫 “Self”,就是因为它的 Query、Key、Value 都是由同一个 x 分别通过不同的线性层(k_proj、q_proj、v_proj)来得到的。而 Cross-Attention 的 “Cross” 则是因为在 Transformer 中,它的 Key、Value 来自 Encoder 中的输出,而 Query 则是 Decoder 中的输入。 ...