读论文:Attention Is All You Need


This paper is all you need!
听了宏毅老师课和沐神的带读,写一下自己的笔记


0、Abstract

该模型没有用到循环和卷积,而是仅依赖于attention机制,主要是针对机器翻译这个任务


1、Introduction

在这篇文章之前,attention已经成功用在encoder和decoder了,主要用在encoder的信息如何传给decoder,并提出本文所讲的transformer,不再使用RNN这种串行的网络,而是基于纯attention机制并行网络,这样训练的时间会更短。


2、Background

卷积对很长的序列比较难以建模,如果序列很长需要很多层卷积才能将其融合起来。而attention机制一层就可以看完全部的序列。采用多头注意力机制模仿CNN有多个输出通道的效果。
讲了attention等一些相关的论文以及本文和他们的区别。


3、Model Architecture

在处理序列模型方面,比较好的是encoder-decoder架构。encoder和decoder分别有什么作用呢?以一个句子为例,有n个词,那么就对应着n个词向量,encoder把这n个向量转化成另外n个对应的向量。decoder会拿到这n个向量,生成一个长为m的序列,就像seq2seq任务,机器自己决定输出的向量的个数,而且这里输出的向量不像encoder是一下子全部输出的,decoder的输出是一个一个蹦出来的,每一个输出的向量都要把前一个输出的向量也当作输入,这就是二者不同的地方。

直接上图:在这里插入图片描述
图中的encoder和decoder都是画了其中的一块(下面就叫layer),一个layer中包含的东西如图所示,块中的区别就是decoder里第一个attention模块采用的是Masked Multi-Head Attention,而encoder里没有Masked。Masked可以实现刚才说的只考虑之前的输出的效果

3.1 Encoder and Decoder Stacks

Encoder:
这里encoder用了6个图中的layer,每个layer里面有一个Multi-Head Attention和Feed Forward网络,且都采用残差连接,最后再用一个layer normalization。由于残差需要输入输出大小相等,所以简单起见,把每个子层的维度都设置为512固定长度。

Decoder:
同样decoder用了6个图中的layer,和encoder不同的是,接受输入时多加了一个子层Masked Multi-Head Attention。

3.2 Attention

介绍了一下注意力机制,不同的相似度函数会导致不同的attention版本,下面看transformer用到的注意力机制:
3.2.1 Scaled Dot-Product Attention
q和k必是等长的,q和k做内积作为相似度,然后再除以√dk(dk是向量的维度),然后用一个softmax得到权重,即得到n个非负的,和为1的权重,再和V相乘。所以输出向量的维度和V向量是相同的。
在这里插入图片描述
这里公式在运算的时候采用矩阵乘法,所以可以并行计算,速度比较快。

作者又讲了两种常见的注意力机制,一种是additive attention,可以处理q和k不等长的情况;另一种是dot-product attention,作者采用的就是这种机制,但又多了一个除以√dk(图中的Scale)
在这里插入图片描述
图中Scale:作者说dk比较大的时候,就是向量维度比较大时,点积得到的数值比较大,也就是经过softmax后,大的值更加接近于1,小的值更加接近0,由于我们optimize的目标是让预测值更加靠近1或者更加靠近0,这样就算训练收敛了,于是这时梯度会比较小,参数就不会再更新了。因此需要除以
√dk避免刚开始就收敛
了,这里dk设置的是512,也需要做一下这个操作。

图中Mask:就是让之后的向量点积算出来的值换成非常大的负数,那么经过softmax的指数运算后会变成0,导致得到的权重变成0,达到只考虑之前的向量的效果。

3.2.2 Multi-Head Attention
那么如何做多头注意力呢?
就是每个输入的向量会产出不同的qkv,不同的q负责不同的相关性,得出来多组输出向量,多组输出最终乘以一个矩阵W得到最终的一组输出。 这里h=8,也就是有8个头。一组QKV负责一个相关性,因此输入时就要乘8组不同的矩阵,要学习的也就是这组矩阵怎么表示它想对应的特征(这里实在是太抽象了,描述的不好)

3.2.3 Applications of Attention in our Model
讲了注意力机制是怎么用在transformer里的 。在encoder和decoder内部都是自注意力机制,即QKV其实都来自于一个输入,但decoder中间那一层的QKV来自不同的地方,K和V来自encoder,Q来自decoder。当q和k相似度比较大的时候,k对应的v的权重就比较大,所以目的就是采用q,提取encoder中和自己相似度比较大的向量信息,提取encoder输出的和自己相近的东西。

3.3 Position-wise Feed-Forward Networks

其实就是全连接的前馈神经网络,不一样的是该网络对句子里的所有词都作用一次,而不是对整个序列作用一次。具体公式如下:
在这里插入图片描述
就是一个线性层,加上一个Relu,再套一个线性层。在注意力层的输出向量的维度是512,那么公式里的x维度是512,但是W1会把x投影成2048维,然后W2又把2048投影回512。

3.4 Embeddings and Softmax

对任何一个词需要学习一个长为512的向量去表示它。

3.5 Positional Encoding

Attention是考虑全局的,因此它不会考虑词的位置信息,所以需要把位置信息加进来。RNN本身就是把前一个输出结果传给后面,是自带位置信息的,但Attention没有,所以要考虑词的位置信息的话需要加一个positional encoding。

4、Why Self-Attention

主要和CNN,RNN对比了一下


后面还有一些实验就不写了,主要是仔细过一遍这个模型,把学习的笔记记录下来防止后面忘掉。这篇文章还是比较难理解的,反正我学到这已经不行了。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值