Transformer学习记录

Transformer

居中的图片
Transformer可分为Input,Encoder,Decoder和Output四部分

1 Transformer的Input

在这里插入图片描述

Transformer输入是一个序列数据(如一句话)。如“I want to eat KFC”。
Input Embedding
将这句话转换成可被计算机识别的一组向量(词向量形式可以是word2vec,GloVe,one-hot编码等)。
Positional Encoding
进行位置编码。“我想吃KFC”和“KFC想吃我”是完全不同的意思,故对词在句中的位置编码极为重要。而Transformer是基于self-Attention机制的,该机制无法获取词语的位置信息。故需进行位置编码。在原论文中,采用的是正余弦位置编码。

2 Transformer的Encoder

在这里插入图片描述

2.1 Multi-Head Attention

在这里插入图片描述

Scaled Dot-Product 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(d kQKT)V
在这里插入图片描述
假如输入序列是"Thinking Machines",x1,x2就是对应的"Thinking"和"Machines"添加过位置编码之后的词向量,然后词向量通过三个权值矩阵 W Q W^Q WQ W K W^K WK W V W^V WV
,转变成为计算Attention值所需的Query,Keys,Values向量。
在这里插入图片描述
得到Q,K,V之后,接下来就是计算Attention值了。
step1: 输入序列中每个单词之间的相关性得分,使用点积法,就是用Q中每一个向量与K中每一个向量计算点积,具体到矩阵的形式: s c o r e = Q ⋅ K T score = Q\cdot K^T score=QKT, s o c r e socre socre是一个(2,2)的矩阵。
step2: 对于输入序列中每个单词之间的相关性得分进行归一化,归一化的目的主要是为了训练时梯度能够稳定。 s c o r e = s c o r e / d k score = score/\sqrt{d_k} score=score/dk d k d_k dk就是K的维度,以上面假设为例, d k d_k dk=64。
step3: 通过 s o f t m a x softmax softmax函数,将每个单词之间的得分向量转换成[0,1]之间的概率分布,同时更加凸显单词之间的关系。经过 s o f t m a x softmax softmax后, s c o r e score score转换成一个值分布在[0,1]之间的(2,2) α α α概率分布矩阵。
step4: 根据每个单词之间的概率分布,然后乘上对应的Values值, α α α V V V进行点积, Z = s o f t m a x ( s c o r e ) ⋅ V Z = softmax(score)\cdot V Z=softmax(score)V V V V的为维度是(2,64),(2,2)x(2,64)最后得到的Z是(2,64)维的矩阵
整体的计算图如下:
在这里插入图片描述

Multi-Head Attention(右):

在这里插入图片描述
将模型分为多个头,形成多个子空间,可以让模型去关注不同方面的信息。上图中Multi-Head Attention 就是将 Scaled Dot-Product Attention 过程做 h h h 次,再把输出合并起来。

2.2 Add & Normalize

Add

在这里插入图片描述
添加残差块防止神经网络退化。
神经网络退化:深度神经网络通过增加网络的层数,Loss逐渐减小,然后趋于稳定达到饱和,然后再继续增加网络层数,Loss反而增大。
例如,假如某个神经网络的最优网络层数是18层,但是我们在设计的时候并不知道到底多少层是最优解,本着层数越深越好的理念,我们设计了32层,那么32层神经网络中有14层其实是多余地,我们要想达到18层神经网络的最优效果,必须保证这多出来的14层网络必须进行恒等映射,恒等映射的意思就是说,输入什么,输出就是什么,可以理解成F(x)=x这样的函数,因为只有进行了这样的恒等映射才能保证这多出来的14层神经网络不会影响最优的效果。
但现实是神经网络的参数都是训练出来地,要想保证训练出来地参数能够很精确的完成F(x)=x的恒等映射其实是很困难的。多余的层数较少还好,对效果不会有很大影响,但多余的层数一多,可能结果就不是很理想了。这个时候大神们就提出了ResNet 残差神经网络来解决神经网络退化的问题。
在这里插入图片描述
上图就是构造的一个残差块,可以看到X是这一层残差块的输入,也称作F(X)为残差,X为输入值,F(X)是经过第一层线性变化并激活后的输出,该图表示在残差网络中,第二层进行线性变化之后激活之前,F(X)加入了这一层输入值X,然后再进行激活后输出。在第二层输出值激活前加入X,这条路径称作shortcut连接。
添加了残差块后,之前说的要完成恒等映射的函数就变成h(X)=F(X)+X,要让h(X)=X,相当于只需要让F(X)=0就可以了。神经网络通过训练变成0是比变成X容易很多地,因为一般初始化神经网络的参数的时候就是设置的[0,1]之间的随机数。所以经过网络变换后很容易接近于0。
添加残差块最实际的用处(ResNet):h(X)=F(X)+X,相当于给网络层的学习指了一条明路,即另其朝着给输入X加上一部分F(X)进行学习,使得网络的学习更具有指向性,排除很多无关因素的干扰。

Normalize

在神经网络进行训练之前,都需要对于输入数据进行Normalize归一化:1,能够加快训练的速度;2.提高训练的稳定性。
在这里插入图片描述

Feed Forward

在这里插入图片描述
全连接层公式如下:
F N N ( x ) = m a x ( 0 , x W 1 + b 1 ) W 2 + b 2 FNN(x)=max(0,xW_ 1+b_1)W_2+b_2 FNN(x)=max(0,xW1+b1)W2+b2
这里的全连接层是一个两层的神经网络,先线性变换,然后ReLU非线性,再线性变换。
这里的x就是我们Multi-Head Attention的输出Z,还是引用上面的例子,那么Z是(2,64)维的矩阵,假设W1是(64,1024),其中W2与W1维度相反(1024,64),那么按照上面的公式,我们发现维度没有发生变化,这两层网络就是为了将输入的Z映射到更加高维的空间中(2,64)x(64,1024)=(2,1024),然后通过非线性函数ReLU进行筛选,筛选完后再变回原来的维度。
映射到高维度的原因:很多时候我们输入的特征值(输入的向量)并非可以完全线性区分的。只要维度超过了数据量,所有数据都是线性可分的。(特征够多,数据就非常容易变得可分)。

Transformer的Decoder

Masked Multi-Head Attention

在这里插入图片描述

Masked
为了使得 decoder 不能看见未来的信息。对于一个序列,在 time_step 为 t 的时刻,我们的解码输出应该只能依赖于 t 时刻之前的输出,而不能依赖 t 之后的输出。因此需要把 t 之后的信息给隐藏起来。
Multi-Head Attention
Encoder中的Multi-Head Attention是基于Self-Attention的,Decoder中的第二个Multi-Head Attention就只是基于Attention,它的输入Query来自于Masked Multi-Head Attention的输出,Keys和Values来自于Encoder中最后一层的输出。
在Encoder中,第一个Masked Multi-Head Attention是为了得到之前已经预测输出的信息,相当于记录当前时刻的输入之间的信息的意思。第二个Multi-Head Attention是为了通过当前输入的信息得到下一时刻的信息,也就是输出的信息,是为了表示当前的输入与经过encoder提取过的特征向量之间的关系来预测输出。
经过了第二个Multi-Head Attention之后的Feed Forward Network与Encoder中一样,然后就是输出进入下一个decoder,如此经过6层decoder之后到达最后的输出层。

Transformer的Output

在这里插入图片描述
Output如图中所示,首先经过一次线性变换,然后Softmax得到输出的概率分布,然后通过词典,输出概率最大的对应的单词作为我们的预测输出。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值