【Analyzing Multi-Head Self-Attention: Specialized Heads Do the Heavy Lifting, the Rest Can Be Pruned】
本文细致的探讨了Transformer之中的不同Head的作用,以及尝试了丢弃一些看起来没什么用的Head,看对于最后的结果的影响到底是怎么样的。
Introduction
Transformer的提出对于整个的NLP领域的影响无疑是深远的,在其他的条件并不改变的情况下,使用8个Head的Attention相比于仅仅是使用一个Head的Attention的在BLEU的评判标准上就会增加一个Point,但是这些Attention是怎么样发挥作用的呢?之前有其他的人也研究过影响比如说
Voita 和 Tang在2018年就将不同的Head的Attention进行平均或者是Max的操作,看看他们的影响,这一步应该是可以看成是借用了CV领域之中的MaxPooling和Average Polling的操作吧,明天自己看看这两篇工作。不过本文作者指出这两种方式都没有考虑到单个的Head的作用,所以本文就看看不同的Head在文中的作用分别大概是怎么样的,以及删除一些看起来没有什么用的Head是不是可以对于模型的性能具有重大的影响。文章尝试解决下面的四个问题
- 翻译的质量多大程度上依赖于单个的Encoder Head
- 单个的Head扮演了什么角色?
- Encoder Attention,Decoder Attention,Encoder – Decoder Attention,这三种Attention哪一种最重要。
- 能不能直接删除某些Head
文章使用Layer – Wise Relevance Propagation 来识别最重要的Head,为了识别不同的Head的职责,作者简单的将不同的Head分成了三类,分别是
- Positional Head : 为了识别翻译之中所需要注意的单词的位置
- Syntactic: 为了识别翻译之中的句法的信息
- Rare Word:为了识别翻译之中的稀少的单词
Identifying Important Heads
定义一个Head的Confidence为该Head相对于其他的Head拥有的最大的值的数量。一个Confident的Head可以使得其映射后的向量有更大的值,进而对于模型产生更大的作用,所以我们可以假设Confident的Head对于翻译任务来说是重要的。
Layer-Wise Relevance Propagation(LRP) 是为了计算神经元之中的贡献的方法,所以文章使用LRP度量产出最后的结果的贡献,而如果其贡献越大,自然就对于整个模型的预测任务越重要。
现在我们就有两种评价标准了,那么根据这两种评价标准看看可视化之后的神经元的重要程度
可以发现不管是哪种度量方法,在每一层之中都是某一些少数Head起作用,有些Head在预测的时候就是纯粹打酱油的。
Characterized Heads
作者认为,每一个Head在模型之中的作用是不一样的,所以其将不同的Heads分了角色,有三种Heads
- Positional Head : 为了识别翻译之中所需要注意的单词的位置
- Syntactic: 为了识别翻译之中的句法的信息
- Rare Word:为了识别翻译之中的稀少的单词
那么什么样的Head才被认为是Positional Head呢?如果他们在百分之九十的时间内所做的事情仅仅是分配Position Information的话(也就是说其值为-1,1)我们就认为这是一个Positional Head,看看可视化的结果
这些值为1的Head,在LRP的度量标准之中也都是重要的信息,当然也非常Make Sense,在翻译的问题之中,不同的文字的语序自然是有变化的,如果可以搞定语序问题,就算是直译也可以达到不错的效果,所以Positional的信息自然是相对而言重要的信息。
Syntactic Heads
还有一类Heads被作者称为是Syntactic Heads,因为作者认为在翻译的时候,Transformer的Encoder可能会承担一部分消除句子结构的歧义的作用,从而使得模型可以更好的对于句法的连接关系进行表达。作者考察了下面的这几种Dependency 关系。
- Nominal Subject
- Direct Object
- Adjectival Modifier
- Adverbial Modifier
具体的挖掘Dependency的方法呢,很emmm,不好评价,大家可以看看,首先是使用CoreNLP(StandFord的一个NLP包)挖掘得到了Dependency,然后将Weight与这个Dependency比较,也就是说如果在矩阵之中的某一点的Weight比较高的话,我们就认为这矩阵之中的横和纵具有较为明确的关系,而这个关系如果是正好和之前调包的Dependency对上了,我们就说他预测到了这种Dependency。
Rare Words
这种就比较简单了,对于稀少的单词的注意力,就直接看那些比较稀少的单词的位置上是不是Attention比较大,就可以评判了,如果比较大的话,那么说明一定程度上分配了注意力在此。
这个图就是通过上面的三种方式分类之后所得到的Head的分布图,还是非常直观的结果吧。
Pruning Attention Heads
这里就是删除了一些Attention Heads,看看对于最后的结果有没有影响,感觉这里可以使用一些强化学习(Reinforcement Learning )的方式来做,可能会达到一个自适应的结果。好现在看看文中怎么做的
原文的计算的方式是
$$MultiHead(Q,K,V) = Concat_{i} (head_{i})W^{O}$$
而现如今改变成为了
$$MultiHead(Q,K,V) = Concat_{i} (g_{i}*head_{i})W^{O}$$
非常的直接啊,在这里加入一个gate_{i}.其中这里的$g_{i}$是与输入无关的,只是与Head有关。但是由于我们想要是将那些Head完全的失活,而不是一定程度上的DownWeight。所以作者在$g_{i}$的处理上面增加了一个$L_{o}$的正则项把他往0拉。但是由于$L_0$无法微分,所以无法直接的将其放进目标之中优化,所以,作者使用了一种Relaxed的方式,也就是将gate看成是与Head有关的随机变量,使其服从Hard Concrete Distribution,这个分布的特点是在0和1处有较大的密度。
将$\phi_{i} $看成是对于第$i$个Head的参数的话,那么其为0的概率就是$P(g_{i} = 0|\phi_{i})$,而正则项则写成是
$$L_{C}(\phi) = \sum_{i=1}^{h}(1-P(g_{i}=0|\phi_{i} ))$$
对于不可微的函数的,这种解决方法使得其变成可微分也是常用的技巧了,好像在VAE之中也是使用了这样的方式,使得整个模型可以正常的运转。通过控制正则项的强度,裁剪不同数量的Head,而裁剪的结果呢,如下所示
可以发现,的确裁剪掉一些head之后对于整体的模型效果的差别并不大,但是如果大规模的裁剪的话,特别是通过某一些阈值之后,整个模型的效果就会急剧的下降,为什么呢?文章也用下图给了自己的解释
在一开始的时候,大多数的Head都是不知道有什么作用的,比如48个总head的时候有34个的作用是Unknown的,当Head的数量减少的时候,那些真正的Work的Head的数量的变化并不大,比如Syntactic的Head在总Heads减少了31个的情况下也仅仅是减少了一个,可以仔细看看上图的结果的剧烈变化点都在上面地方,从后往前看,在第6个左右出现了巨大的跃迁,而在下图之中,第六个仍然保持了两个Syntactic两个Position一个Rare的配置,可以说是麻雀虽小五脏俱全,而之后,就不得不放弃一些角色了,而为数不多的Head很明显无法顾及不同的方面的信息,所以也就导致了最后的模型效果下降。
最后的还有一部分的不同的种类的Attention的评估我就不在这儿写了,大家有兴趣可以找原文看看。(因为要出去恰饭了嘻嘻)
Comments
这篇文章,个人感觉是一篇非常好的文章,知其然还要知其所以然,思路也非常的Natural,没有引入复杂的概念,只是按部就班的一个问题接着另一个问题的解决,解决的Visualization也非常的直观,中间的Relaxation的方式也非常的漂亮,引入的函数分布的类型也是很有趣的函数,自己这又偷学了一招好的。
这篇文章的方法又给自己了一些Hint吧,不过这些Hint仍然无助于自己解决自己工作之中的问题啊呜呜呜,不过我也可以尝试一下Maxpooling的方式,但是如果是用Maxpooling那也的确会丢掉蛮多的信息,自己还是找不到一种Elegant的方法来处理Centralized Probability的问题。
Reference
Analyzing Multi-Head Self-Attention: Specialized Heads Do the Heavy Lifting, the Rest Can Be Pruned
Comments
Leave a Comment