预训练属于迁移学习的范畴。现有的神经网络在进行训练时,一般基于后向传播(Back Propagation,BP)算法,先对网络中的参数进行随机初始化,再利用随机梯度下降(Stochastic Gradient Descent,SGD)等优化算法不断优化模型参数。而预训练的思想是,模型参数不再是随机初始化的,而是通过一些任务进行预先训练,得到一套模型参数,然后用这套参数对模型进行初始化,再进行训练。在正式探讨自然语言处理的预训练之前,回顾一下计算机视觉领域的预训练过程。在图片分类任务中,常用的深度学习模型是卷积神经网络(Convolutional Neural Network,CNN)。对于由多个层级结构组成的CNN来说,不同层学到的图像特征是不一样的,越浅的层学到的特征越通用,越深的层学到的特征和具体任务的关联性越强。在下图中,对基于人脸(Faces)、汽车(Cars)、大象(Elephants)和椅子(Chairs)的任务而言,最浅层的通用特征“线条”都是一样的。因此,在大规模图片数据上预先获取“通用特征”,会对下游任务有非常大的帮助。

再举个简单的例子,假设一个《怪物猎人:世界》的游戏玩家想给游戏中的怪物(如飞雷龙、浮空龙、风漂龙、骨锤龙等)做一个多分类系统,而有标注的数据只有游戏中的若干图片,重新训练一个神经网络模型显然不太可能。幸运的是,现有的大规模图片数据库ImageNet中一共有20000多类标注好的数据集,包含超过1400万张图片。通过ImageNet训练出来的CNN网络参数,可以迁移至怪物猎人的训练任务中。在比较浅层的CNN网络初始化时,可以使用已经训练好的参数,而在模型的高层,其参数可以随机初始化。在训练怪物猎人的特定任务时,既可以采用冻结(Frozen)参数的方式,也就是浅层参数一直保持不变;也可以采用微调的方式,也就是浅层参数仍然随着任务的训练不断发生改变,从而更加适应怪物的分类。将图片转换为计算机可以处理的表示形式(如像素点的RGB值),就可以输入至神经网络进行后续处理。对自然语言来说,如何进行表示是首先要考虑的问题。

从上面的例子我们就可以知道,预训练模型并不是自然语言处理领域的首创技术。在计算机视觉(Com-puter Vision,CV)领域,以ImageNet为代表的大规模图像数据为图像识别、图像分割等任务提供了良好的数据基础。因此,在计算机视觉领域,通常会使用ImageNet进行一次预训练,让模型从海量图像中充分学习如何从图像中提取特征。然后,会根据具体的目标任务,使用相应的领域数据精调,使模型进一步“靠近”目标任务的应用场景,起到领域适配和任务适配的作用。这好比人们在小学、初中和高中阶段会学习数学、语文、物理、化学和地理等基础知识,夯实基本功并构建基本的知识体系(预训练阶段)。而当人们步入大学后,将根据选择的专业(目标任务)学习某一领域更深层次的知识(精调阶段)。从以上介绍中可以看出,“预训练+精调”模式在自然语言处理领域的兴起并非偶然现象。

由于自然语言处理的核心在于如何更好地建模语言,所以在自然语言处理领域中,预训练模型通常指代的是预训练语言模型。广义上的预训练语言模型可以泛指提前经过大规模数据训练的语言模型,包括早期的以Word2vec、GloVe为代表的静态词向量模型,以及基于上下文建模的CoVe、ELMo等动态词向量模型。在2018年,以GPT和BERT为代表的基于深层Transformer的表示模型出现后,预训练语言模型这个词才真正被大家广泛熟知。因此,目前在自然语言处理领域中提到的预训练语言模型大多指此类模型。预训练语言模型的出现使得自然语言处理进入新的时代,也被认为是近些年来自然语言处理领域中的里程碑事件。相比传统的文本表示模型,预训练语言模型具有“三大”特点——大数据、大模型和大算力:

  • 大数据:要想学习更加丰富的文本语义表示,就需要获取文本在不同上下文中出现的情况,因此大规模的文本数据是必不可少的。获取足够多的大规模文本数据是训练一个好的预训练语言模型的开始。因此,预训练数据需要讲究“保质”和“保量”。“保质”指的是希望预训练语料的质量要尽可能高,避免混入过多的低质量语料。这与训练普通的自然语言处理模型的标准基本是一致的。而“保量”是希望预训练语料的规模要尽可能大,从而获取更丰富的上下文信息。在实际情况中,预训练数据往往来源不同。精细化地预处理所有不同来源的数据是非常困难的。因此,在预训练数据的准备过程中,通常不会进行非常精细化地处理,仅会预处理语料的共性问题。同时,通过增大语料规模进一步稀释低质量语料的比重,从而降低质量较差的语料对预训练过程带来的负面影响。当然,预训练语料的质量越高,训练出来的预训练语言模型的质量也相对更好,这需要在数据处理投入和数据质量之间做出权衡。
  • 大模型:在有了大数据后,就需要有一个足以容纳这些数据的模型。数据规模和模型规模在一定程度上是正相关的。当在小数据上训练模型时,通常模型的规模不会太大,以避免出现过拟合现象。而当在大数据上训练模型时,如果不增大模型规模,可能会造成新的知识无法存放的情况,从而无法完全涵盖大数据中丰富的语义信息。因此,需要一个容量足够大的模型来学习和存放大数据中的各种特征。在机器学习中,“容量大”通常指的是模型的“参数量大”。设计这样一个参数量较大的模型,需要考虑以下两个方面。一是模型需要具有较高的并行程度,以弥补大模型带来的训练速度下降的问题,二是模型能够捕获并构建上下文信息,以充分挖掘大数据文本中丰富的语义信息。综合上面两点条件,基于Transformer的神经网络模型成为目前构建预训练语言模型的最佳选择。首先,Transformer模型具有较高的并行程度。Transformer核心部分的多头自注意力机制(Multi-head Self-attention)不依赖于顺序建模,因此可以快速地并行处理。与此相反,传统的神经网络语言模型通常基于循环神经网络(RNN),而RNN需要按照序列顺序处理,并行化程度较低。其次,Transformer中的多头自注意力机制能够有效地捕获不同词之间的关联程度,并且能够通过多头机制从不同维度刻画这种关联程度,使得模型能够得到更加精准的计算结果。因此,主流的预训练语言模型无一例外都使用了Transformer作为模型的主体结构。
  • 大算力:即使拥有了大数据和大模型,但如果没有与之相匹配的大算力,预训练语言模型也很难得以实现。为了训练预训练语言模型,除了大家熟知的深度学习计算设备——图形处理单元(Graphics Processing Unit,GPU),还有后起之秀——张量处理单元(Tensor Processing Unit,TPU):
  • 图形处理单元:图形处理单元(GPU,俗称显卡)是大家最熟悉的计算设备之一。早期,GPU主要用来处理计算机图形,是连接计算机主机和显示终端(如显示器)的纽带。而随着GPU核心的不断升级,在其计算能力和计算速度得到大幅提升后,不仅可以作为常规的图形处理设备,同时也可以成为深度学习领域的计算设备。之所以不使用中央处理器(Central Processing Unit,CPU)来运行深度学习任务,是因为CPU和GPU擅长的任务类型是不同的。CPU擅长处理串行运算以及逻辑控制和跳转,而GPU更擅长大规模并行运算。由于深度学习中经常涉及大量的矩阵或张量之间的计算,并且这些计算是可以并行完成的,所以特别适合用GPU处理。目前,在深度学习领域应用范围最广的GPU品牌是英伟达(NVIDIA)。英伟达生产的GPU依靠与之匹配的统一计算设备架构(Compute Unified Device Architecture,CUDA)能够更好地处理复杂的计算问题,同时深度优化多种深度学习基本运算指令。大家熟知的PyTorch、TensorFlow等主流的深度学习框架均提供了基于CUDA的GPU运算支持,并提供了更高层、更抽象的调用方式,使得用户可以更方便地编写深度学习程序。目前广受欢迎的深度学习设备是英伟达Volta系列硬件,其中最为人熟知的型号是V100,其在深度学习框架下的浮点运算性能达到了125 TFLOPS(以NVLink版为例)。V100的人工智能推理吞吐量比CPU高出20倍以上,并且在高性能计算(High Performance Computing,HPC)方面相比CPU高出100倍以上。
  • 张量处理单元:张量处理单元(TPU)是谷歌公司近年定制开发的专用集成电路(Application Specific Integrated Circuit,ASIC),专门用于加快机器学习任务的训练,但在早期并没有像GPU那样被广为熟知。研究人员能够使用TensorFlow在TPU加速器硬件上快速地完成机器学习任务的训练。TPU提高了机器学习应用中大量使用的线性代数计算的性能。当训练大型复杂的神经网络模型时,TPU可以大幅度缩短达到既定准确率所需的时间,提高模型的收敛速度。例如,以前在其他硬件平台上需要花费数周时间进行训练的深度学习模型,在TPU上只需数小时即可完成训练。同时,借助谷歌公司开发的TensorFlow深度学习框架以及对TPU硬件的针对性优化,研究人员可以借助TensorFlow提供的API,方便地将模型迁移到TPU硬件上运行。目前,TPU主要支持TensorFlow深度学习框架,并逐步完善对PyTorch深度学习框架的支持,基本满足了大多数相关从业人员的需求。下图给出了两种常用TPU的硬件架构图,包括TPU v2和TPU v3。每个TPU版本定义了TPU设备的特定硬件特征,其中包括每个TPU核心的架构、高带宽内存(HBM)的数量、每个TPU设备上核心之间的互连和可用于设备间通信的网络接口。TPU v2和TPU v3之间的属性对比如下表所示。与分布式GPU类似,谷歌数据中心中的TPU Pod是通过专用高速网络相互连接的多TPU设备。TPU节点中的主机在所有TPU设备上分配机器学习工作负载。在TPU Pod中,TPU芯片在设备上互连,同时通过专用高速网络互连,因此芯片之间的通信无需主机CPU或主机网络资源。由TPU v2构成的TPU v2 Pod可最高拥有512个TPU核心和4 TB的总内存。而TPU v3 Pod可进一步将核心数提升至2048个,并且提供高达32 TB的总内存。由于可以提供超大算力和内存,TPU Pod也是目前训练超大规模预训练语言模型的首选设备之一。目前,TPU只能通过谷歌云服务器访问使用,无法像GPU一样自行采购使用。一张TPU v2的每小时使用费用是4.5美元,而TPU v3是8美元,价格较为昂贵。不过,对于想体验TPU的用户来说,谷歌公司推出的Colab在线编程平台是一个很好的选择。Colab是一个基于Jupyter Notebook的可交互式在线编程平台,目前用户可以免费使用Colab的基础版本。用户可以选用一张英伟达GPU或者谷歌TPU做深度学习相关的实验。感兴趣的读者可以访问Colab相关网站了解更多详情。


    预训练模型的发展
    近些年基于深度学习的自然语言处理技术的重大进展主要包括NNLM(2003)、Word Embedding(2013)、Seq2Seq(2014)、Attention(2015)、Transformer(2017)、GPT(2018)、BERT(2018)、XLNet(2019)、GPT-2(2019)、GPT-3(2020)等,主要预训练模型的大致发展脉络见下图:

    各种主要预训练模型的特征、抽取特征方法、使用语言模型类别等内容:
模型 语言模型 特征提取 上下文 创新点
ELMO LM Bi-LSTM 单向 拼接两个单向语言模型的结果
GPT LM Transformer(Decoder) 单向 首次使用Transformer进行特征提取
BERT MLM Transformer(Encoder) 双向 使用MLM同时获取上下文特征表示
ENRIE MLM Transformer(Encoder) 双向 引入知识
XLNet PLM Transformer-XL 双向 PLM+双注意力流+Transformer-XL
ALBERT MLM Transformer(Encoder) 双向 词嵌入参数因式分解+共享隐藏层数+句子间顺序预测

这些模型各有优点和缺点,新模型往往是在解决旧模型缺点的基础上提出的:

常见预训练模型
预训练模型很多,发展也很迅速,下面我们介绍几种常用的预训练模型。

ELMo
2018年的早些时候,AllenNLP的Matthew E. Peters等人在论文《Deep Contextualized Word Representations》(该论文获得了NAACL最佳论文奖)中首次提出了ELMo(Embedding from Language Model)预训练模型。从名称上可以看出,ELMo为了利用无标记数据,使用了语言模型。ELMo是最早进行语境化词嵌入的方法之一,是典型的自回归预训练模型,包括两个独立的单向LSTM实现的单向语言模型。ELMo的基本框架是一个双层的Bi-LSTM,每层对正向和反向的结果进行拼接,同时为增强模型的泛化能力,在第一层和第二层之间加入了一个残差结构。因此,ELMo在本质上还是一个单向的语言模型,其结构如下图所示:

GPT、GPT-2和GPT-3
预训练模型GPT是在OpenAI团队于2018年6月发表的一篇论文《Generative Pre-Training》中提出的。从名字上就可以看出GPT是一个生成式的预训练模型,与ELMo类似,也是一个自回归语言模型。与ELMo不同的是,其采用多层单向的Transformer Decoder作为特征抽取器,多项研究也表明,Transformer的特征抽取能力是强于LSTM的。GPT-2、GPT-3与GPT模型框架没有大的区别,GPT-2和GPT-3使用了更大的模型、更多的且质量更高的数据、涵盖范围更广的预训练数据,并采用了无监督多任务联合训练等。

BERT
BERT模型是由Google AI的Jacob Devlin和他的合作者们于2018年10月在arXiv上发表的一篇名为《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》的论文中提出的。BERT属于MLM模型,通过超大数据、巨大模型和极大的计算开销训练而成,在11个自然语言处理的任务中取得了最优(SOTA)结果,并在某些任务性能方面得到极大提升。

参考文献:
[1] 车万翔, 崔一鸣, 郭江. 自然语言处理:基于预训练模型的方法[M]. 电子工业出版社, 2021.
[2] 邵浩, 刘一烽. 预训练语言模型[M]. 电子工业出版社, 2021.
[3] 何晗. 自然语言处理入门[M]. 人民邮电出版社, 2019
[4] Sudharsan Ravichandiran. BERT基础教程:Transformer大模型实战[M]. 人民邮电出版社, 2023
[5] 吴茂贵, 王红星. 深入浅出Embedding:原理解析与应用实战[M]. 机械工业出版社, 2021.