[关闭]
@songying 2019-03-06T22:39:15.000000Z 字数 3890 阅读 1488

Attention is all you need

Attention


https://blog.csdn.net/mijiaoxiaosan/article/details/73251443
https://kexue.fm/archives/4765

建议一看的paper

Deep residual learning for image recognition
Layer normalization

Abstract

谷歌最新的只基于Attention的Transformer模型摒弃了固有的定式,并没有用任何CNN或者RNN的结构。该模型可以高度并行地工作,所以在提升翻译性能的同时训练速度也特别快。
数据集: WMT 2014 English-to-German translation task
评价指标 BLEU

1. Introduction(pass)

2. Background(pass)

3. Model Architecture

一个经典的encoder-decoder 模型如下:

  • encoder 将输入 映射到 ,
  • decoder根据z生成输出 .

Transformer 遵循这种encoder-decoder 结构,并在encoder和decoder中都采用了 stacked self-attention和point-wise fully,connected layers 如下入所示:

1. Encoder and Decoder Stacks

Encoder

encoder 一个stack组成, stack中有6个同样的 layer,每个layer包含两个sub-layers。

  • 第一个sub-layer是一个 multi-head self-attention mechanism(多头自注意机制)
  • 第二个sub-layer是一个简单的 point-wise fully connected feed-forward network。 (全连接前馈网络)
  • 两个子层之间,我们采用残差网络来链接,然后进行层归一化处理。

每个sub-layer 的输出都可以表示为


其中 是sub-layer自己实现的的函数(即可以使Muti-Head Attention 的函数也可以是Feed Forward的函数 )。
为了利用残差链接,所有子层包括embedding层, 输出的维度都为

Decoder

Decoedr 同样由一个stack组成, stack也由6个相同的 layer组成。
而与encoder不同的是, 每个layer 中除了上面两个sub-layer, 还加上了了第三个sub-layer,而该 sub-layer 是对encoder stack的输出做 multi-head attention.
与encoder相似, 我们采用残差网络来对各个层之间连接,然后进行层归一化处理。
We also modify the self-attention sub-layer in the decoder stack to prevent positions from attending to subsequent positions. This masking, combined with fact that the output embeddings are offset by one position, ensures that the predictions for position i can depend only on the known outputs at positions less than i.

2. Attention

attention 从本质上可以看作将一个query和一系列key-value对映射为一个输出(output)的过程。这里的query,keys,values以及output都是向量。输出是由带权的values加起来得到的,而每个value的权重是根据query和相应的key通过一个函数计算出来的。

1. Scaled Dot-product Attention

我们的attention叫做:"Scaled Dot-Product Attention"

输入包括维度为 的queries和keys,还有维度为 的 values。计算query和所有keys的点乘,然后每个都除以(这个操作就是所谓的归一化)。之后利用一个softmax函数来获取values的权重。

实际操作中,attention 函数是在一系列queries上同时进行的,将这些queries并在一起形成一个矩阵Q 同时keys以及values也并在一起形成了矩阵K 以及V 。则attention的输出矩阵可以按照下述公式计算:

最常用的两种attention函数时additive attention和 dot-product(multiplicative) attention。Dot-product attention 与我们的算法相同, 除了缩放 。 Additive attention 通过 单层的feed-forward network 来计算函数。 虽然两类attention很相似, 但实际上dot-product attention 更fast 和 更 space-efficient(空间利用率高), 因为: it can be implemented using highly optimized matrix multiplication code.

此处比较了 additive attention 与 dot-product(multiplicative) attention。

2. Multi-Head Attention

本文结构中的Attention并不是简简单单将一个点乘的attention应用进去。作者发现先对queries,keys以及values进行 h 次不同的线性映射效果特别好。学习到的线性映射分别映射到, 以及 维。分别对每一个映射之后的得到的queries,keys以及values进行attention函数的并行操作,生成 维的output值。

本文中对并行的attention层使用了h=8的设定。其中每层都设置为 由于每个头都减少了维度,所以总的计算代价和在所有维度下单头的attention是差不多的。

3. 本模型如何使用attention

Transformer 以以下三种方式使用了multi-head attention

Position-wise Feed-Forward Networks

该网络是两个线性变换,中间加了一个ReLU激活函数。每个位置上的线性变换是一样的, 但是不同层与层的参数是不一样的。该网络的输入,输出维度都是 , 中间层的维度是 .

Embeddings and Softmax

encoder 与 decoder的输入就是利用学习好的embeddings将tokens转化为 维向量,对解码器来说,利用线性变换以及softmax函数将解码的输出转化为一个预测下一个token的概率。

Positional Encoding

由于模型没有任何循环或者卷积,为了充分利用序列的顺序信息,需要将tokens在sequences中的相对以及绝对位置信息注入到模型中去。最后,我们在encoder 与 decoder的 input embeddings的基础上加了一个“位置编码”。位置编码和embeddings由同样的维度都是 所以两者可以直接相加。有很多位置编码的选择,既有学习到的也有固定不变的。

本文中用了正弦和余弦函数进行编码。

Why Self attention

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注