首页 > 其他分享 >Google | 突破瓶颈,打造更强大的Transformer

Google | 突破瓶颈,打造更强大的Transformer

时间:2023-06-08 22:04:13浏览次数:47  
标签:Transformer Google 瓶颈 Attention Multi Head key 论文 size


作者:苏剑林

前言

《Attention is All You Need》一文发布后,基于Multi-Head Attention的Transformer模型开始流行起来,而去年发布的BERT模型更是将Transformer模型的热度推上了又一个高峰。当然,技术的探索是无止境的,改进的工作也相继涌现:有改进预训练任务的,比如XLNET的PLM、ALBERT的SOP等;有改进归一化的,比如Post-Norm向Pre-Norm的改变,以及T5中去掉了Layer Norm里边的beta参数等;也有改进模型结构的,比如Transformer-XL等;有改进训练方式的,比如ALBERT的参数共享等...

以上的这些改动,都是在Attention外部进行改动的,也就是说它们都默认了Attention的合理性,没有对Attention本身进行改动。而本文我们则介绍关于两个新结果:它们针对Multi-Head Attention中可能存在建模瓶颈,提出了不同的方案来改进Multi-Head Attention。两篇论文都来自Google,并且做了相当充分的实验,因此结果应该是相当有说服力的了

arxiv访问慢的小伙伴也可以在订阅号后台回复关键词【0415】下载论文PDF。

再小也不能小key_size

第一个结果来自文章《Low-Rank Bottleneck in Multi-head Attention Models》,它明确地指出了Multi-Head Attention里边的表达能力瓶颈,并提出通过增大key_size的方法来缓解这个瓶颈。

Multi-Head Attention

首先简单回顾一下Multi-Head Attention,Multi-Head Attention的基础是自然是Single-Head Attention,也叫Scaled-Dot Attention,定义如下:

(公式可以左右滑动哦)

其中。而Multi-Head Attention,就是将 分别用 个不同的投影矩阵投影 次,然后分别做 次Single-Head Attention,最后把结果拼接起来,即

Attention里有个瓶颈

在实际使用中, 一般具有相同的特征维度 (即hidden_size),比如BERT Base里边是768; 一般选择12、16、24等,比如BERT base里边是12;确定了 之后,通常的选择是让投影矩阵 ,也就是说,每个Attention Head里边,是将原始的 维投影到 维,然后在进行Attention运算,输出也是 维,最后把 个 维的结果拼接起来,得到一个 维的输出。这里的 我们通常称为head_size。

在Attention中,关键的一步是

这一步是描述了 与 的两两向量之间的联系,我们可以将 看成一个二元联合分布(实际上是 个一元分布,不过这个细节并不重要),如果序列长度都为 ,也就是每个元有 个可能的取值,那么这个分布共有 个值。

但是,我们将 分别投影到低维后,各自的参数量只有 ,总的参数量是 ,所以式 就相当于用 的参数量去逼近一个本身有 个值的量,而我们通常有 ,尤其是 比较大时更是如此,因此这种建模有点“强模型所难”,这就是原论文中的“低秩瓶颈(Low-Rank Bottleneck)”的含义.

不妨试试增大key_size?

那么,解决办法是什么呢?直接的想法是让 增大,所以要不就是减少head的数目 ,要不就是增加hidden_size大小 。但是更多的Attention Head本身也能增强模型的表达能力,所以为了缓解低秩瓶颈而减少 的做法可能得不偿失;如果增加 的话,那自然是能够增强模型整体表达能力的,但整个模型的规模与计算量也会剧增,似乎也不是一个好选择。

那没有其他办法了吗?有!当我们用投影矩阵将 都投影到低维时,前面都是将它们投影到 维,但其实它们的维度不一定要相等,而是只需要保证 的维度相等就行了(因为要做内积),为了区别,我们通常称 的维度为key_size, 的维度才叫head_size,改变key_size的大小而不改变head_size的话,也不影响模型的hidden_size。

所以,这篇论文提出来的解决方法就是增大模型的key_size,它能增加Attention的表达能力,并且不改变模型整体的hidden_size,计算量上也只是稍微增加了一点。

补充说明:事实上原论文考虑的是同时增大key_size和head_size、然后Multi-Head Attention的输出拼接之后再用一个变换矩阵降维,但笔者认为由于拼接降维这一步只是一个线性变换,所以本质上的提升还是来源于增大key_size,所以本文只强调了增大key_size这一步。此外,如果同时增大key_size和head_size,那么会导致计算量和显存消耗都明显增加,而只增大key_size的话,增加的资源消耗就小很多了。

来看看实验结果~

增大key_size这个想法很简单,也容易实现,但是否真的有效呢?我们来看看原论文的实验结果,其实验都是以BERT为baseline的,实验结果图表很多,大家直接看原论文为好,这里只分享比较有代表性的一个:

这个结果显示,如果固定一个比较大的key_size(比如128),那么我们可以调整模型的hidden_size和head数,使得参数量可以跟原始的BERT设计一致,但是效果更优!所以,增加key_size确实是有意义的,哪怕将总体参数量重新调整到原来的一样大,也能一定程度上提升模型的效果。这无疑对我们设计新的Transformer模型(尤其是小规模的模型)有重要的指导作用。

最后,附上我们预训练的两个增大了key_size的RoBERTa小模型,欢迎大家使用(我们称之为RoBERTa+):

https://github.com/ZhuiyiTechnology/pretrained-models

再缺也不能缺Talking

对Multi-Head Attention改进的第二个结果来自论文《Talking-Heads Attention》,这篇论文虽然没有显式地指出它跟前一篇论文的联系,但笔者认为它们事实上在解决同一个问题,只不过思路不一样:它指出当前的Multi-Head Attention每个head的运算是相互孤立的,而通过将它们联系(Talking)起来,则可以得到更强的Attention设计,即标题的“Talking-Heads Attention”。

从单一分布到混合分布

在前一篇论文里边,我们提到了低秩瓶颈,也就是由于key_size太小所以 表达能力不足,因此softmax之后无法很好地建议完整的二元分布。为了缓解这个问题,除了增大key_size之外,还有没有其他方法呢?有,比如这篇论文使用的混合分布思路。

所谓混合分布,就是多个简单分布的叠加(比如加权平均),它能极大地增强原分布的表达能力。典型的例子是高斯混合模型:我们知道高斯分布只是一个常见的简单分布,但多个高斯分布叠加而成的高斯混合分布(也叫高斯混合模型,GMM)就是一个更强的分布,理论上来说,只要叠加的高斯分布足够多,高斯混合分布能逼近任意概率分布。这个例子告诉我们,想要增加Attention中分布的表达能力,又不想增加key_size,那么可以考虑叠加多个低秩分布

那么“多个”低秩分布哪里来呢?不是有Multi-Head嘛,每个head都带有一个低秩分布,就直接用它们叠加就行了,这就是Talking-Heads Attention了。具体来说,它的形式是:

写起来很复杂,事实上很简单,就是在“ 之后、softmax之前”用一个参数矩阵 将各个 的结果叠加一下而已。这样就把原本是孤立的各个Attention Head联系了起来,即做了一个简单的Talking。

对上述公式,做两点补充说明:

1、简单起见,上述公式中笔者省去了缩放因子 ,如果有需要,读者自行补充上去即可;

2、更一般的Talking-Heads Attention允许可以在 这一步进行升维,即叠加出多于 个混合分布,然后再用另一个参数矩阵降维,但这并不是特别重要的改进,所以不在主要篇幅介绍。

再来看看实验结果

是不是真的有效,当然还是得靠实验结果来说话。这篇论文的实验阵容可谓空前强大,它同时包含了BERT、ALBERT、T5为baseline的实验结果!众所周知,BERT、ALBERT、T5均是某个时间段的NLP最优模型,尤其是T5还是处在superglue的榜首,并且远超出第二名很多,而这个Talking-Heads Attention则几乎是把它们的辉煌战绩又刷到了一个新高度!

还是那句话,具体的实验结果大家自己看论文去,这里展示一个比较典型的结果:


Google | 突破瓶颈,打造更强大的Transformer_Google

这个结果显示,使用Talking-Head Attention情况下,保持hidden_size不变,head数目越大(相应地key_size和head_size都越小),效果越优。这看起来跟前一篇增大key_size的结论矛盾,但事实上这正说明了混合分布对分布拟合能力明显提升作用,能够将key_size缩小时本身变弱的单一分布,叠加成拟合能力更强大的分布。当然,这不能说明就直接设key_size=1就好了,因为key_size=1时计算量会远远大于原始的BERT base,应用时需要根据实际情况平衡效果和计算量。

上述表格只是原论文实验结果的冰山一角,这里再放出一个实验表格,让大家感受感受它的实验阵容:


Google | 突破瓶颈,打造更强大的Transformer_投影矩阵_02

几乎每个任务、每个超参组合都做了实验,并给出实验结果。如此强大的实验阵容,基本上也就只有Google能搞出来了,而且整篇论文明显是浓浓的“T5 Style”(还没看过T5论文的读者,可以去Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer》感受一下),果不其然,作者之一Noam Shazeer也正是T5的作者之一。

笔者只想说,这种庞大的实验轰炸,仿佛在向我们宣告着:

不用质疑,该调的参数我们都调了,就我们的Talking-Heads Attention最好~

插曲:神奇的论文画风

话说回来,笔者在Arxiv上首次刷到《Talking-Heads Attention》这篇论文时,第一感觉是一篇垃圾论文。为啥?因为它的画风是这样的:


Google | 突破瓶颈,打造更强大的Transformer_投影矩阵_03


标签:Transformer,Google,瓶颈,Attention,Multi,Head,key,论文,size
From: https://blog.51cto.com/xixiaoyao/6443558

相关文章

  • Google colab 更改Tensorflow深度学习框架版本
    Googlecolab默认导入的tensorflow版本是2.0想,想更改tensorflow版本为1.x则需要加入%tensorflow_version1.ximporttensorflowastftf.__version__之后要进行colab的重启,即可完成版本改装,由于colab没有terminal,所以只能这么修改。欢迎登陆官网(附https://tensorflow.google.cn/)......
  • 深度学习应用篇-计算机视觉-图像分类[2]:LeNet、AlexNet、VGG、GoogleNet、DarkNet模型
    深度学习应用篇-计算机视觉-图像分类[2]:LeNet、AlexNet、VGG、GoogleNet、DarkNet模型结构、实现、模型特点详细介绍1.LeNet(1998)LeNet是最早的卷积神经网络之一<sup>[1]</sup>,其被提出用于识别手写数字和机器印刷字符。1998年,YannLeCun第一次将LeNet卷积神经网络应用到图像分类......
  • 深度学习应用篇-计算机视觉-图像分类[2]:LeNet、AlexNet、VGG、GoogleNet、DarkNet模型
    深度学习应用篇-计算机视觉-图像分类[2]:LeNet、AlexNet、VGG、GoogleNet、DarkNet模型结构、实现、模型特点详细介绍1.LeNet(1998)LeNet是最早的卷积神经网络之一[1],其被提出用于识别手写数字和机器印刷字符。1998年,YannLeCun第一次将LeNet卷积神经网络应用到图像分类上,在手写数......
  • 谷歌语音搜索服务Google Now试用效果超Siri
     谷歌语音搜索服务GoogleNow试用效果超Siri导语:美国科技博客BusinessInsider编辑史蒂夫·科瓦奇(SteveKovach)周日撰文称,Android4.1“果冻豆”系统中集成的语音搜索服务GoogleNow比iPhone4S中的Siri功能更强大,但Android系统更新发布速度较慢可能影响GoogleNow的普及。......
  • Google Guice 入门教程06 – Web 和 Servlet
    3Web和Servlet3.1快速开始我们从一个例子开始GuiceWeb的开发。首先准备我们的环境,由于是web开发,因此我们需要guice-servlet的jar包。log4j不是必须的,只是为了方便日志记录而已(Guice内部是使用jdk内部的logging包来完成日志记录的)。必可避免的要在web.xml中都一些手脚,这里先配......
  • 编码器 | 基于 Transformers 的编码器-解码器模型
    基于transformer的编码器-解码器模型是表征学习和模型架构这两个领域多年研究成果的结晶。本文简要介绍了神经编码器-解码器模型的历史,更多背景知识,建议读者阅读由SebastionRuder撰写的这篇精彩博文。此外,建议读者对自注意力(self-attention)架构有一个基本了解,可以......
  • Transformer结构及其应用详解——GPT、BERT、MT-DNN、GPT-2
    前言 本文首先详细介绍Transformer的基本结构,然后再通过GPT、BERT、MT-DNN以及GPT-2等基于Transformer的知名应用工作的介绍并附上GitHub链接,看看Transformer是如何在各个著名的模型中大显神威的。本文转载自新智元仅用于学术分享,若侵权请联系删除欢迎关注公众号CV技术指南,专......
  • 【IDE】Chrome 在其他机器登陆 Google 账号,没有退出,怎么及时保证账号及数据安全?
    Chrome浏览器,再配合Google账号,确实给我们带来了很多方便比如:书签同步,扩展插件同步,数据同步但是,当我们在别人的机器上登录Google账号后,如何及时保障账号安全呢?有人说,这有什么担心的?是,正常来说我们不需要操这份心。就怕碰到极端的人,或者别人的误操作,导致我们Google账号的......
  • 大模型核心技术原理: Transformer架构详解
    在大模型发展历程中,有两个比较重要点:第一,Transformer架构。它是模型的底座,但Transformer不等于大模型,但大模型的架构可以基于Transformer;第二,GPT。严格意义上讲,GPT可能不算是一个模型,更像是一种预训练范式,它本身模型架构是基于Transformer,但GPT引入了“预测下一个词”的任......
  • Google评分卡自评
    最近看了篇技术大佬的文章,原文链接(https://coolshell.cn/articles/20977.html),其中有个Google评分卡,记录一下自评结果,每年都来更新一下,记录自我成长评分标准0:youareunfamiliarwiththesubjectarea.(不熟悉的领域。也就是说对相关的领域几乎一无所知。)1:youcanread/u......