Transformer原理详解

本文详细介绍了自注意力机制,包括基础原理、多头注意力机制和位置编码。重点讲解了Transformer模型,包括其结构、输入和输出处理,以及编码器和解码器的工作方式。
摘要由CSDN通过智能技术生成

一、自注意力机制(Self-Attention)

1.1基础原理

        可以将Self-Attention看作是一个模块,输入可以是数据,也可以是网络中的隐藏层。将数据输入到该模块后,输出对应个数的向量,再将其结果输入至全连接网络(Fully Connected, FC),最后输出标签。以上过程可以重复多次。值得注意的一点是,Self-Attention的每一个输出都考虑了全局信息,即每个输出都与所有的输入相关,原理图见下:

       图1 Self-Attention原理图

        其中,a^{i}(i=1,2,\ldots,n)为输入向量或隐藏层,b^{i}(i=1,2,\ldots,n)为输出向量。由于每个输出与所有输入有关,那么我们需要考虑每个输入之间的关联性\alpha(Attention Score)。用于Transformer中的关联性\alpha计算模组被称为Dot-Product,因此我们也可将该注意力机制称为Scaled Dot-Product Attention。它是将需要计算关联性的2个输入向量分别乘以2个不同的权重矩阵得到2个新向量,之后将2个新向量点乘便可以得到输入向量之间的关联性,计算模组示意图见下:

图2 Dot-Product示意图

图2中\alpha^i,a^j(i,j\in[1,n])为输入向量,W^{q},W^{k}为权重矩阵(后面的W^{v}也是),是人为设置的。以第一个输出为例,Scaled Dot-Product Attention的整体架构见下:

图3 Scaled Dot-Product Attention整体架构

可以看到,若要得到输出向量b^{i},则需要计算出第i个输入向量a^{i}自己和自己的关联性,以及它和其它所有输入向量的关联性。以图3中计算第一个输出向量为例,q^1=a^1W^q, k^i=a^iW^k(i=1,2,\ldots,n), v^i=a^iW^\nu(i=1,2,\ldots,n)。得到三个向量后,将q^{1}k^{i}点乘后可以得到第一个输入向量与其他输入向量(包括自己)之间的关联性\alpha_{1,i}。之后将其进行Softmax,得到\alpha_{1,i}^{'},计算公式为:

\alpha_{1,i}^{'}=\exp(\alpha_{1,i})/\sum_{j=1}^n\alpha_{1,j}  (1)

\alpha_{1,i}^{'}v^i相乘,再将所有结果相加,便可得到输出向量:

b^1=\sum_{i=1}^n\alpha_{1,i}^{'}\boldsymbol{v}^i    (2)

可以看出,若两个输入向量间的关联性较大,则v^i就更影响结果。

        我们可以将所有的输入向量堆叠成一个矩阵\text{I},矩阵中的每一行代表一个样本,人为设置权重矩阵,便可以通过下式计算出相应的\text{Q}(query)、\text{K}(key)、\text{V}(value)矩阵:

\begin{aligned}Q&=IW^q\\K&=IW^k\\V&=IW^\nu\end{aligned}(3)

\text{Q}\text{K}\text{V}三个矩阵可分别看作q^{i} ,k^{i},\nu^{i}

三类向量的堆叠。这里,query、key、value的概念其实来源于推荐系统。基本原理是:给定一个query,计算query与key的相关性,然后根据query与key的相关性去找到最合适的value。

        得到上述三个矩阵后,便可以用\text{Q}中每个向量与\text{K}中每个向量点乘得到关联性矩阵,即\alpha=QK^T;之后对其进行归一化处理,即\alpha=\frac\alpha{\sqrt{d_k}},其中d_k\text{K}矩阵的维度,归一化的目的主要是为了训练时的梯度能够稳定,防止梯度爆炸;最后通过Softmax函数,再与\text{V}矩阵相乘,便可以得到Scaled Dot-Product Attention的输出结果,流程图如下:

 图4 Scaled Dot-Product Attention计算流程图

图4中MatMul表示矩阵乘积。整理后可以得到输出矩阵为:

\mathrm{Attention}(Q,K,V)=\mathrm{softmax}(\frac{QK^T}{\sqrt{d_k}})V (4)

 1.2多头注意力机制(Multi-Head Attention)

        Multi-Head Attention是在Self-Attention的基础上,使用多组权重矩阵 W^{q}W^{k}W^{v}得到多组\text{Q}\text{K}\text{V}矩阵,然后每组分别计算得到输出矩阵,最后将得到的多个输出矩阵进行拼接,最后再和一个新的权重矩阵W^{o}相乘得到最终的输出矩阵。计算公式见下:

\begin{aligned}\mathrm{MutiHead}(\boldsymbol{Q},\boldsymbol{K},\boldsymbol{V})=&\mathrm{Concat}(\mathrm{head}_1,\mathrm{head}_2,\ldots,\mathrm{head}_h)W^o\\\mathrm{where~head}_i=&\mathrm{Attention}(\boldsymbol{Q}W_i^q,\boldsymbol{K}W_i^k,\boldsymbol{V}W_i^\nu)\end{aligned}(5)

 其中Concat指的是矩阵拼接函数。Transformer中使用了8组不同的W^{q}W^{k}W^{v},,即h=8.

1.3 位置编码(Positional Encoding)

         由于Transformer中不包含递归和卷积,且Self-Attention无法获取位置信息,为了让模型能够利用输入序列的顺序,必须注入一些相对或绝对位置的信息,因此在输入中嵌入了位置编码。在实际应用中可以通过数据训练学习得到位置编码;Transformer中使用的是正余弦位置编码,通过使用不同频率的正弦、余弦函数生成,之后和对应位置的向量相加,因此位置向量的维度必须和对应的输入向量的维度相同。位置编码计算公式见下:

\begin{aligned}PE(pos,2i)&=\sin(pos/10000^{2i/d_{\mathrm{model}}})\\PE(pos,2i+1)&=\cos(pos/10000^{2i/d_{\mathrm{model}}})\end{aligned}(6)  

pos =0,1,2,...,n-1 表示输入向量在总输入的绝对位置,d_{model}表示该位置的输入向量的维度,i=0,1,2,\ldots,\lfloor(d_{\mathrm{model}}-1)/2\rfloor表示该向量的第几维度。

 二、Transformer原理

 2.1模型结构

        Transformer的结构图如图5所示,主要由输入、编码器(Encoder)、解码器(Decoder)和输出4部分构成。

 

 图5 Transformer结构图

 编码器和解码器均由6个相同的结构堆栈而成,即N=6

2.2输入结构

         从图5中可以看到,Encoder的输入为添加了位置编码的输入向量,Decoder的输入为编码器的输出和添加了位置编码的Transformer的输出,位置编码见公式(6)。其中,Decoder中第二个子层Multi-Head Attention的输入\text{Q}矩阵来自于Decoder中第一个Multi-Head Attention的输出;输入\text{K}\text{V}矩阵来自于Encoder的输出。

2.3 Encoder结构

        每个Encoder内部都包含2个子层:第1层是Multi-Head Attention,第2层是全连接位置前馈网络(Position wise fully connected feed forward Network)。并且每一个子层都用残差连接,然后进行层归一化(Layer Normalization, LN)。

        Add&Norm中Add表示残差块,其基本结构如下:

 图6 残差块基本结构图

 其中,\mathrm{x}是残差块的输入,当输入为\mathrm{x}时其学习到特征为\mathcal{F}(\mathrm{x}),则最终输出\mathcal{H}(\mathrm{x})=\mathcal{F}(\mathrm{x})+\mathrm{x}。加入残差块的目的是为了防止在训练中发生退化的问题。而Norm表示层归一化,对于一个输入的向量,如\mathbf{a}=[a_1,a_2,\ldots,a_k],经过归一化后得到\mathbf{a^{'}}=\left[a_{1}^{'},a_{2}^{'},\ldots,a_{k}^{'}\right],则:

a_i^{'}=\frac{a_i-m}\sigma  (7) 

 其中m为该向量的均值,\sigma为该向量的方差。这里需要注意,Layer Normalization与Batch Normalization不同。LN是在同一个样本中的不同神经元之间进行归一化,而BN是在同一个batch中不同样本之间的同一位置的神经元之间进行归一化。归一化的目的是加快训练速度,并提高训练的稳定性。

        全连接位置前馈网络的公式见下:

\mathrm{FFN=max}(0,xW_1+b_1)W_2+b_2 (8) 

 其中x为Multi-Head Attention的输出矩阵,矩阵中的每一个样本都单独经过完全相同的前馈神经网络。可以看到,该网络包括2个线性转换,中间有一个ReLU激活函数,即该网络将Multi-Head Attention的输出映射到更高维的空间中,然后通过ReLU激活函数进行筛选,筛选完后再变换到原来的维度。

        因此,Transformer中的Encoder的整体流程为:输入的\text{Q}\text{K}\text{V}矩阵进入含有残差结构的Multi-Head Attention,对输出进行Layer Normalization后,再输入到含有残差结构的全连接位置前馈网络中,再对输出进行Layer Normalization,得到将会输入Decoder中的\text{K}\text{V}矩阵,它们将被输入到Decoder中的第2个子层。

2.4 Decoder结构

        每个Decoder除了含有Encoder中的2个子层之外,还含有第3个子层,对Encoder堆栈的输出执行Multi-Head Attention。与Encoder中类似,Decoder中的每个子层也使用残差结构连接,然后进行层归一化。但是,Decoder中所含的Encoder中的Multi-Head Attention子层多加了掩码,即mask码。

        Masked Multi-Head Attention中的掩码会对某些值进行掩盖,使其再参数更新时不产生效果。Mask码包括Padding-Mask 和Sequence-Mask。Padding-Mask的作用是对输入序列进行对齐,即给较短的序列后面补0,把较长序列的多余的部分直接舍弃,因为这些填充的位置,其实是没有什么意义的,所以我们的Attention机制不应该把注意力放在这些位置上,具体的做法是把这些位置上的值加上一个非常大的负数(-\infty),这样经过Softmax后这些位置的概率就会接近0;Sequence-Mask的作用是使Decoder的输出仅依赖于当前时刻t之前的输出,具体的做法是产生一个上三角矩阵,上三角的值全为0,将这个上三角矩阵作用在输入矩阵的每个向量上。

        因此,Transformer中的Decoder的整体流程为:输入的\text{Q}\text{K}\text{V}矩阵进入含有残差结构的Masked Multi-Head Attention,对输出进行Layer Normalization后,输出作为下一个子层Multi-Head Attention的\text{Q}矩阵,而\text{K}\text{V}矩阵由Encoder的输出提供。最后再将Multi-Head Attention的输出输入到含有残差结构的全连接位置前馈网络中,再对输出进行Layer Normalization。

 2.5输出结构

         Transformer的输出首先经过一次线性变换,然后Softmax得到输出的概率分布。

 参考文献

[1] K. He, X. Zhang, S. Ren and J. Sun, "Deep Residual Learning for Image Recognition," 2016 IEEE Conference on Computer Vision and Pattern Recognition (CVPR), Las Vegas, NV, USA, 2016, pp. 770-778, doi: 10.1109/CVPR.2016.90.

[2] Vaswani, Ashish et al. “Attention is All you Need.” Neural Information Processing Systems (2017).

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Transformer是一种基于自注意力机制的序列到序列模型,主要应用于自然语言处理任务,例如机器翻译、文本摘要、情感分析等。相比于传统的循环神经网络(RNN)和卷积神经网络(CNN),Transformer在处理长序列时具有更好的并行性和更少的计算量。 Transformer中的核心就是注意力机制,它通过计算当前位置与其他位置之间的相似度来确定每个位置的权重,从而对输入序列进行加权求和。Transformer的自注意力机制则是指对于输入序列中的每个位置,都通过计算该位置与其他所有位置之间的相似度来获取其权重。 具体来说,Transformer模型由编码器和解码器两部分组成。编码器将输入序列映射到一个高维空间中,解码器则利用编码器的输出进行生成。在编码器中,每个位置的表示由两部分组成:它自身的表示和其他位置的表示的加权和。这个加权和的权重由该位置与其他位置之间的相似度计算得出。在解码器中,除了自注意力机制外,还会使用另一种注意力机制,即将解码器当前位置的表示与编码器中所有位置的表示进行加权和。 总之,Transformer通过自注意力机制实现了对输入序列的建模,从而有效地捕获长距离依赖关系。同时,它还采用了残差连接和层归一化等技术来缓解梯度消失问题。这些优点使得Transformer成为当前自然语言处理领域的主流模型之一。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值