主流的序列到序列模型都是基于含有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. 【JQuery】操作前端控件知识笔记

    一.jQuery操作复选框checkbox 1.设置选中.取消选中.获取被选中的值.判断是否选中等 注意:操作checked.disabled.selected属性,强制建议只用prop()方法!!, ...

  2. Nginx 安装配置【必须把文件到放到机器上】

    [必须把所有下载的gz文件到放到机器上:编译] 1.安装nginx之前的编译软件 yum -y install make zlib zlib-devel gcc-c++ libtool  openss ...

  3. 《挑战30天C++入门极限》新手入门:C++中堆内存(heap)的概念和操作方法

        新手入门:C++中堆内存(heap)的概念和操作方法 堆内存是什么呢? 我们知道在c/c++中定义的数组大小必需要事先定义好,他们通常是分配在静态内存空间或者是在栈内存空间内的,但是在实际工作 ...

  4. python中re模块的match,search方法的比较

    match 匹配字符串的开头, search匹配整个字符串

  5. jQuery学习笔记——事件

    何为事件 就是你的鼠标,键盘等对网页元素进行的操作. 常见事件 鼠标事件 键盘事件 表单事件 文档/窗口事件 click keypress submit load dblclick keydown c ...

  6. iOS开发之如何在用户删除应用后保持一些数据

    在开发过程中我们有时候在用户删除时候保存一些信息在用户下次安装应用时候使用,这个时候我们可以使用剪切版UIPasteboard的FindUIPasteboard和钥匙串keychain的使用 剪切版剪 ...

  7. Spring boot RSA 文件加密解密

    github项目地址 rsa_demo ##测试 加密D:/hello/test.pdf 文件,生成加密后的文件 testNeedDecode.pdf 对testNeedDecode.pdf 文件进行 ...

  8. ubuntu16.04安装opencv3.4.1教程

    最近opencv3.4.1发布了,想换个新的试试鲜,于是把配置的过程通过博文的方式记录下来,方便查阅. 本教程原为3.3.0,但经过博主亲测,3.4.0.3.4.1皆适用 1.去官网下载opencv, ...

  9. JWT Claims

    JWT Claims “iss” (issuer)  发行人 “sub” (subject)  主题 “aud” (audience) 接收方 用户 “exp” (expiration time) 到 ...

  10. Spark(四十七):Spark UI 数据可视化

    导入: 1)Spark Web UI主要依赖于流行的Servlet容器Jetty实现: 2)Spark Web UI(Spark2.3之前)是展示运行状况.资源状态和监控指标的前端,而这些数据都是由度 ...