attention is all you need 笔记

Abstract

序列模型都基于递归或卷积神经网络,由编码器和解码器组成。最好的网络还加入了注意力机制。本文提出了一种新的网络Transformer,完全基于注意力,而不使用循环和卷积。

1.Introduction

递归神经网络,特别是LSTM和gated RNN,被认为是序列模型的SOTA。之后的工作都是在继续提升表现。
但是RNN的序列性质使训练无法并行,因此在序列较长时,内存约束限制了跨示例的批处理。
注意力机制很好,但一直和RNN结合使用。

2.Background

为了不使用序列形式的计算,提出了一系列使用CNN为基本模块的网络。虽然实现了并行,但是出现了新的问题:将来自两个位置的信号关联起来的计算量随着距离的增加而不断增加,这使得了解远距离位置之间的依赖关系变得更加困难。

而自注意力机制,可以将单个序列的不同位置联系起来,以计算序列的表示

3.Model Architecture

之前的网络,都是编码器—解码器结构。编码器将输入序列(x1,x2,…,xn)映射为序列Z(1-n),解码器以z和前一时刻的输出y作为输入,按时间生成序列y(1-n)

Transformer同样使用此架构,使用堆叠的自监督逐点全连接层构成编码器与解码器
在这里插入图片描述

3.1 编码器与解码器

编码器:由N=6个左边的块堆叠而成。每块中有一个multi-head自监督机制和一个简单的位置全连接前馈网络,而且每层都附带残差连接和层归一化,即LayerNorm(x + Sublayer(x)).
所有层的输出均为512维

解码器:由N=6个右边的块堆叠而成。每块中多添加了一个multi-head自监督机制,将编码器的输出作为一部分输入。修改了解码器中的自注意子层(masked)来防止位置与后续位置相关(?),确保了位置i的输出仅仅依赖于之前位置的已知输出(?)。

3.2 注意力

注意力函数可以看做是将query、key和value映射为一个输出,是value的加权和,而权值是由q和对应的k通过兼容函数得到的

在这里插入图片描述

3.2.1 Scaled Dot-Product Attention 缩放点积注意

缩放点积注意机制
输入为dmodel维的query、key和value,计算q和k的点积,除以根号dk,使用softmax获得权重
实际计算时,将一组query打包成矩阵Q,key和value同理

在这里插入图片描述
常用的注意力函数时加性和乘性函数。二者比较,乘性速度更快,效率更高。当dk较小时,二者表现相似。但当dk变大时,乘性效果不如加性,所以加入根号dk这一因子(即缩放)

3.2.2 Multi-Head Attention 多头注意

简单的注意函数使用的k,q,v都是相同维度dmodel,但将q,k,v多次(h次)映射到不同的维度(q-dk,k-dk,v-dv)效果更好。然后对映射后的q,k,v并行执行注意函数,输出维度均为dv。将h次拼接后再次投影,得到最终值

多头注意可以使模型同时关注不同表征子空间不同位置的信息
在这里插入图片描述
WiQ是dmodel* dk WiK是dmodel* dk WiV是dmodel* dv WO是hdv* dmodel
本文h取8,即8个并行的注意层,或者说是8个头;dk=dv=dmodel/h=64

3.2.3 Applications of Attention in our Model 模型中注意力的应用

以三种方式使用了多头注意力机制:

  • “编码器-解码器注意层”中,q来自解码器,k和v来自编码器的输出。这样解码器的每个位置都可以与输入序列的所有位置相关联。(这模仿了传统的编码器-解码器注意机制)
  • 编码器包括自注意层。在自注意层中,所有的k,q和v都来自同一位置(本文中是编码器前一层的输出)。这样编码器的每个位置都可以与编码器前一层的所有位置相关联。
  • 解码器的自注意层使解码器中的每个位置都可以与之前的所有位置相关联

为了防止解码器中的信息向左流动(以保持自回归特性),我们将softmax输入中所有的非法连接屏蔽(设置为-∞)(即图二中左边的mask)

3.3 Position-wise Feed-Forward Networks 位置前馈网络

除了注意力层外,每层都包括一个全连接前馈网络,其中包括两个线性变换和一个ReLU激活,结构相同但参数不共享。(也可以描述为一个核大小为1*1的卷积层)

输入输出模数均为dmodel=512,内部为dff=2048
在这里插入图片描述

3.4 Embedding and Softmax 嵌入与softmax

与其他序列模型相同,也使用嵌入将输入标记和输出标记转化为dmodel模的向量
也同样使用线性变换和softmax将解码器输出转化为下一个标记的预测(可能性)

3.5 Positional Encoding 位置编码

为了使模型可以学习序列中的顺序信息,我们手动注入一些相对或绝对位置信息。在编码器和解码器底部的输入嵌入中添加“位置编码”。因为维度也是dmodel,所以可以直接相加。

位置编码可以是可学习的,也可以是固定的,本文中使用正余弦函数
在这里插入图片描述
其中Pos是位置,i是维度。也就是说,位置编码的每个维度对应于一个正弦曲线。波长形成从2π到10000·2π的几何级数。我们之所以选择这个函数,是因为我们假设它可以让模型很容易地通过相对位置学习相关,因为对于任何固定的偏移量k,PEpos+k可以表示为PEpos的线性函数。我们还尝试使用学习的位置嵌入,发现这两个版本产生了几乎相同的结果(见表3第(E)行)。我们选择正弦版本,因为它可能允许模型推断序列长度比训练期间遇到的序列长度更长。

(这里没看懂)

Why Self-Attention 为什么是自注意

比较自注意层和循环层、卷积层

首先是每层的总计算复杂度,然后是可以并行的计算量(由所需的最小顺序操作数来衡量),第三点是网络中长期依赖关系的路径长度

在这里插入图片描述
自注意的,计算复杂度较高,但可以产生更多可解释的模型

5. Training 训练

5.1 训练数据和batch

standard WMT 2014 English-German 数据集,4.5million,使用byte-pair进行编码
larger WMT 2014 English-French数据集 ,36M

每个batch 25000个源标记和25000个目标标记

5.2 硬件和策略

8个NVIDIA P100 GPU

5.3 optimizer

Adam β1=0.9,β2=0.98,ε=10-9
在这里插入图片描述
还使用了warm up来调整学习率

5.4 Regularization 正则化

dropout 对每个子层的输出使用dropout,然后再归一化并作为子层的输入
对嵌入与位置编码的求和使用dropout
P=0.1
label smoothing(不懂)

6. Results(略)

7. conclusion(略)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值