Multi-Head Attention

Multi-Head Attention
foresta.yang
总结
在此,笔者可以得到一些对Multi-Head-Attention的结论:
-
通俗点理解Self-Attention就是用Q、K计算出每个token的权重进而对V向量进行提纯的方法,为什么叫Self-Attention呢,就是Q、K、V是来自于同一个输入经过三个不同的线性变换得到的。
-
对于大部分query,每个头都学习了某种固定的pattern模式,而且12个头中大部分pattern是差不多的,但是总有少数的pattern才能捕捉到语法/句法/词法信息。
-
《Attention Is All You Need》这篇原论文原文中解释了多头的作用:将隐状态向量分成多个头,形成多个子语义空间,可以让模型去关注不同维度语义空间的信息(或者说让模型去关注不同方面的信息)。
-
多头attention的有些头的功能是不一样的,有的头可能没啥信息(如第5head),有的头pattern由位置信息主导,有的头由语法信息主导,有的头由词法信息主导,而能够捕捉到语法/句法/词法信息的头其实是非常少的(这一点已被大量学术论文证明,笔者的句法破坏实验也验证了这一点),那么multi-head的作用就是为了保证这些pattern能够被抽取出来,需要让其有一定的头的基数,因为单头很容易就变成自己注意力全在自己身上了,这一点也可以从‘以上pattern中大部分pattern都是自己关注自己’这个现象身上得到佐证。
-
越靠近底层的attention,其pattern种类越丰富,关注到的点越多,越到顶层的attention,各个head的pattern趋同。
-
head数越少,**pattern会更倾向于token关注自己本身(**或者其他的比较单一的模式,比如都关注CLS)。
-
多头的核心思想应该就是ensemble,如随机森林一样,将特征切分,每个head就像是一个弱分类器,让最后得到的embedding关注多方面信息,不要过拟合到某一种pattern上。
-
已有论文证明head数目不是越多越好,bert-base上实验的结果为8、16最好,太多太少都会变差。
-
multi-head-attention中大部分头没有捕捉到语法/句法信息,但是笔者这里没办法做出断言说它们是没有用的,具体还是要看下游任务对其的适配程度。个人倾向于大部分pattern只是不符合人类的语法,在不同的下游任务中应该还是有用武之地的。
Transformer的角色定位是特征抽取器。所以多头对一个向量切分不同的维度来捕捉不同的pattern,这里就可以解释论文里原话中的不同维度的语义信息。
