self-attention是注意力机制中的一种,也是transformer中的重要组成部分,而self-attention其本质的基础便是上一文提到了attention。本文中只讲解最简单的Self-Attention Mechanism,涉及到其他的会在transformer里面进行提及。
1.Self-Attention Mechanism模型结构
在Self-Attention的模型中,模型的输出是对整个模型的输入进行一个考虑,最终得到了相应的输出。(类似于Attention中S_i对于每个H_1.H_2,H_3的考虑)
上图所展示的便是Self-Attention的一个基本的运行结构。
明白了大致的模型结构,我们来具体了解一下B_1是如何得到的。
首先,我们需要去计算a_1,对应其他a_2,a_3,a_4的一个相关性。在我这里我们使用向量点积的方式来得到两个2向量之间的相关性。
上图所展示的便是相关性的计算过程。
我们看到我们会将输入的两个向量分别乘上对应的矩阵,W_q和W_k,得到Q(Query)和K(Key)两个结果。然后再用两个结果做内积得到相关性。(注意这里的W_q和W_k是两个可以学习的矩阵参数)。
通过上面的方法我们便可以得到a_1和a_2的相关性。
上图所展示的便是a_1和a_2相关性的计算过程。
依次类推我们也可以得到a_1和a_3,a_1和a_4甚至是a_1和a_1的一个相关性。
上图所展示的便是a_1和a_1,a_2,a_3,a_4相关性的计算过程。
随后我们对得到的相关性做一个归一化的操作,这里我们用softmax。
上图所展示的便是a_1和a_1,a_2,a_3,a_4相关性归一化的计算过程。
得到了相关性以后,我们又需要将a_1,a_2,a_3,a_4分别乘上W_v(这里的W_v也是学习的的参数矩阵),得到V_1,V_2,V_3,V_4。最后再讲相关性与对应的V对加权平均,得到了最后的B_1。
以此类推,我们便可以得到B_1,B_2,B_3,B_4。
上图所展示的便是self-attention矩阵模块的计算过程。