2021年预训练语言模型及微调的最新进展
对预训练语言模型(LM)进行微调已成为在自然语言处理中进行迁移学习的事实上的标准。在过去的三年中(Ruder,2018),微调(Howard&Ruder,2018)取代了预训练embedding特征提取的使用(Peters等人,2018),而预训练语言模型则受到青睐,由于提高了样本效率和性能(Zhang和Bowman,2018),因此模型对翻译(McCann等,2018),自然语言推理(Conneau等,2017)和其他任务进行了训练。这些方法的经验成功导致开发了更大的模型(Devlin等,2019; Raffel等,2020)。实际上,最近的模型是如此之大,以至于它们可以在不进行任何参数更新的情况下达到合理的性能(Brown等人,2020年)。但是,这种零样本(zero-shot)场景的局限性(请参阅本节)使得有可能为了获得最佳性能或保持合理的效率,在使用大型预训练的LM时,微调将继续成为常规的操作方法。
在标准的转移学习场景中(请参见下文;有关一般概述,请参见此帖子),首先使用masked语言建模(MLM;Devlin等, 2019)。然后使用标准的交叉熵损失对下游任务的标记数据进行微调。
标准的预训练-微调场景(来源Ruder et al,2019)
尽管预训练需要大量计算,但微调可以相对便宜地完成。对于此类模型的实际使用而言,微调更为重要,因为单个预训练模型已下载并微调了数百万次(请参见Hugging Face模型存储库)。因此,微调是本文的重点。特别是,我将重点介绍影响或可能改变我们微调语言模型的方式的最新进展,如下所示。
本文讨论的微调方法概述
自适应微调
尽管就分布外泛化而言,经过预训练的语言模型比以前的模型更为健壮(Hendrycks等,2020),但它们仍然无法很好地处理与已有模型大不相同的数据。自适应微调是一种通过在更接近目标数据分布的数据上微调模型来弥合这种分布变化的方法。具体而言,自适应微调包括在特定于任务的微调之前,在附加数据上对模型进行微调,如下所示。重要的是,该模型已根据预训练目标进行了微调,因此自适应微调仅需要未标记的数据。
自适应微调是标准迁移学习场景的一部分。在更接近目标分布的数据上使用预训练损失(通常是masked语言建模)来训练预训练模型。
一般而言,给定目标域 Dt 由特征空间组成 X 和特征空间上的边际概率分布 P(X),其中X={X1个,…,Xñ}∈X(Pan and Yang,2009 ; Ruder,2019),自适应微调使我们能够了解两个特征空间X和目标数据的分布 P(X)。
自适应微调的变体(域,任务和语言自适应微调)已用于分别使模型适应(adapy)目标域,目标任务和目标语言的数据。Dai和Le(2015)首先展示了领域自适应微调的好处。霍华德与鲁德(2018)后来证明了通过作为ULMFiT的一部分对域内数据进行微调可以提高采样效率。他们还提出了任务自适应的微调功能,该功能可以根据任务训练数据上的预训练目标对模型进行微调。与一站式任务标签上的交叉熵相比,预训练损失为建模目标数据提供了更丰富的信息,因此任务自适应的微调比常规的微调有用。或者,可以通过多任务学习联合进行自适应和常规微调(Chronopoulou等,2019)。
域和任务自适应的微调最近已应用于最新一代的预训练模型(Logeswaran等人,2019 ; Han和Eisenstein,2019 ; Mehri等人,2019)。Gururangan等。(2020)表明适应目标领域和目标任务的数据是互补的。最近,Pfeiffer等。(2020)提出了语言自适应的微调,以使模型适应新的语言。
自适应微调模型专用于特定的数据分布,它将能够很好地建模。但是,这是以其成为通用语言模型的能力为代价的。因此,当在单个域的(可能多个)任务上的高性能很重要时,自适应微调最有用;如果预训练模型应适应大量域,则自适应微调的计算效率低下。
行为微调
自适应微调使我们可以将模型专门化为 Dt,它并没有直接告诉我们有关目标任务的任何信息。一般而言,目标任务Tt由标签空间组成 ÿ,事先分配 P(ÿ) ,其中, ÿ={ÿ1,…,ÿñ}∈ÿ,以及条件概率分布 P(ÿ|X)。或者,我们可以通过在相关任务上进行微调来教授一种模型功能,该模型功能可以很好地完成目标任务,如下所示。我们将这种场景称为行为微调,因为它着重于学习有用的行为并将其与自适应微调区分开。
预训练模型的行为微调。对与目标任务相关的任务,使用特定于任务的监督目标或自监督目标,对预训练模型进行了训练。
教授模型相关功能的一种方法是在特定于任务的微调之前,根据相关任务的相关标记数据对其进行微调(Phang et al。,2018)。这种所谓的中间任务训练最适合需要高级推理和推理能力的任务(Pruksachatkun等,2020;Phang等,2020)。带有标记数据的行为微调已被用于教授有关命名实体的模型信息(Broscheit,2019),释义(Arase和Tsujii,2019),语法(Glavaš和Vulić,2020),答案句子选择(Garg等。(2020年)和问题解答(Khashabi等人,2020年)。Aghajanyan等(2021)在大规模的多任务场景中微调约50个带标签的数据集,并观察到大量多样的任务集合对于良好的迁移性能很重要。
由于通常很难获得此类高级推理任务的监督数据,因此,我们可以在目标上进行训练,这些目标可以教授与下游任务相关的模型功能,但仍可以以自监督的方式进行学习。例如,Dou和Neubig(2021)对一个用于单词对齐的模型进行了微调,其目标是教其识别平行句子等。Sellam等(2020年)对BERT进行微调,以使用一系列句子相似度信号进行质量评估。在这两种情况下,学习信号的多样性都是重要的。
另一种有效的方法是将目标任务设计为masked语言建模的一种形式。为此,Ben-David等(2020年)用基于枢轴的(pivot-based)目标微调情感领域适应模型。其他人提出了预训练目标,可以在微调中类似地使用它们:Ram等(2021)用跨度选择任务对QA模型进行预训练,而Bansal等人(24)(2020年)通过自动生成完形填空样式的多类分类任务来预训练少量学习模型。
区分自适应和行为微调鼓励我们考虑旨在灌输到模型中的归纳偏差,以及它们是否与领域的属性 D或任务T有关。区分领域和任务的作用很重要,因为通常可以使用有限的未标记数据来学习有关领域的信息(Ramponi和Plank,2020年),而使用当前方法来获得高级自然语言理解技能通常需要数十亿的预训练数据样本(Zhang等,2020)。
但是,当我们根据预训练目标来组织任务时,任务和领域之间的区别变得更加模糊。诸如MLM之类的足够通用的预训练任务可以为学习提供有用的信息P(ÿ|X)但可能不会包含对任务很重要的所有信号。例如,经过MLM预训练的模型难以与模型求反,数字或命名实体(Rogers等人,2020年)作斗争。
同样,数据扩充的使用也纠缠了 D 和 T,因为它允许我们直接在数据中编码所需的功能。例如,通过对文本中的模型进行微调,将性别单词替换为性别相反的单词,可以使该模型对性别偏见的鲁棒性更高(Zhao等人,2018 ; Zhao等人,2019 ; Manela等人等,2021年)。
参数有效的微调
当需要在许多场景中(例如针对大量用户)对模型进行微调时,为每种情况存储微调模型的副本在计算上会非常昂贵。因此,最近的工作集中在保持大多数模型参数固定不变,并对每个任务微调少量参数。实际上,这使得可以存储大型模型的单个副本以及具有特定于任务的修改的许多小得多的文件。
该工作线的第一种方法是基于adapter(Rebuffi等,2017),即在预训练模型的各层之间插入小的瓶颈层(Houlsby等,2019 ; Stickland和Murray,2019)其参数是固定的。adapter提供通用场景,例如在训练过程中存储多个检查点以及更高级的技术,例如检查点平均(Izmailov等人,2018),快照集合(Huang等人,2017)和时间集合(Laine和Aila,2017)更加节省空间。使用adapter,通用模型可以有效地适应多种场景,例如不同的语言(Bapna和Firat,2019年)。Pfeiffer等(2020年)最近证明了adapter是模块化的,并且可以通过堆叠进行组合,从而能够独立学习专用表示。这在使用前面讨论的方法时特别有用:通过将经过训练的任务adapter堆叠在adapter之上,可以评估自适应或性能微调的adapter,而无需进行任何特定于任务的微调。如下图所示,其中,在英语(左)或Quechua语言adapter(右)上堆叠了受过命名实体识别(NER)训练的任务adapter。
在MAD-X框架的adapter块中插入的任务和语言adapter(Pfeiffer等,2020)。adapter学习封装的表示形式,并且可以相互替换,从而实现零样本迁移。
adapter在不更改基础参数的情况下修改模型的激活(activation)时,另一项工作是直接修改预训练的参数。为了说明这组方法,我们可以将微调视为学习如何扰动预训练模型的参数。形式上,为了获得微调模型的参数θ(fine-tuned)∈ Rd,其中, d 是模型的维数,我们学习特定于任务的参数向量 θ(task)∈Rd, 捕获如何更改预训练的模型参数 θ(pre-trained)∈Rd。微调后的参数是将任务相关的排列应用于预训练的参数的结果:
θ(fine-tuned)=θ(pre-trained)+θ(task)
而不是对于每个任务存储的副本θ(fine-tuned),我们可以为每项任务存储一个 θ(pre-trained)和一份θ(task)。如果我们可以更加快速的参数化,则成本更低。为此,Guo等人(https://arxiv.org/abs/2012.07463)学习θ(task)作为稀疏向量。Aghajanyan等人(2020)(https://arxiv.org/abs/2012.13255)设置θ(task)=θ(low)M ,其中, θ(low)是低维向量, M是随机线性投影(在他们的情况下是FastFood变换(Li等人,2018)(https://openreview.net/forum?id=ryup8-WCW))。
或者,我们可以仅对预训练参数的子集应用修改。计算机视觉的经典方法(Donahue等,2014: http://proceedings.mlr.press/v32/donahue14.html)仅微调模型的最后一层。让θ(pre-trained) 表示所有L层预训练参数的集合,即 θ(pre-trained)=L层θ(pre-trained)参数求和。因此,仅对最后一层进行微调等效于:
尽管这在NLP中效果不佳(Howard&Ruder,2018:https://www.aclweb.org/anthology/P18-1031/),但还有其他一些参数子集可以更有效地进行微调。例如,Ben-Zaken(2020年:https://nlp.biu.ac.il/~yogo/bitfit.pdf)仅通过微调模型的偏执参数即可获得非常好的效果。
另一系列工作是在微调期间修剪预训练模型的参数。此类方法使用不同的标准来修剪权重,例如基于关于权重重要性的零级或一阶信息(Sanh等人,2020年:https://papers.nips.cc/paper/2020/file/eae15aabaa768ae4a5993a8a4f4fa6e4-Paper.pdf)。由于当前硬件对稀疏架构的支持有限,因此目前最好采用结构稀疏的方法,即,将更新集中在一组有限的层,矩阵或向量中。例如,预训练模型的最后几层已表明在微调过程中用途有限,可以随机重新初始化(Tamkin等,2020:https://www.aclweb.org/anthology/2020.findings-emnlp.125/;Zhang等,2021:https://openreview.net/forum?id=cO1IH43yUF),甚至完全删除(Chung等,2021:https://openreview.net/forum?id=xpFFI_NtgpW)。
修剪方法着重于减少特定于任务的模型的参数总数,而其他大多数方法着重于减少可训练参数的数量,同时保留一个副本。θ(pre-trained)。后一种方法中的最新方法通常与完全微调的性能相当,同时只训练每个任务模型参数的约0.5%(Pfeiffer等,2020:https://www.aclweb.org/anthology/2020.emnlp-main.617/ ;)。
越来越多的证据表明,大型的预训练语言模型可以很好地压缩NLP任务(Li等人,2018年:https://openreview.net/forum?id=ryup8-WCW; Gordon等人,2020年:https://www.aclweb.org/anthology/2020.repl4nlp-1.18/)。这些实践证据以及它们的便利性,可用性(Pfeiffer等人,2020年:https://www.aclweb.org/anthology/2020.emnlp-demos.7/)以及最近的经验成功使这些方法在进行实验以及在实际环境中都有收益。
文本到文本的微调
迁移学习的另一个发展是从诸如BERT(Devlin等,2019:https://www.aclweb.org/anthology/N19-1423/)和RoBERTa(Liu等,2019)的掩蔽语言模型向诸如T5(Raffel等,2019)的语言的自回归模型的转变。GPT-3(Brown等人,2020年)。虽然这两种方法都可以用于为文本分配似然度分数(Salazar等,2020),但自回归LM模型更容易从中进行采样。相比之下,被masked的LM通常仅限于填空场景,例如(Petroni等,2019)。
使用masked LM进行微调的标准方法是用针对目标任务学习的随机初始化的特定于任务的head替换用于MLM的输出层(Devlin等人,2019年:https://www.aclweb.org/anthology/N19-1423/)。或者,可以通过以克隆的方式将任务重铸为MLM,来重新使用经过预训练的模型的输出层(Talmor等人,2020:https://www.aclweb.org/anthology/2020.tacl-1.48/;Schick和Schütze,2021:https://arxiv.org/abs/2001.07676)。类似地,自回归LM通常以文本到文本格式投射目标任务(McCann等,2018 :https://arxiv.org/abs/1806.08730; Raffel等,2020:https://jmlr.org/papers/v21/20-074.html ; Paolini等,2021:https://openreview.net/forum?id=US-TP-xnXI)。在这两种场景中,这些模型能够从其所有预先训练的知识中受益,并且无需从头开始学习任何新参数,从而提高了样本效率。
在极端情况下,如果不对参数进行微调,则根据预训练目标来构架目标任务,可以使用特定于任务的提示和少量任务样本来实现零镜头或少镜头学习(Brown等人,2020:https://papers.nips.cc/paper/2020/file/1457c0d6bfcb4967418bfb8ac142f64a-Paper.pdf)。但是,尽管可以进行这样的少量学习,但这并不是使用这种模型的最有效方法(Schick和Schütze,2020年:https://arxiv.org/abs/2009.07118;有关简要概述,请参阅此文章)。没有更新的学习需要一个巨大的模型,因为该模型需要完全依靠其现有知识。该模型可用的信息量也受到其上下文窗口的限制,并且显示模型的提示需要仔细设计。
检索增强(有关概述,请参阅本文:https://ruder.io/research-highlights-2020/#2-retrieval-augmentation)可用于减轻外部知识的存储负担,而符号方法可用于教授类似于任务特定的模型规则(Awasthi等人,2020年:https://openreview.net/forum?id=SkeuexBtDr)。预先训练的模型也将变得更大,更强大,并且可能会进行行为上的微调,以使其在零样本场景下表现出色。但是,如果不进行微调,模型最终适应新任务的能力将受到限制。
因此,对于大多数实际场景而言,最好的前进路径无疑是使用前面各节中描述的方法对模型参数的全部或子集进行微调。 此外,我们将越来越多地看到预训练模型的生成能力。虽然当前的方法通常集中于修改模型的自然语言输入,例如通过自动提示设计(Schick和Schütze,2020:https://arxiv.org/abs/2009.07118),但这是调节此类自然输出的最有效方法。模型可能会直接作用于其隐藏的表示上(Dathathri等人,2020:https://openreview.net/forum?id=H1edEyBKDS;请参阅Lillian Weng的文章 以了解可控文本生成方法的概述:https://lilianweng.github.io/lil-log/2021/01/02/controllable-neural-text-generation.html)。
减轻微调的不稳定性
微调预训练模型的一个实际问题是,不同训练之间的性能可能会发生巨大变化,尤其是在小型数据集上(Phang等人,2018:https://arxiv.org/abs/1811.01088)。Dodge等人(2020年:https://arxiv.org/abs/2002.06305)发现,输出层的权重初始化和训练数据的顺序都会导致性能变化。由于不稳定通常在训练的早期就很明显,因此他们建议在训练20-30%之后尽早停止最没有希望的训练。Mosbach等(2021:https://openreview.net/forum?id=nzpLWnVAyah)另外建议在调整BERT时使用较小的学习率并增加epoch数。
最近的许多方法试图通过依靠基于对抗或信任区域的方法来减轻微调过程中的不稳定性(Zhu等人,2019:https://openreview.net/forum?id=BygzbyHFvB;Jiang等人,2020:https://www.aclweb.org/anthology/2020.acl-main.197/;Aghajanyan等人,2021:https://openreview.net/forum?id=OQ08SN70M1V)。此类方法通常使用限制更新步骤之间差异的正则化项来增加微调损耗。
根据上一节的内容,我们可以提出另一种建议以最小化微调过程中的不稳定性:通过将目标任务以LM的形式进行框架或使用行为微调,避免在小型数据集的目标任务上使用随机初始化的输出层在特定于任务的微调之前对输出层进行微调。因此,文本到文本模型对于在小型数据集上进行微调更为健壮,但它们在“少样本”场景中会遇到不稳定性,并且对即时和少样本很敏感(Zhao等人,2021年:https://arxiv.org/abs/2102.09690)。
总体而言,随着模型越来越多地用于具有较少样本的具有挑战性的任务,因此开发对可能的变化具有鲁棒性并且可以可靠地进行微调 的方法至关重要。