返回介绍

数学基础

统计学习

深度学习

工具

Scala

二十九、Muppet [2021]

发布于 2023-07-17 23:38:25 字数 23767 浏览 0 评论 0 收藏 0

  1. 最近语言模型预训练的成功是引人注目的,至少部分是由于使用自我监督而没有任何人工标记的数据。然而,对于许多任务,我们已经有了相关问题的训练样本,我们应该能够利用这些样本。最近的工作表明,多任务 multi-task 和多阶段 multi-stage 的微调方案有收益,但很难知道哪些中间任务会有最好的迁移。在论文 《Muppet: Massive Multi-task Representations with Pre-Finetuning》 中,作者展示了多任务监督调优 multi-task supervised tuning ,如果在足够大的规模下用许多不同的任务进行调优,可以成为任务无感知 task-agnostic 的预训练的有效第二阶段,消除了预先选择最佳中间任务的需要。

    更具体而言,除了学习语言任务的标准 pre-training/fine-tuning 方法外,作者引入了一个新的中间阶段,即预微调 pre-finetuning 。预微调涉及一个大规模的多任务学习步骤( 4.8M 个总的训练样本),在大约 50 个分类、摘要、问答、以及常识推理等任务上进行。作者相信,在任务数量和任务类型方面,他们是第一个研究这种规模的多任务学习。作者特别表明,标准的多任务方案可能是不稳定的,而且往往不能学习高质量的 representation 。然而,作者引入了一种新的训练方案,该方案使用 loss scalingtask-heterogeneous batch ,从而使 gradient steps 在多个不同的竞争任务中得到更加均匀地平衡,大大改善了训练的稳定性和整体性能。作者把他们的预微调模型称为 Massive Multi-task RePresentation with PrE-fineTuning: MUPPET

    广泛的实验表明:将预微调纳入 RoBERTa 模型和 BART 模型会产生一致的改进,而无需指定具体的 intermediate transfer task 。这些增益在低资源任务下尤其强大,因为在低资源任务下,用于微调的标记数据相对较少。论文还研究了为什么预微调比以前的多任务方案更出色。作者首先比较了不同的优化技术来稳定训练,发现使用 task-heterogeneous batchtask-rebalancing loss scaling 很重要。论文还表明,规模是有效的多任务学习的关键。作者从经验上看到了任务数量的临界点(通常超过 15 个):较少的任务会使 representation 退化,而在论文能够扩展的范围内,拥有更多任务似乎可以线性地提高性能。

    论文的贡献包括:

    • 论文表明:可以通过一个额外的阶段进一步改善预训练的 representation ,作者称之为预微调 pre-finetuning ,它利用了大规模的多任务学习。作者展示了标准的 pre-trained representation ,当通过预微调进一步 refine 后,可以持续改善下游任务的性能。

    • 论文引入了一种新的多任务训练方案,以实现有效的大规模的 learning ,该方案使用了 loss scalingtask-heterogeneous batch

    • 论文探讨了规模对多任务学习的影响,并展示了多任务训练中存在的临界点,超过这个临界点,增加任务的数量就会改善 generalizable representation

    • 论文围绕 standard pre-trained representation 的数据效率、以及它们各自的预微调的 representation 进行了研究。论文表明, pre-finetuned model 在微调时需要的数据更少。

  2. 相关工作:在最近的文献中,多任务学习 multi-task learning 是一个越来越活跃的话题。最近的进展(如 MT-DNN )显示:通过利用多任务学习,我们可以在传统预训练的基础上进一步提高几个 language benchmark 的性能。然而,T5 显示:在更大的模型之上加入多任务学习,并没有改善标准的 pre-training/finetuning 。因此,人们还没有完全了解多任务学习在不同的预训练方法中的效果。

    最近 《Unifiedqa: Crossing format boundaries with a single qa system》 利用跨数据集的迁移学习,从而展示了在一系列QA 任务上做多任务学习的训练可以提高 T5 的性能。与我们的方法不同,他们将所有的数据转换为 seq2seq 格式、较小的Multi Task Learning: MTL 规模、有不同的 batching strategy 、并且只聚焦于改善 QA 任务。我们的工作表明:即使是看起来非常不同的数据集,例如,摘要和 extractive QA ,也可以通过改善模型的 representation 来相互帮助。

    我们的工作旨在探索更大规模的多任务学习。通过纳入更多的任务,我们表明我们可以持续地改善几个领域的 language benchmark 。与 T5 相反的是,我们表明纳入多任务学习确实能带来更好的 representation

29.1 模型

  1. 在多任务学习中,平衡来自不同任务的 loss 可能是一个挑战:upsampling 可能导致低资源任务 low resource task 的过拟合,downsampling 可能导致特定任务的不当学习 improper learning 。当任务规模更大时,这种困难尤其明显。这里介绍了我们的预微调方法,通过引入新的优化、loss scaling 和任务采样方案从而更好地平衡每个 mini-batch 的更新,导致更稳定和更准确的多任务训练。

  2. 多样化的任务:为了学习通用的 language representation ,我们包括许多领域的各种任务。我们选择了四个不同领域的语言任务:分类classification 、 常识推理commonsense reasoning 、 机器阅读理解machine reading comprehension 、摘要summarization。在下表中,我们显示了每个任务类型的细分,以及在预微调期间每个任务的样本数量。总的来说,我们的多任务setup4 个系列任务中学习了超过 4.8M 个监督样本。

    所有任务如下:

    
    
    xxxxxxxxxx
    CoLA , SST-2 , MRPC , QQP , MNLI , QNLI , RTE , WNLI , SuperGLUE , Bool Q , MultiRC , WIC , WSC , CB , COPA , AG News , IMDB , MultiNLI , SNLI , HANS , Rotten Tomatoes , Yelp Polarity , Eraser Multi RC , Wiki QA , Trec , SciTail , CNN Daily Mail , Billsum , XSUM , Aeslc , Multinews , Math QA , Openbook QA , SWAG , HellaSWAG , RACE , CommonSense QA , Cosmos QA , AI2 ARC - Easy , AI2 ARC - Challenge , SCIQ , SQUAD , NQ , DROP , RECORD , Hotpot , TriviaQA

  3. 标准的损失函数:为了在多个数据集上进行训练,我们的模型包含 task-specific head ,每个 head 都优化 task-specific loss 。下表总结了损失函数。每个 loss 都用接下来要描述的 loss scaling 进行缩放。在 loss scaling 之后,每个任务的梯度在进行模型更新步骤之前被平均。

  4. 优化:我们展示了两种针对大规模学习 multi-task representation 的优化策略:跨任务累积梯度(Heterogeneous Batch)、以及利用 Better Finetuning

    • 跨任务累积梯度:我们的模型试图优化的不是一个单一的目标,而是几个可能相互竞争的目标,以便在模型训练期间为几个任务创建一个 unified representation 。在梯度下降过程中,沿着单个任务的梯度移动可能不是模型学习跨任务的单个 unified representation 的最佳方向。为了克服这个问题,我们确保我们的模型优化的每个 batch 都由几个任务组成。每个 worker 从我们的任务集合中随机采样一个 batch ,然后计算梯度,并累积到 final update

      ExT5 对所有任务使用 T5objective,因此可以避免相互竞争的优化目标。

      根据经验,我们使用 64GPU 进行预微调,导致每个 batch64sampled task 的梯度组成。在实验部分中,我们展示了这样的策略是如何让我们的模型对下游任务的微调有一个更好的 representation 的。

      即,每个 GPU 对应一个任务,然后所有任务的梯度累加起来。

    • Better Finetuning :在预微调中,我们不是从头开始训练,而是用从自监督的预训练中学到的 representation 来初始化我们的模型。这可以继承 pre-trained representation 中的知识,加快训练速度。《On the stability of fine-tuning bert: Misconceptions, explanations, and strong baselines》 表明:pre-trained model 的标准微调可能是不稳定的,这在我们的案例中可能会加剧,因为我们同时在一组不同的任务上进行训练。因此,我们采用了 R3F/R4F 方法(《Better fine-tuning by reducing representational collapse》)来解决这个问题。

      具体而言,R3F/R4F 包括一个额外的损失项,确保输入空间的小扰动导致 similar representation ,这可以用来在预微调期间学习更鲁棒的 representation

      R3F 添加了一个正则化项:

      (2)λ×KL(output(x),output(x+z))

      其中:x$ x $ 为任务的输入;z$ z $ 为满足N(0,σ2I)$ \mathcal N(0,\sigma^2\mathbf I) $ 的噪声;output()$ \text{output}(\cdot) $ 为该 head 对应的输出分布;KL(,)$ \text{KL}(\cdot,\cdot) $ 为 KL 散度。

      这可以理解为一种数据增强方法。

      在早期的实验中,我们发现 R3F 是让 MUPPETBART 起作用的关键。所有其他的微调和预微调都是用标准的 SGD 完成的。

  5. Loss Scalingloss scaling 方法引入了对每个样本的损失的乘法加权。已经提出了各种 loss scaling 技术,从 inverse training loss 的动态缩放、到各自数据集中样本数量的简单缩放。

    由于预微调优化了几种不同类型的任务和数据集,每种任务和数据集都有自己的输出空间,因此 loss scaling 成为确保稳定训练的关键。在最初的实验中,我们尝试了各种形式的 loss scaling ,但最有效的是我们下面描述的新方法。

    Li(xi,yi;θ)$ \mathcal L_i\left(\mathbf{\vec x}_i, y_i;\theta\right) $ 为数据点 data-pointi$ i $ 的损失,模型参数为θ$ \theta $ 。注意,损失函数取决于任务的类型(常识推理任务的损失与二分类任务的损失不同)。此外,令n:NN$ n:\mathbb N\rightarrow \mathbb N $ 为一个函数,对于每个数据点,它返回L$ \mathcal L $ 所作用的 prediction 的数量。例如,对于二分类任务,n$ n $ 将返回 2 ;而对于生成任务,n$ n $ 将返回 vocabulary size (因为我们对生成的每个 token 的损失进行平均)。 我们对数据点损失进行缩放:

    (3)Liscaled(xi,yi;θ)=Li(xi,yi;θ)logn(i)

    我们发现,这种静态缩放的效果非常好,在早期实验中超过了其他 loss scaling 方法。

    对于生成任务在每个位置的输出是 softmax 得到的一个分布。

  6. 采样:在多任务 setup 中平衡各种任务的另一种方法是对较小的数据集进行 up-sample ,对较大的数据集进行 down-sample ,从而实现数据集大小之间的 uniformity

    现有的多任务学习中的数据集采样方法的结果是矛盾的,但最近的工作表明,它对 pre-trained representation 的多任务学习效果不好。例如,T5 表明,所有各种形式的采样都没有改善 overusing 数据集的 natural size

    我们还发现,在最初的实验中,对数据集进行采样始终不利于在 pre-trained representation 上的多任务学习。具体而言,我们看到了难以处理的过拟合问题和稳定性问题。因此,我们选择在所有的实验中保持数据集的自然分布(即,没有采样)。

  7. 实验配置:我们选择了 RoBERTaBART 作为我们最初的预训练模型来进一步预微调。对于每个任务类型,我们使用不同的预测方案:

    • 每个 Sentence Prediction 数据集都得到一个独立的 classification head

    • 对于 CommonsenseMRC,我们为每个任务利用一个单独的 unified head 。因为实验中我们发现:为每个独立的 CommonsenseMRC 数据集使用不同的 head 会导致严重的过拟合。

    • 对于 Summarization,我们没有添加任何参数,而是按原样使用 BART decoderoutput layer

    对于这两个模型,我们对 Base modelLarge model 都进行了预微调程序。每个模型都用 64GPU 进行训练。训练到收敛的时间从 1 天到 4 天不等,取决于配置。

    超参数如下:

29.2 实验

29.2.1 预微调的实验结果

  1. 我们首先表明:预微调改善了预训练模型的representation 。为此,我们在一组任务上对我们的 pre-finetuned model 进行了微调。

    对于每个单独的下游任务,我们使用固定的超参数搜索来优化简单的超参数,如学习率、Adam、和 dropout 。我们在两个 Table 中展示了我们的结果:

    • Table 3 显示了我们在 GLUE benchmark 以及两个 MRC 任务(SQuADReCoRD )上的结果。

    • Table 4 报告了其他的 Sentence Prediction 任务以及 Commonsense 任务的结果。

    我们还包括 MT-DNNELECTRARoBERTa 模型的结果。对于 Summarization 任务,我们表明:我们预微调的 BART 模型优于所有其他摘要任务的 baseline 。这两个 table 都报告了 pre-finetuning 阶段的可用数据集。

    鉴于我们的 pre-finetuned model 现在通过使用 classification head 对预微调任务有了了解,我们在微调期间可以选择是否使用这些 head 。一般而言,我们发现重用 classification head 对小数据集的 MRCCommonsense 、以及 Sentence Prediction 任务是有益的。

    总的来说,通过预微调进一步 refinepre-trained representation 优于标准的 pre-trained representation

    • 我们在较大的数据集上看到了更小的增益,很可能是因为如果微调的数据集很大,我们就不需要事先 refine representation

    • 在较小的数据集上,我们看到了巨大的收益。例如:

      • RTE 上预微调的 RoBERTa-BASE 模型提高了接近 9 分,与 RoBERTa-Large 的准确性相媲美。

      • 而预微调的 RoBERTa-Large 模型在 RTE 上获得了新的 SOTA ,与比它大一个数量级的模型相匹敌。

    我们不只是在 sentence prediction 任务上有所提高,而是在我们测量的每一组任务上都有所提高。例如,我们在 HellaSwag 数据集上达到了新的SOTA,以前的 SOTA 是通过利用一个新的微调方法实现的。我们的方法没有增加参数数量或任何复杂度,但在为下游任务来 refine feature 方面相当成功。

  2. 微调不在 Pre-Finetuning Domain 的任务:我们还报告了未包含在 pre-finetuning data 中的任务的性能。为此,我们在一组任务上对我们的模型进行了微调,这些任务包括:

    • 用于分类任务的 ANLIHyperpartisan

    • 用于摘要任务的 ArxivPubMed

    • 用于 structured prediction 任务的、来自 Penn Treebank 数据集的 ChunkingConstituency Parsing、以及 Part-Of-Speech tagging

    结果如 Table 5Table 6 所示。可以看到:

    • 在不同的任务类型和数据集上,我们的模型的 MUPPET 变体的表现一直优于 baseline

      注意,这里的 MUPPET 变体指的是 base 模型(如 RoBERTa)的 MUPPET 变体。

    • 作为一个特例,我们对 RoBERTaMUPPET 变体在臭名昭著的 ANLI 数据集上进行了深入分析,并看到了同样的 pattern

    • pre-finetuned model 的表现一直优于它们的 base 模型。

      RoBERTa-B + MUPPET 要比 base 模型更差。

29.2.2 理解大规模的多任务

  1. scale 的重要性:我们想探讨的第一个方向是多任务学习的规模。以前的工作(如 T5MT-DNN)聚焦在大约十几个数据集的多任务学习的规模上。就我们所知,我们的论文拥有迄今为止最大的多任务学习的 setup 。因此,我们有兴趣从经验上探索扩大数据集的数量对多任务学习期间学到的 representation 的影响。

    我们用不同数量的数据集来预微调了一组 RoBERTa-Base 模型。我们训练七个模型,其中前六个包含 10 ~ 40 个数据集,而且第i$ i $ 个模型所使用的数据集是第i1$ i-1 $ 个模型的超集。最后一个模型是在所有数据集上完全训练的。具体而言,假设模型A$ A $ 使用了m$ m $ 个数据集,模型B$ B $ 使用了n$ n $ 个数据集,如果m>n$ m \gt n $ ,那么模型 A 将包含用于预微调模型 B 的所有数据集。

    对于每个 pre-finetuned model,我们对五个数据集(STS-B, BoolQ, RACE, SQuAD, MNLI )进行微调,并将结果绘制在下图中。我们在第一次预微调中包括这五个数据集(即,10 个数据集的版本),以消除在后期添加它们所产生的 bias 。我们看到几个有趣的模式:

    • 首先,对于个别任务(如 RTE ),增加预微调规模单调地提高了性能。这与其他论文的观点一致,即首先在 MNLI 上进行训练,然后在 RTE 上进行微调。

    • 其次,对于其他数据集,我们看到在小于 15 个数据集的情况下进行多任务学习,不利于下游任务的微调。这也与其他的实验观察一致,即 T5 报告说:多任务学习加微调,并没有改善仅仅微调的效果。

    • 然而,当我们增加任务的数量超过某个临界点时,我们 pre-trained representation 似乎变得更加通用。此外,尽管取决于数据集,这个临界点大致在 10 ~ 25 个任务之间。

      这表明:以前观察到的多任务学习的局限性并不是根本性的,而是可以归因于缺乏足够的规模。

  2. Heterogenous Batch 的重要性:学习可泛化的 representation 的另一个关键因素是如何实现多任务学习,特别是对 batch 的选择。为了更好地量化这一趋势,我们试验了三种平衡方案:dataset homogenous, batch homogenous, batch heterogenous

    • dataset homogenous:从数据集中依次选择 batch 。所以我们首先在数据集 A 上训练,然后在数据集 B 上训练,等等。

    • batch homogenous:选择只包含来自同一任务的数据的 batch 。因此,所有梯度都来自同一个数据集。因此在训练期间,首先在全部数据集中随机选择一个数据集,然后再随机选择该数据集的一个 batch

    • batch heterogeneous:单个 update 包含来自多个不同数据集的 batch,跨不同的任务。我们首先创建 homogenous sub-batch ,计算每个 GPU 每个 sub-batch 的损失,然后在 GPU 之间进行聚合。因此,单次的梯度更新包含各种数据集和各种任务。

    为了分析 heterogeneous batch 的重要性,我们使用上述三种数据选择方法在 35 个随机选择的任务上训练一个 RoBERTa-Base 模型。然后我们在上一节提到的同样的五个数据集(STS-B, BoolQ, RACE, SQuAD, MNLI )上对这三个模型进行微调。

    实验结果如下图所示。可以看到:batching strategy 对于有效的多任务学习很重要。我们的发现也与(《Better fine-tuning by reducing representational collapse》)一致,后者认为数据集的 sequential training 会恶化 generalizable representation

  3. 低资源实验:前文提到,数据集规模较小的数据集往往能从多任务学习中得到更多的改善。为了验证这一假设,我们研究了两个因素:预微调的规模、以及微调的规模(微调数据集的大小)。

    我们选择三个没有在预微调中使用的数据集,从而作为微调数据集。我们还为每个微调数据集选择九个 partition ,每个 partition 是该数据集的 10% ~ 100% 之间均匀随机采样得到的。

    然后,我们用前面实验中已经得到的每个 pre-finetuning checkpoint 来微调每个 low-resource split 。我们绘制微调结果的热力图,如下所示。可以看到:出现了多种模式。

    • 首先,随着我们增加多任务学习的规模(纵轴),可以得到更好的 representation 从而用于下游任务的微调。

    • 此外,在更大的规模上,pre-finetuned model 比标准的 pre-trained model 的数据效率高得多。

      具体到下图中的 34/40 的预微调规模,我们看到我们比基本的 RoBERTa 模型(第 0 行)以更少的资源达到了更高的验证集准确率。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文