万字长文——搞懂Transformer的来龙去脉

原文:Attention is all you need

万字长文——搞懂Transformer的来龙去脉_第1张图片

谷歌团队2017年发表在NIPS

简单理解Transformer

处理词语的方式:

传统的方法是逐个词处理,就像阅读一本书,一次只看一个词。但Transformer可以同时看到一句或一段话

无需RNN一样t步骤的计算必须依赖t-1步骤的结果

关注重要的地方:

特别擅长关注句子中不同的部分,就像我们读文章时,可能会关注章标题、关键词、或者句子中的重要信息。

记得顺序:

虽然它能一次性看到整个句子,但为了理解语言的顺序,注入了位置信息,可以记得每个单词的位置信息

Encoder-Decoder框架

主要被用来处理序列-序列问题。也就是输入一个序列,生成一个序列的问题。这两个序列可以分别是任意长度

万字长文——搞懂Transformer的来龙去脉_第2张图片

Encoder

编码器,对于输入的序列进行编码,使其转化为一个语义编码C,C中储存了序列的信息。文本处理领域得编码信息主要有RNN,LSTM,GRU

编码方式,以RNN为例

为了建模序列问题,RNN引入了隐状态h(hidden state)的概念(用后面用h表示隐藏层),h可以对序列的数据提取特征,接着再转换为输出。

万字长文——搞懂Transformer的来龙去脉_第3张图片

一个圆圈代表一个向量,一个箭头代表做一次变换

万字长文——搞懂Transformer的来龙去脉_第4张图片万字长文——搞懂Transformer的来龙去脉_第5张图片

得到c有多种方式,最简单的方法就是把Encoder的最后一个隐状态赋值给c,还可以对最后的隐状态做一个变换得到c,也可以对所有的隐状态做变换。

注意:每次变换时,U,W,b的值可能不一样

Decoder

根据输入的语义编码C,然后将其解码成序列数据

解码方式:

将C当作初始状态的输入

万字长文——搞懂Transformer的来龙去脉_第6张图片

将c当做每一步的输入

万字长文——搞懂Transformer的来龙去脉_第7张图片

Decoder和Encoder的编码解码方式可以任意组合,比如说,使用RNN编码,可以用RNN解码,也可以使用LSTM,GRU解码

缺点

在Encoder-Decoder结构中,Encoder把所有的输入序列都编码成一个统一的语义特征c再解码,因此, c中必须包含原始序列中的所有信息,它的长度就成了限制模型性能的瓶颈。如机器翻译问题,当要翻译的句子较长时,一个c可能存不下那么多信息,就会造成翻译精度的下降。

Attention

核心思想

核心思想是从关注全部到关注重点,当模型处理输入数据时,不必一概而论的平等对待所有信息。相反,可以根据任务的需要,给予不同部分的信息不同的重要性,提高模型的性能和泛化能力

万字长文——搞懂Transformer的来龙去脉_第8张图片

以上这张图可以较好地去理解注意力机制,其展示了人类在看到一幅图像时如何高效分配有限注意力资源的,其中红色区域表明视觉系统更加关注的目标,从图中可以看出:人们会把注意力更多的投入到人的脸部。文本的标题以及文章的首句等位置。

基本思想

Attention机制通过在每个时间输入不同的c来解决上述问题

万字长文——搞懂Transformer的来龙去脉_第9张图片

每一个c会自动去选取与当前所要输出的y最合适的上下文信息。在预测Y1时,可能Y1的注意力是放在C1上,就用C1作为语义编码,当预测Y2时,Y2的注意力集中在C2上,用C2作为语义编码。

计算C  以机器翻译例子"Tom chase Jerry" - "汤姆追逐杰瑞"来说明

当我们在翻译"杰瑞"的时候,为了体现出输入序列中英文单词对于翻译当前中文单词不同的影响程度,比如给出类似下面一个概率分布值:(Tom,0.3)(Chase,0.2)(Jerry,0.5)每个英文单词的概率代表了翻译当前单词“杰瑞”时,注意力分配模型分配给不同英文单词的注意力大小

万字长文——搞懂Transformer的来龙去脉_第10张图片

f2(“Tom”),f2(“Chase”),f2(“Jerry”)就是对应的隐藏层的值h(“Tom”),h(“Chase”),h(“Jerry”)。g函数就是加权求和。αi表示权值分布

因此上述公式就可以写为万字长文——搞懂Transformer的来龙去脉_第11张图片

即现在就剩下如何计算权重的问题

万字长文——搞懂Transformer的来龙去脉_第12张图片

decoder上一时刻的输出值Yi-1与上一时刻传入的隐藏层的值Si-1通过RNN生成Hi,然后计算Hi与h1,h2,h3…hm的相关性,然后对其进行softmax,转换成一个0-1之间的概率分布

本质思想

比如考虑以下句子:“The cat sat on the mat.” 在翻译成另一种语言时,注意力机制可以帮助模型关注源语言中与当前要翻译的词语相关的部分。
Query(查询):比如“坐”(对应英文句子中的“sat”)。在这个例子中,“坐”就是 Query(Q)。
Key(键): Key 是用来与 Query 进行比较以确定重要性的部分。在上述例子中,Key 是源语言(比如英文)句子中的所有单词,它们被用来和 Query 进行比较,以确定哪些部分与 Query 最相关。
Value(值): Value 是与 Key 对应的实际数值或信息。在翻译任务中,Value 是源语言中与 Key 相关的词语的翻译。在上述例子中,“The cat sat on the mat.” 中的每个单词都对应着它们的翻译。
万字长文——搞懂Transformer的来龙去脉_第13张图片

通过计算Query和各个Key的相似性或者相关性,得到每个Key对应Value的权重系数,然后对Value进行加权求和,即得到了最终的Attention数值。所以本质上Attention机制是对Source中元素的Value值进行加权求和,而Query和Key用来计算对应Value的权重系数。

计算相似性的方法:

万字长文——搞懂Transformer的来龙去脉_第14张图片

第二阶段引入类似SoftMax的计算方式对第一阶段的相似性得分进行数值转换,一方面可以进行归一化,将原始计算分值整理成所有元素权重之和为1的概率分布;另一方面也可以通过SoftMax的内在机制更加突出重要元素的权重。

第三阶进行加权求和即可得到Attention

总结attention的三个阶段

万字长文——搞懂Transformer的来龙去脉_第15张图片

阶段1:Query与每一个Key计算相似性得到相似性评分s
阶段2:将s评分进行softmax转换成[0,1]之间的概率分布
阶段3:将[a1,a2,a3…an]作为权值矩阵对Value进行加权求和得到最后的Attention值

self-attention

在一般任务的Encoder-Decoder框架中,输入和输出内容是不一样的,比如对于英-中机器翻译来说,输入是英文句子,输出对应的翻译出的中文句子,Attention机制发生在输入的元素和输出中的所有元素之间。

指的不是输入和输出之间的Attention机制,而是输入内部元素之间或者输出内部元素之间发生的Attention机制,也可以理解为输入和输出相等这种特殊情况下的注意力机制。

Transformer

Abstract

目前主要的序列转录模型是包含Encoder-Decoder架构的RNN或CNN,性能最好的是通过注意力机制连接的Encoder-Decoder架构。

本文提出了一种简单的架构-Transformer,抛弃了RNN和CNN,完全基于注意力机制。

 对于机器翻译的任务,模型具有卓越的质量,同时具有更高的并行性能,需要的训练时间显著减少,在WMT2014英德翻译任务中,获得25.4的BLEU,比现有的最佳结果提高了2BLEU以上,英法翻译任务中,在8个GPU上训练3.5天后,BLEU为41.8。

Introduction

RNN通常会沿着输入和输出序列的符号位置进行计算。会生成一系列的隐藏状态ht,作为先前隐藏状态 ht−1 和位置 t 输入的函数。固有的顺序性质阻碍了训练示例中的并行化。序列很长,前面的信息可能会丢掉。内存开销将会很大

注意力机制允许对依赖关系进行建模,而不考虑它们在输入或输出序列中的距离。然而,除了少数情况外,这种注意力机制都是与循环网络结合使用的。

本文中提出了 Transformer,是一种避免重复的模型架构,完全依赖注意力机制来绘制输入和输出之间的全局依赖关系。

Background

ByteNet 和 ConvS2S 的目标都是减少顺序计算,这些都使用卷积神经网络作为基本卷积模块,这使得学习长距离位置之间的依赖关系变得困难。在Transformer中,计算被减少到恒定数量的操作

Transformer 是第一个完全依赖自注意力来计算其输入和输出表示而不使用序列对齐 RNN 或卷积的转换模型

Model Architecture

万字长文——搞懂Transformer的来龙去脉_第16张图片

Encoder and Decoder Stacks

Encoder由6个相同的层组成,每个子层有两个子层,第一个是多头自注意力机制,第二个是前馈神经网络。在两个子层之间使用残差连接,然后进行层归一化。即每个子层的输出是LayerNorm(x+Sublayer(x)),d = 512

Decoder由6个相同的层组成,除了上述的两个子层,还包含第三个子层。确保解码器只能关注到它之前已经生成的词,而不能看到未来的词。

masked是为了防止模型看到要预测的数据,保证整体模型的因果性。确保解码器只能关注到它之前已经生成的词,而不能看到未来的词。因为在推理时,transformer是自回归解码,不能看到将来的信息,比如翻译“计通学院 ”  ,如果在计算“通”的注意力分数的时候,不应该用到后面的词汇信息。通常是赋一个很大的负数,做softmax时让其权重为0,达到屏蔽的目的。

Attention

注意力函数为将Query和一组键值对映射到输出,其中Query、Key、Value和输出都是向量。输出被计算为Value的加权和

Scaled Dot-Product Attention

万字长文——搞懂Transformer的来龙去脉_第17张图片

同时计算一组查询的注意力函数,将其打包到矩阵 Q 中。键和值也打包到矩阵 K 和 V 中。

万字长文——搞懂Transformer的来龙去脉_第18张图片

W是参数矩阵,源码中用全连接层实现

对于较大的 dk 值,点积的幅度会变大,从而将 softmax 函数推入梯度极小的区域 。为了抵消这种影响,将点积缩放 1 /√dk 

Multi-Head Attention

使用多头注意力机制能够联合来自不同head部分学习到的信息。使用不同的、学习到的线性投影分别将Q、k和v线性投影 h 次到 dk、dk 和 dv 维度

万字长文——搞懂Transformer的来龙去脉_第19张图片

万字长文——搞懂Transformer的来龙去脉_第20张图片

论文中通过W 映射,源码中进行了简单的均分

以两个head为例

万字长文——搞懂Transformer的来龙去脉_第21张图片万字长文——搞懂Transformer的来龙去脉_第22张图片

通过上述方法就能得到每个head的Q,K,V

万字长文——搞懂Transformer的来龙去脉_第23张图片

使用缩放点积注意力计算,得到对应的结果

万字长文——搞懂Transformer的来龙去脉_第24张图片

将每个head得到的结果进行concat拼接

万字长文——搞懂Transformer的来龙去脉_第25张图片

将拼接后的结果通过W 进行融合

优势:一方面可以降低计算量,另一方面可以增加特征表达的性能,联合来自多个头部从不同角度学习到的信息,从而提取更加丰富全面的特征。

Positional Encoding

为了使模型能够利用序列的顺序,必须注入一些有关序列中标记的相对或绝对位置的信息

万字长文——搞懂Transformer的来龙去脉_第26张图片

Why Self-Attention

将自注意力层的各个方面与循环层和卷积层进行比较。比较指标:一是每层的总计算复杂度。另一个是可以并行化的计算量,以所需的最小顺序操作数来衡量。第三个是网络中远程依赖之间的路径长度。

万字长文——搞懂Transformer的来龙去脉_第27张图片

最后一行表示:Q与它最相邻r个k做运算

Training

Training Data: WMT 2014 英语-德语和WMT 2014 英语-法语数据集

Hardware:一台配备 8 个 NVIDIA P100 GPU

Optimizer:使用Adam优化器。

Result

万字长文——搞懂Transformer的来龙去脉_第28张图片    WMT 2014 英德翻译任务

万字长文——搞懂Transformer的来龙去脉_第29张图片

表中空着的参数与base的参数一样

在 WMT 2014 英法翻译任务中,大模型获得了 41.0 的 BLEU 分数,优于之前发布的所有单一模型,而训练成本不到之前最先进模型的 1/4模型

Conclusion

在这项工作中,提出了 Transformer,这是第一个完全基于注意力的序列转换模型,用多头自注意力取代了编码器-解码器架构中最常用的循环层。对于翻译任务,Transformer 的训练速度明显快于基于循环层或卷积层的架构。在 WMT 2014 英语-德语和 WMT 2014 英语-法语翻译任务中,达到了最先进水平。

计划将 Transformer 扩展到涉及文本以外的输入和输出模式的问题,并研究局部的、受限的注意力机制,以有效地处理图像、音频和视频等大型输入和输出。

视觉Transformer亟需解决的问题

1)数据依赖问题。Transformer 模型由于缺 乏归纳偏置能力,需要依赖大量的数据集来进行 训练,在数据不足时往往不能很好地进行泛化。 如何减缓 Transformer 对大型数据集的依赖将会 是未来的研究重点

2)算力资源问题。基于全局信息交互的 Transformer计算量通常非常大,现有的研究成果 在实际应用中的实际落地价值有待考证。如何降 低 Transformer 的计算代价、实现轻量化以及提 高其效率与能力仍需新的探索。

3)位置信息丢失问题。Transformer 模型无法利用序列中的顺序,从而导致位置信息丢失。 现有的研究方法主要是将位置编码嵌入到特征向 量中,其中包括绝对位置编码、相对位置编码和 利用卷积的空间不变性进行位置编码,但这些方 法并未改变结构上的固有缺陷。如何设计灵活、 高效的位置编码方式也是值得进一步研究的问题

扩展资料

复旦大学邱锡鹏教授的综述:A Survey of Transformers

哔哩哔哩李沐老师的视频:Transformer论文逐段精读【论文精读】_哔哩哔哩_bilibili

github:NLP_ability/深度学习自然语言处理/Transformer at master · DA-southampton/NLP_ability (github.com)

视觉Transformer的综述: Transformer在计算机视觉场景下的研究综述

csdn太阳花的小绿豆:详解Transformer中Self-Attention以及Multi-Head Attention-CSDN博客

你可能感兴趣的:(transformer,深度学习,人工智能)