当前位置:   article > 正文

Transformer_transformer mlp模块

transformer mlp模块

Transformer

诞生原因与解决的问题:

  1. 最初用来解决语言翻译问题,所以有encoder和decoder。
  2. RNN无法并行,需要计算完 h t − 1 h_{t-1} ht1状态才可以得到 h t h_t ht状态,性能差。
  3. 历史信息是依次传递的,如果序列较长,早期时序信息可能会被丢掉。如果用更大的 h t h_t ht来保留历史信息,内存开销大。
  4. attention最初用来提升encoder到decoder的传递效率。
  5. transformer增加了并行度,提高速度。

结构

先从整体结构入手,然后再依次将内部的层

1 encoder and decoder

输入序列 ( x 1 , . . . , x n ) (x_1,...,x_n) (x1,...,xn),encoder编码后生成对应的向量 ( z 1 , . . . , z n ) (z_1,...,z_n) (z1,...,zn),根据z进行decoder生成输出序列 ( y 1 , . . . , y m ) (y_1,...,y_m) (y1,...,ym)
n和m不一定一样,例如英文翻译成中文。
注: encoder可以同时生成整个序列,但decoder只能一次生成一个元素。而且 y i y_i yi是根据 y 1 , . . . , y i − 1 y_1,...,y_{i-1} y1,...,yi1生成的,也就是图中右下方shifted right的含义,将之前时刻的输出作为输入,对序列来看就是依次向右输入decoder。
在这里插入图片描述

1.1 encoder

堆叠了N=6个图片左边的结构,由multi-head attention和MLP模块组成,每个模块(sublayer)都有残差链接,模块后接LayerNorm。可以表示为: L a y e r N o r m ( x + S u b l a y e r ( x ) ) LayerNorm(x+Sublayer(x)) LayerNorm(x+Sublayer(x))。输出维度 d m o d e l = 512 d_{model}=512 dmodel=512。一共有两个参数可以调,即N和 d m o d e l d_{model} dmodel

LayerNorm

在这里插入图片描述
BatchNorm对每个特征做归一化。在处理图片中就是对单个channel归一化。
LayerNorm对每个样本做归一化,没有样本间的依赖。这里batch由很多句子组成,而sequence是句子中的单词,feature是单词向量。
BatchNorm和LayerNorm都有两个可学习的参数 ( λ , β ) (\lambda,\beta) (λ,β),来调整归一化后的均值和方差。
这里不用BatchNorm的原因是,每个样本的长度不相同。而LayerNorm是在每个样本中进行的,相对稳定。

1.2 decoder

堆叠N=6个图片右侧的结构,里面有三个自结构。后两个与encoder相同,但在前面加了一个masked multi head attention,并使用了残差链接。由于attention的存在,训练时可以看到全部时刻的输出,Mask的作用是防止解码器训练时提前看到当前时刻之后的输出。

2 Attention

Attention是由query和key-value的映射得出的,本质上是value的加权和。与query相近的key,对应的value会有更大的权重。

2.1 Scaled Dot-Product Attention

Attention计算表达式为:
A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q K T d k V ) Attention(Q,K,V)=softmax(\frac{QK^T}{\sqrt{d_k}}V) Attention(Q,K,V)=softmax(dk QKTV)

在这里插入图片描述
其中每个query和key维度都是 d k d_k dk,value维度是 d v d_v dv。对query和key做内积,值越大相似度越高,除 d k \sqrt{d_k} dk 来减少维度的影响,最后用softmax得到非负的和为1的权重,然后求得Attention。除 d k \sqrt{d_k} dk (scale)的理由:当维度较高时,内积的结果可能过大或过小,导致softmax的结果更接近于1或0(接近onehot编码),导致梯度消失。假设向量q,k满足各分量独立同分布,均值为0,方差为1,那么qk点积均值为0,方差为dk,从统计学计算,若果让qk点积的方差控制在1,需要将其除以dk的平方根,使softmax更加平滑
上式的QKV是矩阵形式,图示如下:
在这里插入图片描述

mask

防止计算t时刻输出时,提前看到t时刻及之后的输出。将 k t ∗ q t , k t + 1 ∗ q t + 1 , . . . , k n ∗ q n k_t*q_t,k_{t+1}*q_{t+1},...,k_{n}*q_{n} ktqt,kt+1qt+1,...,knqn的结果换成非常大的负数,如 − 1 e 10 -1e^{10} 1e10。这些负数在softmax后变成0,因此保证了时序性。

2.2 multi head attention

用CNN替换RNN来减少时序计算。但卷积计算一次只能看一个小窗口,两个距离较远的元素需要多层卷积才能得到二者关系,但用transformer的注意力机制一次就可以看到整个序列,因此单层卷积就可以得到整体结果。此外卷积的优点是可以生成多个输出通道,每个输出通道可以被认为是用来识别不一样的模式。由此诞生了multi head attention。

多头注意力机制的原因:
单次注意力的运算没有可学习的参数。使用不同的投影方式(可学习的部分)将QKV投影到 d k , d k , d v d_k,d_k,d_v dk,dk,dv(具体数值在后面有讲解),分别求注意力,然后连接。这样可以对不同的模式产生不同的计算方法,让不同投影的度量空间去匹配不同的模式,类似卷积有多个输出通道。
在这里插入图片描述

M u l t i H e a d ( Q , K , V ) = C o n c a t ( h e a d 1 , . . . , h e a d h ) W O w h e r e h e a d i = A t t e n t i o n ( Q W i Q , K W i K , V W i V ) MultiHead(Q,K,V)=Concat(head_1,...,head_h)W^O\\ where head_i = Attention(QW^Q_i,KW^K_i,VW^V_i) MultiHead(Q,K,V)=Concat(head1,...,headh)WOwhereheadi=Attention(QWiQ,KWiK,VWiV)
其中,文中h=8(有8个头),投影方式是参数矩阵(4个可学习的地方) W i Q ∈ R d m o d e l ∗ d k , W i K ∈ R d m o d e l ∗ d k , W i V ∈ R d m o d e l ∗ d v , W i O ∈ R h d v ∗ d m o d e l W^Q_i\in \mathbb{R}^{d_{model}*d_k},W^K_i\in \mathbb{R}^{d_{model}*d_k},W^V_i\in \mathbb{R}^{d_{model}*d_v},W^O_i\in \mathbb{R}^{hd_v*d_{model}} WiQRdmodeldk,WiKRdmodeldk,WiVRdmodeldv,WiORhdvdmodel。由于有残差连接,输入和输出的维度应该是相同的,即 d m o d e l = 512 d_{model}=512 dmodel=512,因此投影维度 d k = d v = d m o d e l / h = 64 d_k=d_v=d_{model}/h=64 dk=dv=dmodel/h=64

2.3 Attention在transformer中的使用

Attention在结构图中表现为橙色。可以分为自注意力和非自注意力。

2.3.1 自注意力(self-attention)

自注意力意味着query,key,value相同(自己与自己比对,求权重)。
对应encoder的attention和decoder的masked attention。
假设句子长为n,则输入(图中的红色是value)是n个长为d的向量。每个query会得到一个输出,输出是value的加权和,因此输出维度也是d。query与对应的key权重是最大的( q i = k i q_i=k_i qi=ki),其次是与query相似的key,如图中绿色线表示,权重越大越粗。
decoder的masked attention中,t时刻及以后的权重求出来是0,原因在2.1中mask部分已经讲过。
在这里插入图片描述

2.3.2 非自注意力(cross self-attention)

非自注意力意味着query与key-value不相同。
对应decoder里的第二层attention。
假设encoder的输出是m个长为d的向量,decoder的masked attention输出是n个长为d的向量(例如英语翻译成中文,最后翻译的字数是不同的)。decoder第二层attention的输入是encoder的输出作为key-value,decoder的masked attention的输出作为query。因此本层是比对解码的query和编码的key的相似度。输出是n个长为d的向量,过程参照2.1中的矩阵乘法图示。

3 Position-wise Feed-Forward Networks

把每个词都经过同一个MLP作用一次,映射到对应的语义空间。
用公式表达为:
F F N ( x ) = m a x ( 0 , x W 1 + b 1 ) W 2 + b 2 FFN(x)=max(0,xW_1+b_1)W_2+b_2 FFN(x)=max(0,xW1+b1)W2+b2
x是每个单词,本质上是一个单隐藏层的MLP,激活函数是ReLU。其中输入和输出的维度是 d m o d e l = 512 d_{model}=512 dmodel=512,隐藏层维度 d f = 2048 d_f=2048 df=2048

与RNN的区别

不考虑残差连接,LayerNorm和多头。
相同:都使用MLP进行语义空间转换。
不同:
Transformer:attention层将序列中所有信息(包括时序信息)抓取出来,aggregation,因此MLP只需要对单个单词做就可以。
RNN:每个时序信息都由上一时刻的输出获得(绿色线)
图中的MLP都是同一个。
在这里插入图片描述

4 Embedding

对句中所有单词,依次学习一个长为d=512的向量来表示。位置在encoder和decoder前。因为学习后embedding向量的L2norm值偏小,由于后续要添加positional encoding,因此乘了个 d m o d e l \sqrt{d_{model}} dmodel ,使他们在同一范围(scale)。

5 Positional Encoding

Attention并不存在时序信息,只是加权和。如果序列打乱,得到的attention结果是相同的(加法交换律)。Positional Encoding的作用就是为输入加入时序信息。公式略。

一些Transformer的常见问题

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/345741
推荐阅读
相关标签
  

闽ICP备14008679号