刚从李宏毅老师的Transformer出来,弹幕里关于投影矩阵WQ/WK/WV是否共享已经吵翻,这里写一下自己的看法。
首先得搞清楚Multi-Head Self-Attention,什么是一个head:
如下图所示,是一个Multi-Head Self-Attention的计算图,右侧h的意思就是h个head,所以一个head就是一个Scaled Dot-Product Attention。
然后就是是否共享的问题,先摆出结论:在同一个head中,WQ都是同一个WQ,WK都是同一个WK,WV都是同一个WV,也就是各自共享,但是WQ、WK、WV之间一般互不相同,也就是互相不共享;在不同head里,WQ互不相同,也就是不共享,WK、WV也是如此。
举个例子解释一下,主要以WQ举例,对于WK和WV是同样适用的:比如我现在使用了一个3个heads的self-attention,在head1里,我的WQ=苹果,WK=西蓝花,WV=杨枝甘露,那么在head1里所有的WQ就都是苹果,这也就是“共享”,但是WQ、WK、WV是不同的,这是“不共享”;在head2里,我的WQ=芒果,WK=甘蓝,WV=茉香奶绿,head2里的WQ与head1中的WQ不同,这是“不共享”。
其实Multi-Head Self-Attention就是为了模仿CNN中不同kernel提取不同的模式,也就是得到的feature map中一个channel对应一种模式。类比过来,Multi-Head Self-Attention中一个head提取一种模式,最后h个head的输出concate起来,这样就模仿了CNN的功能!假设不同head里的WQ是一样的,那么也就是说CNN中的kernel都是一样的,那样就没意义了呀,只需要一个head就能解决模式提取,multi-head就毫无意义了,所以WQ在不同的head中是不同的。
下面放一篇论文,主要是证明Multi-Head Self-Attention是一种特殊的CNN,感兴趣的网友可以看一下:https://arxiv.org/abs/1911.03584