论文笔记-Attention Is All You Need

Transformer模型是谷歌2017年提出的NLP模型,自从提出以来,就在自然语言处理方面取得了很好的表现,并且可以实现并行化,最近又出现了许多将Transformer应用于计算机视觉的研究。
论文链接:https://arxiv.org/abs/1706.03762
博文参考:https://zhuanlan.zhihu.com/p/48508221
Attention机制介绍:https://www.cnblogs.com/ydcode/p/11038064.html

一、背景介绍

在Transformer提出之前,主要的用于处理序列的模型都是基于循环神将网络或者卷积神经网络,一般都包括一个编码器和解码器。

循环神经网络一般都沿着输入序列的位置进行计算,在每一个时间位置t上都会生成一个隐藏状态h_t来表示上一个吟唱状态h_{t-1}和t时的输入,由于内存限制这样处理的限制了模型的并行化。并且在顺序计算时会损失之前的信息,虽然有很多的tricks的提出提高了模型的表现,但是顺序计算的约束依然存在。

注意力(Attention)机制已经成为序列模型的一个组成部分,用于在不考虑起在输入或者输出序列中顺序的情况下建模依赖关系,但是注意力机制依旧是与循环网络结合使用。Attention是Encoder和Decoder之间的连接,它向Decoder提供来自Encoder的隐藏状态,是由各个元素按照其重要程度加权求和得到的,由attention函数实现。

而在Attention is all you need这篇文章中,Transformer可以提高并行化,避免了用 注意力机制去刻画出全局的输入与输出之间的依赖关系。Self-attention机制,可以将单个序列不同位置联系起来以计算序列的表现形式,将序列中任意两个位置之间的距离缩小为常量。Transformer完全依赖于self-attention来计算输入与输出的表示,而不是用序列对齐的RNN或者卷积,提高了并行性。

二、Treansformer的模型

大多数的序列处理模型都有一个编码器和解码器,这里编码器将符号表示(x_1, \cdot, x_n)的输入序列映射到一个连续的表示z=(z_1,\cdot,z_n)。给定z,解码器然后一次生成一个元素的符号输出序列(y_1,…,y_m)。在每一步中,模型都是自回归的,在生成模型时,使用先前生成的符号作为下一步额外的输入。

The Transformer model architecture

编码器:编码器由n=6个相同层的堆叠组成。每层有两个子层。第一个子层是自注意力层,第二层是一个简单的、位置相关的全连接前馈网络。在每两个子层的周围使用了一个residual连接,然后是层规一化。也就是说,每个子层的输出是LayerNorm(x+sublayer(x)),其中sublayer(x)是子层自身实现的函数。为了方便残差连接,模型中的所有子层以及嵌入层都会生成维度是d_{model}=512的输出。

解码器:解码器也由n=6相同层的堆叠组成。除了每个编码器层中的两个子层之外,解码器还插入第三个子层,该子层对编码器堆栈的输出执行多头部关注。与编码器类似,在每个子层周围使用了残差连接,然后进行层规一化。解码器中的self attention子层也被修改了,以防止位置涉及后续位置。这个masking,再加上输出嵌入被一个位置偏移,确保位置i的预测只能依赖于位置小于i的已知输出。

注意力机制:注意力函数可以描述为将查询和一组键值对映射到输出,其中查询、键、值和输出都是向量。输出作为值的加权和计算,其中分配给每个值的权重由查询的兼容函数和相应的键计算。
编码器和解码器中出现的注意力机制叫做Multi-Head Attention,其中又包括了Scaled Dot-Product Attention,内部结构如下图。

左:Scaled Dot-Product Attention. 右: Multi-Head Attention

  • Scaled Dot-Product Attention
    输入包括维度为d_k的查询和键,以及维度d_v的值。计算所有键与查询的点积,将每个点积除以\sqrt{d_k}$,然后应用softmax函数来获得查询的权重值。实际执行上,会同时计算一组查询的注意力函数,并将其打包到一个矩阵Q中。键和值也打包到矩阵K和V中。输出矩阵计算为Attention(Q,K,V)=softmax(\frac{QK^T}{\sqrt{d_k}}V)

最常用的两个注意力函数是加法注意和点积注意。点积注意与上面的算法相同,只是比例因子为\frac{1}{\sqrt{dk}}。加法注意利用一个具有单个隐层的前馈网络来计算相容函数。虽然两者在理论复杂度上相似,但点积注意在实践中更快更节省空间,因为它可以使用高度优化的矩阵乘法代码来实现。

  • Multi-Head Attention
    使用不同的线性投影分别将查询、键和值时间线性投影到d_kd_kd_v维,比使用模型维键、值和查询执行单个注意函数,更加有效。在查询、键和值的每一个投影版本上,并行地执行注意函数,得到d_v 维输出值。这些值被连接起来并再次投影,得到最终值。
    Multi-head attention使得模型能够在不同的位置共同关注来自不同表征子空间的信息。只有一个注意头,平均值会抑制这一点。MultiHead(Q,K,V) = concat(head_1,head_2, \cdot, head_h)W^O, \\ head_i=Attention(QW_i^Q, KW_i^K,VW_i^V)

Transformer中以三种不同的方式使用multi-head attention:

  • 在“编码器-解码器注意力”层中,查询来自前一个解码器层,存储键和值来自编码器的输出。这使得解码器中的每个位置都可以覆盖输入序列中的所有位置。这模仿了在序列到序列模型中典型的编码器-解码器的注意机制。
  • 编码器包含自我注意层。在self-attention层中,所有的键、值和查询都来自同一个地方,在本例中,是编码器中前一层的输出。编码器中的每个位置可以关注编码器前一层中的所有位置。
  • 类似地,解码器中的self-attention层允许解码器中的每个位置关注解码器中的所有位置,直到并包括该位置。为了保持自回归特性,需要防止译码器中的信息流左移。我们通过在点积注意力函数里屏蔽(设置为–∞)softmax输入中与非法连接相对应的所有值来实现。

除了注意力子层之外,编码器和解码器中的每一层都包含一个完全连接的前馈网络,它分别相同地应用于每个位置。这包括两个线性变换,中间有一个ReLU激活:FFN(x)=max(0,xW_1+b_1)W_2+b_2

位置编码:由于Transformer模型不包含递归和卷积,为了使模型利用序列的顺序,必须加入一些关于序列的相对或绝对位置的信息。为此,我们将“位置编码”添加到编码器和解码器堆栈底部的输入嵌入中。位置编码与嵌入具有相同的维度模型,因此可以将两者相加。论文中使用了自己设计的编码规则,通常位置编码是一个长度为 d_model的特征向量,便于和词向量进行单位加的操作。
对于不同的频率使用了正弦和余弦函数。

三、为什么用self-attention?

在本节中,我们将自我注意层的各个方面与通常用于将符号表示的一个可变长度序列(x_1,…,x_n)映射到具有x_i,z_i \in R_d的另一个等长序列(z_1,…,z_n)的循环和卷积层进行比较,例如典型的序列转换编码器或解码器中的隐藏层。我们考虑三个因素来激励我们使用self-attention。
一个是每层的总计算复杂度。另一个是可以并行化的计算量,以最小的顺序操作数来衡量。
第三是网络中长程依赖之间的路径长度。学习长程依赖性是许多序列转导任务中的一个关键挑战。影响学习这种依赖关系能力的一个关键因素是网络中前向和后向信号必须经过的路径长度。输入和输出序列中任何位置组合之间的路径越短,就越容易学习长程依赖关系。因此,我们也比较了在由不同层类型组成的网络中任意两个输入和输出位置之间的最大路径长度。

不同类型网络的比较。n是序列长度,d是维度,k是卷积核的大小,r是有限制的self-attention的邻居大小。

如上表所示,自我注意层用固定数量的顺序执行的操作连接所有位置(O(1)),而循环层需要n个顺序操作(O(n))。在计算复杂度方面,当序列长度小于表示维度时,自我注意层比循环层快,这通常是机器翻译中最先进模型使用的情况,例如词条和字节对表示。为了提高包含很长序列的任务的计算性能,可以将自我注意限制为只考虑大小为6的邻域,即以相应的输出位置为中心的输入序列。这也会增加最大路径长度(n/r)。

一个内核宽度为k<n的单个卷积层不能连接所有的输入和输出位置对。这样做需要一堆O(n/k) 的卷积层(对于相邻的核),或者O(logk(n)(对于空洞卷积),才能增加网络中任意两个位置之间最长路径的长度。卷积层通常要比循环层贵k倍。然而,可分离卷积也大大降低了复杂度到O(k·n·d+n·d2)。然而,即使在k=n的情况下,可分离进化的复杂性也等于我们在模型中采用的自我注意层和点态前馈层的结合。

自注意力机制是Transformer的关键,由于注意力机制将序列进行两两比较,导致计算量很大,许多论文都提出了各种加速的模型以及变体。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,591评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,448评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,823评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,204评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,228评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,190评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,078评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,923评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,334评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,550评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,727评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,428评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,022评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,672评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,826评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,734评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,619评论 2 354

推荐阅读更多精彩内容