深度学习之Transformer模型及原理学习篇(详细!)

Transformer是一种用于自然语言处理(NLP)和其他序列到序列(sequence-to-sequence:由Encoder和Decoder共同组成,之间由Attention机制来建立关联性)任务的深度学习模型架构,它在2017年由Vaswani等人首次提出,并且引入了自注意力机制(self-attention mechanism),这是一个关键的创新,使其在处理序列数据时表现出色。

一、主要原理作用及优缺点

Transformer的multi-head attention类似于CNN的多个不同kernel,可以提取丰富的上下文特征。但CNN的kernel只能处理局部的上下文特征,而Transformer的attention的机制可以处理远距离的上下文特征,相比较与RNN的架构,Transformer可以使用attention连接,进一步解决RNN网络在时序上面梯度消失的问题,使得Transformer能够处理更长的上下文特征,很好的解决了长距离依赖的问题。

1.1 优点

  1. 并行计算能力:Transformer并行计算的能力远超seq2seq系列的模型
  2. 表征能力:Transformer让源序列和目标序列“自关联”起来,源序列和目标序列自身的Embedding所蕴含的信息更加丰富,而且后续的FFN(前馈神经网络)层也增强了模型的表达能力
  3. 特征提取能力:Transformer论文提出深度学习继MLP、CNN、RNN后的第4大特征提取器,Transformer具有全局视野,其特征提取能力比RNN系列的模型要好
  4. 语义结构:Transformer擅长捕捉文本和图像中的语义结构,它们比其他技术更好地捕捉文本甚至图像中的语义结构,Transformer的泛化能力和Diffusion Model(扩散模型)的细节保持能力的结合,提供了一种生成细粒度的高度详细图像的能力,同时保留图像中的语义结构
  5. 泛化能力:在视觉应用中,Transformer表现出泛化和自适应的优势,使其适合通用学习

1.2 缺点

  1. 计算量大,对硬件要求高,在许多视觉领域也面临着性能方面的问题
  2. 因为无归纳偏置,需要大量的数据才可以取得很好的效果
  3. 完全基于self-attention,对于词语位置之间的信息有一定的丢失,虽然加入了positional encoding来解决这个问题,但也还存在着可以优化的地方

二、模型整体结构

Transformer的整体结构,大致可分为:Input、Encoder、Decoder、Output。Transformer是由一堆Encoder和Decoder形成的,Encoder和Decoder均由多头注意力层和全连接前馈网络组成。模型结构如下图:

  1. 输入的词向量首先叠加上 Positional Encoding,然后输入至Transformer内;
  2. 每个 Encoder Transformer 会进行一次 Multi-head Attention -> Add & Normalize -> FFN -> Add & Normalize 流程,然后将输出输入至下一个Encoder中;
  3. 最后一个Encoder的输出将会作为memory保留;
  4. 每个 Decoder Transformer 会进行一次 Masked Multi-head Attention -> Multi-head Attention -> Add & Normalize -> FFN -> Add & Normalize 流程,其中 Multi-head Attention 的K、V至来自于Encoder的memory。根据任务要求输出需要的最后一层Embedding;
  5. Transformer的输出向量可以用来做各种下游任务

2.1 Input

2.1.1 Embedding

计算机无法直接处理一个单词或者一个汉字,需要把一个token转化成计算机可以识别的向量,这也就是Embedding过程。Embedding就是用一个低维稠密的向量表示一个对象,这里的对象可以是一个词(Word2vec),也可以是一个物品(Item2vec),亦或是网络关系中的节点(Graph Embedding)。Embedding向量能够表达对象的某些特征,两个向量之间的距离反映了对象之间的相似性。简单的说,Embedding就是把一个东西映射到一个向量X。如果这个东西很像,那么得到的向量x1和x2的欧式距离就很小。

Word Embedding,把单词w映射到向量x。如果两个单词的意思相近,比如bike和bicycle,那么它们映射后得到的两个词向量x1和x2的欧式距离很小
User Embedding,把用户ID映射到向量x。推荐系统中,需要用一个向量表示一个用户,如果两个用户的行为习惯接近,那么他们对应的向量x1和x2的欧式距离很小
Graph Embedding,把图中的每个节点映射成一个向量x。如果图中两个节点接近,比如它们的最短路很小,那么它们embed得到的向量x1和x2的欧式距离很小

在深度学习领域,最初的切入点是 Manifold Hypothesis(流形假设)。流形假设是指:“自然的原始数据是低维的流形嵌入于(embedded in)原始数据所在的高维空间”。那么深度学习的任务就是把高维原始数据(图像、句子)映射到低维流形,使得高维的原始数据被映射到低维流形之后变得可分,而这个映射就是Embedding(嵌入)。比如,Word Embedding,就是把单词组成的句子映射到一个表征向量。

Embedding的本质是信息的聚合和解耦,也就是信息的再表达。如下图所示,前一个是1x4的高维embedding,分别表示猫、狗、花、草四种属性值,后一个是1x2的低维embedding,分别表示动物、植物两种属性值。从高维embedding降维成低维embedding是信息的聚合,猫狗聚合成动物,花草聚合成植物;从低维embedding升维成高维embedding是信息的结构,动物解耦成猫狗,植物解耦成花草。

2.1.2 Positional Encoding

由于Transformer模型没有RNN(循环神经网络)或CNN(卷积神经网络)结构,句子中的词语都是同时进入网络进行处理,所以没有明确的关于单词在源句子中位置的相对或绝对的信息。为了让模型理解序列中每个单词的位置(顺序),Transformer论文中提出了使用一种叫做 Positional Encoding(位置编码) 的技术。这种技术通过为每个单词添加一个额外的编码来表示它在序列中的位置,这样模型就能够理解单词在序列中的相对位置。

position-insensitive:如果模型的输出会随着输入文本数据顺序的变化而变化,那么这个模型就是关于位置敏感的,反之则是位置不敏感的。而以 attention为核心的Transformer则是位置不敏感的,使用这一类位置不敏感( position-insensitive )的模型对文本数据建模时,需要额外加入Positional Embedding引入文本中词与词的顺序关系。

Attention机制并没有考虑先后顺序信息,但前后顺序信息对语义影响很大,因此需要通过Positional Embedding这种方式把前后位置信息加在输入的Embedding上。一句话概括,Positional Encoding就是将位置信息添加(嵌入)到Embedding词向量中,让Transformer保留词向量的位置信息,可以提高模型对序列的理解能力。

特性:每个位置有一个唯一的Positional Encoding;两个位置之间的关系可以通过它们位置间的仿射变换来建模(获得)

一般来说,可以使用向量拼接或者相加的方式,将位置向量和词向量相结合。例如:

input = input_embedding + positional_encoding

2.2 Encoder

Transformer Encoder的核心作用是提取特征

Encoder由N个编码器块(Encoder Block)串联组成,每个编码器块包含一个多头注意力(Multi-Head Attention)层以及一个前馈全连接神经网络(Feed Forward Neural Network)。Nx = 6,Encoder block由6个encoder堆叠而成,图中的一个框代表的是一个encoder的内部结构,一个Encoder是由Multi-Head Attention和全连接神经网络Feed Forward Network构成。

Transformer Encoder = Embedding + Positional Embedding + N*(子Encoder block1 + 子Encoder block2);
子Encoder block1 = Multi head attention + Add&Norm;
子Encoder block2 = Feed Forward + Add&Norm;

每一个编码器都对应一个encoder结构 ,Transformer的编码组件是由6个编码器叠加在一起组成的,解码器同样如此。所有的编码器在结构上是相同的,但是它们之间并没有共享参数。

2.2.1  Attention

 2.2.1.1 Self-Attention

这是Transformer的核心概念之一,它使模型能够同时考虑输入序列中的所有位置,而不是像循环神经网络(RNN)或卷积神经网络(CNN)一样逐步处理。自注意力机制允许模型根据输入序列中的不同部分来赋予不同的注意权重,从而更好地捕捉语义关系。

自注意力的作用:随着模型处理输入序列的每个单词,自注意力会关注整个输入序列的所有单词,帮助模型对本单词更好地进行编码。在处理过程中,自注意力机制会将对所有相关单词的理解融入到我们正在处理的单词中。

更具体的功能如下:

  • 序列建模:自注意力可以用于序列数据(例如文本、时间序列、音频等)的建模。它可以捕捉序列中不同位置的依赖关系,从而更好地理解上下文。这对于机器翻译、文本生成、情感分析等任务非常有用
  • 并行计算:自注意力可以并行计算,这意味着可以有效地在现代硬件上进行加速。相比于RNN和CNN等序列模型,它更容易在GPU和TPU等硬件上进行高效的训练和推理(因为在自注意力中可以并行的计算得分)
  • 长距离依赖捕捉:传统的循环神经网络(RNN)在处理长序列时可能面临梯度消失或梯度爆炸的问题。自注意力可以更好地处理长距离依赖关系,因为它不需要按顺序处理输入序列

下图是基于对Self-Attention公式的理解,细节如图中所描述: 

2.2.1.2 Mutil-Head Attention

Transformer中的自注意力机制被扩展为多个注意力头,每个头可以学习不同的注意权重,以更好地捕捉不同类型的关系。多头注意力允许模型并行处理不同的信息子空间。优点:

  1. 扩展了模型专注于不同位置的能力
  2. 有多个查询/键/值权重矩阵集合,(Transformer使用八个注意力头)并且每一个都是随机初始化的。和上边一样,用矩阵X乘以WQ、WK、WV来产生查询、键、值矩阵
  3. self-attention只是使用了一组WQ、WK、WV来进行变换得到查询、键、值矩阵,而Multi-Head Attention使用多组WQ,WK,WV得到多组查询、键、值矩阵

下图是基于对Multi-Head Attention公式的理解,细节如图中所描述: 

2.2.2 Add&Normalize

在经过多头注意力机制得到矩阵Z之后,并没有直接传入全连接神经网络,而是经过了一步Add&Normalize。Add & Norm 层由 Add 和 Norm 两部分组成,其计算公式如下:

其中 X表示 Multi-Head Attention 或者 Feed Forward 的输入,MultiHeadAttention(X) 和 FeedForward(X) 表示输出 (输出与输入 X 维度是一样的,所以可以相加)。

Add指在z的基础上加了一个残差块X,加入残差块的目的是为了防止在深度神经网络的训练过程中发生退化的问题,退化的意思就是深度神经网络通过增加网络的层数,Loss逐渐减小,然后趋于稳定达到饱和,然后再继续增加网络层数,Loss反而增大。

Norm指 Layer Normalization,通常用于 RNN 结构,Layer Normalization 会将每一层神经元的输入都转成均值方差都一样的,这样可以加快收敛。

Normalize归一化目的:
1、加快训练速度
2、提高训练的稳定性


使用到的归一化方法是Layer Normalization:LN是在同一个样本中不同神经元之间进行归一化,而BN是在同一个batch中不同样本之间的同一位置的神经元之间进行归一化。BN是对于相同的维度进行归一化,但是咱们NLP中输入的都是词向量,一个300维的词向量,单独去分析它的每一维是没有意义地,在每一维上进行归一化也是适合地,因此这里选用的是LN。

2.2.3 Position-wise Feed-Forward Networks

全连接层是一个两层的神经网络,先线性变换,然后ReLU非线性,再线性变换。这两层网络就是为了将输入的Z映射到更加高维的空间中然后通过非线性函数ReLU进行筛选,筛选完后再变回原来的维度。经过6个encoder后输入到decoder中。

Feed Forward 层比较简单,是一个两层的全连接层,第一层的激活函数为 Relu,第二层不使用激活函数,对应的公式如下:

X是输入,Feed Forward 最终得到的输出矩阵的维度与X一致。

2.3 Decoder

相比于Transformer Encoder,Transformer Decoder更擅长做生成式任务,尤其对于自然语言处理问题。Decoder也由N个解码器块(Decoder Block)串联组成,每个解码器块包含一个多头注意力层、一个对Encoder输出的多头注意力层以及一个前馈全连接神经网络。解码器中的解码注意力层的作用是关注输入句子的相关部分,类似于seq2seq的注意力。和Encoder Block一样,Decoder也是由6个decoder堆叠而成的,Nx=6。包含两个 Multi-Head Attention 层。

Transformer Decoder = Embedding + Positional Embedding + N*(子Decoder block1 + 子Decoder block2 + 子Decoder block3)+ Linear + Softmax;
子Decoder block1 = Mask Multi head attention + Add&Norm;
子Decoder block2 = Multi head attention + Add&Norm;
子Decoder block3 = Feed Forward + Add&Norm;

第一个 Multi-Head Attention 层采用了 Masked 操作。第二个 Multi-Head Attention 层的K, V矩阵使用 Encoder 的编码信息矩阵C进行计算,而Q使用上一个 Decoder block 的输出计算。decoder的后面部分和encoder相同,但是刚开始会经过一个masked mult-head attention。

2.3.1 Masked Multi-Head Attention

与Encoder的Multi-Head Attention计算原理一样,只是多加了一个mask码。Mask 表示掩码,它对某些值进行掩盖,使其在参数更新时不产生效果。Transformer 模型里面涉及两种 mask,分别是 Padding Mask 和 Sequence Mask。其中,Padding Mask 在所有的 scaled dot-product attention 里面都需要用到,而 Sequence Mask 只有在 Decoder 的 Self-Attention 里面用到。

padding mask:由于每个批次输入序列长度是不一样的,我们要对输入序列进行对齐。具体来说,就是给在较短的序列后面填充 0。但是如果输入的序列太长,则是截取左边的内容,把多余的直接舍弃。因为这些填充的位置,其实是没什么意义的,所以我们的attention机制不应该把注意力放在这些位置上,所以需要进行一些处理。具体的做法是,把这些位置的值加上一个非常大的负数(负无穷),这样的话,经过 softmax,这些位置的概率就会接近0

sequence mask:为了使得 decoder 不能看见未来的信息。对于一个序列,在 time_step 为 t 的时刻,我们的解码输出应该只能依赖于 t 时刻之前的输出,而不能依赖 t 之后的输出。因此我们需要想一个办法,把 t 之后的信息给隐藏起来。这在训练的时候有效,因为训练的时候每次我们是将target数据完整输入进decoder中地,预测时不需要,预测的时候我们只能得到前一时刻预测出的输出。具体做法为产生一个上三角矩阵,上三角的值全为0。把这个矩阵作用在每一个序列上,就可以达到我们的目的。

注意:
1、在Encoder中的Multi-Head Attention也是需要进行mask的,只不过Encoder中只需要padding mask即可,而Decoder中需要padding mask和sequence mask
2、Encoder中的Multi-Head Attention是基于Self-Attention,Decoder中的第二个Multi-Head Attention就只是基于Attention,它的输入Quer来自于Masked Multi-Head Attention的输出,Keys和Values来自于Encoder中最后一层的输出

2.4 Output

Output如图中所示,首先经过一次线性变换(线性变换层是一个简单的全连接神经网络,它可以把解码组件产生的向量投射到一个比它大得多的,被称为对数几率的向量里),然后Softmax得到输出的概率分布(softmax层会把向量变成概率),然后通过词典,输出概率最大的对应的单词作为我们的预测输出。解码器栈的输出是一个 float 向量。通过一个线性层再加上一个 Softmax 层实现把这个向量转换为一个词。线性层是一个简单的全连接神经网络,其将解码器栈的输出向量映射到一个更长的向量,这个向量被称为 logits 向量。

现在假设我们的模型有 10000 个英文单词(模型的输出词汇表)。因此 logits 向量有 10000 个数字,每个数表示一个单词的分数。然后,Softmax 层会把这些分数转换为概率(把所有的分数转换为正数,并且加起来等于 1),最后选择最高概率所对应的单词,作为这个时间步的输出。

三、总结

  1. Transformer 与 RNN 不同,可以较好地并行训练
  2. Transformer 本身是不能利用单词的顺序信息的,因此需要在输入中添加 Positional Encoding 位置编码,否则 Transformer 就是一个词袋模型了
  3. Transformer 的重点是 Self-Attention 结构,其中用到的 Q, K, V 矩阵通过线性变换得到
  4. Transformer 中 Multi-Head Attention 中有多个 Self-Attention,可以捕获单词之间多种维度上的相关系数 Attention Score

参考链接:

【Transformer系列】深入浅出理解Transformer网络模型(综合篇)_transformer神经网络-CSDN博客

【Transformer系列】深入浅出理解Embedding(词嵌入)_transformer embedding-CSDN博客

【Transformer系列】深入浅出理解Positional Encoding位置编码-CSDN博客 

【超详细】【原理篇&实战篇】一文读懂Transformer-CSDN博客

详解Transformer中Self-Attention以及Multi-Head Attention_transformer multi head-CSDN博客

论文精读-Transformer(Attention is All You Need)_transformer论文精读-CSDN博客

小白总结Transformer模型要点_序列转导模型-CSDN博客

Transformer是什么?看完这篇你就醍醐灌顶-CSDN博客

Transformer 模型详解_transformer模型-CSDN博客

自然语言处理Transformer模型最详细讲解(图解版)-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值