论文:https://arxiv.org/pdf/1910.10683.pdf
目录
0 Abstract
1 Introduction
2 Setup
2.1 Model
2.2 The Colossal Clean Crawled Corpus
2.3 Downstream Tasks
2.4 Input and Output Format
3. Experiments
3.1 Baseline
3.1.1 Model
3.1.2 Training
3.1.3 Vocabulary
3.1.4 Unsupervised Objective
3.1.5 Baseline Performance
3.2 Architectures
3.2.1 Model structures
3.2.2 Comparing different model structures
3.2.3 Objectives
3.2.4 Results
3.3 Unsupervised objectives
3.4 Pre-training Data set
3.4.1 Unlabeled Data Sets
3.5 Training Strategy
3.5.1 Fine-tuning Methods
3.5.2 Multi-task learning
3.5.3 Combining multi-task learning with fine-tuning
3.6 Scaling
4. Reflflection
参考
在迁移学习中,模型首先在数据丰富的任务上进行预训练,然后在下游任务上进行微调。
在本文中,我们通过引入一个统一的框架,将所有基于文本的语言问题转换为文本到文本的格式,来探索自然语言处理中迁移学习技术的前景。
我们的系统研究比较了几十个语言理解任务的预训练目标、架构、未标记数据集、迁移方法和其他因素。
工作的基本思想是将每一个文本处理问题都视为一个“文本到文本”的问题,即把文本作为输入,产生新的文本作为输出。这种方法受到了以前NLP任务统一框架的启发,包括将所有文本问题转换为问答(McCann et al.,2018),语言建模(Radford et al.,2019),或跨度提取Keskar et al. (2019b)任务。
文本到文本框架允许我们将相同的模型、目标、训练程序和解码过程直接应用到我们考虑的每一项任务中。我们通过评估各种基于英语的自然语言处理问题的表现来利用这种灵活性,包括问答、文档概括和情感分类,仅举几个例子。通过这种统一的方法,我们可以比较不同迁移学习目标、未标记数据集和其他因素的有效性,同时通过扩展模型和数据集来探索NLP迁移学习的限制。
目标不是提出新的方法,而是对该领域的现状提供一个全面的视角。因此,我们的工作主要包括对现有技术的调查、探索和经验比较。我们还探索了当前方法的局限性,方法是扩大我们系统研究(训练模型高达110亿个参数)的洞察力,以在我们考虑的许多任务中获得最先进的结果。为了进行这种规模的实验,我们引入了“庞大的干净爬行语料库”(C4),这是一个由从网络上搜集的数百千兆字节的干净英语文本组成的数据集。认识到迁移学习的主要效用是在数据稀缺的环境中利用预训练模型的可能性,我们发布了我们的代码、数据集和预训练模型。
在展示本文大规模实证研究的结果之前,先回顾一下我们的结果所需的必要背景主题,包括transformer模型架构和评估的下游任务。
还介绍了个问题作为文本到文本任务处理的方法,并描述了“庞大干净的爬行语料库”(C4),这是我们作为未标记文本数据的来源创建的常见的基于爬行的数据集。本文将模型和框架称为“Text-to-Text Transfer Transformer”(T5)。
除了下面提到的细节和在第3.2节中探索的变体之外,本模型并没有明显偏离transformer架构,
transformer的主要构件是self-attention,self-attention是attention的一种变体,它通过用序列其余部分的加权平均值替换每个元素来处理序列。最初的 Transformer 由encoder-decoder架构组成,旨在用于序列到序列的任务。 最近,使用由单个 Transformer 层堆栈组成的模型也变得很普遍,这些模型具有不同形式的自注意力,用于生成适用于语言建模或分类和跨度预测任务的架构。在 3.2 节中经验性地探索了这些架构变体。
本文的编码器-解码器 Transformer 实现非常接近其最初提出的形式。
首先,将输入的token序列映射到嵌入序列,然后将其传递给编码器。编码器由一堆“块(blocks)”组成,每个“块”都包含两个子组件:一个自注意力层,然后是一个小型前馈网络。层标准化应用于每个子组件的输入。我们使用简化版本的层归一化,其中仅重新调整激活值,不应用附加偏差。在层归一化之后,残差跳过连接将每个子组件的输入添加到其输出中。 Dropout 应用于前馈网络、skip connection、注意力权重以及整个堆栈的输入和输出。
解码器在结构上与编码器相似,只是它在每个关注编码器输出的自注意力层之后包括一个标准的注意力机制。解码器中的自注意力机制还使用了一种自回归或因果自注意力(causal self-attention)的形式,它只允许模型关注过去的输出。最终解码器块的输出被馈送到具有 softmax 输出的密集层,其权重与输入嵌入矩阵共享。 Transformer 中的所有注意力机制都被分成独立的“头(heads)”,其输出在进一步处理之前被连接起来。
由于自注意是与顺序无关的(即它是一个对集合的操作),因此通常会向Transformer提供一个显式的位置信号。虽然原始Transformer使用正弦位置信号或学习位置嵌入,但最近使用相对位置嵌入变得更加普遍。相对位置嵌入不是对每个位置使用固定的嵌入,而是根据自我注意机制中比较的“键”和“查询”之间的偏移量产生不同的学习嵌入。我们使用一种简化的位置嵌入形式,其中每个“embedding”只是一个标量,添加到用于计算注意力权重的相应的logit中。为了提高效率,我们还在模型中的所有层之间共享位置嵌入参数,尽管在给定层内,每个注意力头使用不同的学习位置嵌入。通常,学习固定数量的嵌入,每个嵌入对应于一系列可能的键查询偏移量。在这项工作中,我们为所有模型使用了32个嵌入,其范围以对数方式增大到偏量 128,超过该偏移量我们将所有相对位置分配给相同的嵌入。请注意,给定层对超过128 个标记的相对位置不敏感,但后续层可以通过组合来自前一层的局部信息来构建对更大偏移量的敏感性。
例如:机器翻译:“That is good.” ,英翻德
在输入句子前加上“translate English to German: ”的 prefix ,
我们通过采用合理的baseline(在第3.1节中描述)并一次更改设置的一个方面来系统地研究这些贡献;我们对模型架构(第3.2节),无监督的目标(第3.3节)、预训练数据集(第3.4节)、转移方法(第3.5节),以及缩放(第3.6节)进行empirical comparison,在本节的高潮部分,我们将研究中的见解与scale相结合,以在我们考虑的许多任务中获得最先进state-of-the-art的结果(第3.7节)。
预训练时使用 inverse square root 调整学习率:, n 为当前训练迭代数, k 为 warm-up 的步骤数(所有实验都设为 ),即前 次实验设置了 0.01 的恒定学习率,之后以指数形式衰减学习率。虽然使用三角学习率 triangular learning ratet结果更好,但需要提前知道训练步骤的总数。由于在某些实验中我们将改变训练步骤的数量,因此我们选择了更通用的inverse square root。
模型在所有任务上微调了 步。选择此值是为了在高资源任务与低资源任务之间进行权衡,前者需要更多的微调步骤,后者很快会过拟合。在微调期间,每批个令牌 不变并使用0.001的恒定学习率,每 5,000 个步骤保存一个检查点,并在模型检查点上报告验证集最佳结果。对于在多个任务上进行了微调的模型,我们分别为每个任务选择最佳检查点。对于第 3.7 节中的实验以外的所有实验,我们在验证集中报告结果,以避免在测试集中执行模型选择。
T5的预训练包含无监督和有监督两部分。
无监督部分使用的是Google构建的近800G的语料(论文称之为C4),而训练目标则跟BERT类似,只不过改成了Seq2Seq版本,我们可以将它看成一个高级版的完形填空问题:
输入:明月几时有,[M0]问青天,不知[M1],今夕是何年。我欲[M2]归去,唯恐琼楼玉宇,高处[M3];起舞[M4]清影,何似在人间。
输出:[M0]把酒[M1]天上宫阙[M2]乘风[M3]不胜寒[M4]弄
而有监督部分,则是收集了常见的NLP监督任务数据,并也统一转化为SeqSeq任务来训练。比如情感分类可以这样转化:
输入:识别该句子的情感倾向:这趟北京之旅我感觉很不错。
输出:正面
主题分类可以这样转化:
输入:面是一则什么新闻?八个月了,终于又能在赛场上看到女排姑娘们了。
输出:体育
阅读理解可以这样转化:
输入:阅读理解:特朗普与拜登共同竞选下一任美国总统。根据上述信息回答问题:特朗普是哪国人?
输出:美国
Attention masks:
从mask的角度来看,有三种:
首先作者们先对预训练模型中的多种模型架构(Transformer)进行了比对,最主要的模型架构可以分成下面三种。
上面这些模型架构都是 Transformer 构成,之所以有这些变换,主要是对其中注意力机制的 Mask 操作。
为了提供合理的比较方法,我们考虑了编码器-解码器模型的多种配置。我们将 BERTBASE 大小的层块中的层数和参数分别称为 L 和 P 。我们将使用 M 来指代L + L层编码器-解码器模型或仅L层的解码器模型处理给定输入目标对所需的FLOP数量。总的来说,我们将进行比较:
基本语言建模目标以及第 3.1.4 节中描述的降噪目标作为无监督的目标。 对于在进行预测之前先提取前缀的模型(编码器-解码器模型和前缀LM),我们从未标记的数据集中采样了一段文本,并选择一个随机点将其分为前缀和目标部分。 对于标准语言模型,我们训练模型以预测从开始到结束的整个跨度。 我们的无监督降噪目标是为 text-to-text 模型设计的; 为了使其适应语言模型,我们将输入和目标连接起来,如3.2.1节所述。
不同模型的对比结果如 Table 2所示:
与语言建模目标相比,使用降噪目标始终可以带来更好的下游任务性能。在以下部分中,我们将对无监督目标进行更详细的探讨。
本小节探索无监督目标过程中所做的选择,这是其流程图。第一步,对高层次方法(自监督的预训练方法)进行对比,选出性能最好的一个:Bert-style;第二步,对文本一部分进行破坏时的策略,replace span(小段替换)法效果最好;第三步,破坏比例,最后选用破坏15%;第四步,破坏长度选定,Replace Span 需要决定对大概多长的小段进行破坏,于是对不同长度进行探索,最后选择3 的破坏时小段长度。
本文对比的无监督目标函数有:prefix language modeling、masked language modeling (MLM)和deshuffling objective 这三种。
第一个方面,高层次方法(自监督的预训练方法)对比,总共三种方式。
这三种目标函数的示例如 Table 3 中前3行所示:
其中发现 Bert-style 最好,进入下一轮。
第二方面,对文本一部分进行破坏时的策略,也分三种方法。
此轮获胜的是 Replace Span 法,类似做法如 SpanBERT 也证明了有效性。
进入下一轮。
第三方面,到底该对文本百分之多少进行破坏呢,挑了 4 个值,10%,15%,25%,50%,最后发现 BERT 的 15% 就很 ok了。
接着进入更细节,第四方面,因为 Replace Span 需要决定对大概多长的小段进行破坏,于是对不同长度进行探索,2,3,5,10 这四个值,对比性能结果,最终模型选用的是长度为3,因为长度短,训练速度越快。
终于获得了完整的 T5 模型,还有它的训练方法。
到此基本上 T5 预训练就大致说完了。
在以下数据集上进行预训练后比较基线模型的性能:
从C4里面分出各种类型的数据集,单独训练 T5 模型,之后看在下游任务的表现,发现一些情况领域内的预训练数据可以增强下游任务。而 C4 完整数据集因为数据太多太杂,可能反而不如这种领域内较少数据集。
表 8 显示了每个数据集预训练后获得的结果。明显的收获是,C4中删除启发式过滤会降低性能,并使未过滤的变体在每个任务中表现最差。
从 C4 中抽出不同量数据做实验,发现数据少时,模型会记住数据所以之后表现会比较差。
最终的下游性能如表9所示,随着数据集大小缩小而下降。我们怀疑这可能是由于该模型开始记住预训练数据集。为了测量这是否成立,我们在图6中绘制了每种数据集大小的训练损失。的确,随着预训练数据集的大小缩小,该模型获得的训练损失明显较小,这表明可能存在记忆。
针对 MTDNN 给 T5 做了一系列类似训练,在一堆监督和非监督数据上进行预训练。结果发现,只要混合训练比例调得OK,和前面说的非监督预训练性能差不多。
微调模型的所有参数可能会导致结果欠佳,我们专注于两种替代的微调方法,这些方法仅更新编码器-解码器模型的参数的子集。
表10 表明,adapter layers 可能是一种在较少参数上进行微调的有前途的技术,只要将维度适当地缩放到任务大小即可。
所谓多任务学习是同时在多个任务上训练一个模型,其目的是训练一个能同时处理多个任务的模型,即该模型中的绝大数参数在多个任务之间是共享的。本文对此目标稍稍宽松,转而研究对多个任务同时进行训练的方法,以便最终生成对每个单独任务都表现良好的独立参数。所以,本文这里是简化版的多任务学习,并不热衷于多任务之间的参数共享,而是更关注于用同一个时间训练多个任务。例如,我们或许可以在多个任务上训练一个模型,但是应用到具体任务时候,可以针对不同的任务选用不同的checkpoint。这就放宽了多任务学习框架,与当下我们所考虑的 预训练-微调 的方法 相比, 它的基础才显得牢固。还注意到,在本文统一的text-to-text框架中,“多任务学习”简单地对应于将数据集混合在一起。相比之下,此前NLP中的多任务学习大多数都是为每个任务添加特定的分类网络或使用不同的损失函数。
那么多任务中,一个非常重要的问题来了,每个任务需要用多少数据进行训练?本文探索了三种方案:Examples-proportional mixing、Temperature-scaled mixing 和 Equal mixing。
实验发现,多任务训练一般是无法于预训练-微调方法相媲美的。
进一步研究了如何缩小多任务训练和 预训练-微调 的差距。研究了以下三种方案:
(1)examples-proportional mixture 数据的预训练,再下游任务微调。这有助于我们衡量,在训练前将监督任务与非监督目标放在一起,是否会让模型更早地接触到下游任务。
(2)相同 examples-proportional mixture 数据上预训练模型,但是在预训练混合的下游任务中丢弃一个。
(3)对于全部的有监督任务的数据以examples-proportional mixture 进行预训练。
从中可以看出,多任务预训练+微调 的方式可以取得于baseline近似的结果。这表明多任务学习之后,再进行微调确实有助于缓解不同混合比例之间的一些权衡。另外,抛弃一个任务(“leave-one-out”)的训练结果仅仅轻微下降,说明模型在多个任务上训练确实可以应用于新的任务上。多任务预训练可能不会导致剧烈的任务干扰。
接着又做了当放大模型某方面规模的相关实验,分别是增大模型,增大数据,还有在一定资源限制下的集成。
结论是,当这些因素放大时对性能都有提高,但其中大模型是最必要的。
这里说的规模,涉及 模型的规模、训练的时长规模 和 batch size。
这里的对比的一个前提是,假如有4倍的算力,怎么来分配?可以有以下方案:
(1)训练得久些,原来的4倍
(2)每个batch size 扩大为原来4倍
(3)模型扩大2倍,训练时长扩大2倍
(4)模型扩大4倍
本文提出的text-to-text 框架将NLP进行统一,并详尽地分析了架构、无监督目标函数、数据集、训练方法和规模等因素的影响。
大模型的难处:我们也知道大模型表现好,终究不是长久之计,distillation、parameter sharing和conditional computation 或许是一条新出路。
更高效地抽取知识:我们需要一个更有效的方法来学到通用的知识,强烈怀疑BERT-style loss的效率。
形式化任务之间的相似性:需要一个衡量pre-training和下游任务相似性的方法。
与语言无关的模型:English-only pre-training没能在翻译任务上达到SOTA的表现,说明单一语言还是有局限性。不受语言限制的模型可能是未来的一个研究方向。
T5: Text-to-Text Transfer Transformer 阅读笔记 - 知乎
T5 模型:NLP Text-to-Text 预训练模型超大规模探索 - 知乎
文献阅读笔记:Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer(T5)_JasonLiu1919的博客-CSDN博客