深度学习经典结构之Transformer

一、 背景

Transformer的起源:Google Brain 翻译团队通过论文《Attention is all you need》提出了一种全新的简单网络架构——Transformer,它完全基于注意力机制,摒弃了循环和卷积操作。在这之前主流的序列转换模型都基于复杂的循环神经网络(RNN),包含编码器和解码器两部分。当时表现最好的模型还通过注意力机制将编码器和解码器连接起来。
RNN编码器-解码器架构存在一个显著的缺陷:处理长序列时,会存在信息丢失。

如下图,编码器在转化序列x1, x2, x3, x4为单个向量时,信息可能丢失。因为所有信息被压缩到这一个向量中,增加了信息损失的风险。解码器从这一向量中提取信息也很复杂。
在这里插入图片描述
Transformer的本质:Transformer是一种基于自注意力机制的深度学习模型,为了解决自然语言处理中的序列到序列(sequence-to-sequence)问题而设计的。

相较于RNN模型,Transformer模型具有2个显著的优势。

优势一:处理长序列数据。Transformer采用自注意力机制,能够同时处理序列中的所有位置,捕捉长距离依赖关系,从而更准确地理解文本含义。而RNN模型则受限于其循环结构,难以处理长序列数据。
优势二:实现并行化计算。由于RNN模型需要依次处理序列中的每个元素,其计算速度受到较大限制。而Transformer模型则可以同时处理整个序列,大大提高了计算效率。

二、Transformer

1、原理

Transformer的架构

  • Encoder编码器:Transformer的编码器由多个相同的层组成,每个层包括两个子层:一个多头自注意力层和一个逐位置的前馈神经网络。在每个子层之后,都会使用残差连接和层归一化操作,这些操作统称为Add&Norm。这样的结构帮助编码器捕获输入序列中所有位置的依赖关系。
  • Decoder解码器:Transformer的解码器由多个个相同的层组成,每层包含三个子层:掩蔽自注意力层、Encoder-Decoder注意力层和逐位置的前馈神经网络。每个子层后都有残差连接和层归一化操作,简称Add&Norm。这样的结构确保解码器在生成序列时,能够考虑到之前的输出,并避免未来信息的影响。

在这里插入图片描述

1)、输入embedding

输入转换,常发生在语言类,图像,音频类数据;

  • 对于分类数据,例如颜色(红色,蓝色,绿色等)或尺码(S,M,L,XL等),可以用one-hot编码或数值编码,也可以用embedding方法来表示。通过embedding,模型可以学习到类别之间的隐含关系。
  • 对于连续型数据,例如身高、体重、温度等,通常不需要做embedding,可以直接用原始数据或者进行一些数值变换(标准化,归一化,对数变换等)。
    该环节主要根据应用场景的输入数据决定处理方式.

2)、位置编码

常见位置编码方式有
1、固定位置编码:通过捕捉到位置信息来生成位置编码。例如,在命名实体识别(NER)中,我们会使用句子的起始和结束位置作为固定的位置编码。

2、相对位置编码:这种编码方法主要是计算每个单词之间的相对位置关系,这样我们就可以获得每个单词的相对位置。

3、学习式位置编码:这种位置编码方法可以通过模型学习得到。在神经网络中,学习式位置编码会被当作模型参数一样,通过反向传播和更新权重的方式学习得到。

4、正弦余弦位置编码:这是一种在Transformer模型中常用的位置编码方式,会使用正弦和余弦函数来进行位置编码。其中,正弦函数用于给偶数索引编码,余弦函数用于给奇数索引编码。这种方法的优点是对于任意长度的输入序列,其位置编码都是唯一的。

5、一维卷积位置编码:通过一维卷积的方式提取位置特征。

6、位置嵌入(Position Embedding):直接将位置信息嵌入到词向量中,使其记录相对位置信息。如BERT模型中就使用了位置嵌入方式来记录单词间的位置信息。

正弦余弦位置编码
参考文章 正弦-余弦位置编码

3)、注意力机制

3.1 原理

首先要了解注意力机制是什么,注意力机制:一种允许模型在处理信息时专注于关键部分,忽略不相关信息,从而提高处理效率和准确性的机制。它模仿了人类视觉处理信息时选择性关注的特点。注意力核心的三个向量是Q,K,V分别代表查询,键,值;根据查询Q,在K中进行匹配,得到权重,权重也可以理解为对V的关注度,权重乘以V后得到对值的注意力打分,该过程可由下述式子表示
在这里插入图片描述
注意到上面q,k的权重,它应该是一个非负的,所有权重加和应该为1(理解为:人类视野里只有关注不关注,不会有负关注,视野内就是全部关注),因此我们对权重做归一化与指数变换来保证这个性质.由此式子变为如下形式:
在这里插入图片描述
这个公式不就是sofmax嘛,由此注意力的经典表示如下:
在这里插入图片描述
其中除以根号dk的作用是:

  • 若输入范围过大,则 Softmax 输出可能接近于一个 硬分布(即某些值接近 1,其余值接近 0)。这种情况会导致梯度消失问题,从而阻碍模型的训练。因此有提高数值的稳定性,防止 Softmax 被大值饱和作用。
  • 两个独立随机向量执行点积后,其标准差与维度的平方根正相关,这意味着如果我们不进行缩放,点积值的分布范围会随着 d k d_k dk增大而变宽,使得其对模型训练更加不稳定.因此对点积的方差进行归一化。
  • 注意力机制可能被应用于不同的向量维度,点积的数值范围会因维度变化而不一致,因此该处理可以保证注意力机制在不同维度设置下的表现一致
3.2 注意力机制类型

注意力机制的类型不同的核心是在核心差异在于 Q、K、V 的来源,以及它们对输入的映射方式。
transformer中涉及到的如下表所示:
在这里插入图片描述

(1). 缩放点积注意力机制

其公式如上文的经典表示公式,其图解可见下图,第一步:残差与归一化,第二步:缩放操作,第三步:掩码,Masking 操作通常通过将无效位置的数值替换为一个极小的值(如负无穷)来实现。通过 softmax,掩盖的部分会被赋零权重。最后是矩阵相乘得到输出.这个机制核心作用是加快计算,可以理解为基础注意力机制,根据不同Q,K,V又可分为不同的注意力机制.
在这里插入图片描述

(2). 自注意力机制

Q、K、V 均来源于同一个输入序列。每一个元素(如一个词)与整个输入序列中的其他元素计算注意力得分,用来捕获输入序列内的全局依赖关系。在transform中,根据编码器的输入向量,生成三个向量Q,K,V,生成方法为分别乘以三个矩阵,这些矩阵在训练过程中需要学习。
在这里插入图片描述

(3).多头注意力机制

核心是训练多组Q,K,V,的自注意力机制,每一组都是随机初始化(也可通过线性变换),经过训练之后,输入向量可以被映射到不同的子表达空间中,而后将输出拼接,经过矩阵转化到单个注意力机制的维度上,其流程见下图。这种多头机制有利于:

  1. 扩展了模型集中于不同位置的能力。
  2. 赋予attention多种子表达方式。

在这里插入图片描述
其中多头输出后的concat操作与linear如下所示,
在这里插入图片描述

(4).交叉注意力机制

Q 来自一个输入,K 和 V 来自另一个输入。一般用于两个序列之间的信息交互。Query 从目标序列(Target)提出问题,Key 和 Value 从源序列(Source)提供信息。
在这里插入图片描述

4)、编码器

1) Input 经过 Embedding 后,进行 Positional Encoding

2) 然后是 Multi-head Attention

3) 再进行 Position-wise Feed Forward

4) 每个子层之间做残差连接
在这里插入图片描述
Position-wise Feed Forward 的作用是:Position-wise Feed Forward Networks 是一个两层的全连接网络,会对输入的每个位置的特征向量进行线性变换和非线性激活。通过这种机制,模型可以对输入特征进行复杂的非线性变换,从而提升表达能力。

残差与归一化层其主要作用是

  1. Add(残差连接):
    子层提取了当前层的某些高级特征,但保留输入详细信息是必要的,所以直接加回输入。
    避免模型深度增加后丢失原始信息。

  2. Norm(归一化):
    解决深层网络数值不稳定问题,统一特征分布。
    提升训练效率,有助于梯度优化。

5)、解码器

大部分结构与编码器一样
1) 也经过 Positional Encoding,Multi-head attention 和 FFN,子层之间也要做残差连接

2) 但比 Encoder 多了一个 Masked Multi-head attention,且第二个Multi-head attention是交叉注意力机制

3) 最后要经过 Linear 和 Softmax 层,输出概率
在这里插入图片描述
其中掩码注意力机制如上文所示,意在防止穿越的出现,第二个交叉注意力层从前层获取输出转成query矩阵,接收最后层编码器的key和value矩阵做key和value矩阵。
线性 & softmax层(The Final Linear and Softmax Layer)
线性层是个简单的全连接层,将解码器的最后输出映射到一个非常大的logits向量上。假设模型已知有1万个单词(输出的词表)从训练集中学习得到。那么,logits向量就有1万维,每个值表示是某个词的可能倾向值。
softmax层将这些分数转换成概率值(都是正值,且加和为1),最高值对应的维上的词就是这一步的输出单词。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐