Advertisement

一文读懂「Transformer」算法模型

阅读量:

之前已经介绍了关于chatgpt的知识,在详细讲解其实现原理时提到了涉及transformer架构的内容这一部分。值得进一步阐述这一部分。
资料:一文读懂「Attention」注意力机制

在这里插入图片描述

一、什么是Transformer?

Transformers 起源于 Google 研究团队于2017年提出的一种经典的自然语言处理模型。现下流行的BERT同样采用了这一架构。其独特的设计体现在引入了Self-attention机制取代传统的递归神经网络结构,在这种架构下模型得以实现并行训练的同时也能捕捉到序列文本中的全局关联性。

🔍 Why Transformer

  • RNN :具备捕捉长距离依赖信息的能力,并且无法实现并行计算;
    • CNN :具有良好的可处理性,并且同时具有以下两个特点:其一,在捕捉长距离依赖信息方面存在局限性(具体表现为需要借助层叠或扩张卷积核来扩大感受野);其二,在记忆范围上相对有限。

该架构需具备可并行处理的能力,并且具备捕捉长距离依赖关系的能力。

二、Transformer结构

在这里插入图片描述

Transformer模型采用传统的encoder-decoder架构设计,并主要包含两个模块:编码器和解码器。

2.1 Embedding部分

🚩 将词语转化成计算机可以认识的字符。

在 Transformer 模型中,单词的输入表示方式是通过将单词嵌入与位置编码(Positional Encoding)叠加得到的。

在这里插入图片描述

单词 embedding 有多种获取途径(Input embedding)。例如可以通过 Word2Vec 或 Glove 系列方法进行预训练生成。此外,在 Transformer 模型中也可以通过 training 训练生成这些 embedding 表示。

2 位置嵌入(Positional Embeddings)
Positional embeddings indicate the position of a word within a sentence. While Transformers avoid the sequential processing of RNNs, they rely on global context and lack positional information. This is crucial for NLP tasks as it captures the structural relationships within sequences.

通过将单词的词向量与位置编码相加获得表示向量x,则x即为Transformer模型的输入。

2.2 Encoder部分

基于 Multi-Head Attention、Feed Forward 以及 Add 和 Norm 操作即可构建一个 Encoder 块。每个 Encoder 块接收输入二维矩阵 X_{n \times d} ,并通过线性变换输出对应的二维矩阵 O_{n \times d} 。将多个 Encoder 块进行堆叠连接即可构成完整的 Encoder 模块。

在这里插入图片描述

在图中标注的部分属于Transformer编码器模块的结构,请具体来说是由多头注意力机制、残差网络、前馈神经网络以及再残差网络构成的。

1. Multi-Head Attention

Multi-Head Attention 是由多组 Self-Attention (见四、Self-Attention )组合而成。

在这里插入图片描述

如图所示,Multi-Head Attention架构包含多个Self-注意力模块(基于缩放点积注意力机制)。然后将输入序列X依次输入到h个独立的Self注意力模块中进行处理,并通过线性变换生成h个对应的输出矩阵Z。在h=8的情况下(如图所示),模型能够生成8个独立的输出表示。

在这里插入图片描述

生成了8个输出矩阵 Z_1Z_8后,Multi-Head自注意力机制通过拼接操作将这些矩阵进行组合。接着经过一个线性变换层,最终生成了Multi-Head自注意力机制的输出结果Z。

在这里插入图片描述

看到 Multi-Head Attention 输出的矩阵Z与输入的矩阵X的维度是一样的。

2. Add 和 Norm

Add & Norm 层由 Add 和 Norm 两部分组成,其计算公式如下:

在这里插入图片描述

其中X分别作为Multi-Head Attention模块和Feed Forward模块的输入,在经过各自的计算后得到输出结果(其中输出结果与输入X具有相同的维度特性),因此能够实现两者的叠加运算。

Add被称为 X+MultiHeadAttention(X),一种典型的残差连接机制,在深度神经网络中常用于解决训练过程中的问题。该连接有助于模型专注于当前输入与前一层之间的差异信息,并在ResNet等架构中广泛应用。

在这里插入图片描述

Norm 被定义为 Layer Normalization,在 RNN 网络中进行标准化处理后输出的均值和方差保持一致。

3. Feed Forward

前馈网络层结构较为简单, 由两个全连接神经元构成, 其中第一层采用Relu作为激活函数, 第二层未设置激活函数, 对应的公式如下

在这里插入图片描述

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

2.3 Decoder部分

在这里插入图片描述

图中以红色标注的部分是 Transformer 模型中的解码器块结构,在结构设计上类似于编码器块(Encoder block),但两者之间存在一些显著的区别

  • 由两个 Multi-Head Attention 子层构成。
  • 其中第一个子层应用了掩膜操作。
  • 第二个子层的 K 和 V 矩阵基于编码器生成的编码信息矩阵 C 计算得出;而查询向量 Q 则基于上一层解码器的输出。
  • 最后一步通过Softmax层确定下一个被翻译的单词的概率。

第1个 Multi-Head Attention

Decoder块中的第一个Multi-Head自注意力机制采用了Masked掩蔽机制,在逐词翻译过程中需要遵循顺序性原则,在解码第i个词之前必须完成对第i-1个词的处理。这种设计能够有效防止当前词获取后续信息的影响。以下以"我有一只猫"为例说明这一过程:在解码过程中,系统会根据输入逐步推断出最终的英文表达形式。具体而言,在初始状态下系统基于空字符串预测第一个词为"I"(意为"我"),随后基于包含"I"的信息继续推断出后续词汇如"have""a""cat"等。这一过程类似于Teacher Forcing方法的应用,在每个解码步骤中都需要依赖前一步骤的结果来生成当前最可能的解码结果(如图所示)。

在这里插入图片描述

在训练过程中,Decoder可以结合Teacher Forcing策略实现并行训练。正确输入序列(I have a cat)与预期输出序列(I have a cat)会被传递给Decoder。当处理第i个位置时,请注意,在Self-注意力机制中的Softmax运算之前执行Mask操作以遮蔽后续的所有内容。具体来说,在此场景中我们采用数字0至5来标识这些词汇。

第一步:解码器接收两个关键组件——输入矩阵和遮掩矩阵。输入矩阵由"I have a cat"(编号为0到4)组成五个词向量表示。遮掩矩阵是一个5×5的二维数组。通过观察遮掩矩阵可以看出,在第一个位置(索引为0)只能访问自身的信息;第二个位置(索引为1)则能够访问前两个位置(索引为0和1)的信息;依此类推,每个后续的位置只能访问其前缀位置上的数据信息

输入矩阵与 Mask 矩阵

第二步: 首先执行的操作与上一步中的Self-Attention机制类似,在输入矩阵X的基础上进行运算以获得Query(Q)、Keys(K)和Values(V)矩阵。随后进行Query(Q)与转置Keys(K^T)的乘积运算得到最终结果。

QK^T

在计算过程中得到了 QK^T 矩阵后需要用Softmax运算生成注意力分数;为了防止后续位置的信息干扰,在Softmax运算前需应用Mask矩阵屏蔽后续位置的特征信息

Softmax 之前 Mask

应用掩码后的矩阵进行Softmax运算,在每一行之和均为一的状态下展开计算;然而,在位置(1,2,3,4)处的注意力权重均为零。
第四步中,在计算时将掩码矩阵与输入向量进行点积运算以获取最终结果;其中,在计算时将掩码矩阵与输入向量进行点积运算以获取最终结果;其中,在计算时将掩码矩阵与输入向量进行点积运算以获取最终结果;其中,在计算时将掩码矩阵与输入向量进行点积运算以获取最终结果;其中,在计算时将掩码矩阵与输入向量进行点积运算以获取最终结果;

在这里插入图片描述

第五步 :经过前述步骤即可获得一个 Mask Self-Attention 输出矩阵 Zi;接着如同 Encoder 通常的做法,在应用 Multi-Head Attention 时会将各个子结果拼接起来,并经计算得出最终的 Multi-Head Attention 输出 Z ,其中该输出与输入 X 维度一致。

第2个 Multi-Head Attention

Decoder块中的第二个Multi-Head Attention模块变化不大。其主要区别在于其中Self-Attention所使用的K, V矩阵并非基于前一Decoder块的输出进行计算,而是采用了Encoder块生成的编码信息矩阵C进行运算。

Softmax 预测输出单词

Decoder block 最后的部分通过 Softmax 预测下一个单词,在经过之前的网络层处理后得到了最终输出 Z。由于 Mask 的作用下,单词 0 的输出仅包含自身相关信息如上所述。

Decoder Softmax 之前的 Z

Softmax 根据输出矩阵的每一行预测下一个单词

在这里插入图片描述

其定义为Decoder块。如同Encoder组件的结构和功能设计原理而言

三、Transformer工作流程

在这里插入图片描述

第一步:为输入句子中的每个词生成其词向量表示X。X是通过从原始数据中提取得到的特征项与该词的位置编码相加而获得。

Transformer 的输入表示

在第二步中,我们将生成的单词嵌入矩阵(每行代表一个单词x)输入到Encoder模块中.经过连续通过6个Encoder块后能够获得,如图所示.其中,n代表句子中的总单词数,d是每个词向量的空间维度(如论文中通常设置d=512).每个Encoder块输出的结果与输入具有相同的维数.

在这里插入图片描述

第三步:Encoder输出的信息矩阵C被传递给Decoder模块,在此过程中Decoder按序生成第i+1个目标词汇时(如图所示),每一步都会基于之前已生成的目标词汇(即第1至第i个)来推导当前目标词汇的内容。特别地,在处理第i+1个目标词时需施加掩码操作以屏蔽后续词的信息

在这里插入图片描述

上图所示的解码器部分接收了编码器传递的编码矩阵C之后,在后续过程中首先输入一个翻译起始符""并识别出起始词“I”;随后在解码器中同时输入翻译起始符""和已识别的词“I”,从而预测出下一个词为“have”。在此基础上继续这个过程以完成整个翻译任务。

四、🔥Self-attention🔥

前文在《一文读懂「Attention」注意力机制》一文中专门讲述了多种分类的注意力机制,在具体场景中应用时会涉及不同类型的注意力处理方式。值得注意的是,在Transformer模型中采用的Self-attention自注意机制本文将对此展开回顾。

在这里插入图片描述

在 Transformer 结构中,Multi-Head Attention 由多个 Self-Attention 组成。可观察到 Encoder 块内嵌入了一个 Multi-Head Attention模块;相比之下,在 Decoder 块中则包含了两个这样的 Multi-Head Attention模块(其中一个采用了 Masked 技术)。

4.1 Self-Attention 结构

在这里插入图片描述

自注意力机制中,在计算过程中会用到查询矩阵Q、键矩阵K以及值矩阵V。自注意力模块接收输入形式为单词表示向量组成的矩阵X,并在此基础上生成输出。其中Q、K、V是通过对输入进行线性变换得到的。

4.2 Q、S、V的计算

通过矩阵 X 表示 Self-Attention 的输入,并利用线性变换矩阵 WQ, WK, 和 WV 计算出相应的查询向量、键向量和值向量。具体步骤如图所示,请注意其中所有涉及的变量(如 \mathbf{X}\mathbf{Q}\mathbf{K}\mathbf{V})均以每行为单位进行组织。

在这里插入图片描述

4.3 输出

在获得矩阵Q, K, V后就能够计算出Self-attention的输出。具体计算公式如次展示。

在这里插入图片描述

在公式中计算 Q 和 K 的每一行向量间的内积,在避免内积值过大之后(为了避免内积值过大),因此将该值除以 dk 的平方根)。随后将 Q 与 K 的转置相乘后(随后将 Q 与 K 转置相乘后),所得矩阵的行数和列数均为 n(所得矩阵的行数和列数均为 n),其中 n 表示句子中的单词数量(其中 n 表示句子中的单词数量)。此矩阵反映了不同单词之间的注意力权重(此矩阵反映了不同单词之间的注意力权重)。图中展示了 Q 与 K 转置后的结果(图中展示了 Q 与 K 转置后的结果),其中数字标号1234代表句子中的各个单词(其中数字标号1234代表句子中的各个单词)。

在这里插入图片描述

得到 QK^T之后,在公式中使用的 Softmax 函数会针对矩阵中的每一个元素进行处理,并特别地对矩阵中的每一行分别应用 Softmax 操作。具体来说,在这种情况下,软件会先将注意力权重通过 Softmax 函数进行归一化处理,并确保每行的所有元素之和最终被标准化为 1。

在这里插入图片描述

得到 Softmax 矩阵之后可以和 V相乘,得到最终的输出 Z。

在这里插入图片描述

上图中展示了 Softmax 矩阵的第一行数据,该行具体反映了单词 1 对其他所有单词所施加的关注权重分布情况。在此基础上,其输出 Z₁ 是通过将所有单词 i 的特征向量 Vi 按照对应的注意力权重系数进行加权求和而获得的结果(如图所示)。

在这里插入图片描述

五、Transformer分类

现有的Transformer架构衍生出多种变体。具体而言,在其基础架构的基础上进行了多方面的优化设计。此外,请参考以下论文:https://arxiv.org/pdf/2106.04554.pdf 进行进一步了解。

在这里插入图片描述

相关研究方向的论文

在这里插入图片描述

六、Transformer应用

该模型主要应用于自然语言翻译任务。因此常被称作Transformer。在学术讨论中, 我们通常提到, Transformer倾向于将文章中利用Self-Attention 的 Encoder 或 Decoder 的子结构称为 Transformer。其主要优势在于取代 recurrent 和 convolutional 网络, 作为模型上下文相关的特征提取器, 并广泛应用于机器翻译、阅读理解、情感分析以及对话识别等多个 NLP 领域

该类模型在机器翻译领域已展现出卓越的效果,并且在处理大规模多语言翻译任务方面表现尤为突出。经过对Transformer架构的有效训练,在源语言与目标语言之间实现了高效的文本转换。

基于其强大的序列建模能力,在这种情况下(即在这种情境下),该方法可用于应用于语言建模任务。在这种情况下(即在此情境下),该方法的目的就是对输入的连续文本序列进行建模,并以此预测后续的单词或字符。

基于Transformer架构的问答系统设计是一种有效的信息处理方法。在此类系统中,模型的主要功能是根据输入的问题生成相应的回答。具体来说,在处理过程中,系统会先对输入的问题以及相关的上下文信息进行编码处理。接着通过解码机制完成最终的回答输出。

另一个典型的应用领域是文本分类任务,在这种情况下系统的主要职责就是对输入的中文句子进行分段处理。在这个情境下我们可以通过Transformer模型将输入的中文句子转化为相应的嵌入表达然后将其传递给分类器进行识别

计算机视觉:同样适用于计算机视觉任务的还有Transformers模型。其中一项重要应用领域是图像分类与目标检测技术。通过Transformer模型将图像信息编码为特征表示,并将其输入至分类器或检测器中执行分类或检测。论文 A Survey of Visual Transformers

在这里插入图片描述

掌握GPT、BERT、MT-DNN等知名预训练语言模型的基本概念;首先需了解其核心思想:针对某些特定任务的数据集样本量过小导致难以构建大型的卷积神经网络(CNN),因此将这些大型CNN结构先在广泛的数据集上进行预训练以获取良好的特征提取与理解能力;随后在此基础上进行微调优化以获得更好的性能;这一思路同样适用于自然语言处理领域:即通过构建通用的语言模型并在指定数据集上进行学习获得基础能力;接着通过迁移学习的方式对不同任务进行适应性优化完成目标建模工作;而Transformer正是这一高效框架的理想选择:它以其强大的编码与解码能力成为现代语言处理的核心技术

在这里插入图片描述

该研究中展示了BERT预训练模型的具体架构与设计原理。研究者首先构建了一个基于Transformers架构设计的基础模型,在完成特定的任务训练后实现了双向往向特性,并通过跨领域迁移学习至多个目标领域并经过微调优化,在各项评估指标上均取得了令人满意的实验效果。

七、Transformer优缺点

Transformer模型具有以下优点:

从计算资源利用的角度来看,在循环神经网络(RNN)和卷积神经网络(CNN)的基础上,Transformer架构展现出更强的并行计算能力,并且显著提升了训练与推理效率。

Transformer模型基于自注意力机制对各位置间的关联关系进行量化评估,在此过程中能够更加有效地识别和整合长程依赖关系;相比之下,在关注局部区域时可能会遗漏重要的全局信息

无需预训练:与基于词嵌入的传统模型相比,在完全不依赖于词嵌入的情况下实现端到端的学习过程。其中包含代表性的如Word2Vec和GloVe算法。该模型能够在完全不依赖于词嵌入的情况下实现端到端的学习过程,并且省去了传统方法中所需的预训练与微调步骤。

适用于多个领域:基于其灵活的架构和强大的建模能力,Transformer模型能够应用于多种自然语言处理相关领域,例如机器翻译、语言建模、问答系统以及文本分类等研究方向。

Transformer模型的一些缺点包括:

该模型对计算资源的需求较高:由于其采用较大的模型规模并具有较为复杂的计算架构。因为采用了大规模的架构设计以及intricate computational topology, Transformer 模型在运行时会消耗大量计算能力并占用较大的存储容量。这可能导致其在某些特定环境下难以得到有效的部署。

对训练数据的需求较高:基于其复杂的模型架构和多维的数据输入,在防止过拟合的同时实现较高的泛化能力需求,则必须提供充足的Training data.

未包含位置编码的信息:该模型未对输入序列中的位置进行编码,从而导致在某些需要关注顺序的任务中难以有效处理。例如,在时间序列分析等场景中就容易遇到这样的问题。

Transformer模型展现了强大的适应性与预测能力,在实际应用中通常会伴随着较高的计算开销需求,并且受限于对序列依赖性的关注而难以处理某些特定场景的问题

八、资料补充

  1. 🔥 GitHub - jalammar/transformer-chat
  2. [Transformer论文解读] - https://arxiv.org/abs/1706.03762
  3. Transformer模型解析 - 百度 Baijiahao ID:1651219987457222196
  4. 复旦大学邱锡鹏团队Transformer综述 - Zhihu 知乎专栏
  5. Transformer模型详尽解析(图解版) - Zhihu 知乎文章
  6. Transformer模型常见问题分析与理解 - 博客文章
  7. RNN/CNN/Transformer特征对比分析 - 博客文章
  8. 视觉Transformer综述 - 博客文章

全部评论 (0)

还没有任何评论哟~