语言模型的顶梁柱:Transformer, GPT, BERT

发布时间:2022-11-28 07:00

摘  要

 

近年来,AI领域中最受欢迎的神经网络结构非Transformer类模型莫属。Transformer的使用已经从一开始的语言模型逐渐扩展到了其他领域,包括语音识别,视觉模型,强化学习,生物结构,图像生成,视频生成等诸多领域,并且能在许多领域中达到SOTA(state of the art)的效果。由此可见,无论是在现在还是在不远的将来,Transformer模型都会非常重要。尽管介绍Transformer的文章已有很多,但是在实际从事相关网络模型的搭建时,仍有一些重要的内容被其他文章所省略,因此本文重新对一些重点内容进行了梳理。

 

本文将从最初的语言模型角度来分析Transformer,以及其两个重要的衍生模型:GPT和BERT的结构与特点。梳理这三个模型以及他们之间的关联将有助于读者进一步了解自然语言(NLP)领域近期的发展。其中,本文着重关注自注意力(self-attention)和交叉注意力(cross-attention)机制的共性和差异,这两者有助于读者理解Transformer模型中的编码器(encoder)和解码器(decoder)之间的差异,从而使我们更好地把握BERT和GPT之间的共性和差异。

 

引  言

 

自从Transformer模型在2017年被提出[1],并在翻译任务中获得突破性表现,其编码器-解码器结构以及关键的自注意力和交叉注意力机制被广泛地应用在众多领域中。这里我们将介绍一些Transformer在各领域里具有代表性的模型。首先在语言模型领域中,纯Transformer编码器的BERT模型[2]在语义分析,句子预测和实体识别等任务中达到了业界里顶尖的效果,而纯Transformer解码器的GPT-3[3]则实现了让人类无法识别真假的生成文字。在语音识别中,Transformer解码器与卷积编码器交互的Conformer网络[4]也成为了主流的语音识别模型。在计算机视觉领域中,视觉Transformer(ViT)也超越了众多基于卷积网络(CNN)的模型,在众多视觉任务中达到了很好的效果。在强化学习领域中,研究员设计了一种能找到计算效率最高的矩阵乘算法的视觉网络AlphaTensor[5],而该网络使用了Transformer的结构。在计算蛋白结构中,AlphaFold网络[6]的主要模块Evoformer也是基于Transformer。在文本转图像领域中,最近非常火热的扩散模型Latent Diffusion[7]也使用了Transformer模块,并利用交叉注意力将文本到图像编码器与U-Net网络结合起来,从而获得符合用户提供的文字描述的同时又十分逼真的生成图像。Transformer在AI领域发展迅速,其在扩散模型的应用甚至已经使得AI模型可以做到逼真的文字生成视频,例如Imagen Video[8],以及文字生成3D模型,例如Magic3D[9]。因此,Transformer对于整个AI领域的重要性是巨大的。

 

https://mmbiz.qpic.cn/mmbiz_png/O9VicLCaMLWVtyXZ9nibxPZKMZP1KMy52YQ6PJupLZNFz1nvckMbuKiaicXcz8RkGHWbyNoeApWDaticMhN6MXiaiazJA/640?wx_fmt=png

图1:Transformer,GPT,BERT的主要任务场景。绿色字体为模型输出。

本文将从最语言模型的角度来讲解Transformer的网络结构,并且具体关注它在训练与推理任务上的一些差异,从中可以帮助读者更好地理解该网络的功能。之后我们将对比另外两个重要的衍生模型:GPT和BERT,并着重关注它们之间的差异。

 

Transformer

 

为了更好地理解Transformer,可以从它主要的任务场景来分析。其中,翻译任务是Transformer的一个重要的任务场景。除了根据具体任务设置的输入输出部分,它的主要网络结构由编码器与解码器所组成(图2)。

 

https://mmbiz.qpic.cn/mmbiz_png/O9VicLCaMLWVpCqXRtbibGRvRuiavfFGzlVu3SEa6VWF3ubzZ7wXw2JDErmhmiaJiaI9Q2GevGBN2V4UMfAzYSV8brw/640?wx_fmt=png

图2:Transformer网络的结构图。

图片来源:https://arxiv.org/pdf/1706.03762.pdf

 

Transformer的计算流程为先对源句子进行编码再对目标句子进行解码,并从中让源句子与目标句子进行交叉注意力的结合,最终输出不同文字的概率,之后进行束搜索(beam search)或者取前K个采样(top-k)等方式来更好地预测和生成文字,即为推理过程;或者使用目标句子对比模型输出的概率进行损失函数(例如交叉熵等)的计算,即为训练过程。

 

首先,Transformer会使用编码器模块对源句子进行编码。假设源句子和目标句子都为L长度(实际场景中两者可为不同长度),网络隐空间大小为d,Transformer先会使用编码器的嵌入表查询得到一个可以进行计算的(L,d)大小隐空间变量并通过每一层的编码器(N层)最终产生一个(L,d)大小的编码器隐空间输出。这里我们可以理解Transformer的编码器将源句子的文字转换成了一个神经网络可以理解的格式,并将其包含的信息压缩成了隐空间变量的形式,用于之后与解码器交互。因此,这里编码器的最终输出需要被保存,并会被用于Transformer的解码过程。

 

做完编码的步骤后,Transformer则开始对源句子和目标句子的隐空间变量进行解码。首先,目标句子会通过解码器的嵌入表查询得到一个可以进行计算的(L,d)大小的隐空间变量,并在每一层解码器中(同样N层)与之前保存下来的进行交互,最终输出(L,d)大小的解码器隐空间变量。Transformer最终会让与大小为(S,d)的解码器嵌入表进行矩阵乘,得出的结果经过softmax操作产生出(L,S)个概率值,基于当前长度的文本,对应了一个句子中产生的下一个字是字典里某个单词的概率(字典中总共有S个单词)。

 

这里,我们需要区分的重要的概念是,编码器的主要用途是理解句子,因此可进行双向(bidirectional)操作,可以在句子中进行前后扫描,观测上下文。反观解码器的任务则是生成文字,只能通过当前步的文本信息进行对下一个字的预测,因此只能做出单向(unidirectional)操作。这使得Transformer的注意力机制在编码器与解码器中的使用会有所不同。值得注意的是,GPT是完全单向的模型而BERT是完全双向的模型,这也决定了它们的一些主要功能。

 

Transformer - 注意力机制

Transformer使用的注意力机制里的关键变量为查询向量Q、键向量K和值向量V

 

 

这里为每一层网络中的参数,都为大小矩阵。为隐空间变量,在自注意力模块中为编码器或者解码器各自的隐空间变量;而在交叉注意力模块中为当前层解码器隐空间变量,则为编码器的最终输出隐空间变量。

 

Transformer的注意力机制的核心理念是找到一个注意力矩阵A,它包含了句子与句子之间每一个字对于其他字(自注意力模块中包括自己)所关注的度(可理解为从0到1的概率),该注意力矩阵再与值向量V相乘得出句子里各个字的具体数值。 

 

 

在Transformer结构中,每层编码器有一个自注意力模块和全连接模块,每层解码器除了拥有自注意力模块和全连接模块,还有一个交叉注意力模块,用来提取编码器的输出信息。

 

在Transformer中,其实还有一个多头(multi-head)注意力的机制,具体主要是将Q,K,V从单个(L,d)矩阵变成h(L,d/h)矩阵进行注意力计算得到 h个注意力头,之后在d/h维度合并成(L,d)的矩阵与一个大小为(d,d)的投影矩阵相乘得到最终结果。这么做的好处是,让不同的注意力头关注句子之间不同的特征从而获得更好的模型预测效果。

 

Transformer - 训练

 

在训练时,Transformer使用了teacher-forcing的方法来进行训练,其核心思想与人类考试类似。考试中一个大题里有许多小题,而每个小题都依赖于前一题的答案。因此如果学生在第一题里答错,就会造成无法答对之后的所有题。因此,我们需要提供给学生上一题的正确答案即使他并未答对,从而保证学生能在公平的环境下来回答当前的题目。当然我们也要确保学生不会提前知道当前题目的正确答案。这套机制能提高神经网络的训练效果,降低收敛所需的时间[10]。

 

Transformer使用了这个思路来进行训练,将整个L长度的目标句子输入进网络中。然而,目标句子同时也是标签(例如人类翻译好的句子),因此我们需要一个机制防止模型能看到下一个单词。Transformer的解码器自注意力模块里在计算时会加上一个上三角为的掩码(mask),因此在计算注意力矩阵A时softmax会在这些掩码的位置得出0,防止模型看到下个单词。举个例子,模型在根据第一个字做预测时是不能看到目标句子里的第二个字;模型在根据第二个字做预测时只能看到目标句子里第一个字和当前的第二个字而不能看到目标句子里的第三个字,以此类推。图3展示了整个训练流程。

 

https://mmbiz.qpic.cn/mmbiz_png/O9VicLCaMLWUqOibTKSxUnHHPfZI2LrNk8byE4vCN7ic40JpsU6eBRBMUa5Ce1ia2uu9w5WOa3jZdiaMFHuqOhKdoww/640?wx_fmt=png

图3:Transformer训练流程,包含了模型输入输出大小,假设单个注意力头h=1

 

Transformer - 推理

 

在推理时,Transformer会将逐字进行预测。一个最直接的实现方法是按照训练的思路,在每一次推理迭代中,逐步增加推理文本的长度,并按照训练的思路在解码器的自注意力模块里使用上三角掩码。

 

然而,一个更高效的实现方法则为每一步都保持一个字的长度,在解码器的自注意力模块里保存之前迭代步的信息。这里,Transformer会从一个表示句子开始的特殊符号 <SOS> 来进行第一个字的预测,在解码器的自注意力模块里大小为(1,d)的K,V值会被保存下来用于下一次预测。当在做第二个字的预测时,仍然是一个字的输入。其中解码器的自注意力模块里的K,V会与上一步的值进行合并而产生(2,d)的大小,并且同样被保存下来用在下次预测,并以此类推,直到模型预测出结束字符<EOS>。图4展示了这整个推理流程。

 

https://mmbiz.qpic.cn/mmbiz_png/O9VicLCaMLWUqOibTKSxUnHHPfZI2LrNk8bf03k9Tu6TRBHqicLf3vTLwzGh1DJGon1qSqbDibKCc9FOfu69R9GZzQ/640?wx_fmt=png

图4:Transformer推理流程,包含了模型输入输出大小,假设单个注意力头h=1

 

GPT

 

Transformer的成功,使得许多衍生网络也相继诞生。其中最具代表性的莫过于在文字生成领域中大红大紫的GPT(Generative Pre-Training)模型。GPT是一个基于纯解码器的Transformer自生成语言模型,其核心思想是,通过使用市面上存在的大量文本数据例如小说,教科书,贴吧论坛,开源代码等内容进行无监督预训练。在之前提到,Transformer使用了teacher-forcing的方式训练,并且Transformer的解码器本身就是自回归模型(autoregressive model),因此单解码器本身就可以轻松地在文本数据中使用teacher-forcing的方式进行无监督训练。预训练结束后,根据具体任务,只需少量的标签数据进行监督学习来进行微调。

 

GPT系列的第一代GPT-1模型[11]自推出就吸引了许多业界的关注,它采用了Transformer解码器的结构.在随后的一年,GPT-2模型[12]也诞生了,在模型规模上也达到了15.4亿参数的规模,同时生成文字的效果也高出前一代不少。GPT-2的一大改动是将计算层归一化的layer norm模块转移到了注意力模块之前,并在最后一次输出后加上一个额外的layer norm模块(图5)。这是因为注意力模块输出的梯度往往在初始时非常大,需要使用学习率预热等方法来稳定初期的训练,这也是训练Transformer类模型中一大困难点。而将layer norm放在注意力模块之前可以使得注意力模块输出的梯度在初始阶段中不那么大来确保训练的稳定性。这种做法也在实验中被证实可以起到稳定网络训练初期并加快收敛的效果[13]。

 

https://mmbiz.qpic.cn/mmbiz_png/O9VicLCaMLWVtyXZ9nibxPZKMZP1KMy52YtrfLRI6WyBEEukl5gdW4JxwI9cZyYa5vHYfK65XDe7ePDRIL6gwG7w/640?wx_fmt=png

图5:GPT-1与GPT-2的模型结构图。与Transformer相比,GPT少了编码器与交叉注意力模块。GPT-2与GPT-1的主要差异除了规模变化以外,最主要的变化在于网络中layer norm的位置。

GPT-1图片来源:https://cdn.openai.com/research-covers/language-unsupervised/language_understanding_paper.pdf

GPT-2图片来源:https://arxiv.org/pdf/1909.04400.pdf

 

不过,更加受到关注的还是下一代的GPT-3模型[3],该模型规模已经达到了惊人的1750亿参数,并且在生成文字的任务中能让人类无法识别出是否是AI生成的文字。此外,GPT-3还在其他任务中大展身手,例如能通过一段简单的注释生成非常成熟且高效的代码,击败了不少人类。不过因为GPT-3模型的庞大,在进行模型训练时也十分耗费资源与时间,因此它的作者在网络结构上也做出了些调整(图6),将每隔一层网络中原始的稠密(dense)注意力换成稀疏(sparse)注意力[15],并使用了block-sparse的方式[16]来进行计算,提升GPU内核的计算利用率从而提高了整体效率。因有一半的层还是使用了原始的稠密注意力,因此也保证了模型的原始预测能力。

 

与Transformer的翻译任务稍微不同的是,在Transformer推理中,第一个单词的预测来自于开始符号<SOS>,而GPT的推理则是根据用户给的提示(prompt)的最后一个单词的概率来做出下一个单词的预测。而在对长度大于1的prompt做注意力计算时会采用上三角的掩码,使推理与训练方式一致。当预测到结束符号<EOS>,GPT与Transformer一样会结束推理。

 

https://mmbiz.qpic.cn/mmbiz_png/O9VicLCaMLWVtyXZ9nibxPZKMZP1KMy52Yb7HgsTTCVPNwf0cUx6DGDCkSicxfzqAiaeBtGKVlUNicctJhLwTDnLv7Q/640?wx_fmt=png

图6:GPT-3的模型结构图。GPT-3与GPT-2的差异除了规模变化以外,在于GPT-3使用了交替的稀疏层和密集层来减少计算量的同时保持模型原始的预测效果。

 

BERT

 

与GPT这种单向的纯解码器模型不同,BERT(Bidirectional Encoder Representations from Transformers)模型[2]则是一个双向的纯编码器模型,其结构是由Transformer解码器组成(图7)。BERT的核心思想与GPT类似,都是基于在海量文本数据中进行无监督的预训练,之后用户根据具体任务再做微调。但与GPT的自生成模式不同,BERT做的更多的时语义预测,对句子整体的理解任务。这是因为编码器的双向性,使得模型可以观测到整个句子。这里,BERT会做两种预训练任务:文字填充和下一句预测。在文字填充中,句子中15%的文字会事先被掩盖住,之后让模型来预测这些被掩盖的单词是什么。在下一句预测中,模型会需要判断出两个句子之间是否相互关联,例如其中一个句子是否是另一个句子的下一句。我们可以理解BERT是对句子层面的计算,因此拥有更好的全局理解,而GPT则是在单词层面做计算,因此拥有更好的细节把控。相对于GPT的主要任务是文字生成,例如在问答任务中会根据问题来生成答案。而BERT的主要下游任务都与句子理解相关,例如在问答任务中,会将不同问句与回答进行配对等判断型任务。

 

https://mmbiz.qpic.cn/mmbiz_png/O9VicLCaMLWVtyXZ9nibxPZKMZP1KMy52Yib15ByVd8icyUpq0fXzhPWVgQBJRdXbicicwlq6TUrjCoNlR2snTDmsWnw/640?wx_fmt=png

图7:BERT的模型结构图。与Transformer相比,BERT少了解码器。

总结

 

本文对Transformer,GPT和BERT模型进了分析,并分析了它们之间的关联与差异。并主要介绍了Transformer的编码器-解码器结构。从结构特点而言,BERT与GPT分别对应了Transformer的编码器与解码器。其中BERT可以被理解为双向的理解模型,而GPT可以被理解为单向的生成模型。

 

因篇幅有限,本文没有更深入地对一些细节展开讨论,而是给出了一个Transformer类模型在训练与推理上的一个整体框架,更多关注的是一个大体流程,希望能对读者在理解Transformer类模型中有所帮助。

 

参考文献

 

[1] A. Vaswani et al., “Attention Is All You Need,” Jun. 2017.
[2] J. Devlin, M.-W. Chang, K. Lee, and K. Toutanova, “BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding,” Oct. 2018.
[3] T. B. Brown et al., “Language Models are Few-Shot Learners,” May 2020.
[4] A. Gulati et al., “Conformer: Convolution-augmented Transformer for Speech Recognition,” May 2020.
[5] A. Fawzi et al., “Discovering faster matrix multiplication algorithms with reinforcement learning,” Nature, vol. 610, no. 7930, pp. 47–53, Oct. 2022, doi: 10.1038/s41586-022-05172-4.
[6] J. Jumper et al., “Highly accurate protein structure prediction with AlphaFold,” Nature, vol. 596, no. 7873, pp. 583–589, Aug. 2021, doi: 10.1038/s41586-021-03819-2.
[7] R. Rombach, A. Blattmann, D. Lorenz, P. Esser, and B. Ommer, “High-Resolution Image Synthesis with Latent Diffusion Models,” Dec. 2021.
[8] J. Ho et al., “Imagen Video: High Definition Video Generation with Diffusion Models,” Oct. 2022.
[9] C.-H. Lin et al., “Magic3D: High-Resolution Text-to-3D Content Creation,” Nov. 2022.
[10] G. A. Bekey and K. Y. Goldberg, Neural Networks in Robotics. Boston, MA: Springer US, 1993. doi: 10.1007/978-1-4615-3180-7.
[11] A. Radford, K. Narasimhan, T. Salimans, and I. Sutskever, “Improving language understanding by generative pre-training,” 2018.
[12] A. Radford, J. Wu, R. Child, D. Luan, D. Amodei, and I. Sutskever, “Language models are unsupervised multitask learners,” OpenAI blog, vol. 1, no. 8, p. 9, 2019.
[13] R. Xiong et al., “On Layer Normalization in the Transformer Architecture,” Feb. 2020.
[14] M. Heilbron, B. Ehinger, P. Hagoort, and F. P. de Lange, “Tracking Naturalistic Linguistic Predictions with Deep Neural Language Models,” Sep. 2019, doi: 10.32470/CCN.2019.1096-0.
[15] R. Child, S. Gray, A. Radford, and I. Sutskever, “Generating Long Sequences with Sparse Transformers,” Apr. 2019.
[16] S. Gray, A. Radford, and D. P. Kingma, “Gpu kernels for block-sparse weights,” vol. 3, p. 2, 2017.

本文中所引用的图片和视频来源均已标明,若有侵权请联系我们予以删除。

上一个: 通往AI化EDA之路的研究综述

下一个: “安静!吵到我用Hey, Github了”:AI语音识别的进展

近期文章

大模型推理:从模型分析到计算优化(二)

大语言模型被普遍认为可以带来无数充满想象力的应用场景,也正是因为如此,它被视为是通用人工智能的一个重要的前进方向。本系列文章将围绕大语言模型的推理,分析推理背后的算法逻辑和特征,为算法实现提供简便的评估方案,再结合几种典型的硬件场景展开评估与分析,为打算实现模型推理的用户提供一些参考。本篇文章将定量讨论在单卡上大语言模型推理性能的估算,并呈现在典型的场景下各个性能指标跟随设定参数产生的丰富变

2023-09-04

多模态大语言模型:让AI看图说话

让AI具备看图说话的能力一直是AI研究的热点。从早期的RCNN,到影响很大的CLIP,AI对图像的语言理解技术一直在迭代。随着大语言模型的能力提升,将视觉语义模型与LLM结合,以获得优秀的看图说话能力成为当前探索的热点方向。本文主要分析了看图说话的多模态模型的构成,探索了多模态语言模型的前沿发展,并归纳了实现多模态理解能力的关键技术。

2023-08-07

查看更多