- 🍨 本文为🔗365天深度学习训练营 中的学习记录博客
- 🍖 原作者:K同学啊 | 接辅导、项目定制
1. Transformer的起源与发展
2017年Google在《Attention Is All You Need》中提出了Transformer结构用于序列标注,在翻译任务上超过了之前最优秀的循环神经网络模型。
Fast AI 在《Universal Language Model Fine-tuning for Text Classification》中提出了名库ULMFiT的迁移学习方法,将在大规模数据上预训练好的LSTM模型迁移到文本分类,只用很少标注就达到了最佳性能。
在Transformer结构发布后,出现了两个使用Transformer结构的著名模型:
- GPT(the Generative Pretrained Transformer)
- BERT (Bidirectional Encoder Representations from Tranformers)
通过Transformer结构与无监督学习的相合,不用在人头开始训练模型,几乎所有的NLP任务都远超先前的最强基准。
使用Transformer结构的模型三到处分为三类:
- 纯Encoder模型:例如BERT,又称自编码(auto-encoding)Transformer模型
- 纯Decoder模型:例如GPT,又称自回归(auto-regressive)Transformer模型
- Encoder-Decoder模型:例如BART、T5,又称Seq2Seq(sequence-to-sequece)Transformer模型
2. 什么是Transformer
什么是自监督学习
自监督学习(Self-supervised Learning)是一种机器学习方法,其特点在于从数据本身自动生成标签或监督信号,无需人工标注。简单来说就是让机器利用数据本身的结构或特征来进行学习,从而不依赖于外部标签或监督信号。
自监督学习的优点
- 数据利用率高:由于不需要人工标注标签,可以充分利用未标记数据,从而大大扩展了可用于训练的数据集
- 泛化能力强:自监督学习训练出的模型通常具有良好的泛化能力,因为它们学习到了数据中的一般性特征,而不是依赖于特定的标签
- 无监督表示学习:自监督学习可以作为无监督表示学习的一种方法,通过学习数据的表示,可以为后续的监督学习任务提供更好的初始化或者特征提取器
语言建模
常见的Transformer模型一般通过两种常用的预训练方法来预训练
- 因果语言建模(Causal Language Modeling):基于句子的前N个词来预测下一个词,因为输出依赖于过去和当前的输入
- 遮盖语言建模(Masked Language Modeling):基于上下文(周围的词语)来预测句子中被遮盖掉的词语(Masked Word)
这些语言模型虽然 可以对训练过的语言产生统计意义上的理解,但是完成特定任务的效果往往不好,因此通常还会采用迁移学习(Transfer Learning)方法,使用特定任务的标注语料以有监督学习的方法对预训练模型参数进行微调,以取得更好的效果。
大语言模型
通常来说,目前的Transformer模型的参数量和预训练数据都非常大,而且呈现出不断增长的趋势
迁移学习
预训练:从头开始训练模型,所有的模型权重都被随机初始化,在没有任何先验知识的情况下训练
因此预训练需要海量的数据和高昂的时间与经济成本,大部分情况下我们不会选择预训练,而是将别人预训练好的模型权重 通过迁移学习应用到自己的模型中,对自己的任务数据集进行“二次训练”,通过微调参数使模型适用于新任务。
迁移学习的好处:
- 减少数据需求:少量的数据集就可以对预训练模型进行微调
- 加速训练过程:使用预训练模型参数做初始化权重 ,可以加速训练,因为模型已经学习到一些通用的特征或者表示
- 提高模型性能:在预训练时学习到的一些通用特征,对目标任务可能也是有用的,因此可以通过迁移学习提高目标任务性能
- 解决特定领域问题:有些特定领域数据获取非常困难,迁移学习可以帮助知识从易于获取数据的领域迁移到特定领域
- 模型泛化能力提升:通过在不同任务中学习的出的通用特征,会具有更好的泛化能力
因此在绝大多数情况下,我们都应该找一个接近我们任务的预训练模型,然后微调它
3. Transformer结构
标准的Transformer模型主要是由两个模块组成:
- Encoder:负责理解输入文本,为每个输入构造对应的语义表示(语义特征)
- Decoder:负责生成输出,使用Encoder输出的语义表示结合其他输入来生成目标序列
两个模块可以根据任务需要单独使用:
- 纯Encode模型:适用于只需要理解输入语义的任务,如句子分类、命名实体识别
- 纯Decoder模型:适用于生成式任务,如文本生成
- Encoder-Decoder模型或Seq2Seq模型:适用于需要基于输入的生成式任务,如翻译和摘要
注意力层
在Transformer中,注意力层(Attention Layer)是其核心组件之一。注意力机制允许模型在处理输入序列的每个元素时,对其他元素分配不同的注意力权重,从而能够更灵活地捕捉序列中的关联信息。
主要作用有:
- 建立全局联系:注意力机制允许模型在处理序列中的每个位置时,关注整个输入序列的不同部分。使模型在预测或生成输出时考虑整个上下文,而不仅仅时当前位置的信息
- 捕捉长距离依赖关系:传统的循环神经网络(RNN)在处理长序列时可能会面临梯度消失或梯度爆炸问题。通过引入注意力机制,Transformer可以更好的捕捉序列中的长距离依赖关系,无需受限于时间步的大小或固定的窗口大小
- 并行计算:注意力机制允许模型并行计算每个位置的注意力权重,提高了计算效率。使Transformer模型在训练和推理时能够更快地处理大规模的序列数据
- 自适应权重:注意力权重是通过学习得到的,它会自动调整以反映输入序列中不同位置的重要性,这种自适应性使模型能够更好地适应不同任务和输入分布
2. 原始结构
原始结构如下,左侧为Encoder,右侧为Decoder
3. 分支流派
Encoder分支
纯Encoder模型只使用Transformer模型中的Encoder模块,也被称为自编码(self-encoding)模型。在每个阶段,注意力层都可以访问到原始输入句子中的所有词语,即具有“双向(Bi-directional)”注意力
纯Encoder模型通常使用遮盖语言建模来破坏给定的句子,然后让模型进行重构来进行预训练,最适合处理那些需要理解整个句子主义的任务,如:分类、命名实体识别、抽取式问答等。
纯Encoder有:
- BERT:是第一个基于Transformer结构的纯Encoder模型,在提出时横扫了整个NLP界,在流行的GLUE基准上超过了当时所有的最强模型。通过预测文本中被遮盖的词语和判断一个文本是否跟随着另一个来进行预训练,前一个任务被称为遮盖语言建模(Masked Language Modeling,MLM)后一个任务被称为下句预测(Next Sentence Prediction, NSP)
- DistilBERT:通过预训练期间使用知识蒸馏( knowledge distillation)技术,DistilBERT在内存占用减少40%,计算速度提高60%的情况下,依然可以保持原模型97%的性能
- RoBERTa:在BERT之后一项研究表明,修改预训练方案可以进一步提高模型的性能。RoBERT在更多的数据集上,以更大批次训练了更长时间,并且放弃了NSP任务。与BERT模型相比,显著地提高了模型的性能
- XLM:跨语言语言模型(XLM)探索了构建多语言模型的多个预训练目标,包括来自GPT的自回归语言建模和来自BERT的MLM,还将MLM拓展到多语言输入,提出了翻译语言建模(Translation Language Modeling,TLM)。XLM在多个语言NLU基准和翻译任务上都取得了最好的性能
- XLM-RoBERTa:跟随XLM和RoBERTa,XLM-R通过升级训练数据来改进多语言预训练。其基于Common Crawl创建了一个2.5TB的语料,然后运用MLM训练编码器,由于没有平行对照文本,它移除了XLM的TLM建模方式。最终,该模型大幅超越了XLM和多语言BERT变体
- ALBERT:通过三处变化使Encoder架构更高效。首先将词嵌入维度与隐藏维度解耦以减少模型参数;其次所有模型层共享参数;最后将NSP任务替换为句子排序预测(判断句子顺序是否被交换)。这些变换使可以用更少的参数训练更大的模型,并在NLU任务上取得了优异的性能
- ELECTRA:MLM在每个训练步骤中只有被遮盖掉的词语表示会得到更新。ELECTRA使用了一种双模型方法来解决这个问题:第一个模型继续按标准的MLM工作;第二个模型(鉴别器)则预测第一个模型的输出中哪些词语是被遮盖的,这使得训练的效率提高了30倍。下游任务使用时,鉴别器也要参与微调。
- DeBERTa:DeBERTa模型引入了两处架构变化 。首先将词语内容与相对位置分离,使自注意层可以更好地建模邻近词语对的依赖关系;此外在解码头的softmax层之前添加了绝对位置嵌入。DeBERT是第一个在SuperGLUE基准上击败人类的模型
Decoder分支
纯Decoder模型只使用了Transformer模型中的Decoder模块。在每个阶段,对于给定的词语,注意力只能访问句子中位于它之前的词语,即只能能迭代地基于已经生成的词语来逐个预测后面的词语,因此也被称为自回归(auto-agressive)模型
纯Decoder模型预训练的任务通常是预测下一个词语。适合处理那些涉及文本生成的任务。纯Decoder模型的探索很大程序上是由OpenAI带头进行的。通过不断使用更大的数据集进行预训练,以及将模型的规模扩大,纯Decoder模型的性能也在不断提高
纯Decoder模型有:
- GPT:结合了Transformer Decoder架构和迁移,通过根据上下文预测下一个单词的预训练任务,在BookCorpus数据集上进行了预训练。GPT模型在分类等下游任务上取得了很好的效果
- GPT-2:受简单且可扩展的预训练方法的启发,OpenAI通过扩大原始模型和训练集创造了GPT-2,它能够生成篇幅较长且语义连贯的文本
- CTRL:GPT-2虽然可以根据模板(prompt)续写文本,但是几乎无法控制生成序列的风格。条件Transformer语言模型(Conditional Transformer Language,CTRL)通过在序列开头添加特殊的“控制符”以控制生成文本的风格,这样只需要调整控制符就可以生成多样化的文本
- GPT-3:将GPT-2进一步放大100倍,GPT-3具有1750亿个参数,除了能生成令人印象深刻的真实篇章外,还展示了小样本学习(few-shot learning)的能力。该模型目前没有开源
- GPT-Neo/GPT-J-6B:由于GPT-3没有开源,一些旨在重新创建和发布GPT-3规模模型的研究人员组成了EleutherAI,训练出了类似GPT的GPT-Neo和GPT-J-6B。当前公布的模型具有1.3,2.7,60亿个参数,在性能上可以媲美较小版本的GPT-3模型
Encoder-Decoder分支
Encoder-Decoder模型也叫Seq2Seq模型。同时使用了Transformer架构的两个模块。在每个阶段,Encoder注意层都可以访问初始输入句子中的所有单词,而Decoder的注意力层只能访问输入中给定词语之前的词语
Encoder-Decoder模型可以使用纯Encoder模型和纯Decoder模型的目的来完成训练,但是通常会包含一些更复杂的任务。如:T5通过随机遮盖掉输入中的文本片段进行预训练,训练目标则是预测出被遮盖掉的文本。Encoder-Decoder模型适合处理那些需要给定输入来生成新文本的任务,例如:自动摘要、翻译、生成式问答
Encoder-Decoder模型有:
- T5:将所有的NLU和NLG任务都转换为Seq2Seq形式统一解决(如:文本分类就是将文本送入Encoder,然后Decoder生成文本形式的标签)。T5通过MLM及将所有的SuperGLUE任务转换为Seq2Seq任务来进行预训练。最终具有110亿参数的大版本T5在多个基准上取得了最优性能
- BART:同时结合了BERT和GPT的预训练过程。将输入句子通过遮盖词语、打乱句子顺序、删除词语、文档旋转等方式破坏后传给Encoder编码,然后要求Decoder能够重构出原始文本。这使得模型可以灵活地用于NLU或NLG任务,并且在两者上都实现了最优性能
- M2M-100:语言对之间可能存在共享知识可以用来处理小众语言之间的翻译。M2M-100是第一个可以在100种语言之间进行翻译的模型,并且对小众的语言也能生成高质量翻译。该模型使用特殊的前缀标记来指示源语言和目标语言
- BigBird:由于注意力机制的内存要求,Transformer模型只能处理一定长度的文本。BigBird通过使用线性扩展的稀疏注意力形式,将可处理的文本长度从大多数据模型的512扩展到4096,这对于处理文本摘要等需要捕捉长距离依赖的任务特别有用