self-attention 的本质就是从一个矩阵生成三个新的矩阵,这三个矩阵分别记作 qkv,然后将 q 乘以 k 的转置,得到的结果再与 v 相乘,再将最后得到的结果送入下游任务。因此实际上任何网络都可以融入 self-attention,生成三个新矩阵的方式也很简单,只需要调用三次 nn.Linear ()。用什么矩阵来生成三个矩阵?随意,比方说 nlp 中可以用 word2vec 的输出来作为 "母矩阵",通过三次 nn.linear () 将 "母矩阵" 生成三个 "子矩阵"
以上就是我所理解的 self-attention 的本质
你能比较一下 Attention 和 self-Attention 的区别嘛,从 Transform 的代码来看,self-Attention 中的 QKV 都是由不同的权值矩阵得到的,可以算作是来源于相同信息的不同变换;Attention 中的 Q 和 V 是一样的,也是同源,K 是由什么生成的,你的文章里的 x' 是什么,是 target 嘛;所以,self 就是体现在 K 的来源嘛?