2. Attention Is All You Need(Transformer)算法原理解析

1. 语言模型

2. Attention Is All You Need(Transformer)算法原理解析

3. ELMo算法原理解析

4. OpenAI GPT算法原理解析

5. BERT算法原理解析

6. 从Encoder-Decoder(Seq2Seq)理解Attention的本质

7. Transformer-XL原理介绍

1. 前言

谷歌在2017年发表了一篇论文名字教《Attention Is All You Need》提出了一个只基于attention的结构来处理序列模型相关的问题,好比机器翻译。传统的神经机器翻译大都是利用RNN或者CNN来做为encoder-decoder的模型基础,而谷歌最新的只基于Attention的Transformer模型摒弃了固有的定式,并无用任何CNN或者RNN的结构。该模型能够高度并行地工做,因此在提高翻译性能的同时训练速度也特别快。html

2. Transformer模型结构

Transformer的主体结构图:算法

image

2.1 Transformer的编码器解码器

模型分为编码器解码器两个部分。网络

  • 编码器由6个相同的层堆叠在一块儿,每一层又有两个支层。第一个支层是一个多头的自注意机制,第二个支层是一个简单的全链接前馈网络。在两个支层外面都添加了一个residual的链接,而后进行了layer nomalization的操做。模型全部的支层以及embedding层的输出维度都是\(d_{model}\)
  • 解码器也是堆叠了六个相同的层。不过每层除了编码器中那两个支层,解码器还加入了第三个支层,如图中所示一样也用了residual以及layer normalization。具体的细节后面再讲。

2.2 输入层

编码器和解码器的输入就是利用学习好的embeddings将tokens(通常应该是词或者字符)转化为d维向量。对解码器来讲,利用线性变换以及softmax函数将解码的输出转化为一个预测下一个token的几率。架构

2.3 位置向量

因为模型没有任何循环或者卷积,为了使用序列的顺序信息,须要将tokens的相对以及绝对位置信息注入到模型中去。论文在输入embeddings的基础上加了一个“位置编码”。位置编码和embeddings由一样的维度都是\(d_{model}\)因此二者能够直接相加。有不少位置编码的选择,既有学习到的也有固定不变的。框架

2.4 Attention模型

2.4.1 Scaled attention

论文中用的attention是基本的点乘的方式,就是多了一个所谓的scale。输入包括维度为\(d_k\)的queries以及keys,还有维度为\(d_v\)的values。计算query和全部keys的点乘,而后每一个都除以\(\sqrt{d_k}\)(这个操做就是所谓的Scaled)。以后利用一个softmax函数来获取values的权重。
实际操做中,attention函数是在一些列queries上同时进行的,将这些queries并在一块儿造成一个矩阵\(Q\)同时keys以及values也并在一块儿造成了矩阵\(K\)以及\(V\)。则attention的输出矩阵能够按照下述公式计算:函数

\[ Attention(Q,K,V) = softmax({QK^T\over {\sqrt {d_k}}})V \]性能

image

2.4.2 Multi-Head Attention

本文结构中的Attention并非简简单单将一个点乘的attention应用进去。做者发现先对queries,keys以及values进行\(h\)次不一样的线性映射效果特别好。学习到的线性映射分别映射到\(d_k\)\(d_k\)以及\(d_v\)维。分别对每个映射以后的获得的queries,keys以及values进行attention函数的并行操做,生成\(dv\)维的output值。具体结构和公式以下。学习

\[ MultiHead(Q,K,V) = Concat(head_1,...,head_h) \]编码

\[ where: head_i = Attention(Q{W_i}^Q,K{W_i}^K,V{W_i}^V) \]spa

image

2.4.3 模型中的attention

Transformer以三种不一样的方式使用了多头attention。

  1. 在encoder-decoder的attention层,queries来自于以前的decoder层,而keys和values都来自于encoder的输出。这个相似于不少已经提出的seq2seq模型所使用的attention机制。
  2. 在encoder含有self-attention层。在一个self-attention层中,全部的keys,values以及queries都来自于同一个地方,本例中即encoder以前一层的的输出。
  3. 相似的,decoder中的self-attention层也是同样。不一样的是在scaled点乘attention操做中加了一个mask的操做,这个操做是保证softmax操做以后不会将非法的values连到attention中。

2.4.4 Feed Foreword

每层由两个支层,attention层就是其中一个,而attention以后的另外一个支层就是一个前馈的网络。公式描述以下。
\[ FFN(x) = max(0,xW_1 + b_1)W_2 + b_2 \]

3. 总结

模型的总体框架基本介绍完了,其最重要的创新应该就是Self-Attention和Multi-Head Attention的架构。在摒弃传统CNN和RNN的状况下,还能提升表现,下降训练时间。Transformer用于机器翻译任务,表现极好,可并行化,而且大大减小训练时间。而且也给咱们开拓了一个思路,在处理问题时能够增长一种结构的选择。