如果你还不知道Transformer ,那么你可能不是本文的读者。自 2018 年以来,Transformer 模型在自然语言处理任务中成功取代了传统的 LSTM 和 CNN 网络。我在整理资料的时候发现,数据派翻译了一篇国外的Transformer科普文章,翻译的挺好的。

transformer模型和pytorch transformer模型和ChatGPT_chatgpt

我相信大家都知道ChatGPT 主要基于 GPT-3,这是一种Transformer Decoder-only的模型。GPT-3 通过其自回归预训练过程展现出卓越的上下文学习能力,这不一定需要对下游任务进行任何进一步的微调。在这个之前,其实Transformer是分成不同的流派的,最近有Decoder-only一统天下的趋势,就连谷歌最近发布的 PaLM-E(2023 年 3 月 10 日)一种具体化的多模态模型,它放弃了其有encoder组件,转而采用Decoder-only的架构来处理统一神经网络设置中的多任务。

为了方便我们比较这几个模型区别的,我们需要先回顾一下几个关键的自然语言处理的基础知识:架构、预训练目标、分词器和位置编码

1、架构

transformer模型和pytorch transformer模型和ChatGPT_深度学习_02

这里做出encoder和decoder比较:encoder对所有token进行并行处理,允许双向理解,自回归输出decoder的生成特性将其限制为从左到右的处理。选择在架构中的encoder或decoder上优先构建会密切相关预训练目标的选择。

2019 年提出了Transformer 模型的改进版本,称为Transformer-XL ,以解决上下文中超长依赖的问题。原始的Transformer 的模型只能学习 512-2048 个Token的固定长度段。在处理冗长的文本时,独立学习多个片段可能导致无法捕获这些片段之间的相互依赖性。Transformer-XL 结合了段级循环机制,它缓存了之前的“段”,使得其处于隐藏状态,在处理下一“段”时被重用为扩展上下文。XLNet 就是建立在 Transformer-XL 架构之上。

在这里做一个简单的整理

encoder-only

Encoder-Decoder

Decoder-only

BERT

T5、BART

GPT、XLNet

我们都知道了GPT 是文字接龙,BERT是完形填空,

那么剩下的几个是什么?

假设这五个模型都是烹饪学校,每个学校有自己的教学方法和特色。

  1. BERT(双向编码器表示):BERT学校教学时,让学生先学习所有的烹饪技巧和食材知识,然后再让他们实际操作。这个学校特别注重对食材和技巧的全面了解,因此学生需要同时关注上下文中的所有信息。BERT通过双向学习,能够从前后文同时学习语言知识。
  2. GPT(生成预训练式 Transformer):GPT学校采用自左向右的教学方式,学生需要按照顺序学习烹饪技巧和食材。这种方法虽然不能像BERT那样全面,但它更专注于生成连贯的文本,因此在生成任务中表现较好。
  3. T5(Text-to-Text Transfer Transformer):T5学校的教学方法是将所有任务都视为文本到文本的转换问题。学生需要学会如何根据给定的食材和技巧生成新的菜谱。这种方法使得T5模型能够在各种任务中灵活地应用。
  4. BART(Bidirectional and Auto-Regressive Transformers):BART学校采用一种类似于BERT和GPT的教学方法。首先,学生需要对食材和技巧进行随机遮盖学习,然后按照自左向右的方式来生成文本。这种方法结合了BERT和GPT的优点,使BART在许多任务中表现出色。
  5. XLNet(Generalized Autoregressive Pretraining):XLNet学校使用一种全排列的教学方法。学生需要学会如何在给定食材和技巧的任意顺序下完成任务。这种方法使XLNet能够捕捉到文本中的长距离依赖关系,从而在某些任务中胜过其他模型。

以上解释来源于ChatGPT-模型GPT4 。已经说得非常清楚了。我觉得我这个文章可以不用写了……

2、预训练目标

语言模型通常会经历两个步骤:

预训练:通过在庞大多样的文本数据集(如维基百科、问答网站、文学书籍等)上进行训练,为模型建立起决定性的基础,建立对自然语言模式的广泛和上层理解一种无监督学习的方式。

Fine-tuning:预训练模型分别在较低层次、更具体的下游任务上进一步训练,如情感分析、文本分类、命名实体识别、机器翻译和问答等。但是,fine-tuning下游任务需要创建带有相应标签的精心准备的数据集,并且通常涉及修改模型的精细结构,这需要大量劳动力。

这里就会涉及到一个下游任务的概念,我们可以参考BERT的论文,下游任务可以大体分为:句对分类任务、单句分类任务、问答任务和单句标注任务。这里不展开,大家可以自行翻阅BERT论文中的附录B1.1(地址:https://arxiv.org/pdf/1810.04805.pdf)

下游任务实在是比较复杂,所以我们的最终目标是将所有下游任务统一为一个单独的预训练任务,从而消除对单独任务进行任何后续微调的需要。谷歌在 2019 年推出了 T5 模型,该模型将所有 NLP 任务都视为文本生成任务,即使是文本分类问题也是如此。GPT-3在预训练过程中展示了惊人的上下文学习能力,并且在某些下游任务中优于其他微调模型,然后,后面的事情你们都知道了。

预训练目标的选择会显著影响基于 Transformer 的模型的性能以及对特定任务进行微调所需的适应程度。自回归Autoregressive (AR)和自动编码Autoencoding (AE)是目前两种成功的目标类型。

AR目标专注于重新生成 文本序列,尤其擅长机器翻译、抽象摘要和问答等文本生成任务。AR模型仅仅适合从左到右的生成,所以后期XLNet 通过在其训练目标中使用先前标记序列因式分解顺序的排列来克服此限制。

AE目标旨在从琐碎的文本数据中重建原始文本,并在语言理解方面表现出色。AE 目标允许在预训练期间进行双向处理,从而实现更好的上下文理解。然而,这个目标假定独立性,这意味着所有Token都有相同的概率被屏蔽和重建,而不管它们的相互依赖性如何。此外,预训练目标与文本生成任务的迁移学习之间存在差异,这也可以理解,比较类似于人类交流的自然过程。

自动编码AE

自动回归AR

基于排列-AR

BERT、BART 和 T5

GPT

XLNet

3、位置编码

基于 Transformer 的模型通过向标记嵌入添加位置嵌入来编码位置信息,确保并行处理,同时保留文本序列顺序。最初的 Transformer 模型使用绝对位置的正弦函数,洞察到不同位置的两个标记之间的关系可以表示为它们位置嵌入的余弦相似度。Transformer-XL 引入了相对位置编码来处理不同段中的位置编码,并认识到每对标记之间的距离是自注意力计算中比它们的绝对位置更关键的因素。

绝对位置编码 

相对位置编码

BERT、GPT、BART

T5、XLNet

4、分词器

Token可以简单地称为单个单词或一系列连续的单词(n -grams)。然而,由于英语单词有各种形式(动词时态、动词和名词之间的过渡、复数、复合词等),基于子词的标记化是一个可行的选择,因为它将一个词分解成子词单元以捕获它作为词根、前缀、后缀和其他语言元素。例如,“tiresome”可以分解为“tire”和“some”,而“tired”可以分解为“tire”和“d”。这样,“tiresome”和“tired”可以被识别为具有相同的派生词。

LLM通常使用子词标记化,其中两种主要方法是WordPiece和字节对编码 (BPE)。WordPiece 方法通过最大化所有可能的 n-gram 字符的词汇数据集的可能性来收集子词单元。另一方面,BPE 类似于 WordPiece,但使用所有 256 个 Unicode 字符,因此可以包含特殊字符,无需添加特殊符号来表示标点符号。

transformer模型和pytorch transformer模型和ChatGPT_chatgpt_03

WordPiece

BPE

BERT、T5

GPT、BART

以上说完之后,才是真的进入模型的环节:

BERT(B idirectional Encoder Representations from Transformers)

transformer模型和pytorch transformer模型和ChatGPT_transformer_04

谷歌在 2018 年推出了 BERT,作为一种专门利用encoder堆栈的双向模型。

BERT 模型的预训练目标之一是去噪目标,它涉及使用等式预测15% 的随机屏蔽标记。值得注意的是,在这 15% 的随机掩码标记中,80%的时间它们被替换为 [MASK] 标记,10%的时间它们将被替换为用于纠错学习的随机词。剩下的10% 的时间它们保持不变,以在某些关键词被屏蔽时保持对整体上下文的理解。

BERT 的预训练包括下一句预测 (NSP)目标,以评估模型理解句子整体含义而不仅仅是特定标记的能力。该任务涉及一个二元分类任务,以预测下一个句子是否是实际的连续句子。50% 的时间呈现实际的连续句子,50% 的时间提供来自同一文献的随机句子。

现实生活中的语言任务不是去噪任务,导致 BERT 模型的预训练和微调之间存在差异。因此,需要对各个下游任务进行微调。这个过程无比的烦躁和复杂。

transformer模型和pytorch transformer模型和ChatGPT_人工智能_05

下游任务可以大体分为:(a) 句子对分类任务(例如,两个句子之间的语义相似性),(b) 单句分类任务(例如,情感分析),(c) SQuAD(问答),以及(d) 命名实体标记。这个准确性很高,如果我们把实体标记好,分类做好,相似性处理好,效果就非常好,然而现实中,这个事情,非常的困难

BERT有几个变体:

RoBERTa

DistilBERT

DistilRoBERTa

  • 移除NSP
  • 5% 的标记的随机化掩码在每个预训练时期都在变化,而不是静态的
  • 使用BPE 分词
    训练了具有更长序列段的更广泛的训练数据

更小的、轻量级的 Transformer 网络

BERT 模型的大小减少了 40%

学生模型的模仿,不预测实际标签

和DistilBERT一样,也是用学生模型来模拟教师模型,而把教师模型换成了RoBERTa

GPT(G enerative Pre- Training language model)

这个不用多说:OpenAI 提出了仅使用decoder堆栈的 GPT1-4 模型,使它们成为从左到右的自回归模型。尽管它们没有与 BERT 相同的双向理解,但它们的生成方法与下游任务非常吻合,因为所有自然语言任务都可以视为生成任务。

过程大家都很清楚,不累述,大家也可以看我的之前文章,值得说明的是:一直到GPT-3其实才可以实现与其他经过微调的最先进 (SOTA) 模型相当的性能。为了提高其在多任务上的性能,使用InstructGPT方法进行微调,该方法结合了来自标签器的演示文本的监督学习,然后与生成文本评分和排名的强化学习相结合,称为人类反馈强化学习(RLHF). 这种方法允许在所有下游任务和提示之间共享网络参数,而不必为每个单独的下游任务进行微调。真的很省事……简单直接且暴力。

BART(双向和自回归Transformer):

Facebook 提出的 BART (2019) 在去噪预训练目标和encoder-decoder架构方面与 T5 非常相似,唯一的区别是30%的标记被屏蔽,并且在预训练文本中使用了句子排列。

transformer模型和pytorch transformer模型和ChatGPT_人工智能_06

这样的方式理论上有如下的好处:

  1. 双向上下文信息:BART 通过随机遮盖单词,可以像 BERT 一样学习双向上下文信息,从而更好地捕捉句子中的潜在关系。
  2. 生成任务优势:BART 在预训练阶段就整合了生成任务的特性,因此在生成任务中的表现比只关注双向上下文的 BERT 更好。
  3. 更自然的概率分布:随机遮盖学习使 BART 学习到的概率分布更接近自然语言生成的分布,因为它不仅仅局限于从左到右的生成方式,而是在训练过程中已经适应了不同的遮盖情况。
  4. 鲁棒性:随机遮盖学习使 BART 能够在不同程度的噪声和遮盖下进行学习,从而提高了模型的鲁棒性。

T5(Text- To- Text Transfer Transformer)

transformer模型和pytorch transformer模型和ChatGPT_去噪_07

2020 年,Google 提出了 T5 作为一个统一模型,能够将所有下游任务转化为文本生成任务,甚至是分类问题。

在试验了几个无监督的预训练目标和架构之后,T5 使用encoder-decoder架构和去噪目标。在预训练期间,输入encoder的token中有 15%被随机屏蔽。但它是BERT 掩蔽和去噪算法的修改版本:连续的掩蔽标记被替换为标记,并被视为添加到原始词汇表中的新单个标记。这有助于模型学习预测空白中遗漏了多少单词。 后来,生成能力 是随机学习的 拆分数据集中的输入文本,第一部分输入encoder,第二部分作为输出进行自动回归重新生成。

这样做的好处是:

  1. 提高效率:将连续的掩蔽标记视为一个新的单个标记,可以避免在训练过程中处理多个独立的掩蔽标记。这样可以简化训练过程,提高模型的训练效率。
  2. 减少错误:在处理文本时,将连续的掩蔽标记视为一个新的单个标记有助于减少模型在预测掩蔽词时出现的错误。模型只需关注新的单个标记,而不是关注多个独立的掩蔽标记,从而降低了模型预测错误的可能性。
  3. 更好的建模长距离依赖:将连续的掩蔽标记视为一个新的单个标记有助于模型更好地捕捉文本中的长距离依赖关系。因为模型可以将这个新的单个标记与其他相关的单词联系起来,而不是将其分散到多个独立的掩蔽标记中。
  4. 有助于端到端的任务:这种策略有助于模型更好地处理端到端的任务,如机器翻译、摘要等。将连续的掩蔽标记视为一个新的单个标记,使模型能够更好地从源语言文本转换到目标语言文本,实现高质量的生成结果。

XLNet(Transformer- XL生成自回归模型)

XLNet (2019) 由卡内基梅隆大学和谷歌推出,结合了基于经典自回归 (AR) 目标开发的预训练目标。新目标最大化序列所有可能排列的期望可能性。通过这种方式,XLNet克服了几个限制,包括由 BERT 的去噪目标和经典 AR 目标的从左到右的上下文学习限制引起的预训练微调差异。XLNet 是基于 Transformer-XL 的,它包括一个段递归机制来处理超长上下文,并使用相对位置编码。

  • 更好的建模长距离依赖:与BERT使用遮盖语言建模任务不同,XLNet使用一种全排列语言建模(Permutation Language Modeling,PLM)方法。这使得XLNet能够更好地捕捉文本中的长距离依赖关系。
  • 解决预训练和微调阶段的不一致问题:在BERT的预训练阶段,模型需要预测遮盖的单词;而在微调阶段,遮盖符号不再出现。这导致预训练和微调阶段存在一定的不一致。XLNet通过全排列语言建模方法解决了这个问题,使得预训练和微调阶段更加一致。
  • 自回归特性:XLNet采用自回归(Autoregressive)的方法,这意味着它在生成任务中表现优异,例如文本生成、摘要等。
  • 双向上下文建模:XLNet可以捕捉到双向上下文信息,类似于BERT,因此在理解文本中单词之间的关系方面表现出色。
  • 更强大的表达能力:XLNet采用了 Transformer-XL 架构,该架构可以更好地处理长序列,提供更强大的表达能力。
  • 在多种任务上的良好表现:XLNet在许多自然语言处理任务中表现优秀,如文本分类、情感分析、阅读理解、摘要等。

总体来说,Transformer全家桶,从理论上来讲,各有优势,GPT4出来之后,其实很多的讨论都被带到了一统天下的状态。实际上,从原理上,很多模型还有很多很优秀的特性,GPT4目前还没有公布细节,按照OPENAI的一贯惯例,可能会在模型发布之后6个月左右会公布论文,也很期待其中的学术观点。

GPT从原理上来说,并不是最优解,但是效果上却是无与伦比。也恰好说明了,学术和工程之间的关系,毕竟最终达到效果才是目的。包括李飞飞教授的imageNet也是暴力用aws 在全球标注,最后才成功的。