多头注意力机制_bert性能优化之——用另一种方式整合多头注意力

本文介绍了如何通过提取多头注意力机制中的通用信息来优化BERT模型性能,提出CollabHead方法,减少了计算成本并保持了精度。通过对注意力头的张量分解和重新参数化,实现了在降低维度的同时提升模型推理效率。
摘要由CSDN通过智能技术生成

今天我想给大家介绍这样一篇论文:Multi-Head Attention: Collaborate Instead of Concatenate。作者均来自

洛桑联邦理工学院_百度百科​baike.baidu.com
508dcd29fb5680b84598fb1718d0154b.png

看过我文章的同学肯定知道,我一直在关注bert模型的性能优化相关研究,而这篇论文正好是与transformer的性能优化相关,并且我认为它的方法不需要做太多的适配就能应用在预训练模型上面,实用性较高,因此推荐给大家。


众所周知,经典的transformer架构中采用了multi-head attention机制来引导模型从不同角度学习不同的语义信息,从各种实验对比中也能发现多头机制确实能够提升模型在NLP任务上的精度。然而,随着目前大规模预训练模型的普及,多头注意力机制在带来精度提升的同时,也增加了计算的成本,带来了性能上的限制。

因此最近两年,有些研究人员尝试从不同的维度去探讨是否能从多头机制上去优化transformer的性能。有些工作重点关注了多头中每个头的注意力到底捕捉了哪些语义信息,头与头之间捕捉的信息是否有冗余,例如这篇论文:Analyzing multi-head self-attention: Specialized heads do the heavy lifting, the rest can be pruned,提出了一种量化注意力头重要程度的方法。还有一些工作更加激进,提出了多头注意力机制是否有必要的疑问,例如这篇论文:Are sixteen heads really better than one。它对transformer中的每个头都做了消融实验,探讨了每个头在不同下游NLP任务上的作用,最后提出了一种迭代式地剪枝注意力头的方法。

与上述工作不同,本篇论文并非直接对注意力头进行结构性剪枝,而是关注所有注意力头捕捉的通用信息,试图将这些信息提取出来作为sharing weights,每个头各自关注自己独有的工作,从而减少多头注意力计算时的成本。下面我就详细得为大家解读这篇论文的工作。

单个注意力头的减负

在那篇经典的Attention is all you need论文中,对于注意力分数的计算是这样的:

其中,

当X和Y是同一个序列时,就是自注意力模型,此时

然而,在各种版本的transformer实现中,上述各种线性映射计算是附加bias的,即

,其中
。因为在各种深度学习框架中,默认支持broadcasting,所以这里公式上引入了
,相当于实现了broadcasting。

在引入了bias后,我们重新对

进行展开,可得:

备注一下:论文这里的公式貌似有点问题,最后一项应该是我推导出的项。

最后两项在做softmax的时候可以舍弃掉,为什么呢?其实很简单,我们得到的Attention分数是一个T*T的矩阵,而

得到的都是一个T*1的向量,最后通过
重复了T列扩充成了矩阵,因此每一行上,它的每一列的值都是相同的,因为softmax针对的是列维度,因此后两项对于整体的attention计算来说是一个常量,又因为:
,因此最后两项计算可以舍弃。又因为前面两项中,不存在
,因此我们甚至不用去定义这个bias项。

另外,对于上述推导式的第一项,由于其计算了Query和key的相互关系,因此相当于捕捉了上下文的相关信息,而第二项只包含了key的content信息,相当于捕捉了原文内容上的信息。

多头注意力的整合

传统的transformer中,对于不同的注意力采取的整合方式是直接拼接,如下所示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值