Transformer解释

Transformer解释

一、背景

在Transformer出现之前,LSTM、GRU等RNN系列网络以及encoder-encoder+attention架构基本是解决NLP问题的全部基础。但是,RNN的一个缺陷是由于是自回归的模型,只能串行的一步步计算,无法并行计算。而ConvS2S等网络,使用CNN作为基本构建模块,这样可以并行计算所有的输入和输出位置的隐层表示。但是,随着输入和输出位置信号的越来越远,计算的数量也随之增加,这使学习变得更加困难。Transformer的出现改进了这一算法,两个输入之间的距离对其计算来说没有影响,都是一致的,并且可以并行计算。

二、Transformer整体架构

整体结构图:

在这里插入图片描述

左边为Encoder,右边为Decoder

三、Transformer细节剖析

1.编码器

Encoder部分,它是由N层方框里面的内容堆叠起来的。

每一层有两部分构成:

1.multi-head self-attention

2.全连接前馈网络

在每一部分都由残差+layer normalization连接。这样的方框有6个,即N=6,模型隐藏层单元数 d m o d e l d_{model} dmodel=512(隐层单元数)

2.自注意力机制

引入QKV三个矩阵,实现对任意位置添加注意力。使用Q矩阵(查询矩阵)去查询键值对(key-value pair)中的key,然后得到一个概率分布,再据此对value进行加权相加,获取当前query下的注意力。
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 QKT)V
常用的attention方式有两种:

一、乘性attention,即向量内积

二、加性attention,即使用额外一层隐藏层来计算。

此处attention计算方式与乘性attention计算方式的不同在于使用了一个缩放因子 1 d k \frac{1}{\sqrt{d_k}} dk 1

d k d_k dk比较小的时候,不加缩放的效果和加性attention效果差不多,但是当 d k d_k dk的数量较大时,不加缩放的比加性attention效果要差不少,作者怀疑当 d k d_k dk比较大的时候,内积的量级也会随之增大,导致softmax函数会被推向梯度较小的区域,为了避免这个问题,加上了这个缩放项进行量级缩小。

单独一个attention可能过于单薄,作者又提出了multi-head attentionmulti-head attention由多个self attention组合而成。将注意力的计算分散到不同的子空间进行,以达成能够多方面及逆行注意力的学习。并行地将 Q Q Q K K K V V V通过不同的映射矩阵映射到不同的空间(每个空间是一个头),再分别对这些空间中的注意力头进行“Scaled Dot-Product Attention”的学习,最后将得到的多头注意力进行拼接,经过一个额外的映射层映射到原来的空间。
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 1 = 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\space head_1 = Attention(QW_i^Q,KW_i^K,VW_i^V) MultiHead(Q,K,V)=Concat(head1,...,headh)WOwhere head1=Attention(QWiQ,KWiK,VWiV)
这里的 W i Q ∈ R d m o d e l ∗ d Q , 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 O ∈ R h d v ∗ d m o d e l W_i^Q \in R^{d_{model}*d_Q},W_i^K \in R^{d_{model}*d_K},W_i^V \in R^{d_{model}*d_V},W^O \in R^{hd_{v}*d_{model}} WiQRdmodeldQ,WiKRdmodeldK,WiVRdmodeldV,WORhdvdmodel.表示第i个头的变换矩阵,h表示头的个数。

作者论文中, h h h=8,并且 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。整体维度不变,计算量没有增加

(这里我的理解是,每一个空间由 W i Q , W i K , W i V W_i^Q,W_i^K,W_i^V WiQ,WiK,WiV决定,QKV分别乘上这三个矩阵后,获得的内积就为qkv在第i个头所在空间的映射。通过这种方法,我们就获得了多个空间的qkv映射,计算attention之后再拼接,乘上个 W O W^O WO获得原本空间的映射)

矩阵论——矩阵空间-优快云博客矩阵空间的子空间由不同的基构成)

3.前馈网络

这部分是整体架构图中的Feed Forward Network模块,其实就是一个简单的全连接前馈网络。在多头注意力层之后,用于进一步提取和变换特征。前馈网络是提升模型非线性表达能力的重要组成部分。函数为:
F F N ( x ) = R e L U ( x W 1 + b 1 ) W 2 + b 2 FFN(x) = ReLU(xW_1 + b1)W_2 +b_2 FFN(x)=ReLU(xW1+b1)W2+b2
这里的
x : 输入向量(从注意力层输出) W 1 : 第一个线性层的权重矩阵,大小为 d m o d e l × d f f b 1 : 是第一个线性层的偏执 W 2 : 第一个线性层的权重矩阵,大小为 d f f × d m o d e l b 2 : 是第二个线性层的偏执 R e L U :激活函数 x:输入向量(从注意力层输出)\\ W_1:第一个线性层的权重矩阵,大小为d_{model} × d_{ff}\\ b_1:是第一个线性层的偏执\\ W_2:第一个线性层的权重矩阵,大小为d_{ff} × d_{model}\\ b_2:是第二个线性层的偏执\\ ReLU:激活函数 x:输入向量(从注意力层输出)W1:第一个线性层的权重矩阵,大小为dmodel×dffb1:是第一个线性层的偏执W2:第一个线性层的权重矩阵,大小为dff×dmodelb2:是第二个线性层的偏执ReLU:激活函数
其中 d m o d e l d_{model} dmodel是Transformer的隐藏层维度, d f f d_{ff} dff是前馈网络的中间温度,通常 d f f d_{ff} dff大于 d m o d e l d_{model} dmodel,论文中的 d f f = 2048 = 4 × d m o d e l d_{ff} = 2048 = 4 × d_{model} dff=2048=4×dmodel

4.add&norm

使用残差和归一化的思想,缓解深层网络中的梯度消失问题,同时,缓解数值不稳定的问题。
O u t p u t = L a y e r N o r m ( x + S u b L a y e r ( x ) ) x : 表示子层输入 S u b L a y e r ( x ) : 表示子层的输出 ( 多头注意力或前馈网络的结果 ) x + S u b L a y e r ( x ) : 表示残差链接的结果 L a y e r N o r m ( ) : 归一化 Output= LayerNorm(x + SubLayer(x))\\ x:表示子层输入\\ SubLayer(x):表示子层的输出(多头注意力或前馈网络的结果)\\ x+SubLayer(x):表示残差链接的结果\\ LayerNorm():归一化 Output=LayerNorm(x+SubLayer(x))x:表示子层输入SubLayer(x):表示子层的输出(多头注意力或前馈网络的结果)x+SubLayer(x):表示残差链接的结果LayerNorm():归一化

5.解码器

解码器由N层方格中的结构堆叠起来的(在论文中,N=6),encode和decode结构大致相同,但是也有一定的区别

一、自注意力机制(Masked self attention)

为了不使注意力机制收到未来信息的影响,我们在预测第i个输出是,就要将第i+1之后的单词掩盖住,注意,Mask操作是在self-Attention的softmax之前使用的

例如,下面是Decoder的输入矩阵X和Mask矩阵

在这里插入图片描述

随后,在通过x计算获得 Q K T QK^T QKT以及矩阵 V V V之后, Q K T QK^T QKT与Mask矩阵相乘,获得 M a s k Q K T Mask QK^T MaskQKT矩阵

在这里插入图片描述

随后进行softmax

最后,使用Mask Q K T QK^T QKT与矩阵 V V V相乘,得到输出 Z 1 Z_1 Z1

通过上述步骤就可以得到一个 Mask Self-Attention 的输出矩阵 Z i Z_i Zi,随后通过Multi-Head Attention拼接多个 Z i Z_i Zi,获得一个输出 Z Z Z

二、多头自注意力机制(Multi-head attention)

Decode 中的Mulit-head attention和encode中的结构区别不大,但是输入的 Q K QK QK不是由decode上一层的结果得到的,而是从encode中的输出得来的。

这样做的好处是在 Decoder 的时候,每一位单词都可以利用到 Encoder 所有单词的信息 (这些信息无需 Mask)。

三、Softmax预测输出

最后的部分是利用softmax预测下一个单词。由于mask的影响,之前的输出 Z Z Z的每一行只包含本行和上面行的所有信息,位于下侧的行信息不存在

Transformer总结

Transformer通过多头注意力机制,解决了RNN和LSTM对时间步的依赖,使整个输入序列可以实现同时计算,而不是逐步处理。

但是去除了时间步的依赖,我们缺失了位置的信息,因此需要输入添加位置Embedding来补充位置信息。

总结

Transformer通过多头注意力机制,解决了RNN和LSTM对时间步的依赖,使整个输入序列可以实现同时计算,而不是逐步处理。

但是去除了时间步的依赖,我们缺失了位置的信息,因此需要输入添加位置Embedding来补充位置信息。

参考:
https://arxiv.org/abs/1706.03762
https://jalammar.github.io/illustrated-transformer/
https://blog.youkuaiyun.com/qq_36667170/article/details/124359818
https://www.zhihu.com/tardis/zm/art/600773858

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值