第 3 章

预训练密码:从ELMo到ULMFiT的暗流

西雅图,Allen人工智能研究所。一台显示器上的损失曲线正在缓慢下降,每隔几小时才移动一个像素。Matthew Peters盯着这条曲线已经看了三个月。

2017年夏天,当Transformer论文在arXiv上引发震动时,这间办公室里的计算机正在运行一种已经被那篇论文宣告过时的架构——双向LSTM。它们没有八头并行的矩阵乘法,没有自注意力层叠。它们在用最笨拙的方式阅读文本:一个词接一个词,从左到右,再从右到左,然后把两个方向的信息拼接起来。

Peters不在意架构是否新潮。他在追踪一个更根本的问题:语言模型本身能不能成为所有自然语言处理任务的起点?

这个问题不会出现在任何顶会的头条上。它太朴素,太工程化,甚至有些笨拙。但它的答案将在接下来的十二个月里,与Transformer架构结合,彻底重塑这个领域。

把时间拨回到2017年初。当时的自然语言处理世界被一种固定的工作流程统治。

拿到一个任务——情感分析、命名实体识别、文本蕴涵——就从头训练一个模型。标注几千条数据,设计一个特定架构,初始化参数,然后祈祷模型能学会点什么。下一个任务来了,再从头来一遍。

每个模型都是一座孤岛。它们之间唯一的共同点是词向量——word2vec或GloVe生成的静态词表示。

但这些向量有一个致命的缺陷:无论上下文如何变化,“苹果”这个词的向量始终是同一个。它无法区分指涉水果的“苹果”和指涉公司的“苹果”。

这不是一个学术上的细枝末节。它意味着每个自然语言处理系统都在用一个严重退化的语言理解起点。它们看得见词,但看不见词在句子中的真正含义。

Peters和他的同事们——Mark Neumann、Mohit Iyyer、Matt Gardner、Christopher Clark、Kenton Lee、Luke Zettlemoyer——决定改变这一点。他们提出了一个想法:如果词表示不是静态的,而是根据整个句子动态生成的呢?

换句话说,如果一个词的含义取决于它周围的词,那么词向量本身就应该包含上下文信息。

这个想法并不完全原创。早在2015年,就有研究者尝试用语言模型生成词表示。但那些尝试没有引起广泛关注,因为它们没有在足够大的规模上证明自己的价值。

Peters团队的赌注是:用海量无标注文本训练一个足够深的双向语言模型,然后将这个模型生成的词向量作为所有下游任务的输入。

他们把这个模型命名为ELMo——Embeddings from Language Models。这个名字本身就是一个宣言。它不是在说“我们发明了一种新的语言模型”,而是在说语言模型可以成为词向量的来源。它把语言模型从目的变成了手段。

ELMo的架构使用两层双向LSTM。第一层捕捉句法信息——词性、句法结构、依存关系。第二层捕捉语义信息——词义消歧、指代关系、语义角色。通过将前向和后向隐藏状态拼接起来,ELMo为每个词生成一个上下文敏感的表示。这不是自注意力。它不能并行计算。

它仍然受困于长距离依赖的衰减。但ELMo有一个Transformer当时还不具备的优势:它是真正双向的。2017年的Transformer解码器是单向的。它在预测下一个词时,只能看到已经生成的词。它不能同时利用左右两侧的上下文来理解一个词的含义。这是语言建模任务的天然约束——你不能在预测下一个词时偷看答案。

但词表示生成不是语言建模。Peters团队意识到,他们可以同时训练一个前向和一个后向LSTM,然后将两个方向的隐藏状态拼接起来。这样,每个词的表示就包含了完整的上下文信息。

这个技术选择——用LSTM而不是Transformer,用拼接而不是深度融合——在一年后会被视为ELMo的根本局限。但在2017年,它让ELMo成为第一个在多个基准测试上同时取得显著提升的预训练模型。

数字说明了一切。在SQuAD问答数据集上,ELMo将最佳模型的F1分数提升了4.7个百分点。在命名实体识别任务上,错误率降低了近百分之十。

在情感分析、文本蕴涵、语义角色标注等六个基准测试上,ELMo都带来了实质性改进。这不是边际收益。这是一种新的基线。

2018年2月,Peters团队在arXiv上发布了ELMo论文。标题很朴素:《Deep Contextualized Word Representations》。没有“注意力”,没有“革命”,没有“新时代”。但论文中的一张表格说明了一切:在所有任务上,加入ELMo词表示后,模型性能曲线整齐地向上平移。

这背后的原理是什么?为什么一个在无标注文本上训练的语言模型,能够提升完全不同的任务的表现?答案藏在语言建模任务本身。当一个模型被训练来预测下一个词时,它被迫学习关于语言的一切——语法规则、词义消歧、常识推理、甚至某种程度的世界知识。要准确预测一句话中某个被遮蔽的词,模型必须知道这个词在上下文中的语义约束、语法角色和常识关联。这个过程不是显式的知识灌输,而是一种被迫学习。

语言建模的目标函数——最小化下一个词的预测误差——创造了一个强大的学习压力,迫使模型将关于语言和世界的统计规律编码进它的参数中。ELMo的价值在于,它提供了一种方法,将这些被迫学到的知识提取出来,注入到下游任务中。它不是让下游任务直接使用语言模型,而是让下游任务使用语言模型的中间表示——那些在大规模预训练中涌现出来的特征。

这个想法一旦被清晰表述,就显得几乎显而易见。但它的实现需要跨越一个关键的心理障碍:承认语言模型本身——一个看起来只是在做文字接龙的系统——可以成为语言理解的通用基础。这个障碍在2017年仍然坚固。

大多数研究者将语言模型视为一个特定任务——给定上文,预测下文。这不是理解,这是统计。语言模型生成的文本通常荒谬可笑,充满事实错误和逻辑断裂。它怎么可能是通用语言理解的起点?ELMo没有直接回答这个问题。它绕过了争论,用实验结果说话。

它证明,即使语言模型本身不完美,它在学习过程中形成的内部表征——那些隐藏层的激活值——包含了关于语言结构的丰富信息。这些信息可以被提取、迁移、并显著提升其他任务的表现。

但ELMo的局限性同样明显。它的双向性是通过拼接前向和后向LSTM实现的,而不是真正的深度融合。

前向LSTM在处理一个词时,只能看到它左边的上下文;后向LSTM只能看到右边。两者的信息在最后一层被拼接起来,但从未在中间层进行交互。这意味着,ELMo无法捕捉那些需要同时利用左右上下文才能消解的歧义。

更深层的问题在于架构选择。ELMo基于LSTM,而LSTM的序列计算本质意味着它无法充分利用大规模并行计算。训练一个深度双向LSTM语言模型需要数周时间,即使是在多个GPU上。这限制了模型的规模和训练数据的规模。

当Transformer架构已经证明了并行计算的威力时,ELMo的技术路线在出生时就带着过时的印记。但ELMo的历史意义不在这里。

它的真正贡献是验证了一个核心假设:语言模型在预测下一个词的过程中,被迫学会了关于语言和世界的深层表征,而这些知识可以被迁移。这个假设一旦被接受,整个领域的研究方向就发生了偏移。问题不再是要不要使用预训练,而是如何最好地使用预训练。

正是在这个时刻,另一群研究者从完全不同的方向逼近了同一个问题。旧金山,2017年秋天。Fast.ai的办公室里,Jeremy Howard和Sebastian Ruder正在做一个看似不相关的实验。Fast.ai是一个致力于让深度学习更易用的组织,Howard是它的创始人之一。他不是传统意义上的学术研究者。他更关心如何让模型在实际应用中工作,而不是在基准测试上刷分。

Howard和Ruder关注的问题是:如何用最少的标注数据训练一个文本分类器?这不是一个学术问题。在工业界,标注数据昂贵且稀缺。如果一个公司只有几百条标注样本,它能不能训练出一个可用的情感分析模型?传统的答案是:不能。

几百条样本甚至不足以让一个神经网络收敛。你需要至少几千条,最好几万条。

但Howard注意到一个反常现象:语言模型可以在数百万条无标注文本上训练,而且训练得越好,生成的文本越连贯。如果语言模型真的学到了关于语言的一般知识,那么这些知识应该可以帮助下游任务,尤其是在标注数据稀缺的情况下。

这个想法与ELMo的核心假设一致,但Howard和Ruder的路径不同。ELMo将预训练语言模型作为特征提取器——它生成上下文敏感的词向量,然后将这些向量输入到另一个特定任务的模型中。

Howard和Ruder提出了一种更激进的方法:直接微调预训练语言模型本身。他们的系统叫ULMFiT——Universal Language Model Fine-tuning。这个名字中的“Universal”不是修饰语。它表达了Howard的信念:一个在大规模通用文本上预训练的语言模型,可以通过微调适应任何领域的任何文本分类任务。ULMFiT的方法论分三步。

第一步:在一个大规模通用语料库上预训练一个语言模型。这里用的是AWD-LSTM——一种经过精心正则化的LSTM变体,不是Transformer。第二步:在目标领域的文本上微调这个语言模型。如果目标任务是分析医疗记录的情感,就用医疗记录微调语言模型,让它适应医学术语和文体。第三步:将微调后的语言模型转换为分类器,在标注数据上精调。

这个三阶段流程的每一阶段都有精心设计的训练技巧。在微调阶段,Howard引入了判别性学习率——不同层使用不同的学习率,浅层学习率低,深层学习率高。在分类器精调阶段,他引入了渐进式解冻——先训练最后一层,然后逐步解冻前面的层。这些技巧在今天看来是标准操作,但在2017年,它们是让微调真正工作的关键发明。

ULMFiT的结果令人震惊。在只有一百条标注样本的情况下,ULMFiT在IMDb情感分析任务上达到了与传统模型用两万条样本训练相当的性能。这不是百分之十的提升,而是一个数量级的样本效率提升。

Howard在2018年初的一次演讲中展示了这些结果。幻灯片上只有一张图:一条曲线显示,随着标注样本数量的减少,传统模型的性能急剧下降,而ULMFiT的曲线几乎保持水平。这条曲线讲述了一个清晰的故事:预训练语言模型已经学到了文本分类所需的大部分知识。标注样本不再是教模型理解语言,而只是告诉它这个特定任务需要什么样的输出。

这个发现的经济意义是巨大的。它意味着,自然语言处理不再是一个需要大量标注数据的奢侈品。中小企业、非英语语言、小众领域——所有这些因为标注数据稀缺而被深度学习革命遗忘的角落,现在都可以接入最先进的语言理解技术。

但ULMFiT与ELMo一样,有着相同的技术局限。它的底层架构是LSTM。它不能真正双向理解上下文——语言建模任务要求预测下一个词,这意味着在微调阶段,模型仍然是单向的。当一个词出现时,模型只能看到它左边的上下文。

在分类任务中,这通常足够——情感分析不需要深度的双向理解——但对于需要精确语义理解的任务,比如问答或自然语言推理,单向性是一个根本瓶颈。

更重要的是,ULMFiT的微调流程需要仔细的手动调整。判别性学习率、渐进式解冻、斜三角学习率调度——这些技巧有效,但它们不是即插即用的。每个新任务都需要实验和调参。这使得ULMFiT更像是一门手艺,而不是一个标准化流程。

但在2018年初,这些局限并不明显。明显的是,预训练范式已经抵达了一个临界点。

ELMo从词表示的角度证明了预训练的价值。ULMFiT从微调的角度证明了预训练的实用性。

两者共同绘制了一张技术蓝图:第一步,在大规模无标注文本上训练一个语言模型;第二步,将这个模型的知识迁移到下游任务。

这张蓝图暴露了一个关键矛盾。ELMo的双向性受限于LSTM的拼接方式——前向和后向LSTM各自独立运行,在顶层才拼接。这种拼接不是真正的双向理解,而是两个单向理解的叠加。

ULMFiT因为语言建模任务的约束,本质上只能是单向的。两者都无法实现真正的深度双向理解——那种在每个词的位置,同时融合左右两侧完整上下文的理解。而这个矛盾指向了一个明确的解决方案:需要一个架构,它既能像LSTM一样处理序列信息,又能像自注意力一样并行计算,还能实现真正的深度双向融合。2017年6月,这个架构已经存在了。它就是Transformer。但在当时,没有人将Transformer与预训练联系起来。Transformer是为机器翻译设计的——一个序列到序列的任务,有明确的输入和输出。预训练语言模型是另一个领域——它处理的是无标注文本,目标是学习通用语言表示。这两个世界在2017年几乎没有交集。交集发生在2018年。当ELMo和ULMFiT证明了预训练的价值,当Transformer证明了自注意力的效率,一个自然的问题浮现了:如果用一个深度双向的Transformer来预训练语言模型,会发生什么?

这个问题在2018年初同时出现在多个研究者的脑海中。在谷歌,Jacob Devlin和他的同事们开始实验用Transformer编码器替代LSTM。在OpenAI,Alec Radford和他的团队已经从另一个方向迈出了一步——他们用Transformer解码器训练了一个单向语言模型,称之为GPT。GPT的思路与ELMo和ULMFiT都不同。Radford没有试图创建双向表示。他接受语言建模的单向约束,用Transformer解码器在大规模文本上训练了一个纯粹的单向语言模型。然后,他证明这个单向模型可以通过微调适应各种下游任务。GPT在2018年6月发布,比BERT早四个月。它在多个基准测试上取得了当时的最佳结果。但GPT有一个根本局限:它是单向的。在需要完整上下文理解的任务上,单向模型的表现受限于它只能看到左侧信息。这正是ELMo试图用拼接双向LSTM解决的问题。也是ULMFiT在微调阶段避开的矛盾。

GPT接受了这个局限,用更大的模型规模和更多的训练数据来弥补。但在2018年春天,预训练的世界由ELMo和ULMFiT定义。它们使用的都是LSTM,都没有真正实现深度双向融合,都已经在技术上被Transformer超越。但它们的贡献不在于架构创新。它们破解了预训练的密码——不是如何设计更好的模型,而是如何利用海量无标注数据。这个密码的核心是一种数据套利。世界上有近乎无限的文本数据——维基百科、书籍、网页、论文——但其中绝大多数没有标注。传统的监督学习只能利用那极小一部分有标注的数据。预训练范式找到了一种方法,将无标注数据中的统计规律转化为可迁移的语言知识。它不是通过显式标注,而是通过语言建模这个自监督任务——模型在预测下一个词的过程中,被迫学习语言的结构。这套方法的精妙之处在于,语言建模的目标函数——最小化预测误差——天然地适用于任何文本。不需要人工标注。不需要设计特定任务的目标函数。只需要大量的文本和足够的算力。

这使得预训练的经济学与监督学习完全不同。监督学习的扩展受限于标注数据的获取成本——每增加一个任务,就需要新的标注。预训练的扩展只受限于无标注文本的规模和算力的成本——而这两个因素都在指数级改善。2018年春天,这个经济逻辑还没有被完全理解。大多数研究者仍然将ELMo和ULMFiT视为有趣的技巧——在特定任务上有效,但不太可能改变整个领域的工作方式。他们低估了两件事:第一,预训练模型的质量会随着数据规模和模型规模的增长而持续提升;第二,微调一个预训练模型比从头训练一个特定任务模型要便宜得多。这两点结合起来,意味着预训练范式具有一种自我强化的经济优势。随着算力变得更便宜,预训练模型可以变得更大,在更多数据上训练,从而变得更好。更好的预训练模型使得微调更有效,从而降低了使用门槛。更低的使用门槛意味着更多的应用场景,从而创造更大的需求。更大的需求反过来激励更大的预训练投入。这个飞轮在2018年还没有开始转动。但它的组件已经就位。

ELMo证明了预训练词表示的价值。ULMFiT证明了微调的可行性。Transformer提供了高效的并行架构。无标注文本几乎是无限的。GPU算力在持续增长。唯一缺失的是一个引爆点——一个将Transformer的并行效率与真正的深度双向理解结合起来的模型。2018年夏天,这个引爆点正在谷歌的办公室里成形。Jacob Devlin的团队正在训练一个模型,它使用Transformer编码器,在维基百科和图书语料库上预训练,使用一个新的目标函数——不是预测下一个词,而是随机遮蔽一些词,然后让模型根据上下文预测被遮蔽的词。这个目标函数允许模型同时利用左右两侧的信息。它绕过了语言建模的单向约束,实现了真正的深度双向融合。他们将这个模型称为BERT——Bidirectional Encoder Representations from Transformers。

当BERT在2018年10月发布时,它在十一个自然语言处理基准测试上同时刷新了记录。GLUE基准测试的分数被提升了7.6个百分点。SQuAD问答数据集上,BERT的表现首次接近人类水平。这不是渐进式改进。这是一次范式切换。但BERT不是凭空出现的。它的技术基因可以清晰地追溯到ELMo和ULMFiT。预训练-微调的整体框架来自ULMFiT。将语言模型作为通用语言理解起点的思想来自ELMo。BERT的创新在于,它找到了将Transformer与这个框架完美结合的方法——不是用Transformer解码器做单向语言建模,像GPT那样,而是用Transformer编码器做遮蔽语言建模,实现真正的深度双向理解。BERT的核心部分是一个Transformer模型,其中编码层数和自注意力头数量可变,结构与Vaswani等人(2017)的实现几乎“完全一致”。它在两个任务上进行预训练:语言模型(15%的token被掩盖,BERT需要从上下文中进行推断)和下一句预测(BERT需要预测给定的第二个句子是否是第一句的下一句)。与之前的模型不同,BERT是一种深度双向的、无监督的语言表示,且仅使用纯文本语料库进行预训练的模型。这个简洁的定义背后,是ELMo和ULMFiT用LSTM跑完的整个探索路程。

当BERT引爆世界时,ELMo和ULMFiT迅速被归入技术史的前一页。这种归类是公正的,但不完全公正。它忽略了ELMo和ULMFiT的真正贡献——不是它们使用的具体架构,而是它们破解的密码。预训练-微调范式不是BERT发明的。BERT是这一范式的完美实现者,但不是它的发现者。发现者们在2017到2018年间,用LSTM——一种即将被淘汰的架构——证明了预训练的价值。他们的工作绘制了技术蓝图,暴露了关键矛盾,并让整个领域为BERT的到来做好了准备。当BERT出现时,研究者们能在数周内理解它的意义,在数月内复现它的方法,在一年内将它应用到几乎每一个自然语言处理任务上——因为预训练的火种已经遍布原野。2018年秋天,在多伦多的一间办公室里,一群研究者正在盯着预训练模型的损失曲线。他们刚刚读完BERT的论文。屏幕上,损失值在持续下降,但速度在放缓。他们知道,按照这个趋势,要达到BERT的性能,需要更多的数据、更大的模型和更长的训练时间。

BERT的影响力迅速溢出学术界。2019年10月25日,Google搜索宣布他们已经开始在美国国内的英语搜索查询中应用BERT模型。2019年12月9日,Google搜索宣布已在70多种语言的搜索中采用BERT。到2020年10月,几乎每一个基于英语的查询都由BERT处理。这标志着预训练语言模型从论文中的基准测试,正式进入了全球数十亿用户日常使用的核心产品。

他们也知道,OpenAI的GPT团队正在做同样的事情,谷歌的BERT团队已经在准备更大的版本。预训练范式的竞赛已经开始。它不再是一场学术探索,而是一场资源竞赛。谁拥有更多的算力,谁能获取更大的训练数据,谁能承受更长的训练周期,谁就能训练出更好的模型。这场竞赛的规则在ELMo和ULMFiT的时代就已经写定——预训练的价值已经不再是一个需要证明的假设,而是一个可以持续套利的市场机会。那些最早理解这一点的团队,正在准备他们下一步的赌注。