有些突兀,不着急,接下来我们看看self-attention的公式长什么样子:此公式在论文《attention is all your need》中出现,抛开Q、K、V与dk不看,则最开始的self-attention注意力计算公式为:两公式对比可以发现,Q、K、V都是由输入词X(词向量)经过某种变换所得,向量与转置后的向量相乘,我们可以看做向量与转置后得到的矩阵空间中每一个子向量做点积运算,即向量内积值得注意的是:我们输入的只是一串字符,这里要把每个词转成我们后续可以进行操作的词向量,需要进行embedding操作,可以理解为把一个词如love转换为对应的语义信息如【1, 3, 0, 5】,当然为了获取词在输入序列中的位置信息,我们在后续的transformer中增加了对应词的位置信息(positional encoding)内积(点乘)的几何意义包括:1. 表征或计算两个向量之间的夹角2. a向量在b向量方向上的投影两向量相乘得一新的向量,即A*B=C,那么这个新的向量C就在一定个程度上代表向量A对向量B的投影度大小换个角度思考,投影度大小即输入序列中对应词与词的相关度,投影度越大(夹角越小),意味着在一定程度上两个词之间的相关度越大(词向量是文本形式的词在高维空间(抽象化)的数值形式映射)至此公式2中的X*X^T理解完毕,那么对它进行softmax函数计算,即可得到我们想要的权重值得注意的是:这里的权重过分关注于自身的位置,即对于X*X^T来说,最终的权重过分关注X对其他词向量的注意力而在一定程度上忽略了其他词,故在后续的transformer中作者采取了多头注意力机制来弥补同时softmax函数还很好的使得权重和为1,我们只需将得到的权重乘以原来的X,即可得到最终的输出,这个输出经过了一次词与词之间相关度(也就是注意力)的计算,这也完成了一个self-attention的过程现在让我们回到公式1:Q、K、V究竟是何方神圣?在上文部分有提到:Q、K、V都是由原X经过某种变换所得到的,用图来表示的话,可以用下面这张图:从图中不难看出,输入X乘以Q、K、V对应的W权值矩阵,就可以得到我们想要的Q、K、V注意:此处的Q、K、V仅局限于后续Encoder和Decoder在各自输入部分的编码过程,Encoder和Decoder之间交互的Q、K和V并非此(后文会进行详细介绍) 补充:最开始的W权值矩阵需要初始化,在后续BP的过程中,W的具体数值会不断更新学习,这样做的好处不仅仅是可以提高模型的非线性程度,还能提高模型拟合能力,通过不断学习让注意力权值正确分布公式中还在送入softmax前对权值矩阵乘以一个dk^(-1/2)(dk代表K的维度,同样的有dq、dv),这样做显然是对原权值矩阵做了一次缩放,这样做的意义是什么?如果我们在计算X*X^T完毕后,矩阵中元素的方差很大,这就会使得softmax的分布变得极其陡峭,从而影响梯度稳定计算,此时我们进行一次缩放,再将方差缩放到1,softmax的分布变得平缓稳定起来,进而在之后的训练过程中保持梯度稳定。至此self-attention的部分已经讲解完毕,接下来我们回到transformer中,一起来庖丁解牛。