当前位置:   article > 正文

知识表示——Transformer模型解读(一)_transformer模型百科

transformer模型百科

知识表示——Transformer模型解读(一)

1 、transformer模型概述

1.1 Transformer模型基本结构

Transformer模型是由Attention all you need这样一篇文章所提出的。Transformer模型延续了Encoder-Decoder模型的结构。整体的Transformer模型结构如下图所示:

在这里插入图片描述
我们可以大致的将这个模型分为左侧的编码器结构和右侧的解码器结构。编码器结构如下图所示:
在这里插入图片描述
解码器结构如图所示:
在这里插入图片描述
下面,我们就按照这两个结构进行具体的介绍。

2 编码器(Encoder)结构

在这里,为了方便介绍,我们该出编码器的结构图:
在这里插入图片描述

2.1 Position Encodding(位置编码)

注意:在transformer模型中,主要是以字为基本单元的,也就是说我们不需要分词。
inputs的size为[max_sequence_length,embedding_size],其中max_sequence表示的整个句子的大小。embedding_size表示的是每一个字的向量表示维度。注意:对于输入的句子,因为没有能够处理时序数据的网络结构,所以需要我们预先将句子处理称为max_sequence_length的长度。

在编码器的基本结构中,在输入input embedding之后,首先进入的是Position Encoding,我们可以发现,在Encoder中没有类似于RNN的结构,所有在这里,论文加入的Position Encoding来提供每一个字的顺序信息。

对于位置信息的计算,论文中采用的是sin和cos函数来计算的,具体的计算公式为:
P E ( p o s , 2 i ) = s i n ( p o s / 1000 0 2 i / d m o d e l ) PE(pos,2i)=sin(pos/10000^{2i/d_{model}}) PE(pos,2i)=sin(pos/100002i/dmodel)
P E ( p o s , 2 i + 1 ) = s i n ( p o s / 1000 0 2 i / d m o d e l ) PE(pos,2i+1)=sin(pos/10000^{2i/d_{model}}) PE(pos,2i+1)=sin(pos/100002i/dmodel)
其中pos指的是句子中字的位置,pos∈[0,max_sequence_length),i表示的是对应的字向量的维度,i∈[0,embedding_dimension],上面有两个进行位置编码的式子,这里主要是将奇数序号的维度和偶数序号的维度进行分开计算。从而产生周期性的变化。

2.2 Self-Attention机制

根据上面的结构,在添加完位置信息之后,下一步就进入到了Self-Attention层。我们来简单的介绍一下这种结构。通常情况下,一个句子是由若干个字或者若干个词组成的,如下图所示:
在这里插入图片描述
这上面的句子中,一共包含四个汉字,每一个汉字的表示成为一个[1,embedding_size]大小的字向量,所谓的self-Attention,就是分别计算每一个汉字和其他汉字之间的关系强弱来作为权重,在利用这个权重将其他汉字的表示和当前汉字的表示进行加权求和,最终获得当前汉字的表示。我们来逐步的介绍其计算步骤:

  1. 首先,我们需要将不同的汉字的初始表示映射到相同的空间,这里存在三个权重矩阵, W q , W k , W v W_q,W_k,W_v Wq,Wk,Wv,通过这个三个权重矩阵的映射,将每一个汉字的初始向量映射到Q空间,K空间和V空间中。Q,K,V的来源据说是参考了信息检索中的Query(查询),Key(键值),Value(实际值)的形式。通过计算 W q T X , W k T X , W v T X W_q^TX,W_k^TX,W_v^TX WqTX,WkTX,WvTX就可以将输入的句子X中的词汇分别映射到三个相同的空间中去。如下图所示:
    在这里插入图片描述
    W q 和 W v W_q和W_v WqWv的计算过程与上面类似,这里就不展示了。获取到每一个字的key,value,query之后,下一步,我们就是利用query和key来计算相似度的过程。这里我们以第一个字"我"为例,使用“我”对应的 q u e r y 1 query_1 query1来分别和整个句子中每一个字的key来计算相似度,具体的计算过程如下:

在这里插入图片描述
对应的属性计算公式就是:
Q u e r y 1 ⋅ K e y T Query_1·Key^T Query1KeyT
这样就计算出来的第一个字和句子中其他的字的相似度的值。同理,对于句子中其他的字也是这样计算。将其整理成句子的形式就是:
Q u e r y ⋅ K e y T Query·Key^T QueryKeyT
其结果中的每一个行表示一个字,每一个列表示当前行表示的字和其他字之间的相似度的值。进一步,我们将其进行softmax归一化,形成概率值。有公式表达就是:
s o f t m a x ( Q u e r y ⋅ K e y T d k ) softmax(\frac{Query·Key^T}{\sqrt{d_k}}) softmax(dk QueryKeyT)
这里的 d k d_k dk表示的一个 k e y i key_i keyi向量的维度。这么操作的目的是softmax的概率分布变成正态分布,使得softmax的效果更加稳定。
在获得每一个字和句子中其他字的关系权重之后,下一步就是利用权重来计算求和的过程,用公式表示就是:
s o f t m a x ( Q u e r y ⋅ K e y T d k ) ⋅ V a l u e softmax(\frac{Query·Key^T}{\sqrt{d_k}})·Value softmax(dk QueryKeyT)Value。具体的过程,我在这里就不展开了,和上面描述的过程类似。这样输出的结果是一个句子的表示矩阵。每一行是代表句子中的一个字,这个字的行向量中包含了其他字的信息。

这里,我们需要在说明一点,我们之前提到过,input输入的句子的长度是我们事先设定好的,对于某些长度不够的句子,我们会采用padding的方式进行填充,但是这些padding值在计算softmax的时候回产生一个问题,这些padding值也会参与到softmax的计算,也就是说这些padding值对句子中的其他字会产生一个权重。为了避免这种情况的发生,会对padding值在计算的时候添加一个特别大的负的偏置项,使得softmax(padding)≈0。

2.3 Multi-Head Attention

这个部分比较好理解,为了从不同的角度去计算不同字之间的关系,我们可以将所有的字都映射到多个空间中来计算其相似度。也就是,可以准备多个 W k , W q , W v W_k,W_q,W_v Wk,Wq,Wv来将原始的句子向量映射到不同的空间中去。在经过Query,Key,Value的点乘操作,获取到不同空间中的结果,最后将这些结果相加获取到最终的值。我们映射的空间的个数就是头数

2.4 Add&Norm

这一步主要是两个操作,第一个是Add,也称为残差连接,这个运算的意义在于,当Attention层的数量特别多的时候,反向传播经过的层数会特别多,通过残差连接的方式可以是梯度可以快速的到达输入层,避免了梯度消失的情况。(似乎还有一种说法是Attention层数过多会使得原始的数据信息丢失,通过残差连接可以补充原始信息)。计算公式为:
o u t p u t = i n p u t + o u t p u t a t t e n t i o n output = input+output_{attention} output=input+outputattention
进一步,在经过残差连接之后,对输出的数据进行归一化操作,也就是Norm操作。所谓的归一化,在这里就是将隐藏层的输出归一化为标准正态分布,可以起到加快训练速度,加速收敛的作用。其计算公式为:
u i = 1 m ∑ j = 1 m X i j u_i=\frac{1}{m}∑_{j=1}^mX_{ij} ui=m1j=1mXij
σ i 2 = 1 m ∑ j = 1 m ( X i j − u i ) 2 σ_i^2=\frac{1}{m}∑_{j=1}^m(X_{ij}-u_i)^2 σi2=m1j=1m(Xijui)2
L a y e r N o r m ( X i ) = α ∗ X i j − u i σ i 2 + ε + β LayerNorm(X_i)=α*\frac{X_{ij}-u_i}{\sqrt{σ_i^2+ε}}+β LayerNorm(Xi)=ασi2+ε Xijui+β
其中m表示的隐藏层向量的维度,也就是矩阵的列数。上述的公式简单的来说就是分别对每一行的数据进行求均值和方差的过程,在将每一行的数据变成标准的正态分布。在计算的过程中引入了α,β两个参数,主要是为了弥补归一化操作损失掉的信息。ε为为了放置方差为0的情况。*表示对应的元素的乘积。

最后的Feed Forward就是一个简单的全连接和使用激活函数的操作,这里就不进行赘述了。

3、Encoder过程总结

  1. 位置编码信息和输入句子向量的求和。
  2. 多头的自注意力机制Multi-Head Self Attention
  3. 残差连接和归一化操作(Add&&Norm)
  4. 全连接操作和激活操作(Feed Forward)
  5. 残差连接和归一化操作(Add&&Norm)
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/490278
推荐阅读
相关标签
  

闽ICP备14008679号