Transformer详解

Attention is all your need

1.background

  1. 卷积操作当要连接两个比较远的像素的时候,需要使用多次卷积操作才能将两个像素融合起来,但卷积操作可以输出多个通道(多个通道意味着可以学习到多个特征)

  2. 但是如果使用transformer的注意力机制的话,每一次可以看到所有的像素,这个时候直接一层就可以将这两个像素进行融合,但是为了将卷积操作的多个通道(特征)融合起来,因此提出了Multi-Head Attention,这样就可以模拟CNN中多输出通道的一个效果

  3. transformer的关键点:self-attention是一种将单个序列的不同位置联系起来以计算该序列的表示的注意力机制。自我注意已成功用于各种任务,包括阅读理解,抽象概括,文本蕴涵和学习任务独立的句子表征

2.Model Architecture

2.1 encoder-decoder structure:
encoder:将序列(x1,x2,…,xn)编码成对应的向量(z1,z2,…,zn)
decoder:将编码器的输出(z1,z2,…,zn)转化为(y1,y2,…,ym),在解码器中y1,y2,…ym是一个一个生成的,在得到y1之后,根据y1去输出y2…(过去时候的输出会影响到现在得到输出—>auto-regressive自回归)
transformer就是使用了encoder-decoder架构,网络的架构模型图如下:
在这里插入图片描述
encoder部分:

  1. 由Input Embedding+Positional Encoding +N个Transformer block
  2. Input Embedding:将输入的一个个词表示成一个个的向量,同时这些向量里面加入了Positional Embedding
  3. Transformer block:Multi-Head Attention +FeedForward+残差连接+Norm

decoder部分:

  1. 首先将encoder的输出作为decoder的输入
  2. decoder部分和encoder部分类似,相较于encoder部分多了个Masked Multi-Head Attention
  3. 加入Masked Multi-Head Attention后,将Transformer block重复n次,最后softmax得到输出

encoder和decoder详解:

  • layer norm与batch norm:batch norm是对一个小的mini-batch里面将每一列(不同样本的同一个特征进行norm),layer norm是对每个样本进行norm(下图中左图就是batch norm右图就是layer norm)
    在这里插入图片描述
    上面的是对于二维情况下的batch norm和layer norm,对于transformer里面的词向量来说,输入是一个三维的东西,因为输入的是一个序列的样本,即每个样本里面有很多个元素(一个句子里面有n个词,而每个词里面都是对应的一个向量,在原论文里面,词向量的长度是固定为512),所以此时对应的就是一个3维的形状,这样batch norm对应的就是蓝色的框,layer norm对应的就是黄色的框。
    在这里插入图片描述
  • Masked Multi-Head Attention:由于在注意力机制中,每次可以看到完整的输入,为了避免在预测的时候输出看到了后面的输入,所以引入了Masked Multi-Head Attention,从而保证训练和预测的时候保持一致

2.2 各个部分详解

  • Attention:output等于value的加权和,权重=每个value对应的key和查询的query的相似度计算而来,不同的相似函数回导致不一样的注意力版本,下面就是transformer中用到的注意力函数:Scaled Dot-product Attention在这里插入图片描述
    在这个注意力函数中,Query和Key的长度(dimension)是等长的,都等于dk,value的长度(dimension)是dv,由于输出和value的dimension是一样的,所以输出也是dv。公式的具体含义就是将query(Q)和key(K)做内积计算相似度,然后再除以根号dk(除以根号dk应该是为了防止softmax时梯度消失,即不除可能会导致权重大的无限接近于1,小的无限接近于0),然后经过一个softmax得到权重(n个非负的且加起来和为1的权重),得到权重后作用在value上就得到输出,用图表示就是下面这样:
    在这里插入图片描述
    上图中的mask是为了防止在t时间看到第t+1时间的东西,在计算权重的时候,对于qt和kt之后计算的值换成一个非常大的负数,在进入softmax的时候权重就会变成0,这样在计算output的时候就只用了v1~vt-1的结果(即做了一个mask)
  • Multi-Head Attention:与其做一个单个的注意力函数,不如把整个query、key和value投影到一个低维度(投影h次)然后再做h次的注意力函数将这些函数的输出并在一起,再投影回来得到最终的输出,通过投影到的度量空间里面去学习不同模式的相似度函数(这个操作就类似于卷积操作的不同通道数上学习不同的特征)
    在这里插入图片描述
    计算公式如下:
    在这里插入图片描述

2.3 在transformer模型中是如何使用注意力

在transformer模型中一共有三种不一样的注意力层:

  1. 编码器的注意力层:
    在编码器中,输入被编码成向量后,分别被作为编码器注意力层的QKV作为输入(同一个东西既作为key又作为value又作为query—自注意力机制),对于每一个query都会产生一个输出(且输出的大小和value的维度是一样的),那么n个query就会产生n个输出(即输入和输出的维度是一样的,且在自注意力机制中,输出是输入的加权和)在编码器的注意力层中使用的是多头注意力机制,那么就会学习出h个不同的距离空间。

  2. 解码器的注意力层:
    解码器的注意力层和编码器的注意力层类似,唯一不一样的是在解码器的注意层中加入了一个Mask,Mask的作用是为了防止在训练过程中解码器“看到了”答案。

  3. 编码器与解码器交互的注意力层:
    在这个注意力层中不再是自注意力层了,在这个注意力中key和value来自编码器的输出,query来自解码器下一个attention的输入,在这样的一个模式之中,交互层的注意力的输出等于编码器的输出的加权和(这样做的目的就是在这个注意力中,将编码器的输出根据想要的输出“拎”出来,即注意到自己感兴趣的东西,那些没那么感兴趣的东红就可以忽略它)

2.4 Position-wise Feed-Forward Networks

其实就是一个MLP,在attention中获取了全局信息,接下来经过Feed-Forward进行语义转化(与RNN有点类似),具体计算公式如下:
在这里插入图片描述
2.5 Embeddings和Position Encoding
Embeddings:对于输入,把它映射成为一个向量。
Position Encoding:在attention中是不存在时序信息的(attention输出是value的加权和),如果不加入序列信息的话,对于一句话把它按照任何顺序打乱最终attention出来的结果都是一样的,所以需要把时序信息加入进来
具体公式如下:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值