论文阅读之Attention Is All You Need

Attention Is All You Need

attention:连接encoder和decoder
注意力机制是啥?
贡献:
使用纯注意力机制构建神经网络,没有使用卷积和循环。
用途:机器翻译

背景

1.在时序模型(例如RNN)中,在计算时将位置与步骤对齐,它们生成一系列隐藏状态 h t , t h_t,t ht,t位置的 h t h_{t} ht 使用它的前驱隐藏状态 h t − 1 h_{t − 1} ht1和当前的输入生成的。这样限制了模型的并行能力。
2.顺序计算的过程中信息会丢失,尽管LSTM等门机制的结构一定程度上缓解了长期依赖的问题,但是对于 特别长的依赖现象,LSTM依旧无能为力。

贡献

1.文中提出了Transformer,第一个完全基于attention的序列转换模型,将序列中的任意两个位置之间的距离是缩小为一个常量;
2.它不是类似RNN的顺序结构,因此具有更好的并行性,符合现有的GPU框架

模型架构

在这里插入图片描述

编码-解码器架构

编码器:从单词序列到句子表示
解码器:从句子到单词输出–自回归
自回归(auto-regression):当前时刻的输入是下一时刻的输出

编码器

N=6,完全一样的层(layer)
每个层中会有两个子层(sub-layer):
第一个子层,第一层是multi-head self-attention机制;第二个子层,(a simple, position wise fully connected feed-forward network)是一个简单的、位置全连接的前馈神经网络,每一个子层用一个残差连接,接着进行layer normalization。
每个子层的输出是LayerNorm(x+Sublayer(x))

LayerNorm
LayerNorm与batchNorm比较类似
以二维为例,BN是将feature在一个小的mini-batch中变为均值为0方差为1,BN也会学习一个 l a m b d a 和 g a m m a lambda和gamma lambdagamma将其变为任意方差和均值。而LN是将每一个行变为均值为0方差为1
在这里插入图片描述

解码器

解码器中前两个子层和编码器相同,但比编码器多一个子层,第三个子层,多头注意力机制,每一层都用残差网络连接,之后再采用layernorm。
在注意力机制可以看到完整输入,应该避免这种情况。解码器训练的时候,在预测t时刻的输出不应该看到时刻以后的输入,通过一个带掩码的注意力机制(masked Multi-Head Attention)实现。

注意力(Attention)

Attention机制可以描述为将一个query和一组key-value对映射到一个输出,其中query,keys,values和输出均是向量。输出是values的加权求和,其中每个value的权重 通过query与相应key的兼容函数来计算。

加法注意力机制(Additive attention),没有缩放因子 1 d k \frac{1}{\sqrt{d_k}} dk 1其他都一样。

点积注意力机制(dot-product attention),使用一个具有单隐层的前馈神经网络来计算兼容性函数。尽管在理论上两者的复杂度相似,但是在实践中dot-product attention要快得多,而且空间效率更高,这是因为它可以使用高度优化的矩阵乘法代码来实现。
在这里插入图片描述
在这里插入图片描述

d k d_k dk的值较小时,这两种方法性能表现的相近,当 d k d_k dk比较大时,addtitive attention表现优于 dot-product attention。我们认为对于大的 d k d_k dk,点积在数量级上增长的幅度大,将softmax函数推向具有极小梯度的区域 4 ^4 4。为了抵消这种影响,我们对点积扩展 1 d k \frac{1}{\sqrt{d_k}} dk 1倍。

多头注意力机制(Multi-Head Attention)

在这里插入图片描述

如果只对Q , K , V Q,K,VQ,K,V做一次这样的权重操作是不够的,这里提出了Multi-Head Attention,操作包括:

1.首先对 Q , K , V Q , K , V Q,K,V做若干次( h t i m e s h \quad times htimes)线性映射,将输入维度均为 d m o d e l d_{model} dmodel Q , K , V Q , K , V Q,K,V矩阵映射到 Q ∈ R d k , K ∈ R d k , V ∈ R d v Q \in \mathbb R^{d_{k}}, K \in \mathbb R^{d_{k}}, V \in \mathbb R^{d_{v}} QRdk,KRdk,VRdv
2.然后分别对每个线性映射结果采用Scaled Dot-Product Attention计算出结果,拼接在一起
3.将合并的结果进行线性变换

公式:
在这里插入图片描述

Position-wise Feed-forward Networks

在进行了Attention操作之后,encoder和decoder中的每一层都包含了一个全连接前向网络,对每个position的向量分别进行相同的操作,包括两个线性变换和一个ReLU激活输出。
在这里插入图片描述
其中每一层的参数都不同。

Position Embedding

因为模型不包括recurrence/convolution,因此是无法捕捉到序列顺序信息的,例如将 K 、 V K、V KV按行进行打乱,那么Attention​之后的结果是一样的。但是序列信息非常重要,代表着全局的结构,因此必须将序列的token相对或者绝对position信息利用起来。

这里每个token的position embedding 向量维度也是 d m o d e l = 512 d_{model}= 512 dmodel=512然后将原本的input embedding和position embedding加起来组成最终的embedding作为encoder/decoder的输入。其中position embedding计算公式如下
在这里插入图片描述
其中 p o s pos pos表示位置index, i i i表示dimension。

为什么要用自注意力机制

这里将Self-Attention layers和recurrent/convolutional layers来进行比较,来说明Self-Attention的好处。假设将一个输入序列 ( x 1 , x 2 , … , x n ) (x_1,x_2,\ldots,x_n) (x1,x2,,xn)分别用上述提到的网络来映射到一个相同长度的序列 ( z 1 , z 2 , … , z n ) (z_1,z_2,\ldots,z_n) (z1,z2,,zn)
在这里插入图片描述
Complexity per Layer:计算复杂度,越少越好
Sequential Operations:顺序计算,越少越好,下一步计算必须等前面计算
Maximum Path Length:一个数据点到另一个数据点要走多远,越短越好

并行计算
Self-Attention layer用一个常量级别的顺序操作,将所有的positions连接起来
Recurrent Layer需要 O ( n ) O(n) O(n)个顺序操作

计算复杂度分析
如果序 列 长 度 n < 表 示 维 度 d 序列长度n< 表示维度 d序列长度n<表示维度d,Self-Attention Layer比recurrent layers快,这对绝大部分现有模型和任务都是成立的。

为了提高在序列长度很长的任务上的性能,我们对Self-Attention进行限制,只考虑输入序列中窗口为 r r r的位置上的信息,这称为Self-Attention(restricted), 这会增加maximum path length到 O ( n / r ) O(n/r) O(n/r)

length path
如果卷积层kernel width k < n < n <n,并不会将所有位置的输入和输出都连接起来。这样需要 O ( n / k ) O(n/k) O(n/k)个卷积层或者 O ( l o g k ( n ) ) O(log_k(n)) O(logk(n))个dilated convolution,增加了输入输出之间的最大path length。

卷积层比循环层计算复杂度更高,是 k k k倍。但是Separable Convolutions将减小复杂度。

同时self-attention的模型可解释性更好(interpretable).

实验

WMT 2014英语-德语数据集上进行了训练

优化器:Adam,其中β1 = 0.9, β2 = 0.98及ϵ= 10-9。
对学习率不敏感,已经考虑到了
学习率,根据模型的-0.5次方
warmup从小慢慢爬到大的数

每个子层的输出上执行dropout操作,dropout=0.1

评价

1.减去了对文本的各种预处理
2.transform也在图片上有广泛的应用
3.对T理解还在初级阶段
4.其中的残差网络等必不可上,只有attention是不可以做训练的

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值