企业网站建设计什么科目,金融公司 网站开发,开源博客程序WordPress下载,互联网推广电话销售话术论文解读:Attention is All you need习翔宇北京大学 软件工程博士在读关注他192 人赞同了该文章Attention机制最早在视觉领域提出#xff0c;2014年Google Mind发表了《Recurrent Models of Visual Attention》#xff0c;使Attention机制流行起来#xff0c;这篇论文采…论文解读:Attention is All you need习翔宇北京大学 软件工程博士在读关注他192 人赞同了该文章Attention机制最早在视觉领域提出2014年Google Mind发表了《Recurrent Models of Visual Attention》使Attention机制流行起来这篇论文采用了RNN模型并加入了Attention机制来进行图像的分类。205年Bahdanau等人在论文《Neural Machine Translation by Jointly Learning to Align and Translate》中将attention机制首次应用在nlp领域其采用Seq2SeqAttention模型来进行机器翻译并且得到了效果的提升Seq2Seq With Attention中进行了介绍。2017 年Google 机器翻译团队发表的《Attention is All You Need》中完全抛弃了RNN和CNN等网络结构而仅仅采用Attention机制来进行机器翻译任务并且取得了很好的效果注意力机制也成为了大家近期的研究热点。 本文首先介绍常见的Attention机制然后对论文《Attention is All You Need》进行介绍该论文发表在NIPS 2017上。1. Attention机制Attention用于计算相关程度, 例如在翻译过程中不同的英文对中文的依赖程度不同Attention通常可以进行如下描述表示为将query(Q)和key-value pairs 映射到输出上其中query、每个key、每个value都是向量输出是V中所有values的加权其中权重是由Query和每个key计算出来的计算方法分为三步第一步计算比较Q和K的相似度用f来表示 第二步将得到的相似度进行Softmax操作进行归一化 第三步针对计算出来的权重 ,对V中所有的values进行加权求和计算得到Attention向量 通常第一步中计算方法包括以下四种点乘 dot product 权重 General 拼接权重 Concat 感知器 Perceptron 2. Transformer Architecture绝大部分的序列处理模型都采用encoder-decoder结构其中encoder将输入序列 映射到连续表示 ,然后decoder生成一个输出序列 ,每个时刻输出一个结果。Transformer模型延续了这个模型整体架构如下图1所示。图1 基于Transformer模型的Encoder-Decoder模型示意图2.1 EncoderEncoder有N6层每层包括两个sub-layers:第一个sub-layer是multi-head self-attention mechanism用来计算输入的self-attention第二个sub-layer是简单的全连接网络。在每个sub-layer我们都模拟了残差网络每个sub-layer的输出都是 其中Sublayer(x) 表示Sub-layer对输入 做的映射为了确保连接所有的sub-layers和embedding layer输出的维数都相同 .2.2 DecoderDecoder也是N6层每层包括3个sub-layers第一个是Masked multi-head self-attention也是计算输入的self-attention但是因为是生成过程因此在时刻 的时候大于 的时刻都没有结果只有小于 的时刻有结果因此需要做Mask第二个sub-layer是全连接网络与Encoder相同第三个sub-layer是对encoder的输入进行attention计算。同时Decoder中的self-attention层需要进行修改因为只能获取到当前时刻之前的输入因此只对时刻 之前的时刻输入进行attention计算这也称为Mask操作。2.3 Attention机制在Transformer中使用的Attention是Scaled Dot-Product Attention, 是归一化的点乘Attention假设输入的query 、key维度为 ,value维度为 , 那么就计算query和每个key的点乘操作并除以 然后应用Softmax函数计算权重。 在实践中将query和keys、values分别处理为矩阵 , 那么计算输出矩阵为 其中 , , 输出矩阵维度为 如下所示 那么Scaled Dot-Product Attention的示意图如下所示Mask是可选的(opt.)如果是能够获取到所有时刻的输入(K, V), 那么就不使用Mask如果是不能获取到那么就需要使用Mask。使用了Mask的Transformer模型也被称为Transformer Decoder不使用Mask的Transformer模型也被称为Transformer Encoder。图2 Scaled Dot-Product Attention示意图如果只对Q、K、V做一次这样的权重操作是不够的这里提出了Multi-Head Attention操作包括首先对Q、K、V做一次线性映射将输入维度均为 的 矩阵映射到 , , 然后在采用Scaled Dot-Product Attention计算出结果多次进行上述两步操作然后将得到的结果进行合并将合并的结果进行线性变换总结来说公示如下所示 其中第1步的线性变换参数为 , , , 第4步的线性变化参数为 . 而第三步计算的次数是 。在论文中取 表示每个时刻的输入维度和输出维度 表示8次Attention操作 表示经过线性变换之后、进行Attention操作之前的维度。那么进行一次Attention之后输出的矩阵维度是 , 然后进行h 8次操作合并之后输出的结果是 因此输入和输出的矩阵维度相同。这样输出的矩阵 每行的向量都是对 向量中每一行 的加权示意图如下所示图3 Multi-Head Attention机制示意图在图1的Encoder-Decoder架构中有三处Multi-head Attention模块分别是Encoder模块的Self-Attention在Encoder中每层的Self-Attention的输入 , 都是上一层的输出。Encoder中的每个position都能够获取到前一层的所有位置的输出。Decoder模块的Mask Self-Attention在Decoder中每个position只能获取到之前position的信息因此需要做mask将其设置为 Encoder-Decoder之间的Attention其中 来自于之前的Decoder层输出 来自于encoder的输出这样decoder的每个位置都能够获取到输入序列的所有位置信息。2.4 Position-wise Feed-forward Networks在进行了Attention操作之后encoder和decoder中的每一层都包含了一个全连接前向网络对每个position的向量分别进行相同的操作包括两个线性变换和一个ReLU激活输出 其中每一层的参数都不同。2.5 Position Embedding因为模型不包括recurrence/convolution因此是无法捕捉到序列顺序信息的例如将K、V按行进行打乱那么Attention之后的结果是一样的。但是序列信息非常重要代表着全局的结构因此必须将序列的token相对或者绝对position信息利用起来。这里每个token的position embedding 向量维度也是 然后将原本的input embedding和position embedding加起来组成最终的embedding作为encoder/decoder的输入。其中position embedding计算公式如下 其中 表示位置index 表示dimension index。Position Embedding本身是一个绝对位置的信息但在语言中相对位置也很重要Google选择前述的位置向量公式的一个重要原因是由于我们有 这表明位置pk的向量可以表示成位置p的向量的线性变换这提供了表达相对位置信息的可能性。在其他NLP论文中大家也都看过position embedding通常是一个训练的向量但是position embedding只是extra features有该信息会更好但是没有性能也不会产生极大下降因为RNN、CNN本身就能够捕捉到位置信息但是在Transformer模型中Position Embedding是位置信息的唯一来源因此是该模型的核心成分并非是辅助性质的特征。也可以采用训练的position embedding但是试验结果表明相差不大因此论文选择了sin position embedding因为这样可以直接计算embedding而不需要训练减少了训练参数这样允许模型将position embedding扩展到超过了training set中最长position的position例如测试集中出现了更大的positionsin position embedding依然可以给出结果但不存在训练到的embedding。3. Why Self-Attention这里将Self-Attention layers和recurrent/convolutional layers来进行比较来说明Self-Attention的好处。假设将一个输入序列 分别用Self-Attention LayerRecurrent LayerConvolutional Layer来映射到一个相同长度的序列 其中 .我们分析下面三个指标每一层的计算复杂度能够被并行的计算用需要的最少的顺序操作的数量来衡量网络中long-range dependencies的path length在处理序列信息的任务中很重要的在于学习long-range dependencies。影响学习长距离依赖的关键点在于前向/后向信息需要传播的步长输入和输出序列中路径越短那么就越容易学习long-range dependencies。因此我们比较三种网络中任何输入和输出之间的最长path length结果如下所示3.1 并行计算Self-Attention layer用一个常量级别的顺序操作将所有的positions连接起来Recurrent Layer需要 个顺序操作3.2 计算复杂度分析如果序列长度 表示维度 Self-Attention Layer比recurrent layers快这对绝大部分现有模型和任务都是成立的。为了提高在序列长度很长的任务上的性能我们对Self-Attention进行限制只考虑输入序列中窗口为 的位置上的信息这称为Self-Attention(restricted), 这回增加maximum path length到 .3.3 length path如果卷积层kernel width 并不会将所有位置的输入和输出都连接起来。这样需要 个卷积层或者 个dilated convolution增加了输入输出之间的最大path length。卷积层比循环层计算复杂度更高是k倍。但是Separable Convolutions将见效复杂度。同时self-attention的模型可解释性更好(interpretable). Reference[1]https://github.com/Kyubyong/transformer[2]Vaswani, Ashish, et al. Attention is all you need.Advances in Neural Information Processing Systems. 2017.编辑于 2018-10-18「真诚赞赏手留余香」赞赏还没有人赞赏快来当第一个赞赏的人吧机器学习深度学习Deep Learning神经网络赞同 19218 条评论分享收藏