主流的序列到序列模型都是基于含有encoder和decoder的复杂的循环或者卷积网络。而性能最好的模型在encoder和decoder之间加了attentnion机制。本文提出一种新的网络结构,摒弃了循环和卷积网络,仅基于attention机制。
self-attention是一种attention机制,它是在单个序列中计算每个位置与其他不同位置关系从而计算序列。Transformer是第一个完全依靠self-attention机制来计算输入和输出表示。
模型架构
 
 
encoder
编码器由6个完全相同的层堆叠而成,每一层有两个子层,第一层是multi-head self-attention机制,第二层是简单的、位置完全连接的前馈神经网络。对每个子层都使用残差网络连接[必要性],接着进行Layer Normalization。也就是说,每个子层的输出都是LayerNorm(x + Sublayer(x)), 其中Sublayer(x)是具体子层的具体实现函数。为了方便残差连接,模型中所有子层以及嵌入层产生的输出维度都是dmodel = 512。
残差网络的优势
残差网络使用网络学习的是残差,能够解决网络极深度条件下性能退化问题。残差网络论文中提到残差网络不是解决梯度消失和梯度膨胀,残差网络用来解决网络层数加深,在训练集上性能变差的问题。 [为什么可以解决?] 残差网络是多个浅层网络的集成,从x到最后的输出y可以有多个路径,每个路径看作一种模型。[个人理解]
Layer Normalization
decoder
解码器同样由N=6个完全相同的层堆叠而成。除了编码器的两个子层之外,在解码器中还插入第三个子层, 该层对编码器的输出进行multi-head self-attention(中间部分),与编码器类似,解码器每个子层采用残差连接,并加LayerNormalization。在解码器中的self-attention子层需要修改,因为后面位置是不可见。具体修改就是对后面位置进行mask
attention
attention可以描述为将query和一组key-value对映射到输出,query,key, value都是向量。输出就是value的加权和,每部分的权重通过query和key之间点积或其他运算而来。
 
Scaled Dot-Product Attention(缩放的点积attention)
图二左边所示为Scaled Dot-Product Attention。输入包含query、dk维的keys和dv维的values。我们通过计算query和所有的keys的点积,每一个再除以根号dk,最后使用softmax获取每一个value的权重。
【为什么除以dk?】 假设两个 dk 维向量每个分量都是一个相互独立的服从标准正态分布的随机变量,那么他们的点乘的方差就是 dk,每一个分量除以 sqrt(d_k) 可以让点乘的方差变成 1。
在实际中,可以通过使用矩阵相乘的方式同时计算一组query,只需将query,keys,values打包成一个矩阵Q,K, V即可。
有两种attention方法,一种是加法[需要调研],另一种是点积。 加法是使用含有一个隐藏层的前馈神经网络,与加法attention相比,点积在时间和空间上都很高效,因为他可以通过矩阵方式实现优化。
Multi-Head Attention
将query、key和value分别映射h倍到维度dk,dk和dv,在每一个映射空间中query, key和value并行执行attention函数,产生dv维度的结果,最后将每一个空间的结果进行拼接得到 h * dv 维,即原始维度。
意义:Multi-head可以让模型在不同的位置从不同的视角进行学习,与单attention head相比学习到信息更丰富,每一个head可以并行,时间复杂度一致. 【问题】head为什么是8,不是4,16或其他?
attention在transformer中的应用
Transformer在三个地方使用了multi-head attention。 1、在encoder-decoder层,query是上一个decoder层产生,key, value来自于encoder,这可以让decoder中每一个位置都可以学习到输入序列中的信息。 2、在encoder中包含许多self-attention层,在每个self-attention层所有的key, value, query都是由上一层而来,因为每个位置都含有之前层的信息。 3、在decoder中也包含了许多self-attention层,避免看见未来现象,在decoder中加入了mask
 
前馈神经网络
除了attention层之外,在transformer中还包含前馈神经网络层,每个都是两层线性变换,使用RELU激活函数输入维度是512,第一层全连接的输出是2048,第二层的输出是512
 
embedding与softmax
同其他的序列模型相同,我们使用学习到的embedding,在网络中也使用了线性变换函数和softmax函数。在transformer中在两个嵌入层之间和pre-softmax线性变换共享相同的权重矩阵。 在嵌入层中,我们将这些权重乘以 根号dmodel??
位置编码[待补充]
why self-attention
attention与rnn,cnn对比
正则化
residual dropout
在每一个单元的输出加一个dropout层,另外在word embedding之后也使用dropout
label smoothing
参考

[Attention Is All You Need]论文笔记的更多相关文章

  1. Multimodal —— 看图说话(Image Caption)任务的论文笔记(一)评价指标和NIC模型

    看图说话(Image Caption)任务是结合CV和NLP两个领域的一种比较综合的任务,Image Caption模型的输入是一幅图像,输出是对该幅图像进行描述的一段文字.这项任务要求模型可以识别图 ...

  2. Deep Reinforcement Learning for Visual Object Tracking in Videos 论文笔记

    Deep Reinforcement Learning for Visual Object Tracking in Videos 论文笔记 arXiv 摘要:本文提出了一种 DRL 算法进行单目标跟踪 ...

  3. 论文笔记:语音情感识别(四)语音特征之声谱图,log梅尔谱,MFCC,deltas

    一:原始信号 从音频文件中读取出来的原始语音信号通常称为raw waveform,是一个一维数组,长度是由音频长度和采样率决定,比如采样率Fs为16KHz,表示一秒钟内采样16000个点,这个时候如果 ...

  4. attention发展历史及其相应论文

    这个论文讲述了attention机制的发展历史以及在发展过程的变体-注意力机制(Attention Mechanism)在自然语言处理中的应用 上面那个论文提到attention在CNN中应用,有一个 ...

  5. Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现(转)

    Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现 zouxy09@qq.com http://blog.csdn.net/zouxy09          自己平时看了一些论文, ...

  6. 论文笔记之:Visual Tracking with Fully Convolutional Networks

    论文笔记之:Visual Tracking with Fully Convolutional Networks ICCV 2015  CUHK 本文利用 FCN 来做跟踪问题,但开篇就提到并非将其看做 ...

  7. Deep Learning论文笔记之(八)Deep Learning最新综述

    Deep Learning论文笔记之(八)Deep Learning最新综述 zouxy09@qq.com http://blog.csdn.net/zouxy09 自己平时看了一些论文,但老感觉看完 ...

  8. Twitter 新一代流处理利器——Heron 论文笔记之Heron架构

    Twitter 新一代流处理利器--Heron 论文笔记之Heron架构 标签(空格分隔): Streaming-process realtime-process Heron Architecture ...

  9. Deep Learning论文笔记之(六)Multi-Stage多级架构分析

    Deep Learning论文笔记之(六)Multi-Stage多级架构分析 zouxy09@qq.com http://blog.csdn.net/zouxy09          自己平时看了一些 ...

随机推荐

  1. asp.net之大文件断点续传

    ASP.NET上传文件用FileUpLoad就可以,但是对文件夹的操作却不能用FileUpLoad来实现. 下面这个示例便是使用ASP.NET来实现上传文件夹并对文件夹进行压缩以及解压. ASP.NE ...

  2. 《挑战30天C++入门极限》 对C++中引用的补充说明(实例)

        对C++中引用的补充说明(实例) #include <iostream>    #include <string>    using namespace std;    ...

  3. 浅析python迭代器及生成器函数

    1. 什么是迭代协议? 迭代协议主要包括两方面的协议集,一种是迭代器协议,另一种是可迭代协议.对于迭代器协议来说,其要求迭代器对象在能够在迭代环境中一次产生一个结果.对于可迭代协议来说,就是一个对象序 ...

  4. Java通过JDBC连接MySQL数据库(一)

    JDBC JAVA Database Connectivity java 数据库连接 为什么会出现JDBC SUN公司提供的一种数据库访问规则.规范, 由于数据库种类较多,并且java语言使用比较广泛 ...

  5. [转载]运行中的DLL自升级

      最近手头有个需求:dll需要注入到某个进程常驻,该dll具备自我升级能力,当发现新的可用版本时,立即Free自己,加载新的.下面是一个实现方案: 开启一个监听线程,从网络上拉新的可用版本,下载放到 ...

  6. PrivateIpAddresses Array of String 实例主网卡的内网IP列表。 PublicIpAddresses Array of String 实例主网卡的公网IP列表。 注意:此字段可能返回 null,表示取不到有效值。

    https://cloud.tencent.com/document/api/213/15753 浮动 IP 地址 https://cloud.google.com/solutions/best-pr ...

  7. java使用json-lib库的json工具类.

    import net.sf.ezmorph.object.DateMorpher;import net.sf.json.JSONArray;import net.sf.json.JSONObject; ...

  8. Mac 终端显示git分支

    1 进入你的home目录 cd ~ 2 编辑.bashrc文件 vi .bashrc 3 将下面的代码加入到文件的最后处 function git_branch { branch="`git ...

  9. Leetcode: Campus Bikes II

    On a campus represented as a 2D grid, there are N workers and M bikes, with N <= M. Each worker a ...

  10. 【转】把sqlite3数据导入到MySQL中

    之前我们默认使用的是SQLite数据库,我们开发完成之后,里面有许多数据.如果我们想转换成Mysql数据库,那我们先得把旧数据从SQLite导出,然后再导入到新的Mysql数据库里去. 1.SQLit ...