AI技术干货|大语言变换器模型的架构及其工作原理介绍(上篇)
金博士| 流媒体网| 2023-11-27
【流媒体网】摘要:Transformer(变换器)的定义及构架介绍。

  文章导读:本篇是基于开源大模型库快速实现AI应用系列教程之一,上一篇《利用开源Transformer模型实现主要的NLP文本相关应用》介绍了如何使用变换器模型的高级pipeline函数来处理不同的NLP任务。本文我们将从较高的层次探讨在生成式人工智能应用中各种被广泛采用的变换器模型的架构及其工作原理。变换器模型由Vaswani等人在论文《Attention is All You Need》中提出,已成为许多自然语言处理(NLP)领域最先进模型的基础。其架构设计用于处理顺序数据,使其成为文本翻译、摘要和情感分析等任务的理想选择。

  通过本文的学习,您将全面了解Transformer模型的起源、基本结构、工作原理以及其在自然语言处理等领域的广泛应用。我们将深入探讨自注意力机制的核心原理、计算过程和多头自注意力的实现,帮助您理解其背后的智能逻辑。您将理解三种 Transformer 模型:纯编码器模型、纯解码器模型及编码器-解码器结合模型之间的区别和其应用场景。

  关键词:Transformer(变换器)、注意力机制、大语言模型、纯编码器模型、纯解码器模型、编码器-解码器结合模型、模型预训练、模型微调。

  1. Transformer(变换器)的定义

  1.1 Transformer是什么?

  Transformer 是一种深度学习架构,它依赖于并行多头注意力机制,最初由 Google Brain 团队的 Ashish Vaswani 等人在 2017 年的论文《Attention Is All You Need》中提出。这种架构以其较之前的循环神经架构如长短时记忆网络(LSTM)所需更少的训练时间而著称,并且其后续变种已经广泛应用于大型语言数据集如维基百科语料库和 Common Crawl 上的大型语言模型训练,这得益于其能够并行处理输入序列。

  在处理过程中,输入文本被分割成 n-grams 并编码为 tokens,每个 token 通过查找词嵌入表转换成一个向量。在每一层,每个 token 都会与其他未掩码 tokens 在上下文窗口的范围内通过并行多头注意力机制进行上下文化,这允许关键 tokens 的信号被放大,而不太重要的 tokens 被减弱。值得注意的是,尽管 Transformer 论文是在 2017 年发表的,但基于 softmax 的注意力机制早在 2014 年由 Bahdanau、Cho 和 Bengio 为机器翻译提出,而类似于 Transformer 的 Fast Weight Controller 则更早在 1992 年由 Schmidhuber 提出。

  目前,Transformer 架构不仅广泛应用于自然语言处理和计算机视觉领域,还被用于音频和多模态处理。此外,它还推动了诸如生成式预训练 Transformer(GPTs)和 BERT(来自 Transformer 的双向编码器表示)等预训练系统的发展。

  1.2 Transformer 模型的发展时间线

  1.3 Transformer分类及其对比

  Transformer 架构自从被提出以来,已经衍生出了多种类型,其中最为著名的包括 BERT、GPT、T5、BART 和 DistilBERT 等。这些变种各自具有独特的特性和应用领域,下面我们将对这些 Transformer 类型进行综述和比较分析。

  备注: 下面给出了各种变换器模型的简写和全称。

  · BERT(Bidirectional Encoder Representations from Transformers)

  · GPT(Generative Pre-trained Transformer)

  · T5(Text-to-Text Transfer Transformer)

  · BART(Bidirectional and Auto-Regressive Transformers)

  · DistilBERT

  总体来说,这些 Transformer 类型各有优势,适用于不同的任务和场景。BERT 和 BART 由于其双向性,更适合理解复杂的语言上下文;GPT 和 T5 由于其生成能力,更适合文本生成和转换任务;而 DistilBERT 则适合对资源有限制的应用场景。在选择合适的 Transformer 类型时,需要根据具体任务和需求进行权衡。

  1.4 Transformers 是语言模型

  正如前文所述,所有的 Transformer 模型(如 GPT、BERT、BART、T5 等)都被训练为 语言模型。这些模型通过自监督学习的方式,在大量的未标注原始文本上进行训练,从而获得了对语言的统计理解。在这个过程中,模型的训练目标是从输入数据中自动推导出来的,这意味着我们不需要人工进行数据标注!

  虽然这些模型对语言有了一定的理解,但要将它们应用于实际任务,还需要进行 迁移学习。在迁移学习中,模型会在特定任务的标注数据上进行微调,以适应该任务的需求。在此过程中,模型在给定任务上以监督方式进行微调,即使用人类标注的标签。

  例如,一个常见的任务是预测给定前 n 个单词后,句子中的下一个单词,这被称为 因果语言建模。

  图 1 文字预测过程示意

  另一种常见的任务是 掩码语言建模,模型需要预测句子中被掩盖的词。

  图 2 文字填空示例

  1.5 Transformers 是大型模型

  为了获得更好的性能,研究者通常会增加模型的大小和预训练的数据量。这导致了模型参数数量的显著增加,如下图所示。

  图 3 基于变换器语言模型的参数量

  然而,训练这些大型模型需要大量的计算资源和时间,这不仅带来了巨大的经济成本,还对环境产生了负面影响,如下图所示的碳足迹。

  图 4 大模型训练对环境的影响-二氧化碳的排放量

  一些研究团队和组织正致力于减少预训练模型的环境影响,但如果每个团队都从头开始训练模型,这将导致巨大的、不必要的全球成本。

  因此,分享预训练好的语言模型变得至关重要。通过分享模型权重,并在已经训练好的权重基础上进行构建,我们不仅可以减少计算成本和碳足迹,还可以加速 NLP 领域的研究进展。这也是为什么越来越多的研究者和开发者选择将他们的模型开源,以促进知识的传播和技术的发展。

  2. Transformer的架构

  Transformer 是一种革命性的深度学习架构,由 Vaswani 等人在 2017 年的论文 "Attention Is All You Need" 中首次提出,自此在自然语言处理(NLP)和计算机视觉等领域取得了显著的成功。相较于之前的循环神经网络(RNN)和长短时记忆网络(LSTM),Transformer 架构的优势在于其能够实现并行化处理,从而大大加快了模型的训练速度。

  2.1 通用架构

  Transformer 架构由编码器(Encoder)和解码器(Decoder)两大部分组成,它们共同工作以实现序列到序列的映射。

  · 编码器:编码器由多个相同的层堆叠而成,每一层都有两个主要子层:自注意力机制(Self-Attention Mechanism)和前馈神经网络(Feed-Forward Neural Network)。这些子层通过残差连接和层归一化相互连接,以实现稳定的训练。

  · 解码器:解码器的结构与编码器类似,但多了一个编码器-解码器注意力层,用于关注编码器的输出。这使得解码器能够利用编码器提取的输入序列的信息来生成目标序列。

  2.2 注意力层

  Transformer 模型的一个关键特性是,它们由称为 注意力层 的特殊层构建而成。实际上,介绍 Transformer 架构的论文的标题就是《Attention Is All You Need》!我们将在课程的后续部分探讨注意力层的细节;现在,你只需要知道这一层会告诉模型在处理每个单词的表示时,要特别关注你输入句子中的某些单词(而对其他单词或多或少地忽略)。

  为了更好地说明,考虑将文本从中文翻译成英语的任务。给定输入 “金博士在吃一个红苹果”,翻译模型在翻译“吃”这个动词时,需要特别关注到“金博士”这个主语,因为在英语中,动词的时态形式会根据主语的不同而有所变化。然而,对于“吃”的翻译,句子的其余部分并不是特别重要。同样地,当翻译“一个”时,模型还需要关注“红苹果”,因为“一个”的英文翻译“an”或“a”会根据其后名词的发音而有所不同。对于“一个”的翻译,句子中的其他成分并不会产生太大影响。对于结构更复杂的句子,模型需要特别关注可能出现在句子中较远位置的词语,以确保每个词语都被正确翻译。

  这个概念同样适用于与自然语言相关的任何任务:一个单词本身具有意义,但这个意义深受上下文的影响,上下文可以是在所研究的单词之前或之后的任何其他单词(或单词)。

  现在你已经对注意力层有了初步的了解,让我们更深入地探讨一下Transformer架构及其核心组件——注意力机制。这一机制使模型能够在不同位置的输入序列之间建立依赖关系,从而捕捉序列中的模式和结构。

  2.2.1注意力机制

  注意力机制的核心思想是为输入序列中的每个元素分配不同的注意力权重,这使得模型能够捕捉序列中的长距离依赖关系。它的工作原理如下:

  1. 查询、键、值(Query, Key, Value):

  模型首先计算输入序列中每个元素的查询(Query)、键(Key)和值(Value)表示,这些表示是通过将输入序列的嵌入表示与对应的权重矩阵相乘得到的。

  2. 注意力权重计算:

  接着,模型会计算序列中每个元素与其他所有元素的注意力分数,这是通过计算其查询(Query)与其他所有元素的键(Key)的点积,然后应用 softmax 函数得到的。

  3. 加权求和:

  最后,利用计算得到的注意力权重对值表示进行加权求和,从而得到每个元素的新表示。这确保了模型在生成每个元素的新表示时,能够根据其与其他元素的关系分配不同的注意力。

  2.2.2 多头注意力

  为了使模型能够捕捉输入序列中不同位置之间的多种不同类型的依赖关系,Transformer引入了多头注意力机制。这意味着模型包含多个并行的注意力层,每个层有不同的参数,从而能够学习不同类型的依赖关系。

  2.2.1注意力机制

  注意力机制的核心思想是为输入序列中的每个元素分配不同的注意力权重,这使得模型能够捕捉序列中的长距离依赖关系。它的工作原理如下:

  1. 查询、键、值(Query, Key, Value):

  模型首先计算输入序列中每个元素的查询(Query)、键(Key)和值(Value)表示,这些表示是通过将输入序列的嵌入表示与对应的权重矩阵相乘得到的。

  2. 注意力权重计算:

  接着,模型会计算序列中每个元素与其他所有元素的注意力分数,这是通过计算其查询(Query)与其他所有元素的键(Key)的点积,然后应用 softmax 函数得到的。

  3. 加权求和:

  最后,利用计算得到的注意力权重对值表示进行加权求和,从而得到每个元素的新表示。这确保了模型在生成每个元素的新表示时,能够根据其与其他元素的关系分配不同的注意力。

  2.2.2 多头注意力

  为了使模型能够捕捉输入序列中不同位置之间的多种不同类型的依赖关系,Transformer引入了多头注意力机制。这意味着模型包含多个并行的注意力层,每个层有不同的参数,从而能够学习不同类型的依赖关系。

  2.3 前馈神经网络

  前馈神经网络是编码器和解码器中的另一个重要组成部分,它在每个位置上都是独立运作的,由两个线性变换和一个激活函数组成,负责提取特征。

  2.4 位置编码

  由于注意力机制本身不具有顺序感知能力,Transformer还需要引入位置编码来为模型提供序列中元素的位置信息。这些位置编码可以是固定的(如正弦、余弦编码)或可学习的参数,它们被加到输入序列的嵌入表示中,以确保模型能够考虑元素的顺序。

  2.5 最终输出

  解码器的输出经过线性层和 softmax 层处理,生成最终的输出序列。这个输出序列可以是一段文本、一组标签或其他形式的信息,取决于特定的应用场景。

  2.6 Transformer 的原始架构

  原始的Transformer架构看起来是这样的,编码器在左边,解码器在右边:

  请注意,解码器块中的第一个注意力层注意到所有(过去的)解码器的输入,但第二个注意力层使用编码器的输出。因此,它可以访问整个输入句子,以最好地预测当前的单词。这非常有用,因为不同的语言可能有将单词放在不同顺序的语法规则,或者句子中稍后提供的一些上下文可能有助于确定给定单词的最佳翻译。

  2.6.1 举例说明

  当我们使用Transformer架构进行翻译任务时,以“金博士正在写一篇transformer的专稿”这句中文为例,我们希望将其翻译成英文。在这个过程中,编码器首先接收这句中文作为输入,而解码器则负责生成对应的英文翻译。

  在编码器中,注意力层会考虑输入句子中的所有单词,因为一个单词的翻译可能会受到其在句子中前后单词的影响。例如,为了准确翻译“金博士”,模型需要考虑其后的动词“正在写”来确定是Dr. Jin正在进行的动作,从而生成正确的英文表达。

  然而,解码器的工作方式是顺序的,它在生成翻译时只能考虑到已经翻译过的单词。比如,当解码器预测到“Dr. Jin is writing”这几个英文单词后,它会使用这些已翻译的单词以及编码器接收到的整个中文输入,来尝试预测下一个英文单词,即“a”。

  为了在训练过程中提高效率,尽管解码器可以接收到整个目标句子,但它是不允许使用未来的单词的。举例来说,当解码器尝试预测第四个单词“a”时,注意力层只能访问到位置1到3的单词,即“Dr. Jin is writing”,而不能访问到未来的单词,确保模型的预测难度适中,从而学习到更为准确的翻译。

  2.6.2 注意力掩码

  注意力掩码也可以用于编码器/解码器,以防止模型注意到一些特殊的单词——例如,用于在将句子批处理在一起时使所有输入具有相同长度的特殊填充词。

  在处理自然语言处理任务时,我们经常会遇到需要将不同长度的句子批量处理的情况。由于模型通常要求输入的序列长度是固定的,因此我们会使用特殊的填充词(通常表示为“”)来填充较短的句子,使所有句子达到相同的长度。然而,这些填充词是没有实际意义的,我们不希望模型将其考虑在内,这就需要使用“注意力掩码”。

  举个例子,假设我们有两个句子:“我爱自然语言处理”和“Transformer是一种强大的模型”。为了批量处理,我们可能需要将第一个句子填充到与第二个句子相同的长度,如下所示:

  我爱自然语言处理<pad><pad><pad><pad>

  Transformer是一种强大的模型

  在这种情况下,“注意力掩码”就会被用来阻止模型注意到填充词“<pad>”。具体来说,我们会创建一个与输入序列长度相同的掩码,其中填充位置为0,非填充位置为1,如下所示:

  1 1 1 1 0 0 0 0

  1 1 1 1 1 1 1 1

  在计算注意力权重时,这个掩码会被用来屏蔽掉填充位置的影响。具体地,掩码中的0会使得对应位置的注意力权重变为非常小的值,从而在加权求和时几乎不产生影响,确保模型不会考虑填充词的信息。

  这种方法不仅可以用于编码器中防止注意到输入序列中的填充词,还可以在解码器中用来确保当前位置的单词不会注意到未来的单词,从而保持解码的自回归性质。

  2.7 Transformer的变种

  Transformer 的通用架构由编码器和解码器组成,它们可以根据不同的任务需求进行组合和变化:

  · 编码器模型:这类模型适用于分类、回归等任务,其中只需理解输入,不需要生成新的序列。

  · 解码器模型:这类模型适用于文本生成等任务,可以生成新的、连贯的文本序列。

  · 编码器-解码器模型:这类模型适用于机器翻译、文本摘要等任务,需要理解输入序列并生成相应的目标序列。

  这些不同的架构变体为处理各种 NLP 任务提供了灵活性,我们将在后续章节中深入探讨这些不同的应用场景和模型变体。

  【专题推荐】

  深入掌握AI技术知识,篇篇干货!赶快跟随金博士学习更多深度解祈~

 

 

 

责任编辑:李楠

分享到:
版权声明:凡注明来源“流媒体网”的文章,版权均属流媒体网所有,转载需注明出处。非本站出处的文章为转载,观点供业内参考,不代表本站观点。文中图片均来源于网络收集整理,仅供学习交流,版权归原作者所有。如涉及侵权,请及时联系我们删除!