Attention is all your need.transformer论文

最近在学习transformer,因此根据李沐的讲解视频加上自己的一些理解,做了一个ppt

摘要

在主流的序列转录模型(给你一个序列,你生成另外一个序列,比如一句中文生成一句英文)中,是基于循环或者卷积的神经网络,包括一个encoder和一个decoder(一个编码器和一个解码器)。在效果好的模型中,会在encoder和decoder之间使用注意力机制。 本文提出了一个新的简单的架构Transformer,仅仅依赖于注意力机制。

模型在WMT 2014英语-德语翻译工作中实现了28.4BLEU(是机器学习中常用的评价指标,衡量机器翻译结果与参考翻译结果之间的相似度,具体来说通过比较机器翻译结果与多个参考翻译结果之间n-gram重叠率来评估翻译的质量,n-gram是指连续n个词的组合。BLEU取值在0-1之间,越接近1.说明翻译结果越好),比最好的结果多了两个BLEU。

在英语到法语的翻译中,做了一个单模型,比所有模型结果都要好。并且可以泛化到其他的模型上面。

结论

Transformer是一个完全基于自注意力机制的序列转导模型。用multi-headed self-attention(多头自注意力机制)取代了编码器-解码器架构中常用的循环层。

此模型的未来应用场景非常广泛,可以扩展到文本以外的输入输出模式的问题,并且可以研究局部的受限的注意力机制,以有效的处理大量的输入和输出,如图像音频视频等。减少时序化是另外一个作者的目标。  

导言

在RNN中,LSTM和GRU已经被确立为序列建模和转导问题的最新方法。从此之后,大量的研究人员继续推动循环语言模型和编码器-解码器架构。

RNN中,计算方法是将序列从左往右一步一步往前做。假设序列是一个句子,它会一个词一个词的往前看,对第t个词,它会计算一个输出h_t(也叫做它的隐藏状态),ℎ_t是由前一个词的隐藏状态ℎ_t−1和当前第t个词决定

这样的话它会把前面学习到的历史信息通过ℎ_t−1放到当下,然后和当前的词做一些计算得到输出。 RNN问题:一步一步的过程比较难以并行。

attention在RNN上的应用:怎么样有效的把编码器有效的传递给解码器。使用attention后,可以实现较高的并行度。

相关工作

Extended Neural GPU、ByteNet使用卷积神经网络替换神经网络,会减少时序的计算。但是这些模型对较长的序列难以建模。在这些模型中,将两个任意输入或输出位置的信号关联起来所需的操作数量随着位置之间的距离而增长,ConvS2S为线性增长,ByteNet为对数增长。这使得学习距离较远位置之间的依赖关系变得更加困难。卷积操作可以做多个输出通道(一个输出通道可以被认为它可以识别不一样的模式),transformer为了同样可以识别多个模式,提出了多头的注意力机制(multi-headed self-attention)。

自我注意,有时被称为内注意,是一种将单个序列的不同位置联系起来以计算该序列的表示的注意机制。 Transformer是第一个完全依赖于自关注来计算其输入和输出表示的转导模型,而不使用序列对齐RNN或卷积。

模型架构

大多数转导模型具有编码器-解码器结构。

对编码器来讲,将一个输入(一个长为n的x_1到x_n)。如果输入是一个句子x_t是第t个词, 编码器会映射出一个长为n的z_1到z_n的机器可以理解一系列的向量,z_t是第t个向量表示。

对解码器而言,它拿到编码器的输出后会生成一个长为m的序列y_1到y_m(n和m是不一定一样长的),解码器的输出是一个词一个词输出的。

自回归auto-regressive,在生成下一个符号之前将之前生成的符号作为额外的输入。

transformer是将一些自注意力机制和point-wise以及fully connected layers堆叠在一起。

编码器

用n=6的完全一样的层,每一个layer中会有两个sub-layers(子层)。第一个是multi-head self-attention,第二个是simple, position wise fully connected feed-forward network。

对每一个子层做了残差连接,最后使用layer-normalization。 子层的公式:LayerNorm( x + Sublayer(x) ) ,为了简单起见,将每一个层的输出维度变成512.调参只需要调一个参(d_model),另外一个就是就是你要复制多少块。

layernorm可以看作是将数据转置放到batchnorm中,再转置回去就可以得到结果 Transformer 和 RNN 里面:3 维输入。输入的是一个序列的样本,每个样本中有很多元素,是一个序列。一

个句子里面有 n 个词,每个词对应一个向量,+ 一个 batch --> 3 维 LayerNorm 更稳定,不管样本长还是短,均值和方差是在每个样本内计算

解码器

解码器也由N = 6相同的层堆叠。除了每个编码器层中的两个子层之外,解码器插入第三个子层,该子层对编码器堆栈的输出执行多头注意(multi-head attention)。

与编码器类似,我们在每个子层周围使用残差连接,然后进行层规范化(layernormalization)。使用了自回归,意味着在预测的时候不能看到t时刻以后的输出,但是在注意力机制中可以看到以后时刻的输出。所以为了避免这个情况,使用了一个带掩码的注意力机制(上图的masked mutli-head attention)从而保证你的训练和预测的行为是一致。

注意力层

注意力函数将一个query和一些key-value对映射成一个输出的函数,其中query key value output都是向量,其中output是value的一个加权和,所以输出的维度和value的维度是一样的,value的权重是value对应的key以及query的相似度算来的。(相似度在不同的注意力机制中有着不同的算法)。

transformer用到的注意力机制   Scaled Dot-Product Attention

注意力的计算

模型里如何使用attention

编码器的attention:所有的key、value和query都来自同一个地方,在这种情况下,是编码器中前一层的输出,编码器中的每个位置都可以处理编码器前一层中的所有位置。

解码器中的attention:允许解码器中的每个位置注意到解码器中的所有位置直至并包括该位置。我们需要防止解码器中的向左信息流以保持自回归特性,softmax输入中对应于非法连接的所有值来实现缩放点积注意力

在编码器-解码器注意力层中,query来自前一个解码器层,而key和value来自编码器的输出。这允许解码器中的每个位置都参与输入序列中的所有位置。这模仿了序列到序列模型中典型的编码器-解码器注意机制

point-wise feed forward network

等价于一个MLP 一个MLP对每一个词对应一次,作用在最后一个维度。

它由两个线性变换组成,中间有一个ReLU激活 W1会把x(512)投影成2048(维度扩大四倍) 单隐藏层的MLP,中间隐藏层把你的输入扩大四倍,最后输出的时候回到你输入的大小

RNN 跟 transformer 异

如何传递序列的信息: RNN 是把上一个时刻的信息输出传入下一个时候做输入 Transformer 通过一个 attention 层,去全局的拿到整个序列里面信息,再用 MLP 做语义的转换。

embedding and Softmax

给embedding一个词,它会学习一个长为d的向量表示它。d=512 编码器 解码器和softmax前的线性也有一个embedding,三者是一样的权重 最后除以√d_k

positional encoding

attention没有时序信息。在处理时序数据的时候,一句话里面的词完全打乱,那么语义肯定会发生变化,但是 attention 不会处理这个情况 ,此时需要时序信息来解决这个问题。

RNN 把上一时刻的输出 作为下一个时刻的输入,来传递时序信息

attention是在输入里面加入时序信息->positional encoding。位置编码与嵌入具有相同的维数模型,因此可以对两者进行求和

why attention 为什么需要attention

比较了四个层:attention 循环层 卷积层 受限的自注意力层

计算复杂度 顺序的计算(一步之前他要完成的步数) 一个信息点道另一个信息点数据走的路

卷积层中 k是核,n是长度,d是输入和输出的通道数,并行度很高

实验

Adam 训练器; beta2 常见为 0.99 or 0.999 学习率通过公式计算 dmodel ^ (-0.5) == 1 / sqrt(dmodel)  --> 模型要学习的宽度越宽,学习率越低 warm-up, 从一个小的值慢慢爬到一个高的值,到一定值之后,根据 step_num ^ 0.5衰减,warmup-steps 4000步

学习率不用调,Adam 对学习率不那么敏感,dmodel已经考虑在公式里, step_num 也是不错的 schedule each sub-layer: 多头注意力 和 之后的 MLP,每一层的输出上,在进入残差连接之前和进入 layernorm 之前,使用 dropout,P drop = 0.1。10% 的元素 重置为 0, 剩下的值 * 1.1 i

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值