zoukankan      html  css  js  c++  java
  • 论文笔记:Attention Is All You Need

    Attention Is All You Need

    2018-04-17 10:35:25 

     

    Paper:http://papers.nips.cc/paper/7181-attention-is-all-you-need.pdf

     

    Code(PyTorch Version):https://github.com/jadore801120/attention-is-all-you-need-pytorch

     

    Video Tutorial: https://www.youtube.com/watch?v=S0KakHcj_rs

     

    另一个不错的关于这个文章的 Blog:https://kexue.fm/archives/4765 

     

     

     

    1. Introduction: 

      现有的做 domain translation 的方法大部分都是基于 encoder-decoder framework,取得顶尖性能的框架也都是 RNN + Attention Mechanism 的思路。而本文别出心裁,仅仅依赖于 attention 机制,就可以做到很好的性能,并且,这种方法并适用于并行(parallelization)。

      

    2. Model Architecture:  

      大部分神经序列转换模型(neural sequence transduction models)都有 encoder-decoder structure。此处,encoder 将输入的序列(x1, x2, ... , xn)转换为连续的表示 z = (z1, z2, ..., zn)。给定 z,decoder 然后每一输出一个元素,构成了序列 (y1, y2, ... , ym)。在每一个时间步骤,该模型是 auto-regressive,当产生下一个输出时,会使用上一个时刻产生的符号作为额外的输入(consuming the previously generated symbols as additional input when generating the next)。

     

    2.1 Encoder and Decoder Stacks 

      

      Encoder:encoder 是由 6 个相同的 layer 堆叠起来的。每一个 layer 包括 两个 sub-layers:

      第一个是:mutli-head self-attention mechanism ; 

      第二个是:position-wise fully connected feed-forward network. 

      每一个这样的 two sub-layers 附近都会用上 residual connection,然后加上 layer normalization。

      

      Decoder:decoder 也有 6 层,不同的是:decoder layer 中包含 3个 sub-layers, which performs multi-head attention over the output of the encoder stack. 类似于 the encoder,我们采用 residual connections,followed by layer normalization. 我们也修改了 the self-attention sub-layer in the decoder。这个 masking,结合了这么一个事实:the output embeddings are offset by one position, 确保对于位置 i 的预测可以仅仅依赖于 the known outputs at positions less than i (less than i 是什么意思???). This maksing, 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.2 Attention

      An attention function can be described as mapping a query and a set of key-value pairs to an output, where the query, keys, values, and output are all vectors. 输出可以看做是 the values 的加权组合,给每一个 value 的加权可以计算为:a compatibility function of the query with the corresponding key. 

      

      2.2.1 Scaled Dot-Product Attention 

      我们称我们特定的 attention 为:“Scaled Dot-Product Attention”。输入包括:queries and keys of dimension $d_k$, and values of dimension $d_v$。我们计算 the dot products of the query with all keys, divide each by  and apply a softmax function to obtain the weights on the values. 

      实际上,我们同时在一个 queries 的集合上计算 attention function,将其打包为 a matrix Q。The keys and values 也被打包为:K and V. 我们计算输出的矩阵为:

      

      两个最常用的 attention functions 是:additive attention,and dot-product (multiplicative) attention.  

      

      2.2.2 Multi-Head Attention 

      用 $d_{model}-dimensional$ keys, values and queries,我们发现:it is beneficial to linearly project the queries, keys and values h times with different, learned linear projections to dk, dk and dv dimensions, respectively. 在每一个这些投影的版本,我们然后并行的执行 attention function,产生 dv-dimensional 的输出 values。这些东西组合起来,然后再次投影,得到最终的 values,如图2所示。

      Multi-head attention allows the model to jointly attend to information from different reprentation subspaces at different positions. With a single attention head, averaging inhibits this. 

      

      本文才用 h=8 并行的 attention layers,or heads. 

     

      2.2.3 Applications of Attention in our Model 

      

      2.3 Position-wise Feed-Forward Networks 

      除了 attention sub-layers, 我们 encoder and decoder 的每一层都包含一个全连接的 feed-forward network, 单独且平等的适用于每一个位置。这包含:two linear transformations with a ReLU activation in between: 

      

      2.4 Embeddings and Softmax 

      和其他序列转换模型一样,我们利用学习到的 embeddings 来转换输入的符号,然后输出符号为维度是  $d_{model}$ 的向量。

      

      2.5 Positional Encoding  

      由于我们的模型没有任何 recurrence 和 convolution,为了使得模型充分利用 sequence 的序列信息,我们必须注入相对或者绝对位置的信息。因此,我们将 “Positional encoding” to the input embeddings at the bottoms of the encoder and decoder stacks. 位置编码和 embeddings 有相同的维度,所以这两个东西可以相加起来。

      本文我们采用 sine and cosine functions of different frequencies: 

      

      其中,pos 是 位置,i 是维度。

     

      


     

     

     

     

     

  • 相关阅读:
    ASP.NET学习篇(4)——服务器端的控件【转自www.bitsCN.com】
    sql2005 管道的另一端上无任何进程解决方法
    SQL服务器名称的更改
    如何辨别移动硬盘的好坏
    ADO绑定SQL数据库过程
    SQL变量的使用
    SQL子查询
    什么SQL解发器?
    什么是存储过程呢?
    显式事务和隐式事务之间有什么区别?
  • 原文地址:https://www.cnblogs.com/wangxiaocvpr/p/8862389.html
Copyright © 2011-2022 走看看