返回介绍

数学基础

统计学习

深度学习

工具

Scala

二十六、T5 [2020]

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

  1. 训练一个机器学习模型来执行自然语言处理任务,往往需要该模型能够以适合 downstream learning 的方式来处理文本。这可以被粗略地看作是开发通用的知识,使模型能够 "理解" 文本。这种知识的范围可以是 low-level 的(如单词的拼写或含义),也可以是 high-level 的(如 “小提琴太大从而无法装入大多数背包”)。在现代机器学习实践中,提供这种知识很少是显式的;相反,提供这种知识往往是作为辅助任务的一部分来学习。例如,历史上常见的方法是使用 word vector ,将单词映射到一个 continuous representation 中,理想情况下,相似的单词映射到相似的向量。这些向量通常是通过一个 objective 来学习的,例如,鼓励 co-occurring 的单词在 continuous space中相互靠近。

    最近,在一个数据丰富的任务上对整个模型进行预训练变得越来越常见。理想情况下,这种预训练使模型发展出通用的能力和知识,然后可以迁移到下游任务中。在计算机视觉的迁移学习应用中,预训练通常是通过在 ImageNet 这样的大型标记数据集上的监督学习来完成的。相比之下,NLP 中的现代迁移学习技术通常在未标记数据上使用无监督学习进行预训练。这种方法最近被用来在许多最常见的 NLP benchmark 中获得 SOTA 的结果。除了经验上的优势,NLP 的无监督预训练特别有吸引力,因为由于互联网的存在,未标记的文本数据大量存在。例如,Common Crawl 项目每月产生约 20TB 文本数据(从网页中提取的文本)。这对神经网络来说是一种自然的契合:神经网络已经被证明具有卓越的可扩展性 scalability ,也就是说,仅仅通过在更大的数据集上训练更大的模型,往往可以获得更好的性能。

    这种综合作用导致了最近的大量工作用于为 NLP 开发迁移学习方法,产生了广泛的预训练objective 、未标记数据集、benchmarks、微调方法等等。这个新兴领域的快速进展和技术的多样性会使我们很难比较不同的算法、区分新贡献的效果、以及了解现有的迁移学习方法的空间。出于对更严格理解的需要,论文《Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer》 利用一个统一的迁移学习方法,使我们能够系统地研究不同的方法,并推动该领域的现有局限性。作者将他们的模型和框架称为 Text-to-Text Transfer Transformer: T5

    论文的基本思路是:将每一个文本处理问题作为一个 "text-to-text" 的问题,即以文本为输入、产生新的文本作为输出。这种方法受到以前 NLP 任务的统一框架的启发,包括将所有文本问题作为问答任务(《The natural language decathlon: Multitask learning as question answering》)、语言建模任务(《Language models are unsupervised multitask learners》)、以及 span extraction 任务(《Unifying question answering text classification via span extraction》)。最重要的是,text-to-text 框架允许我们直接将相同的模型、objective 、训练程序、以及解码过程应用于我们考虑的每一项任务。论文利用这种灵活性,对各种基于英语的 NLP 问题进行性能评估,包括问答、文档摘要、以及情感分类等等。通过这种统一的方法,我们可以比较不同的迁移学习 objective、未标记的数据集、以及其他因素的有效性,同时通过扩大模型和数据集的规模从而探索迁移学习在 NLP 中的局限性。

    作者强调:论文的目标不是要提出新的方法,而是要对该领域的现状提供一个全面的视角。因此,论文的工作主要包括对现有技术的综述、探索、以及经验比较。作者还通过 scale up 来自他们的系统性研究的insights (训练模型达到 110 亿个参数)来探索当前方法的局限性,在论文考虑的许多任务中获得 SOTA 的结果。为了进行这种规模的实验,作者引入了 "Colossal Clean Crawled Corpus: C4",这是一个由数百 GB 的、从网上抓取的干净英语文本组成的数据集。认识到迁移学习的主要作用是可以在数据稀缺的环境中利用预训练的模型,作者发布了他们的代码、数据集、以及预训练好的模型。

26.1 配置

26.1.1 模型

  1. 由于 Transformer 越来越流行,我们研究的所有模型都是基于 Transformer 架构的。我们没有提供这个模型的全面定义,而是让感兴趣的读者参考原始论文(《Attention is all you need》)。

    总的而言,我们的 encoder-decoder Transformer 的实现密切遵循《Attention is all you need》 中的原始形式:

    • 首先,一个关于 token 的输入序列被映射成一个 embedding sequence ,然后被馈入到编码器。

    • 编码器由一堆 "blocks" 组成,每个 block 包括两个子组件:一个 self-attention layer ,以及后面跟一个小的 feed-forward network

      • layer normalization 被应用于每个子组件的输入。我们使用简化版的layer normalization ,其中 activations 仅仅被 rescale 而没有 additive bias

      • layer normalization 之后,一个 residual skip connection 将每个子组件的 input 添加到其 output

      • dropout 被用于 feed-forward network 内部、skip connectionattention weights、以及整个 stackinputoutput

    • 解码器的结构与编码器相似,只是它在每个 self-attention layer 之后包括一个标准的注意力机制,这个注意力机制关注编码器的输出。

      解码器中的自注意力机制使用一种自回归或因果的 self-attention,它只允许模型关注 past outputs

    • final decoder block 的输出被馈入一个具有 softmax outputdense layer ,其权重与 input embedding matrix 共享。

    • Transformer 中的所有注意力机制都被拆分成独立的 "heads",这些 headsoutput 在被进一步处理之前被拼接起来。

  2. 由于 self-attentionorder-independent 的(即,它是对集合的操作),所以向 Transformer 提供一个显式的 position signal 是很常见的。

    虽然最初的 Transformer 使用正弦的 position signal 、或 learned position embeddings ,但最近使用 relative position embeddings 变得更加普遍。relative position embeddings 不是为每个位置使用一个 fixed embedding ,而是根据自注意力机制中正在比较的 "key""query" 之间的 offset 产生不同的 learned embedding

    我们使用 relative position embeddings 的简化形式,其中每个 "embedding" 只是一个标量,被添加到用于计算注意力权重的相应 logit 中。为了提高效率,我们还在模型的所有层中共享 position embedding parameters ,尽管在同一个给定的层中每个 attention head 使用不同的 learned position embedding

    positional embedding 向量的维度为 1 维,因此用法是:

    (1)softmax(QK+Pd)V

    其中:PRn×n $ \mathbf P\in \mathbb R^{n\times n} $ 为不同位置之间的 relative position embedding 组成的矩阵,n $ n $ 为序列长度。

    通常情况下,要学习固定数量的 relative position embeddings ,每个 embedding 对应于可能的 key-query offsets 取值。在这项工作中,我们对所有的模型使用 32relative position embeddings ,它对应的 offsets 范围是 0128 (根据对数来增加),超过 128offsets 将分配一个相同的 relative position embedding(即,oov)。请注意,一个给定的层对超过128tokenrelative position 不敏感,但后续的层可以通过结合前几层的局部信息建立对更大 offsets 的敏感性。

  3. 综上所述,我们的模型与《Attention is all you need》提出的原始 Transformer 大致相当,只是去掉了 Layer Norm bias 、将 layer normalization 置于 residual path 之前、并使用不同的 position embedding 方案。由于这些架构变化与我们在迁移学习的实证调查中考虑的实验因素是正交的,我们将其影响的消融留给未来的工作。

  4. 作为我们研究的一部分,我们对这些模型的可扩展性进行了实验,即:当具有更多的参数或更多的层时,模型的性能会发生怎样的变化。

    训练大型模型可能是不容易的,因为它们可能无法适应在单台机器上,而且需要大量的计算。因此,我们使用模型并行和数据并行的组合,在 Cloud TPU Pods"slices"上训练模型。TPU podsmulti-rack 机器学习超级计算机,包含1024TPU v3 芯片,通过高速 2D mesh 互连且支持 CPU 主机。我们利用 Mesh TensorFlow library 从而方便实现模型并行和数据并行。

26.1.2 Colossal Clean Crawled Corpus

  1. 以前关于自然语言处理的迁移学习的大部分工作都是利用大型未标记数据集进行无监督学习。在本文中,我们对评估这种未标记数据的质量、特性、以及规模的影响感兴趣。为了生成满足我们需要的数据集,我们利用 Common Crawl 作为从网络上爬取的文本来源。Common Crawl 以前曾被用作自然语言处理的文本数据源,例如,训练 N-gram 语言模型、作为常识推理的训练数据、为机器翻译挖掘 parallel texts 、作为预训练数据集、甚至只是作为测试 optimizers 的巨型文本语料库。

    Common Crawl 是一个公开的 web archive ,它通过从爬取的 HTML 文档中删除 markup 和其他 non-text 内容来提供 "web extracted text"。这个过程每月产生约 20TB 的爬取的文本数据。不幸的是,大部分产生的文本不是自然语言。相反,它主要包括胡言乱语或模板文本,如 menu、错误信息、或重复的文本。此外,大量的爬取文本包含的内容不太可能对我们考虑的任何任务有帮助(攻击性语言、占位符文本、源代码等)。为了解决这些问题,我们使用了以下启发式方法来清理 Common Crawlweb extracted text

    • 我们只保留以终结标点符(即句号、感叹号、问号或尾部引号)结束的行。

    • 我们丢弃了任何少于 5 个句子的网页,只保留了包含至少 3 个单词的行。

    • 我们删除了任何含有 "肮脏、顽皮、淫秽或其他不良单词的清单" 中任何单词的网页。

    • 许多被爬取的页面包含 warning ,该 warning 说应该启用 Javascript ,因此我们删除了任何带有 Javascript 的行。

    • 一些页面有占位符 "lorem ipsum" 文本,我们删除了任何出现 "lorem ipsum" 短语的页面。

    • 一些页面无意中包含代码。由于大括号 "{" 出现在许多编程语言中(如在网络上广泛使用的 Javascript),而不是在自然文本中,我们删除了任何含有大括号的网页。

    • 为了对数据集去重,对于数据集中任何 three-sentence span 的多次出现,我们仅保留其中的一次出现而丢弃其它地方的出现。

    此外,由于我们的大多数下游任务都集中在英语文本上,我们使用 langdetect 来过滤掉任何未被分类为英语(分类概率至少为 0.99 )的网页。我们的启发式方法受到过去使用 Common Crawl 作为自然语言处理的数据来源的启发,例如:

    • 《Learning word vectors for 157 languages》 也使用自动化的语言检测器过滤文本并丢弃短行。

    • 《Dirt cheap web-scale parallel text from the common crawl》《Learning word vectors for 157 languages》 都进行 line-level 去重。

    然而,我们选择创建一个新的数据集,因为之前的数据集使用了更有限的启发式过滤方法、没有公开提供、和/或范围不同(例如,仅限于新闻数据,只包括 Creative Commons 内容,或专注于机器翻译的平行训练数据)。

  2. 为了组装我们的 base dataset ,我们下载了 20194 月的 web extracted text ,并应用了上述的过滤。这产生了一个文本集合,它不仅比用于预训练的大多数数据集大了几个数量级(约 750GB ),而且还包括相当干净和自然的英语文本。我们把这个数据集称为 Colossal Clean Crawled Corpus: C4 ,并将其作为 TensorFlow Datasets 的一部分发布。我们在实验部分考虑了使用该数据集的各种替代版本的影响。

26.1.3 下游任务

  1. 我们在本文中的目标是:度量通用语言学习 general language learning 的能力。因此,我们在一组不同的 benchmark 上研究下游任务的性能,包括机器翻译、问答、抽象摘要、以及文本分类。具体来说,我们度量了如下任务的性能:GLUESuperGLUE 文本分类 meta-benchmarksCNN/Daily Mail 抽象摘要、SQuAD 问答、以及 WMT English to German, French, Romanian 的翻译。所有的数据都来自于 TensorFlow Datasets

  2. GLUESuperGLUE 各自包括一组文本分类任务,旨在测试通用语言理解能力:

    • CoLA:句子可接受性 acceptability 判断。

    • SST-2:情感分析。

    • MRPC, STS-B, QQP:转述/句子相似性。

    • MNLI, QNLI, RTE, CB:自然语言推理。

    • WNLI, WSC:共指消解 coreference resolution

    • COPA:句子补全。

    • WIC:词义消歧 word sense disambiguation

    • MultiRC, ReCoRD, BoolQ:问答。

    我们使用 GLUESuperGLUE 基准所分发的数据集。为了简单起见,在微调时,我们通过将 GLUE 的所有组成的数据集拼接起来,从而将GLUE benchmark 中的所有任务(以及类似的 SuperGLUE )作为单个任务。正如 《A surprisingly robust trick for Winograd schema challenge》所建议的,我们还将 Definite Pronoun Resolution : DPR 数据集纳入 SuperGLUE 任务。

  3. CNN/Daily Mail 数据集是作为一个问答任务引入的,但被 《Abstractive text summarization using sequence-to-sequence RNNs beyond》改造为文本摘要;我们使用 《Get to the point: Summarization with pointer-generator networks》的非匿名版本作为抽象摘要 abstractive summarization 任务。

  4. SQuAD:是一个常见的问答 benchmark 。在我们的实验中,我们将 questioncontext 馈入模型,并要求模型逐个 token 地生成答案。

  5. 对于 WMT English to German 翻译,我们使用与 《Attention is all you need》相同的训练数据(即 News Commentary v13, Common Crawl, Europarl v7 ),以及相同的 newstest2013 作为验证集。

    对于 English to French 翻译,我们使用 WMT 2015 年的标准训练数据、以及 newstest2014 作为验证集。

    对于 English to Romanian ,这是一个标准的 lower-resource 机器翻译 benchmark ,我们使用 WMT2016 的训练集和验证集。

    请注意,我们只对英语数据进行预训练,所以为了学习翻译,给定的模型将需要学习用一种新语言来生成文本。

26.1.4 Input 和 Output 格式

  1. 为了在上述不同的任务上训练一个单一的模型,我们把所有我们考虑的任务都变成了"text-to-text" 的形式,即:一些文本馈入模型作为上下文或条件,然后要求模型产生一些输出文本。这个框架同时为预训练和微调提供了一个一致的 training objective 。具体而言,不管是什么任务,模型都是用最大似然 objective 来训练的。为了为模型指定需要执行的任务,我们在把原始输入序列馈入模型之前,给input 添加一个 task-specific 的前缀。

    例如,如果要求模型将句子 "That is good." 从英语翻译成德语,模型将被馈入序列 "translate English to German: That is good.",并被训练从而输出 "Das ist gut."

    对于文本分类任务,模型只是预测与 target label 相对应的单个单词。例如,在 MNLI benchmark 上,目标是预测一个前提 premise 是否蕴含( "entailment" )、矛盾("contradiction" )、或者中性("neutral")一个假设 hypothesis 。经过我们的预处理,输入序列变成 "mnli premise: I hate pigeons. hypothesis: My feelings towards pigeons are filled with animosity." ,相应的 target 单词是 "entailment"

    请注意,如果我们的模型在文本分类任务中输出的文本与任何可能的标签文本都不对应,就会出现问题。例如,如果模型输出的是 "hamburger" ,而该分类任务唯一可能的标签是 "entailment""neutral" 、或 "contradiction" 。在这种情况下,我们总是把模型的输出算作是错误的,尽管我们从未在任何一个我们的 trained models 中观察到这种行为。

    请注意,用于给定任务的文本前缀的选择本质上是一个超参数。我们发现改变前缀的 exact wording 的影响有限,因此没有对不同的 prefix choice 进行广泛的实验。下图是我们的 text-to-text 框架,其中有一些 input/output 的例子。

  2. 每个任务的 preprocessed inputs 的完整例子(来自论文附录 D):

    其中 {XXX}{YYY} 等表示占位符(代表一段文本),Processed input: 的冒号后面的内容才是馈入到模型中的字符串。

    注意:Original input 表示原始的输入,Original target 表示原始的 label(都是整数或浮点数),Processed input 表示处理后的输入,Processed target 表示处理后的 label(都是字符串)。

    • CoLA

      
      Original input:
       Sentence: "{XXX}."
      Processed input: "cola sentence: {XXX}."
      Original target: 1
      Processed target: "acceptable"
    • RTE

      
      
      xxxxxxxxxx
      Original input: Sentence 1: "{XXX}." Sentence 2: "{YYY}." Processed input: "rte sentence1: {XXX}. sentence2: {YYY}." Original target: 1 Processed target: "not_entailment"
    • MNLI

      
      
      xxxxxxxxxx
      Original input: Hypothesis: "{XXX}." Premise: "{YYY}." Processed input: "mnli hypothesis: {XXX}. premise: {YYY}." Original target: 2 Processed target: "contradiction"
    • MRPC

      
      
      xxxxxxxxxx
      Original input: Sentence 1: "{XXX}." Sentence 2: "{YYY}." Processed input: "mrpc sentence1: {XXX}. sentence2: {YYY}." Original target: 1 Processed target: "equivalent"
    • QNLI

      
      
      xxxxxxxxxx
      Original input: Question: "{XXX}?" Sentence: "{YYY}." Processed input: "qnli question: {XXX}? sentence: {YYY}." Original target: 0 Processed target: "entailment"
    • QQP

      
      
      xxxxxxxxxx
      Original input: Question 1: "{XXX}?" Question 2: "{YYY}?" Processed input: "qqp question1: {XXX}? question2: {YYY}?" Original target: 0 Processed target: "not_duplicate"
    • SST2

      
      
      xxxxxxxxxx
      Original input: Sentence: "{XXX}." Processed input: "sst2 sentence: {XXX}." Original target: 1 Processed target: "positive"
    • STSB

      
      
      xxxxxxxxxx
      Original input: Sentence 1: "{XXX}." Sentence 2: "{YYY}." Processed input: "stsb sentence1: {XXX}. sentence2: {YYY}." Original target: 3.25 Processed target: "3.2"
    • CB

      
      
      xxxxxxxxxx
      Original input: Hypothesis: "{XXX}." Premise: "{YYY}?" Processed input: "cb hypothesis: {XXX}. premise: {YYY}?" Original target: 1 Processed target: "contradiction"
    • COPA

      
      
      xxxxxxxxxx
      Original input: Question: "{XXX}" Premise: "{YYY}." Choice 1: "{ZZZ1}." Choice 2: "{ZZZ2}." Processed input: "copa choice1: {ZZZ1}. choice2: {ZZZ2}. premise: {YYY}. question: {XXX}" Original target: 1 Processed target: "True"
    • MultiRC

      
      
      xxxxxxxxxx
      Original input: Answer: "{XXX}." Paragraph: "{YYY}." Question: "{ZZZ}?" Processed input: "multirc question: {ZZZ}? answer: {YYY}. paragraph: {XXX}." Original target: 1 Processed target: "True"
    • WiC[] 表示占位符。

      
      
      xxxxxxxxxx
      Original input: POS: "[Y/N]" Sentence 1: "{XXX}." Sentence 2: "{YYY}." Word: "[word]" Processed input: "wic pos: [Y/N] sentence1: {XXX}. sentence2: {YYY}. word: [word]" Original target: 0 Processed target: "False"
    • WSC DPR

      
      
      xxxxxxxxxx
      Original input: Span 2 text: "it" Span 1 text: "stable" Span 2 index: 20 Span 1 index: 1 Text: "The stable was very roomy, with four good stalls; a large swinging window opened into the yard , which made it pleasant airy." Processed input: "wsc: The stable was very roomy, with four good stalls; a large swinging window opened into the yard , which made *it* pleasant airy." Original target: 1 Processed target: "stable"
    • CNN/Daily Mail

      
      
      xxxxxxxxxx
      Original input: "{XXX}." Processed input: "summarize: {XXX}." Original target: "{YYY}." Processed target: "{YYY}."
    • SQuAD

      
      
      xxxxxxxxxx
      Original input: Question: "{XXX}?" Context: "{YYY}." Processed input: "question: {XXX}? context: {YYY}." Original target: "{ZZZ}" Processed target: "{ZZZ}"
    • WMT English to German

      
      
      xxxxxxxxxx
      Original input: "{XXX}." Processed input: "translate English to German: {XXX}." Original target: "{YYY}." Processed target: "{YYY}."
    • WMT English to French

      
      
      xxxxxxxxxx
      Original input: "{XXX}." Processed input: "translate English to French: {XXX}." Original target: "{YYY}." Processed target: "{YYY}."
    • WMT English to Romanian

      
      
      xxxxxxxxxx
      Original input: "{XXX}." Processed input: "translate English to Romanian: {XXX}." Original target: "{YYY}." Processed target: "{YYY}."
  3. 我们的 text-to-text 框架遵循以前的工作,将多个 NLP 任务转换一个共同的格式:

    • 《The natural language decathlon: Multitask learning as question answering》 提出了 "Natural Language Decathlon" ,这是一个 benchmark ,对一组 10NLP 任务使用一致的 question-answer 格式。Natural Language Decathlon 还规定:所有模型必须是多任务的,即能够同时处理所有的任务。

      相反,我们允许在每个单独的任务上分别对模型进行微调,并使用简短的 task prefix ,而不是显式的 question-answer 格式。

    • 《Language models are unsupervised multitask learners》 通过将一些输入作为前缀馈入模型,然后对输出进行自回归采样,来评估语言模型的 zero-shot learning 的能力。例如,自动化摘要是通过馈入一个文档,后面跟着 "TL;DR:""too long, didn’t read" 的缩写)的文字,然后通过自回归地解码来预测摘要。

      我们主要考虑这样的模型:在用单独的解码器生成输出之前,用编码器显式处理 input 。并且我们关注迁移学习而不是 zero-shot learning

    • 最后,《Unifying question answering text classification via span extraction》 将许多 NLP 任务统一为 "span extraction",其中对应于 possible output choices 的文本被附加到 input ,模型被训练为:抽取对应于正确 choiceinput span

      相比之下,我们的框架也允许生成式任务,如机器翻译和抽象摘要,在这些任务中不可能列举所有 possible output choices

  4. 我们能够直接将我们所考虑的所有任务转换成 text-to-text 的格式,但 STS-B 除外,它是一个回归任务,目标是预测15 分之间的相似度分数。我们发现这些分数大多以 0.2 为增量,所以我们简单地将任何分数四舍五入到最接近的 0.2 增量,并将结果转换为数字的字符串表示(例如,浮点数 2.57 将被映射为字符串 "2.6" )。

    在测试时,如果模型输出的字符串对应于15 之间的数字,我们就将其转换为浮点值。否则,我们就将模型的预测视为不正确。这就有效地将 STS-B 回归问题改成了 21-class 分类问题。

  5. 另外,我们还将 Winograd 任务( GLUE 中的WNLISuper-GLUE 中的WSC,以及我们添加到 SuperGLUE 中的 DPR 数据集)转换成更简单的格式,更适合于 text-to-text 框架。

    Winograd 任务中的样本包括一个包含歧义代词 ambiguous pronoun 的文本段落,该代词可能指代段落中的多个名词短语。例如,文本段落 "The city councilmen refused the demonstrators a permit because they feared violence." ,其中包含一个歧义代词 "they",可以指代 "city councilmen""demonstrators" 。我们将 WNLIWSC 、以及 DPR 任务转换为 text-to-text 问题,通过突出文本段落中的 ambiguous pronoun 并要求模型预测其所指的名词。上面提到的例子将被转化为:输入 "The city councilmen refused the demonstrators a permit because *they* feared violence." ,模型将被训练来预测target文本 "The city councilmen"

    对于 WSC 来说,样本包含段落、歧义代词、候选名词、以及反映候选代词是否匹配的 True/False 标签(忽略任何文章)。我们只对有 True 标签的样本进行训练,因为我们不知道具有 "False" 标签的样本的正确名词目标。在评估时,如果模型输出中的单词是候选名词短语中的一个子集(或者反之),我们就给它一个 "True" 标签,否则就给它一个 "False" 标签。这就删除了大约一半的WSC 训练集,但是 DPR 数据集增加了大约 1000 个代词解析样本。DPR 的样本都有正确的指代名词标注,因此很容易以上述格式使用这个数据集。

    WNLI 的训练集和验证集与 WSC 的训练集有很大的重叠。为了避免验证样本泄露到我们的训练数据中(这是实验部分的多任务实验中的一个特殊问题),我们从来不在 WNLI 上训练,也不报告 WNLI 验证集的结果。忽略 WNLI 验证集上的结果是标准做法,因为它对训练集来说是 "对抗性的",即验证样本都是具有相反标签的训练样本的轻微扰动版本。因此,每当我们报告验证集时(除了特殊说明之外),我们在 GLUE 的平均分数中不包括 WNLI 。将 WNLI 的样本转换为上述的 "referent noun prediction" 的变体是比较麻烦的;我们在论文附录 B 中描述了这个过程。

26.2 实验

  1. 我们对新的预训练 objective 、模型架构、未标记数据集等技术进行了经验性的调查,希望能够区分出它们的贡献和意义。

    我们通过采取合理的 baseline 并一次改变 setup 的一个方面来系统地研究这些贡献。这种 "coordinate ascent" 的方法可能会错过二阶效应(例如,一些特定的无监督objective 可能在比我们的 baseline setting 更大的模型上效果最好),但对我们研究中的所有因素进行组合探索将是非常昂贵的。

  2. 我们的目标是在一组不同的任务上比较各种不同的方法,同时保持尽可能多的因素固定。为了满足这一目标,在某些情况下,我们并不完全复制现有的方法。

    例如,像 BERT 这样的 encoder-only 模型被设计为对每个input token 产生一个预测,或对整个输入序列产生一个预测。这使得它们适用于分类任务或 span prediction 任务,但不适用于翻译任务或抽象式生成等生成式任务。因此,我们考虑的模型架构没有一个是与BERT 相同的,也没有一个是由 encoder-only 组成的架构。

    相反,我们测试了精神上相似的方法。例如,我们考虑了与 BERT"masked language modeling" objective 类似的objective ,我们也考虑了在文本分类任务上与 BERT 行为类似的模型架构。

26.2.1 Baseline

  1. 我们对baseline 的目标是:要反映典型的现代实践。我们使用一个简单的denoising objective 来预训练一个标准的 Transformer ,然后在我们的每个下游任务中分别进行微调。

  2. 模型:我们使用了《Attention is all you need》提出的标准的 encoder-decoder Transformer 。虽然许多用于自然语言处理的迁移学习的现代方法使用 encoder-onlydecoder-only,但我们发现:使用标准的 encoder-decoder 架构在生成任务和分类任务上都取得了良好的效果。我们在后续实验部分探讨了不同模型架构的性能。

    我们的 baseline 模型被设计成:encoderdecoder 各自的大小和配置与BERT_BASE 相似。具体而言:

    • encoderdecoder 都由 12block组成,每个 block 包括self-attention 、可选的encoder-decoder attention (这个只有decoder 有)、以及一个前馈神经网络。

    • 每个 block 中的前馈神经网络包括一个输出维度为 dff=3072 $ d_\text{ff}=3072 $ 的稠密层,然后是一个 ReLU 非线性层和另一个稠密层。

      另一个稠密层的维度,论文并未直接说明,猜测也是 dff=3072 $ d_\text{ff} = 3072 $ 。

    • 所有注意力机制的 "key""value" 矩阵的内部维度为 dkv=64 $ d_\text{kv}=64 $ ,所有注意力机制有 12 个头。

    • 所有其他子层和 embedding 的维度为 dmodel=768 $ d_\text{model} =768 $ 。

    总的来说,这导致了一个具有大约 220M 个参数的模型。这大约是 BERT_BASE 的参数数量的两倍,因为我们的 baseline 模型包含两个 stack 而不是一个。对于正则化,我们在模型中任何地方都使用了 dropout rate = 0.1

  3. 训练:所有的任务都被表述为 text-to-text 的任务。这使我们能够始终使用标准的最大似然进行训练。对于优化,我们使用AdaFactor。在测试时我们使用贪婪解码,即在每个 timestep 选择概率最高的 logit

    • 预训练:在微调之前,我们在 C4 上对每个模型进行 219=524288 $ 2^{19}=524288 $ 步的预训练。我们使用的最大序列长度为 512batch size = 128 。只要有可能,我们将多个序列 "打包" 到批次的每个条目 entry 中,因此我们的batch 大约包含 512×128=65536 $ 512\times 128 = 65536 $ 个token。总的来说,这个 batch sizetraining step 的数量相当于对 23534B $ 2^\text{35}\simeq 34B $ 个 token 进行预训练。这比 BERTRoBERTa要少得多,后者使用了大约 2.2Ttoken 。只使用 235 $ 2^{35} $ 个 token 的结果是合理的计算预算,同时仍然提供了足够的预训练量从而获得可接受的性能。我们在后续实验部分考虑了预训练关于更多training step 的影响。请注意,235 $ 2^{35} $ 个 token 只涵盖了整个 C4 数据集的一部分,所以我们在预训练期间从不重复任何数据。

      在预训练期间,我们使用一个 "逆平方根" 的学习率调度:1/max(n,k) $ 1/\sqrt{\max(n,k)} $ ,其中 n $ n $ 为当前的 training iterationk $ k $ 为 warm-up steps(在我们的所有实验中设置为 104 $ 10^4 $ )。 这为前 104 $ 10^4 $ 步设定了一个恒定的学习率 0.01 ,然后学习率呈指数衰减直到预训练结束。我们还试验了使用三角学习率,这产生了稍好的结果,但需要提前知道总的 training steps 。由于我们将在一些实验中改变 training steps 的数量,我们选择了更通用的逆平方根调度。

    • 微调:我们的模型在所有的任务中都被微调为 218=262144 $ 2^{18} = 262144 $ 步。这个值是在high-resource 任务(即有大数据集的任务)和 low-resource 任务(小数据集)之间的权衡,前者从额外的微调中获益、后者则迅速过拟合。在微调期间,我们继续使用 bath size = 128 ,序列长度为 512 (即每个 batch 216=65536 $ 2^{16}=65536 $ 个token )。在微调时,我们使用 0.001 的恒定学习率。我们每 5000 步保存一个 checkpoint ,并报告与最佳验证性能相对应的 model checkpoint 的结果。对于在多个任务上微调的模型,我们为每个任务独立选择 best checkpoint 。对于所有的实验,除非特别说明,我们报告验证集结果从而避免模型选择以及报告测试集结果。

    预训练的 training step 数量是微调期间的两倍。此外,预训练的学习率从 1.0 指数下降到 0.001381 ,然而微调的学习率固定为一个很低的值 0.001

  4. Vocabulary:我们使用 SentencePiece 将文本编码为 WordPiece tokens。在所有的实验中,我们使用了 32,000wordpieces 的词表。由于我们最终在English to German, French, Romanian 的翻译上对我们的模型进行了微调,所以我们还要求我们的词表涵盖这些非英语语言。为了解决这个问题,我们将 C4 中使用的 Common Crawl 中的页面分类为德语、法语、以及罗马尼亚语。然后,我们在英语、德语、法语、罗马尼亚语的比例为 10:1:1:1 的数据混合体上训练我们的 SentencePiece 模型。这个词表在我们模型的输入和输出中都是共享的。请注意,我们的词表使得我们的模型只能处理预先确定的、固定的语言集合。

  5. 无监督objective:受 BERT"masked language modeling" objective"word dropout"正则化技术的启发,我们设计了一个objective,随机采样然后丢弃输入序列中 15%token 。所有 dropped-out tokensconsecutive spans 都被单个哨兵 token 所取代。每个哨兵token 都被分配一个 token ID,该 ID 对序列来说是唯一的。哨兵token ID 是被添加到我们的词表中的 special token ,不对应于任何 wordpiece

    target 序列的组成方式如下:所有的 dropped-out spans 、间隔以对应的哨兵 token、最后加上一个哨兵 token 来标记 target 序列结束。

    我们选择掩码consecutive spans of tokens ,并且仅预测 dropped-out tokens ,是为了减少预训练的计算成本。我们在实验部分对预训练objective 进行了深入研究。下图给出了一个例子:

    • 原始的文本为 "Thank you for inviting me to your party last week."

    • 处理之后,输入为 "Thank you <X> me to your party <Y> week."target"<X> for inviting <Y> last <Z>"

    注意:这里每一个哨兵 token 都是序列中唯一的(不必要求全局唯一),它们起到 “锚” 的作用,使得能够根据 targetsinputs 来恢复原始输入。假设哨兵 token 都是 [MASK] (即,BERT 的做法),那么模型无法知晓 "last" 是对应第一个 drop 位置、还是第二个 drop 位置。

    是否要求每个序列中,哨兵 token 出现的次序相同?比如,序列 S1 中哨兵 token 出现的次序为 <X><Y><Z>,那么序列 S2 中哨兵 token 出现的次序是否可以为 <Z><X><Y>

  6. Baseline 性能:我们介绍了使用上述baseline 实验程序的结果,以了解在我们这组下游任务中可以期待什么样的性能。理想情况下,我们会在研究中多次重复每个实验,以获得我们结果的置信区间。不幸的是,由于我们运行了大量的实验,这将是非常昂贵的。作为一个更便宜的选择,我们从头开始训练我们的baseline 模型 10 次(即用不同的随机初始化和数据集混洗),并假设这些 runs of base model 的方差也适用于每个实验变体。另外,我们还度量了在没有预训练的情况下,在所有下游任务中训练我们的模型 218 $ 2^{18} $ 步(与我们用于微调的数量相同)的性能。这让我们了解到在baseline setting 下,预训练对我们的模型有多大的好处。

    在正文中报告结果时,我们只报告了所有 benckmark scores 的一个子集,从而节省空间和方便解释:

    • 对于 GLUESuperGLUE ,我们仅报告了所有子任务的平均得分(如官方所规定的)。

    • 对于所有的翻译任务,我们报告由 SacreBLEU v1.3.0 提供的 BLEU 分数,其中包括 "exp" 平滑和 "intl" tokenization 。我们将WMT English to German, English to French, English to Romanian 的分数分别称为 EnDe, EnFr, EnRo

    • 对于 CNN/Daily Mail ,我们发现模型在 ROUGE-1-F, ROUGE-2-F, ROUGE-L-F 指标上的表现高度相关,因此我们单独报告 ROUGE-2-F 得分。

    • 同样,对于SQuAD ,我们发现 "exact match" (简称 EM )和 "F1" 得分的表现高度相关,因此我们只报告 "exact match" 得分。我们在论文附录 ETable 16 中提供了所有实验在每个任务上取得的每一个分数。

    我们的结果表的格式是,每一行对应于一个特定的实验配置,每一列给出每个 benchmark 的分数。我们将在大多数表格中包括 baseline 配置的平均性能。凡是 baseline 配置出现的地方,我们都会用 "★" 来标记(如 Table 1 的第一行)。我们还将用黑体标出特定实验中在任何最大(最好)分数的两个标准差之内的分数(包括最大分数自身)。

    baseline 结果如下表所示:

    • 总的来说,我们的结果与现有的类似规模的模型相媲美。例如,BERT_BASESQuAD 上取得了 80.8exact match 分数,在 MNLI-matched 上取得了 84.4 的准确率,而我们分别取得了 80.8884.24 (见Table 16)。

      请注意,我们不能直接将我们的 baselineBERT_BASE 进行比较,因为我们的是一个 encoder-decoder 模型,而且预训练的步数大约是BERT_BASE1/4

    • 不出所料,我们发现预训练在几乎所有的 benchmark 中都提供了显著的增益。唯一的例外是 WMT English to French 翻译,它是一个足够大的数据集,预训练的增益是很微小的。我们在实验中加入了这项任务,从而测试迁移学习在 high-resource 条件下的行为。

      由于我们执行 early stopping 并选择 best-performing checkpoint ,我们的 baseline"no pre-training" 之间的巨大差异强调了预训练在数据有限的任务上有多大的改善。虽然我们在本文中没有显式地衡量数据效率的提高,但我们强调这是迁移学习范式的主要好处之一。

    至于inter-run 方差,我们发现对于大多数任务来说,标准差小于任务 baseline 得分的 1% 。这一规则的例外情况包括 CoLA, CB, COPA ,它们都是 GLUESuperGLUE 基准的 low-resource 任务。例如,在 CB 上,我们的 baseline model 的平均 F1 得分是 91.22 、标准差是3.237 (见Table 16 ),这可能部分是由于 CB 的验证集只包含 56 个样本。请注意,GLUESuperGLUE 的分数是组成每个 benchmark 的所有任务的平均分数来计算的。因此,我们警告说,单独使用 GLUESuperGLUE 分数时,CoLA, CB, COPA 的高inter-run 方差会使模型难以比较。

  7. 论文附录 ETable 16

26.2.2 架构

  1. 这里我们回顾并比较针对 encoder-decoder 架构的不同变体。

  2. 模型架构:不同架构的一个主要区别因素是,模型中不同注意力机制所使用的 "mask" 。回顾一下,Transformer 中的自注意力操作将一个序列作为输入,并输出一个相同长度的新序列。输出序列的每个条目是通过计算输入序列的条目的加权平均而产生的。具体而言,令 yi $ \mathbf{\vec y}_i $ 为输出序列的第 i $ i $ 个元素,xj $ \mathbf{\vec x}_j $ 为输入序列的第 j $ j $ 个元素,则 yi=jwi,jxj $ \mathbf{\vec y}_i = \sum_j w_{i,j} \mathbf{\vec x}_j $ ,其中 wi,jR $ w_{i,j}\in \mathbb R $ 为自注意力机制产生的标量权重,且 wi,j $ w_{i,j} $ 是 xi $ \mathbf{\vec x}_i $ 和 xj $ \mathbf{\vec x}_j $ 的函数。

    然后,attention mask 被用来将某些权重归零,从而限制在给定的 output timestep 中可以关注哪些输入条目。我们将考虑的 mask 的图示如下图所示。例如,causal maskFigure 3 ,中间)当满足 j>i $ j\gt i $ 时将 wi,j $ w_{i,j} $ 置为零。

    • 我们考虑的第一个模型结构是一个 encoder-decoder Transformer ,它由 two layer stacks 组成:

      • 编码器,它被馈入一个输入序列。

        编码器使用一个 "fully-visible"attention mask ,这允许自注意力机制在产生每个输出条目时注意任何输入条目。

      • 解码器,它生成一个新的输出序列。

        解码器使用 "causal"attention mask ,这阻止了模型在生成第 i $ i $ 个输出条目时关注 j>i $ j>i $ 的输入条目。这使得在训练期间,模型在生成输出时不能 "see into the future"

      Figure 4的左侧显示了这种结构变体的示意图。

      标准的 encoder-decoderdecoder 的输入有两个:来自于 encoder、来自于 target 序列。而这里的 decoder 的输入其实也有两个,只是因为绘图的关系,这里并没有绘制出来而已。

      此外,这里只是把 decoder 画在 encoder 上方而已,也可以把 decoder 画在 encoder 的右侧。

    • Transformer decoder可以作为一个语言模型language model: LM ,这构成了我们考虑的第二个模型结构,如下图中间部分所示。

      语言模型通常被用于压缩或序列生成。然而,它们也可以在 text-to-text 框架中使用,只需将 inputs 序列和 targets 序列拼接起来即可。例如,考虑 English to German 翻译。如果我们有一个input 句子 "That is good."target句子 "Das ist gut." ,那么拼接后的输入序列为 "translate English to German: That is good. target: Das ist gut." 。 我们将简单地训练模型从而对拼接后的输入序列进行 next-step prediction

      loss 函数是仅考虑 target 部分还是考虑 input + target 整体?理论上讲,我们需要计算的是 p(targetinput) $ p(\text{target}\mid \text{input}) $ ,因此只需要考虑 target 部分。但是看这里的描述,感觉是 p(input,target) $ p(\text{input,target}) $ ,同时考虑了 inputtarget 。可以通过实验来评估这里。

      此外,如果建模了 p(input,target) $ p(\text{input,target}) $ ,那么模型不仅需要准确地建模 p(targetinput) $ p(\text{target}\mid \text{input}) $ ,还需要准确地建模 p(input) $ p(\text{input}) $ 。而建模 p(input) $ p(\text{input}) $ 意味着模型除了监督的目标任务之外(即 p(targetinput) $ p(\text{target}\mid \text{input}) $ ),还考虑对 input 文本进行无监督的 ”预训练“。

      此外,实验部分表面,decoder-only 的表现要比Enc-Dec 更差,有可能是因为这里 loss 函数考虑了 p(input) $ p(\text{input}) $ 的原因。如果屏蔽掉 p(input) $ p(\text{input}) $ 的损失,是否会好一点?

      如果我们想获得模型对这个例子的预测,那么我们将序列 "translate English to German: That is good. target:" 馈入模型,然后要求模型自回归地生成剩余部分。通过这种方式,该模型可以预测一个给定输入序列的输出序列。

    • text-to-text setting 中使用语言模型的一个基础的和经常被引用的缺点是:causal masking 迫使模型在生成第 i $ i $ 个条目的 representation 时关注 j<i $ j

      考虑前面的 English to German 翻译的例子。我们需要提供一个 prefix (也叫做 context)序列、以及一个 target 序列。在 causal masking 的情况下, prefix 中第 i $ i $ 个条目的 representation 只能取决于 prefix 中前面的条目。而这是不必要的限制。

      Transformer-based 的语言模型中,只需改变 masking pattern 就可以避免这个问题。在 prefix 序列部分,我们不使用causal mask 而是使用 fully-visible mask,如下图右侧所示。我们称这种模式为 prefix LM

      在上面提到的 English to German 翻译的例子中,fully-visible mask 将被应用于前缀 "translate English to German: That is good. target:"causal mask 将用于预测目标 "Das ist gut."

      text-to-text 框架中使用 prefix LM 最初是由《Generating Wikipedia by summarizing long sequences》 所提出。最近,《Unified language model pre-training for natural language understanding generation》表明:这种架构在各种 text-to-text 任务上是有效的。这个架构类似于一个encoder-decoder模型,其参数在编码器和解码器之间共享,并且 encoder-decoder 的注意力被整个 input 序列和 target 序列的 full attention 所取代。

    如果 EncoderDecoder 的宽度相同,那么T5 (下图中的左侧)长得很像一个 Encoder,只是它前 50% 的层是全连接的、后 50% 的层不包含 “未来的连接”。

  3. 我们注意到,对于分类任务,当遵循我们的 text-to-text 框架时, prefix LM 架构与 BERT 非常相似。

    对于分类任务,prefix LM 架构的 label 只有一个单词代表类别,如 Figure 4 右图所示,此时退化为:输入为 x1, x2, x3, y1、输出为 x2, x3, y1, '.' ,而且 decoder 之间是全连接的。

    这和 BERT非常类似,但是二者之间存在:

    • BERTobjective 是恢复被 masked 的单词。因此输入为 x1, x2, x3, [mask], "." ,然后仅考虑 [mask] 上的输出并进行预测。

    • prefix LM 是自回归模型,需要预测每个位置的 next token

    为了了解原因,考虑 MNLI benchmark 中的一个例子,前提 premise"I hate pigeons." ,假设 hypothesis"My feelings towards pigeons are filled with animosity." ,而正确的标签是 "entailment" 。要把这个例子馈入语言模型,我们要把它转化为 "mnli premise: I hate pigeons. hypothesis: My feelings towards pigeons are filled with animosity. target: entailment" 。其中,fully-visible prefix 对应于 "mnli premise: I hate pigeons. hypothesis: My feelings towards pigeons are filled with animosity. target:" ,这可以被视为是类似于 BERT 中使用的 "classification" token。因此,我们的模型将对整个 inputfull visibility ,然后通过输出 "entailment" 这个单词来完成分类任务。给定 task prefix 的条件下,该模型很容易学会输出有效的 class label

    因此,prefix LMBERT 架构之间的主要区别是:在 prefix LM 中,classifier 被简单地集成到 Transformer decoder 的输出层。

  4. 不同模型架构的比较:为了比较这些架构变体,我们希望每个模型都能以某种有意义的方式是相等 equivalent 的,例如,两个模型具有相同数量的参数、或者对于给定的 (input-seq, target-seq) pair 时两个模型具有相同的计算量。不幸的是,不可能同时根据这两个标准来比较一个 encoder-decoder 模型和一个 language model 架构。

    要知道为什么,首先要注意:一个具有 L + L 层的 encoder-decoder 模型(指的是编码器 L 层且解码器 L 层)与一个具有 2L 层的语言模型的参数数量大致相同。然而,具有 L + L 层的 encoder-decoder 模型的计算成本将与只有 L 层的语言模型大致相同。 这是因为:语言模型中的 L 层必须同时应用于输入序列和输出序列;而 encoder-decoder 模型中,编码器只应用于输入序列、解码器只应用于输出序列。

    注意,这里的参数数量相等、计算量相等仅仅是近似的:由于 encoder-decoder attention 的存在,decoder 中还存在一些额外的参数;attention layer 中也存在一些计算成本,这些成本与序列长度呈二次方的关系。然而在实践中,我们观察到 L 层语言模型与 L + L 层的 encoder-decoder 模型的 step times 几乎相同,这表明二者计算成本大致相当。此外,对于我们考虑的模型规模, encoder-decoder attention 层的参数数量约为总参数数的 10% ,因此我们做了一个简化的假设,即 L + L 层的 encoder-decoder 模型的参数数量与 2L 层语言模型相同。

    为了提供一个合理的比较手段,我们考虑了 encoder-decoder 模型的多种配置。我们将把 BERT_BASE 的层数和参数数量分别称为 LP 。我们将用 M 来指代 L + L 层的 encoder-decoder 模型(或只用 Ldecoder-only 模型,即语言模型)处理一个给定的 input-target pair 所需的 FLOPs 数量。总的来说,我们将比较:

    • 一个 L + L 层的 encoder-decoder 模型,模型有 2P 个参数,计算成本为 M FLOPs

    • 一个 L + L 层的 encoder-decoder 模型,但是参数在编码器和解码器之间共享,导致P 个参数和 M FLOPs 计算成本。

    • 一个 L/2 + L/2 层的 encoder-decoder 模型,模型有 P 个参数,计算成本为 M/2 FLOPs

    • 一个 L 层的 decoder-only prefix LM 模型,模型有 P 个参数,计算成本为 M FLOPs

    • 一个 L 层的 LM 模型,模型有 P 个参数,计算成本为 M FLOPs

    注:这里没有考虑 encoder-only 模型,因为它无法执行文本生成任务。

  5. objective函数:我们对比了 basic language modeling objectiveour baseline denoising objective 。我们包括 language modeling objective ,因为它历来被用作预训练objective,并且它自然适合我们考虑的语言模型架构。

    • 对于 encoder-decoder modelprefix LM,我们从未标记的数据集中抽取一个 span 的文本,并选择一个随机点,将其分成 prefix 部分和 target 部分。

    • 对于标准语言模型,我们训练该模型来预测从头到尾的整个 span

    denoising objective 就是 MLMobjectivelanguage modeling objective 就是 LMobjective

  6. 结果:每个架构所取得的分数都如下表所示,可以看到:

    • 对于所有的任务,具有 denoising objectiveencoder-decoder 架构表现最好。这个变体具有最高的参数数量(2P),但计算成本与仅有 P 个参数的 decoder-only 模型相同。

    • 令人惊讶的是,在编码器和解码器之间共享参数的表现几乎一样好。

      同时进行的工作 ALBERT 也发现:在 Transformer block 之间共享参数可以是降低总参数数的有效手段,而不会牺牲很多性能。

    • 将编码器和解码器的层数减半,明显地损害了性能。

    • 共享参数的 encoder-decoder 的性能优于 decoder-only prefix LM ,这表明增加一个显式的 encoder-decoder attention 是有益的。

    • 最后,我们证实了一个广泛存在的概念:即与 language modeling objective 相比,使用 denoising objective 总能带来更好的下游任务表现。

26.2.3 无监督 Objective

  1. 总体而言,我们所有的 objective 都会接受一个关于 token ID 的序列,这个序列对应于来自未标记文本数据集中的一个 tokenizedspan of texttoken 序列被处理从而产生一个(被破坏的)input 序列和一个相应的target 序列。然后,像往常一样用maximum likelihood 训练模型以预测 target 序列。

    这些 objective 的例子如下表所示。

    例如:原始的文本是 "Thank you for inviting me to your party last week."

    • Prefix LM:编码器的输入为 "Thank you for inviting",解码器的输出为 "me to your party last week."

    • BERT-style :编码器的输入为 "Thank you for <M> <M> to your party apple week." ,解码器的输出为 "Thank you for inviting me to your party last week."

      注意,这里除了 <M> 替换之外,还替换了 "last" 为随机的 token (这里为 "apple")。

      这里和 BERT 不同。BERTencoder-only 模型,仅预测被掩码的 token 。并且 BERT 中不同 token 之间是独立地被掩码。而这里考虑预测整个原始序列,而且每次掩码整个 span

    • Deshuffling:编码器的输入为 "party me for you to . last you inviting week Thank",解码器的输出为 "Thank you for inviting me to your party last week."

    • MASS-style :编码器的输入为 "Than you <M> <M> me to your party <M> week." ,解码器的输出为 "Thank you for inviting me to your party last week."

      它和 BERT-style 很像,然而 BERT-style 中会执行 token 的随机替代,而这里没有。

    • iid.noise, replace spans:编码器的输入为 "Thank you <X> me to your party <Y> week." ,解码器的输出为 "<X> for inviting <Y> last <Z>"

      iid.noise 指的是每个 token 的掩码事件是相互独立的。此外,对于连续的 masked token 被合并成 masked span 。它就是论文 baseline 用到的 objective

    • iid.noise, drop tokens:编码器的输入为 "Thank you me to your party week." ,解码器的输出为 "for inviting last"

    • random spans:编码器的输入为 "Thank you <X> to <Y> week." ,解码器的输出为 "<X> for inviting me <Y> your party last <Z>"

      它和 iid.noise, replace spans 的区别在于:这里直接针对 span 进行掩码(而不是针对 token),其中掩码的位置、span 长度都是随机的。

  2. 不同的 High-Level 方法:首先,我们比较了三种技术,它们受到常用 objective 的启发,但在方法上有很大不同:

    • "prefix language modeling" objective:这种技术将 a span of text 分成两部分,一部分作为编码器的输入序列,另一部分作为由解码器预测的target 序列。

    • "masked language modeling" objective 启发的 objective"masked language modeling" 需要 a span of text ,并破坏了15%token 。在所有 corrupted tokens 中,90% 被替换成一个特殊的 mask token10% 被替换成一个随机 token

      由于 BERT 是一个 encoder-only 模型,它在预训练期间的目标是在编码器的输出端重建 masked tokens 。在 encoder-decoder 的情况下,我们只是将完整的原始序列作为 target 。请注意,这与我们的 baseline objective 不同,在 baseline objective 中只使用 corrupted tokens 作为 target ;我们在实验中比较了这两种方法。

    • deshuffling objective:这种方法需要一个 token 序列,对其进行混洗,然后使用完整的原始序列作为 target

    Table 3 的前三行提供了这三种方法的 inputstargets 的例子。这三个 objectives 的性能如下表所示。可以发现:

    • 总的来说, BERT-style objective 表现最好,尽管 prefix language modeling objective 在翻译任务上达到了类似的性能。事实上,BERT objective 的动机是为了超越基于语言模型的预训练。

    • deshuffling objective 的表现比 prefix language modeling objectiveBERT-style objective 都要差很多。

  3. 简化 BERT Objective:基于上一节的结果,我们现在将重点探索对 BERT-style denoising objective 的修改。这个objective 最初是作为一个预训练技术而提出的,用于为分类和 span prediction 而训练的 encoder-only 模型。因此,有可能对其进行修改,使其在我们的 encoder-decoder text-to-text setup 中表现得更好或更有效。

    • 首先,我们考虑 BERT-style objective 的一个简单变体:不包括 random token 而仅有 mask token (占所有 token 中的比例为 15%)。MASS 使用了一个类似的 masking objective,所以我们把这个变体称为 "MASS-style" objective

    • 其次,我们有兴趣看看是否有可能避免预测完整的原始序列,因为这需要解码器在长序列上的 self-attention 。我们考虑了两种策略:

      • 首先,我们不是用一组 mask token 来一一对应地替换每个 corrupted token ,而是用单个 unique mask token 来替换整个区间的 corrupted tokens 。然后,我们将所有的corrupted span 、以及所有的 unique mask token 的拼接作为 target 序列。

        这就是我们在 baseline 中使用的 pre-training objective ,如 Table 3 中的第五行所示(即 iid.noise, replace spans)。

      • 其次,我们还考虑了一个变体:仅仅从输入序列中完全删除 corrupted tokens ,而让模型按顺序重建 dropped tokens 。其中,我们将 dropped tokens 的拼接作为 target 序列,如 Table 3 中的第六行所示(即 iid.noise, drop tokens)。

    下表展示了原始的 BERT-style objective 和这三种 objective 的比较结果。可以看到:

    • 在我们的 setting 中,所有这些变体的表现都很相似。

      唯一的例外是,由于dropping corrupted tokensCoLA 上的得分明显较高(60.04 ,而我们的 baseline average53.84,见 Table 16),所以 dropping corrupted tokensGLUE 得分上产生了小的改善。这可能是由于 CoLA 涉及到对一个给定的句子在语法和句法上是否可以接受进行分类,而能够确定什么时候缺少 tokensdetecting acceptability 密切相关。

    • 然而,在 SuperGLUE 上,dropping tokens 的表现比 replacing tokens 的表现要更差。

    • replace corrupted spansdrop corrupted spans 都有潜在的吸引力,因为它们使 target 序列更短,从而使训练更快。

  4. 变化的 Corruption Rate:到目前为止,我们一直在破坏 15%token ,这是 BERT 中使用的值。同样,由于我们的 text-to-text 框架与 BERT 的不同,我们有兴趣看看不同的破坏率 corruption rate 是否对我们更有效。我们在下表中比较了 10%, 15%, 25%, 50% 的破坏率。可以看到:

    • 总体而言,我们发现破坏率对模型的性能影响有限。唯一的例外是,我们考虑的最大破坏率(50%)导致 GLUESQuAD 的性能明显下降。

    • 使用更大的破坏率也会导致更长的targets 序列,这有可能会减慢训练速度。

      encoer-decoder 架构中,更小的破坏率导致更长的 encoder-input 和更短的 decoder-input;更大的破坏率导致更短的 encoder-input 和更长的 decoder-input 。在序列生成任务中,生成一个 token 的计算成本较高(在 decoder 侧),而编码一个 token 的计算成本较低(在 encoder 侧)。

    基于这些结果和 BERT 的历史先例,我们将在未来使用 15% 的破坏率。

  5. Corrupting Spans:我们现在转向通过预测更短的targets 序列来加速训练。到目前为止,我们所使用的方法是对每个 input token 进行独立同分布地判断,以决定是否对其进行破坏。当多个consecutive tokens 被破坏时,它们被视为一个 "span",并使用单个unique mask token 来替换整个 span 。用单个 token 替换整个 span 的结果是:未标记的文本数据被处理成较短的序列。

    由于我们使用的是一个 i.i.d. corruption strategy ,所以并不总是有大量的 corrupted tokens 连续出现。因此,我们可以通过专门破坏 spans of tokens ,而不是以 i.i.d. 的方式破坏单个 tokens 来获得额外的加速。corrupting spans 以前也被认为是BERTpre-training objectiveSpanBERT 发现它可以提高性能。

    为了测试这个想法,我们考虑一个objective ,它专门破坏连续的、随机间隔的 spans of tokens ,即Table3 中的 random spans objective 。这个objective 可以通过 corrupted tokens 的比例、以及 corrupted spans 的总数进行参数化。然后随机选择 span length 从而满足这些指定的参数。例如,如果我们正在处理一个有 500token 的序列,并且我们指定 15%tokens 应该被破坏,并且总共应该有 25span ,那么 corrupted tokens 总数将是 500*0.15=75 ,平均 span length 将是 75/25=3

    我们在下表中比较了 span-corruption objectivei.i.d-corruption objective 。我们在所有情况下使用 15% 的破坏率,并使用 2, 3, 5, 10 的平均 span length 进行比较。可以看到:

    • 这些 objective 之间的差异有限,尽管在某些情况下,平均 span length10 的版本略微低于其他值。

    • 在大多数 non-translation benchmarks 上,使用 3 的平均 span length 略微(但明显)优于 i.i.d. objective

  6. 讨论:下图显示了我们在探索无监督 objective 期间所做选择的流程图。

    • 总体而言,对于预训练而言,我们观察到的最显著的性能差异是 denoising objective 优于 language modelingdeshuffling

    • 在我们探索的 denoising objective 的众多变体中,我们没有观察到明显的差异。

      然而,不同的objective会导致不同的序列长度,从而导致不同的训练速度。这意味着,在我们这里考虑的 denoising objective 中的选择,主要应根据其计算成本来进行(即,尽量选择 target 序列较短的 objective )。

    • 我们的结果还表明,对于我们所考虑的任务和模型来说,对类似于我们这里所考虑的 objective 的额外探索可能不会导致显著的收益。

26.2.4 预训练数据集

  1. unsupervised objective 一样,预训练数据集本身也是迁移学习 pipeline 的一个重要组成部分。然而,与 objectivebenchmars 不同的是,新的预训练数据集通常不被视为重大贡献,而且通常不会与预训练模型和代码一起发布。相反,它们通常是在介绍新方法、或新模型的过程中被引入。因此,不同的预训练数据集的比较相对较少,也缺乏用于预训练的 "标准" 数据集。为了更深入地探究预训练数据集对性能的影响,在本节中我们比较了我们的 C4 数据集的变体、以及其他潜在的预训练数据源。我们将所有的C4数据集的变体作为 TensorFlow Datasets 的一部分发布。

  2. 未标记数据集:在创建 C4 数据集时,我们开发了各种启发式方法来过滤来自 Common Crawlweb-extracted 文本。我们感兴趣的是:这种过滤是否提升了下游任务的性能。此外,我们也比较了其它过滤方法、以及其他常见的预训练数据集。为此,我们比较了我们的 baseline 模型在以下数据集上预训练后的表现:

    • C4:它作为 baseline,制作方法如前文所述。

    • Unfiltered C4:未被过滤的 C4 的替代版本。请注意,我们仍然使用 langdetect 来抽取英文文本。因此,我们的 "unfiltered" 变体仍然包含一些过滤。

    • RealNews-like:我们通过额外过滤 C4 来生成另一个未标记的数据集,只包括来自 "RealNews" 数据集(《Defending against neural fake news》)中使用的一个 domain 的内容。

    • WebText-likeWebText 数据集只使用了提交给 Reddit 并获得至少 3 分的网页内容。提交给 Reddit 的网页的分数是根据赞同(upvote)或反对(downvote)该网页的用户比例计算的。使用 Reddit 分数作为质量信号背后的想法是:该网站的用户只会对高质量的文本内容进行投票。

      为了生成一个可比较的数据集,我们首先尝试从 C4 中删除所有不是来自 OpenWebText 工作所编制的列表中的 URL 的内容。然而,这导致了相对较少的内容(只有大约 2GB ),因为大多数网页从未出现在 Reddit 上。回顾一下,C4 是基于一个月的Common Crawl 数据而创建的。为了避免使用一个过小的数据集,我们因此从 Common Crawl 下载了 20188 月至 20197 月的 12 个月的数据,然后应用针对 C4 的启发式过滤,然后应用Reddit 过滤器。这产生了一个 17GBWebText-like 数据集,其大小与原始的 40GB WebText 数据集是可比的。

    • Wikipedia:我们使用来自 TensorFlow DatasetsEnglish Wikipedia 文本数据,其中省略了文章中的任何 markupreference 章节段落。

    • Wikipedia + Toronto Books Corpus:使用Wikipedia 的预训练数据的一个缺点是,它只代表自然文本的一个可能的领域(百科全书文章)。为了缓解这一问题,BERT将来自 Wikipedia 的数据与 Toronto Books Corpus : TBC 相结合。TBC 包含从电子书中抽取的文本,这代表了不同领域的自然语言。BERT 的普及使得 Wikipedia + TBC 的组合被用于许多后续的工作中。

    在这些数据集上进行预训练后取得的结果如下表所示。

    • 第一个明显的收获是,从 C4 中移除启发式过滤会统一降低性能,并使未过滤的变体在每个任务中表现最差。

    • 除此之外,我们发现在某些情况下,具有更受限领域的预训练数据集的表现优于多样化的 C4 数据集。例如:

      • 使用 Wikipedia + TBC 语料库产生了 73.24 分的 SuperGLUE 分数,超过了我们的 C4 数据集的 71.36 。这几乎完全归功于 MultiRCExact Match 得分从 25.78C4 baseline )提升到 50.93Wikipedia + TBC,见 Table 16 所示)。

        MultiRC 是一个阅读理解数据集,其最大的数据来源来自于小说书籍,这正是 TBC 所涵盖的领域。

      • 同样,使用 RealNews-like 的数据集进行预训练,使 ReCoRDExact Match 得分从 68.16 提高到 73.72ReCoRD 是一个在新闻文章上衡量阅读理解的数据集。

      • 作为最后一个例子,使用 Wikipedia 的数据在 SQuAD 上产生了明显的(但不那么引人注目)的收益。 SQuAD 是一个问答数据集,其段落来源自 Wikipedia

        是否有数据泄露问题?SQuADWikipedia 数据集都来自同一个地方。但是作者并未说明。

      在之前的工作中也有类似的观察,例如 《SciBERT: A pretrained language model for scientific text》发现,在 research papers 的文本上对 BERT 进行预训练,提高了其在科学任务上的表现。

      这些发现背后的主要教训是:对 in-domain 未标记数据的预训练可以提高下游任务的性能。RoBERTa 还观察到:在一个更多样化的数据集上进行预训练,在下游任务上产生了改进。这一观察也激励了自然语言处理在 domain adaptation 的平行研究方向。

      “更多样化的数据集“ 意味着 out-domain,而本文的结论是 in-domain 。既然二者都能提高下游任务的性能,是否意味着只要增加数据规模即可,而无需关心是 in-domain 还是 out-domain?当然,噪音数据除外,增加更多的噪音还会损害任务的性能。

    • 只在单一领域进行预训练的一个缺点是,所得到的数据集往往小得多。例如, WebText-like 变体表现与 C4 数据集一样好甚至更好,但 Reddit-based filtering 产生的数据集比 C4 小约 40 倍,尽管它基于Common Crawl12 倍的数据。

      数据集小很多并不一定意味着是缺点。如果数据集更小,但是效果相当,那么这意味着节省了预训练的时间成本和硬件成本。

      请注意,在我们的 baseline setting 中,我们只对 23534B $ 2^{35} \simeq 34B $ 个 token 进行预训练,这只比我们考虑的最小的预训练数据集大 8 倍左右。我们将在下一节研究在什么时候使用一个更小的预训练数据集会带来问题。

      假设平均每个 token 为四个字符占据四个字节,那么 34B 大约136GB,是 16GB8.5 倍。由于 C4 数据集是 745GB ,这表明 C4 的预训练甚至不足一个 epoch

  3. 预训练数据集的规模:我们用来创建 C4pipeline 被设计为能够创建非常大的预训练数据集。有了这么多的数据,我们就可以在不重复样本的情况下对模型进行预训练。目前还不清楚在预训练期间重复样本对下游性能是有帮助还是有害,因为我们的 pre-training objective 本身就是随机的,可以帮助防止模型多次看到完全相同的数据。

    为了测试未标记数据集规模的影响,我们在人为截断的 C4 版本上预训练了我们的 baseline 模型。回顾一下,我们在 23534B $ 2^{35}\simeq 34B $ 个tokenC4 总规模的一小部分)上预训练我们的 baseline 模型。我们考虑在由 229,227,225,223 $ 2^{29}, 2^{27}, 2^{25}, 2^{23} $ 个 token 组成的 C4 的截断变体上进行训练。这些规模对应于在预训练过程中分别重复数据集 64, 256, 1024, 4096 次(从而确保每个预训练的总 token 预算是固定的)。

    由此产生的下游性能如下表所示(注意,这里 Full dataset 指的并不是完成的 C4 数据集,而是 34Btoken 的截断的 C4 数据集):

    • 正如预期的那样,性能随着数据集的缩小而下降。我们怀疑这可能是由于这个事实:模型开始记忆预训练数据集。

      为了衡量这是否属实,我们在 Figure 6 中绘制了每个数据集规模的训练损失。事实上,随着预训练数据集规模的缩小,模型的训练损失明显变小,这表明可能存在记忆现象。《Cloze-driven pretraining of self-attention networks》 同样观察到:截断预训练数据集的规模会降低下游的任务表现。

    • 当预训练数据集只重复 64 次时,这些影响是有限的。这表明,一定数量的重复预训练数据可能不会造成伤害。然而,考虑到额外的预训练数据可能是有益的(在后面的实验将展示这一点),而且获得额外的未标记数据是廉价和容易的,我们建议尽可能地使用大的预训练数据集。

    • 这种影响对于较大的模型规模来说可能更加明显,也就是说,较大的模型可能更容易对较小的预训练数据集过拟合。

26.2.5 训练策略

  1. 到目前为止,我们已经考虑了这样的setting:模型的所有参数都在无监督任务上进行预训练,然后再在各个监督任务上进行微调。在本节中,我们将比较不同的微调方案、以及在多个任务上同时训练模型的方法。

  2. 微调方法:有人认为,对模型的所有参数进行微调会导致不理想的结果,特别是在 low-resource 任务上(《To tune or not to tune? adapting pretrained representations to diverse tasks》)。早期关于文本分类任务的迁移学习的结果主张只微调一个小分类器的参数,该分类器被馈入由 fixed pre-trained model 所产生的 sentence embedding 。这种方法不太适用于我们的 encoder-decoder 模型,因为整个解码器必须被训练成针对给定的任务输出 target sequences 。相反,我们专注于两种替代的微调方法,这些方法只更新我们的 encoder-decoder 模型的参数子集。

    • 第一种微调方法是 "adapter layers"《Parameter-efficient transfer learning for NLP》《Simple, scalable adaptation for neural machine translation》),其动机是为了在微调时保持大部分原始模型是固定的。adapter layers 是额外的 dense-ReLU-dense blocks(即,new feed-forward network ) ,在 Transformer 的每个 block 中的每个已有的 feed-forward networks 之后添加。这些新的 new feed-forward networks 被设计成使其输出维度与输入相匹配。这使得它们可以被插入到网络中,而无需对结构或参数进行额外的改变。

      假设TransformerFFN 的输出为 1024 维,那么可以添加一个 new FFN,其输入维度为 1024 维、中间隐层维度为 d $ d $ 、输出维度为 1024 维。

      它的原理是:pretrained model 已经学到了良好的 representation,而微调期间 adapter layer 负责将新的数据投影到这个 representation space ,而不是让 pretrained model 去学习新的 representation space 。即:数据适配模型,而不是模型适配数据。

      在进行微调时,只有 adapter layerlayer normalization 参数被更新。这种方法的主要超参数是 new feed-forward network 的内部维度 d $ d $ ,它改变了添加到模型中的新参数数量。我们对 d $ d $ 的各种值进行了实验。

    • 第二种微调方法是 "gradual unfreezing"《Universal language model fine-tuning for text classification》)。在 gradual unfreezing 中,随着时间的推移,越来越多的模型参数被微调。 gradual unfreezing 最初被应用于由单个 stack 组成的语言模型架构。在这种情况下,在微调开始时,只有最后一层的参数被更新;然后在训练了一定数量的 updates 后,倒数第二层的参数也被包括在内。以此类推,直到整个网络的参数被微调。为了使这种方法适用于我们的 encoder-decoder 模型,我们在编码器和解码器中平行地逐渐解冻各层,在对编码器和解码器都从顶部开始解冻。

      由于我们的 input embedding matrixoutput classification matrix 的参数是共享的,我们在整个微调过程中更新它们。

      回顾一下,我们的 baseline 模型中编码器和解码器各由 12 层组成,微调了 218 $ 2^{18} $ 步。因此,我们将微调过程细分为 12 组,每组 218/12 $ 2^{18}/12 $ 步,并在第 n 组中微调从第 12-n 层到 12 层。

      我们注意到,《Universal language model fine-tuning for text classification》 建议在每个 epoch 之后再微调一个额外的层。然而,由于我们的监督数据集的大小变化很大,而且我们的一些下游任务实际上是许多任务的混合物(GLUESuperGLUE ),我们反而采用了更简单的策略,即每 218/12 $ 2^{18}/12 $ 步之后再微调一个额外的层。

    这些微调方法的性能比较见下表所示。对于 adapter layers ,我们使用 d=32/ 128/ 512/ 2048 。可以看到:

    • 类似过去的结果(《Parameter-efficient transfer learning for NLP》《Simple, scalable adaptation for neural machine translation》),像 SQuAD 这样的 lower-resource 任务在小的 d $ d $ 值下工作得很好,而 higher resource 任务需要大的维度来实现合理的性能。

      这表明,只要维度与任务规模相适应, adapter layers 可能是一种有前途的技术从而在较少参数上进行微调。

      注意,在我们的 case 中,我们将 GLUESuperGLUE 各自作为一个单一的 "任务",将它们的子数据集拼接起来,所以尽管它们包括一些 low-resource 数据集,但合并后的数据集足够大,以至于需要一个大的 d $ d $ 值。

    • gradual unfreezing 在所有的任务中都造成了轻微的性能下降,尽管它在微调期间确实提供了一些加速。通过更仔细地调优 unfreezing schedule ,可能会得到更好的结果。

    第一行 All parameters 指的是微调所有的模型参数。

    整体而言,"gradual unfreezing" 的效果要好得多。

  3. 多任务学习:到目前为止,我们一直在单个无监督学习任务上预训练我们的模型,然后在每个下游任务上单独进行微调。另一种被称为 "多任务学习" 的方法,是一次在多个任务上训练模型。这种方法的目标通常是训练一个可以同时执行许多任务的单一模型,也就是说,该模型和它的大部分参数在所有任务中都是共享的。

    我们在一定程度上放松了这一目标,而是研究一次对多个任务进行训练的方法,以便最终产生在每个单独任务上表现良好的单独的 parameter settings 。例如,我们可能在许多任务上训练一个单一的模型,但在报告性能时,我们可以为每个任务选择一个不同的checkpoint。这就放松了多任务学习的框架,与我们迄今为止所考虑的 pre-train-then-fine-tune 的方法相比,使其处于更平等的地位。

    我们还注意到,在我们统一的 text-to-text 框架中,"多任务学习" 仅仅对应于将数据集混合在一起。 由此可见,通过将预训练的无监督任务视为被混合在一起的任务之一(其它的任务还包括下游的监督学习任务),我们仍然使用多任务学习来在未标记数据上训练。相比之下,多任务学习在 NLP 中的大多数应用都增加了 task-specific 的分类网络,或者为每个任务使用不同的损失函数。

    正如 《Massively multilingual neural machine translation in the wild: Findings and challenges》所指出的,多任务学习中一个极其重要的因素是,模型应该在每个任务中训练多少数据。我们的目标是不对模型进行 under-trainover-train:即,我们希望模型能够看到足够多的来自给定任务的数据使模型能够很好地执行任务,但又不希望看到太多的数据以至于模型记住了训练集。如何准确地设置来自每个任务的数据比例取决于各种因素,包括数据集的大小、学习任务的 "难度"(即模型在能够有效执行任务之前必须看到多少数据)、正则化等等。

    另一个问题是 "任务干扰" 或 "负转移negative transfer "的可能性,即在一项任务上取得良好的表现会阻碍另一项任务的表现。考虑到这些问题,我们首先探索了各种策略从而用于设置来自每个任务的数据比例。 《Can you tell me how to get past Sesame Street? Sentence-level pretraining beyond language modeling》 也进行了类似的探索。

    • examples-proportional mixing:模型对一个给定任务的过拟合速度的一个主要因素是任务的数据集规模。因此,设置混合比例 mixing proportion 的一个自然方法是按照每个任务的数据集的大小来采样。这相当于将所有任务的数据集串联起来,并从合并后的数据集中随机采样。

      然而,请注意,我们包括我们的 unsupervised denoising task ,它使用的数据集比其他任务的数据集大几个数量级。因此,如果我们简单地按照每个数据集的大小采样,模型看到的绝大多数数据将是未标记的,它将对所有的监督任务 under-train 。即使没有无监督任务,一些任务(如 WMT English to French )也非常大,同样会占据大部分的 batch

      为了解决这个问题,我们在计算比例之前对数据集的大小设置了一个人为的 "limit" 。具体而言,如果 N $ N $ 个任务的每个数据集中的样本数量是 en,n{1,,N} $ e_n, n \in \{1, \cdots,N\} $ ,那么在训练期间我们将从第 m $ m $ 个任务中采样的概率设为 rm=min(em,K)/min(en,K) $ r_m = \min(e_m,K)/\sum \min(e_n,K) $ ,其中 K $ K $ 是人工设置的数据集规模限制。

      即,将数据集大小设置一个阈值 K $ K $ 从而计算采样概率。注意,并没有对数据集进行真实的截断,这里仅仅是用于计算采样概率。

    • temperature-scaled mixing:缓解数据集规模之间巨大差异的另一种方法是调整混合率的 "温度"。这种方法被 multilingual BERT 使用,以确保模型在 low-resource 语言上得到充分的训练。为了实现与温度 T $ T $ 的比例关系,我们将每个任务的混合率 rm $ r_m $ 提高到 1/T $ 1/T $ 次幂(即,rmrm1/T $ r_m\leftarrow r_m^{1/T} $ ),并将混合率重新归一化使混合率的总和为 1.0 。当 T=1 $ T=1 $ 时,这种方法相当于 examples-proportional mixing ;随着 T $ T $ 的增加,混合率变得更接近于equal mixing

      我们保留了数据集规模的限制 K $ K $ (用于在温度缩放前获得 rm $ r_m $ ),但将其设置为一个比较大的值 K=221 $ K=2^{21} $ 。我们使用大的 K $ K $ 值是因为提高温度会降低最大数据集的混合率。

    • equal mixing:在这种情况下,我们以相等的概率从每个任务中抽取样本。具体而言,每个 batch 中的每个样本都是从均匀随机采样的训练集中而来(注,均匀指的是数据集本身)。这很可能是一个次优策略,因为模型在 low-resource 任务上会迅速过拟合,而在 high-resource 任务上则欠拟合。我们主要把它作为一个参考点 reference point ,说明当比例设置得不理想时,可能会出现什么问题。

    为了将这些混合策略与我们的 baseline pre-train-then-fine-tune 进行平等的比较,我们对多任务模型进行相同的总步数训练:219+218=786432 $ 2^{19} + 2^{18} = 786432 $ 。对比结果如下表所示。可以看到:总的来说,我们发现在大多数任务上,多任务训练比 pre-train-then-fine-tune 效果要差。

    注意,T5 的多任务训练其实就是把多个任务的数据集混合在一起,实验比较了不同的混合比例。这里没有微调阶段。

    • equal mixing 策略尤其导致性能急剧下降,这可能是因为 low-resource 任务已经过拟合、 high-resource 任务没有看到足够的数据、或者模型没有看到足够多的未标记的数据来学习通用语言能力。

    • 对于 examples-proportional mixing 策略,我们发现对于大多数任务来说,存在 K $ K $ 的一个 "甜蜜点 sweet spot ",在那个 K $ K $ 值时模型获得了最好的性能,而更大或更小的 K $ K $ 值往往会导致更差的性能。例外的情况(在我们考虑的 K $ K $ 值范围内)是WMT English to French 翻译,这是一个 high-resource 任务,它总是受益于较高的 K $ K $ 。

    • 最后,我们注意到, temperature-scaled mixing 也提供了一种从大多数任务中获得合理性能的方法,其中 T=2 $ T=2 $ 在大多数情况下表现最好。

    《Massively multi-lingual neural machine translation in the wild: Findings and challenges》《The natural language decathlon: Multitask learning as question answering》 之前已经观察到多任务模型的表现优于在每个单独任务上训练的单独模型,而且 《Multi-task deep neural networks for natural language understanding》《Snorkel MeTaL: Weak supervision for multi-task learning》 已经表明多任务setup 可以在非常相似的任务中带来好处。

    接下来,我们将探讨如何缩小多任务训练与 pre-train-then-fine-tune 方法之间的差距。

    相比微调,多任务方法有几个优势:

    • 多任务模型只需要维护一个模型就可以处理多个任务。而微调方法需要针对每个任务微调一个模型,最终得到多个模型,这不利于模型的部署和管理。

    • 多任务模型可以跨任务泛化,有助于已有任务和新任务的预测性能。

  4. 将多任务学习与微调相结合:回顾一下,我们正在研究一个宽松的多任务学习版本,在这个版本中,我们在一个混合任务上训练一个单一的模型,但允许我们使用模型的不同 checkpoints 来评估性能。我们可以通过考虑以下情况来扩展这种方法:模型一次性在所有任务上进行预训练,然后在单个监督任务上进行微调。这是 MT-DNN 使用的方法,该方法在推出时在 GLUE 和其他 benchmark 上取得了SOTA 的性能。我们考虑这种方法的三种变体:

    • 在第一种情况下,我们采用 examples-proportional mixture 对模型进行预训练,其中 K=219 $ K=2^{19} $ ,然后在每个单独的下游任务上对其进行微调。这有助于我们衡量在预训练期间,包含监督任务是否对下游任务有帮助。

    • 我们还希望,在预训练模型适应单个任务之前,混合许多监督源可以帮助它获得一组更普遍的 "技能"。为了直接衡量这一点,我们考虑了第二个变体,即我们在相同的 examples-proportional mixtureK=219 $ K=2^{19} $ )上对模型进行预训练,只是我们从这个 pre-training mixture 中省略了一个下游任务。然后,我们在预训练时遗漏的任务上对模型进行微调。

      我们对每一个下游任务重复这一过程。我们称这种方法为 "leave-one-out" 多任务训练。这模拟了现实世界的情况,即预训练好的模型在预训练期间没有看到的任务上被微调。

    • 注意,多任务预训练提供了监督任务的一个 diverse mixture 。由于其他领域(如计算机视觉)使用监督数据集进行预训练,我们有兴趣看看从 multi-task pre-training mixture 中省略无监督任务是否仍然产生良好的结果。因此,在我们的第三个变体中,我们用 K=219 $ K=2^{19} $ 的所有监督任务的 examples-proportional mixture 进行预训练。

    在所有这些变体中,我们都遵循我们的标准程序,先进行 219 $ 2^{19} $ 步的预训练、再进行 218 $ 2^{18} $ 步的微调。

    这些方法的比较结果如下表所示。为了比较,我们还包括了我们的 baselinepre-train-then-fine-tune)和标准的多任务学习(没有微调)在 K=219 $ K=2^{19} $ 的 examples-proportional mixture 上的结果。可以看到:

    • 在多任务预训练之后进行微调,其结果与我们的 baseline 相当。这表明,在多任务学习之后使用微调可以帮助缓解前文中描述的不同混合率之间的一些 trade-off 问题。

    • 有趣的是,leave-one-out 训练的性能只是稍微差一点,这表明一个在各种任务上训练过的模型仍然可以适应新的任务(即多任务预训练可能不会导致夸张的任务干扰)。

    • 最后,除了翻译任务外,supervised multi-task pre-training 在每种情况下都表现得很差。这可能表明,翻译任务从预训练中获益较少,而无监督的预训练在其他任务中是一个重要因素。

    既然多任务(包括无监督预训练任务)加微调的效果,并没有显著超越无监督预训练加微调,那么为什么要用多任务?不仅费时费力,还需要收集更多的监督数据。因此,无监督预训练 + 微调即可,最重要的就是搜集大型高质量的预训练数据集。

    根据 MT-DNN 的结论,多任务加微调是可以提升效果的。在 MT-DNN 中,不同的任务共享 backbone ,但是每个任务具有 task-specific 输出。而在 T5 中,所有任务共享同一个模型(不仅共享 backbone,也共享输出层),因此可能影响多任务的利用。为此,后续的 ExT5 聚焦于改善多任务的利用。

26.2.6 Scaling

  1. 机器学习研究的 "惨痛教训" 认为,能够利用额外计算的通用方法最终会战胜依赖人类专业知识的方法。最近的结果表明,对于自然语言处理中的迁移学习,这可能成立,即:已经多次证明,与更精心设计的方法相比,scaling up 可以提高性能。然而,有多种可能的 scale 方式,包括使用更大的模型、对模型进行更多step 的训练、以及 ensembling 。在本节中,我们通过在如下的前提下来比较这些不同的方法:"你刚刚得到了 4倍的计算量,你应该如何使用它?"

    我们从我们的 baseline 模型开始,它有 220M 的参数,分别预训练 219 $ 2^{19} $ 步、以及微调 218 $ 2^{18} $ 步。编码器和解码器的规模都与 BERT_BASE 类似。

    在增加模型规模的实验中,我们遵循 BERT_LARGE 的指导方针,使用 dff=4096,dmodel=1024,dkv=64 $ d_\text{ff}=4096, d_\text{model}=1024, d_\text{kv}=64 $ 和 head = 16 的注意力机制。然后,我们产生了两个变体,分别对应于 16 层和 32 层(注,编码器解码器都为 16 层、以及编码器和解码器都为 32 层),产生的模型的参数是我们原始模型的 2 倍和 4 倍。这两个变体也有大约 2 倍和 4 倍的计算成本。

    利用我们的 baseline 和这两个更大的模型,我们考虑了三种使用 4倍计算量的方法:用相同的模型训练 4 倍的 step、用 2倍大的模型训练 2倍的step、用 4倍大的模型训练相同的step

    当我们增加训练step 时,为了简单起见,我们同时扩大预训练step 和微调 step 。请注意,当增加预训练 step 时,我们实际上包括了更多的预训练数据,因为 C4 是如此之大以至于我们在训练 223 $ 2^{23} $ 步时也没有完成对数据的一次遍历。

    让模型看到 4 倍的数据的另一种方法是将 batch size 增加 4 倍。由于更有效的并行化,这有可能导致更快的训练。然而,用 4倍大的 batch size 进行训练可能会产生与 4倍多的training step 不同的结果(《Measuring the effects of data parallelism on neural network training》)。我们包括一个额外的实验,用 4 倍大的 batch size 训练我们的 baseline 模型,从而比较这两种情况。

    在我们考虑的许多benchmark 上,通过使用 model ensemble 进行训练和评估来获得额外的性能是常见的做法。这提供了一种使用额外计算的正交方式。为了比较其他的 scaling 方法和 ensembling ,我们还测量了 ensemble 的性能,其中这个 ensemble4 个单独预训练和微调的模型组成。在将 logits 馈入 output softmax 之前,我们对整个 ensemblelogits 进行平均,以获得 aggregate prediction 。与其预训练 4 个单独的模型,一个更便宜的选择是采用一个预训练的模型,并产生 4 个单独的微调版本。虽然这没有使用我们整个 4倍的计算预算,但我们也包括了这种方法,看看它是否能产生与其他 scaling 方法相竞争的性能。

    下游任务的同一个监督数据集上,如何产生四个微调版本?论文并未说明。一个简单的方案是:对监督数据集执行四次不同的 train/validate/test 数据集拆分,每种拆分训练一个微调版本。

    下表显示了应用这些不同的 scaling 方法后取得的性能。

    • 不足为奇的是,增加训练时间和/或模型规模一直在改善 baseline

    • 训练 4 倍的step 或使用 4 倍大的 batch size 之间没有明显的赢家,尽管两者都有好处。

    • 一般来说,与单纯增加训练时间或batch size 相比,增加模型规模会导致性能的额外提升。

      baseline1xsize, 4 x training steps1x size, 4 x batch size 是增加训练时间或 batch size。而从 baseline4 x size, 1 x training steps 是增加模型规模。后者的提升幅度更大。

    • 在我们研究的任何任务中,我们没有观察到训练一个2 倍大的模型(但是增加 2 倍训练时间)和训练一个 4 倍大的模型之间有很大的区别。这表明,增加训练时间和增加模型规模可以作为提高性能的补充手段。

    • 我们的结果还表明,ensembling 提供了一种正交的、有效的手段,通过 scale 来提高性能。

      在一些任务中(CNN/DMWMT English to GermanWMT English to Romanian),将 4 个完全独立训练的模型 ensembling 起来的结果明显优于其他所有的scaling 方法。

      将预训练好的模型分别进行微调从而实现 ensembling ,也比 baseline 有了很大的性能提高,这表明该方法是更便宜的提高性能的手段。

      唯一的例外是 SuperGLUE ,它的 ensembling 方法都没有比 baseline 有明显的提高。

    • 我们注意到,不同的 scaling 方法有不同的 trade-off,这些trade-off 与它们的性能是分开的。

      • 例如,相对于小模型,使用更大的模型会使下游的微调和推理更加昂贵。

      • 另外,我们注意到,ensembling N $ N $ 个独立的模型的成本与使用一个具有 N $ N $ 倍计算成本的模型的成本相似(计算成本、存储成本)。

      因此,在选择scaling 方法时,对模型的最终使用的考虑是很重要的。

26.2.7 所有东西放在一起

  1. 我们现在利用我们的系统性研究的见解来确定我们可以在流行的NLP benchmark 上将性能推到什么程度。我们从我们的 baseline training 方法开始,并做了以下改变:

    • Objective:我们将 baseline 中的 i.i.d. denoising objective 换成了 span-corruption objective ,这是受 SpanBERT 的启发。具体来说,我们使用平均 span length3 ,并破坏原始序列的 15% 。我们发现,这个 objective 产生了略微更好的性能,同时由于 target 序列长度较短,计算效率略高。

    • 更长时间的训练:我们的 baseline 模型使用了相对较少的预训练(是 BERT1/4、是 XLNet1/16、是 RoBERTa1/64 )。幸运的是,C4 足够大,我们可以在不重复数据的情况下训练更长的时间。

      我们发现,额外的预训练确实是有帮助的,增加 batch size 或者增加 training step 数量都可以带来这种好处。因此我们选择序列长度 512batch size211=2048 $ 2^{11}=2048 $ 、预训练 1M steps ,对应于总共约 1T 个预训练token (约为我们 baseline32 倍)。

      我们表明在RealNews-like, WebText-like, Wikipedia + TBC 等等数据集上进行预训练,在很多下游任务上的表现会优于在 C4 上的预训练。然而,这些数据集的变体非常小,在对 1Ttoken 进行预训练的过程中,它们会被重复数百次。由于我们表明,这种重复可能是有害的,所以我们选择继续使用 C4 数据集。

    • 模型规模:我们还展示了如何扩大 baseline 模型的规模来提高性能。然而,在计算资源有限的情况下,使用较小的模型对于微调或推理是有帮助的。基于这些因素,我们用一组 model size 来训练模型:

      • Base:这是我们的 baseline 模型,它有大约 220M 个参数。

      • Small:我们考虑一个较小的模型,它通过使用 dmodel=512,dff=2048 $ d_\text{model} = 512, d_\text{ff} = 2048 $ 、 head = 8 的注意力、以及在编码器和解码器中各只有6 层来缩小 baseline 模型的规模。这个变体有大约 60M 个参数。

      • Large:由于我们的baseline 使用 BERT_BASE 规模的编码器和解码器,我们还考虑了一个变体,其中编码器和解码器的规模和结构都与 BERT_LARGE 相似。具体来说,这个变体使用 dmodel=1024,dff=4096,dkv=64 $ d_\text{model}=1024, d_\text{ff}=4096, d_\text{kv}=64 $ 、head = 16 的注意力、以及编码器和解码器各 24 层,导致大约 770M 个参数。

      • 3B and 11B:为了进一步探索使用更大的模型时可能出现的性能,我们考虑了另外两个变体。在这两种情况下,我们都使用 dmodel=1024 $ d_\text{model} = 1024 $ 、24 层的编码器和解码器、以及 dkv=128 $ d_\text{kv} = 128 $ 。

        • 对于 3B 变体,我们使用 dff=16384 $ d_\text{ff}=16384 $ 和 head = 32 的注意力,这导致了大约 2.8 B 个参数。

        • 对于 11B 变体,我们使用 dff=65536 $ d_\text{ff}=65536 $ 和 head = 128 的注意力,这导致了大约 11 B 个参数。

        我们选择扩大 dff $ d_\text{ff} $ 的规模,是因为现代加速器(如我们训练模型的 TPU )对于像 Transformer 的前馈网络中的大型稠密矩阵乘法是最有效的。

        注:在 mT5 论文中,作者提到:对 T5 的改进版本选择扩大 dmodel $ d_\text{model} $ 而不是扩大 dff $ d_\text{ff} $ 。

    • 多任务预训练:我们表明在微调前对无监督和有监督任务的 multi-task mixture 进行预训练,效果与单独对无监督任务进行预训练一样好。这是 MT-DNN 所倡导的方法。它还有一个实际的好处,就是能够在整个预训练期间监测 "下游" 任务的表现,而不是仅仅在微调期间监测。因此,我们在最后一组实验中使用了多任务预训练。

      我们假设,训练时间较长的大型模型可能会受益于较大比例的未标记数据,因为它们更有可能对较小的训练数据集过拟合。然而,我们也注意到,在多任务预训练之后进行微调,可以缓解因选择次优比例的未标记数据而可能出现的一些问题。 基于这些想法,我们在使用标准的 example-proportional mixing 之前,为我们的未标记数据使用以下数据集规模阈值(即,K $ K $ 值):Small710,000Base2,620,000Large8,660,0003B33,500,00011B133,000,000 。对于所有的模型变体,在预训练期间,我们还将 WMT English to FrenchWMT English to German 数据集的有效数据集规模限制在 1M 个样本。

    • 对单个 GLUESuperGLUE 任务进行微调:到目前为止,在对 GLUESuperGLUE 进行微调时,我们将每个 benchmark 中的所有数据集拼接起来,这样我们只对 GLUESuperGLUE 的模型进行一次微调。这种方法使我们的研究在逻辑上更简单,但我们发现,与单独对每个任务进行微调相比,这在某些任务上牺牲了少量的性能。

      在单个任务上进行微调的一个潜在问题是,我们可能会对 low-resource 的任务迅速过拟合,然而可以通过对所有任务进行训练从而得到缓解。例如,对于许多 low-resourceGLUE 任务和 SuperGLUE 任务来说,我们 batch size211 $ 2^{11} $ 的长度为 512 的序列会导致整个数据集在每个 batch 中出现多次。。因此,在对每个GLUESuperGLUE 任务进行微调时,我们使用较小的batch sizebatch size = 8 的长度为 512 的序列。

      我们还每 1000 步而不是每 5000 步保存 checkpoints ,从而确保我们在模型过拟合之前能够获得模型的参数。

    • beam search:我们之前所有的结果都是使用贪婪解码 greedy decoding 的报告。对于具有长输出序列的任务,我们发现使用 beam search可以提高性能。具体而言,我们在 WMT 翻译、以及 CNN/DM 摘要任务中使用 beam width = 4α=0.6 $ \alpha = 0.6 $ 的长度惩罚。

    • 测试集:由于这是我们的最后一组实验,我们报告的是测试集而不是验证集的结果。

      • 对于 CNN/Daily Mail ,我们使用随着数据集分发的标准测试集。

      • 对于 WMT 任务,这相当于使用 newstest2014 进行 English-German测试、newstest2015 进行 English-French 测试、newstest2016 进行 English-Romanian 测试。

      • 对于 GLUESuperGLUE ,我们使用 benchmark evaluation servers 来计算官方测试集的分数。

      • 对于 SQuAD ,在测试集上进行评估需要在一个 benchmark server 上运行推理。不幸的是,该服务器上的计算资源不足以从我们最大的模型中获得预测结果。因此,我们继续报告 SQuAD 验证集的性能。幸运的是,在 SQuAD 测试集上表现最好的模型也在验证集上报告了结果,所以我们仍然可以与表面上SOTA 的模型进行比较。

    除了上面提到的那些变化,我们使用与我们的 baseline 相同的训练程序和超参数(AdaFactor 优化器、用于预训练的逆平方根学习率调度、用于微调的恒定学习率、dropout 正则化、词表大小等)。

    概括起来就是几点:预训练数据集要大、模型规模要大、目标函数要合适。至于多任务预训练,对最终效果影响不大。下游任务微调和 beam search ,这是通用做法并且,通常不难实现。

  2. 这组最后的实验结果如下表所示。

    • 总的来说,在我们考虑的 24 个任务中,我们在 18 个任务上取得了 SOTA 的性能。正如预期的那样,我们最大的( 11B 参数)模型在所有任务中的模型大小变体中表现最好。

    • 我们的 T5-3B 模型变体确实在一些任务中击败了以前的 SOTA ,但将模型规模扩展到 11B 个参数是实现我们最佳性能的最重要因素。

    具体而言:

    • 我们取得了 SOTAGLUE 平均得分 90.3 分。值得注意的是,在自然语言推理任务 MNLIRTEWNLI 中,我们的表现大大优于之前的SOTA

      就参数数量而言,我们的 11B 模型变体是已经提交给 GLUE benchmark 的最大模型。然而,大多数提交的最佳成绩都使用了大量的 ensembling 和计算来产生预测结果。

    • 对于 SQuAD ,我们在 Exact Match 得分上超过了之前的 SOTA,超过了 1 分。

    • 对于 SuperGLUE,我们在 SOTA 的基础上做了很大的改进(从平均得分 84.688.9)。

    • 我们在任何一项 WMT 翻译任务上都没有达到 SOTA 的性能。这可能部分是由于我们使用了一个纯英语的未标记数据集。我们还注意到,这些任务中的大多数最佳结果都使用了回译 back-translation,这是一种复杂的数据增强方案。在低资源的 English to Romanian benchmark 上的 SOTA 也使用了额外的跨语言无监督训练形式(《Cross-lingual language model pretraining》)。

    • 最后,在 CNN/Daily Mail 上,我们达到了 SOTA 性能,尽管只是在 ROUGE-2-F 得分上取得了显著的成绩。

  3. 为了实现其强大的结果,T5 将我们的实验研究的洞察与前所未有的规模相结合。请注意,我们发现扩大预训练数量(总的预训练 token 数量)、或扩大 baseline 模型的规模会产生巨大的收益。鉴于此,我们有兴趣衡量我们引入 T5"non-scaling" 变化对其强大性能的贡献有多大。因此,我们进行了一个最后的实验,比较了以下三种配置:

    • 标准的 baseline 模型在 23534B $ 2^{35} \simeq 34B $ 的 token 上进行预训练。

    • 标准的 baseline 模型在 1Ttoken 上进行预训练(即与 T5 使用的预训练量相同),我们称之为 "baseline-1T"

    • T5-Base

    请注意,baseline-1TT5-Base 之间的差异包括我们在设计 T5 时所作的 "non-scaling" 变化。因此,比较这两个模型的性能给我们提供了一个具体的衡量标准,即我们的系统性研究中的洞察的影响。

    实验结果如下表所示。可以看到:

    • baseline-1T 在所有任务上都超越了baseline ,这表明额外的预训练提高了 baseline 模型的性能。

    • T5-Base 在所有的下游任务上都大大超过了 baseline-1T 。这表明,规模并不是促成 T5 成功的唯一因素。我们假设,较大的模型不仅受益于其规模的增加,而且也受益于这些 non-scaling 因素(如,多任务预训练、针对每个子任务进行微调、beam search 等等)。

26.3 反思

  1. 在完成了我们的系统性研究后,我们首先总结了一些最重要的发现。我们的研究结果为哪些研究途径可能更有希望、或更没有希望提供了一些高层次的视角。最后,我们概述了一些主题,我们认为这些主题可以为该领域的进一步发展提供有效方法。

  2. 经验之谈:

    • text-to-text:我们的 text-to-text 框架提供了一种简单的方法,使用相同的损失函数和解码程序对各种文本任务进行单个的模型训练。我们展示了这种方法如何成功地应用于生成任务,如抽象摘要、分类任务(如自然语言推理)、甚至回归任务(如STS-B)。尽管它很简单,但我们发现 text-to-text 框架获得了与task-specific 架构相当的性能,并在与 scale 相结合时最终产生了 SOTA 的结果。

    • 架构:虽然一些关于 NLP 的迁移学习的工作已经考虑了 Transformer 的架构变体,但我们发现原始的 encoder-decoder 形式在我们的 text-to-text 框架中效果最好。尽管 encoder-decoder 模型使用的参数是 "encoder-only"( 如 BERT )或 "decoder-only" (语言模型)架构的两倍,但 encoder-decoder 模型的计算成本相似。我们还表明,共享编码器和解码器中的参数并没有导致性能的大幅下降,同时将总参数规模减半。

    • unsupervised objective:总的来说,我们发现大多数 denoising objective,即训练模型以重建随机破坏的文本,在 text-to-text setup 中表现相似。因此,我们建议使用产生短的 target 序列的 objective ,以便无监督的预训练在计算上更有效率。

    • 数据集:我们引入了 Colossal Clean Crawled Corpus: C4,它包括从 Common Crawl web dump 中启发式地清理过的文本。在将 C4 与使用额外过滤的数据集进行比较时,我们发现在 in-domain unlabeled data 上进行训练可以提高一些下游任务的性能。然而,对 single domain 的约束通常会导致更小的数据集。

      我们另外表明,当未标记的数据集小到在预训练过程中重复多次时,性能会下降。这就促使我们在通用语言理解任务中使用像 C4 这样的大型的、多样化的数据集。

    • 训练策略:我们发现,在微调过程中更新预训练模型的所有参数的方法,优于那些旨在更新较少参数的方法,尽管更新所有参数是最昂贵的。

      我们还试验了各种方法从而单次训练模型从而用于多个任务,在我们的 text-to-text setting 中,这只是相当于在构建 batch 时将不同数据集的样本混合起来。多任务学习的首要问题是设定每个任务的混合比例。我们最终没有找到一种设置混合比例的策略,使得与 pre-train-then-fine-tune的基本方法的性能相匹配。然而,我们发现,在混合任务上进行预训练后再进行微调,可以产生与无监督预训练相当的性能。

    • Scaling:我们比较了各种利用额外计算的策略,包括在更多的数据上训练模型、训练一个更大的模型、以及使用模型的一个 ensemble 。我们发现每一种方法都能显著提高性能,尽管在更多的数据上训练一个较小的模型,往往比在更少的 step 中训练一个较大的模型要好得多。

      我们还表明,模型 ensemble 可以提供比单个模型更好的结果,这提供了一种利用额外计算的正交手段。此外,有两种 ensemble 策略:每个子模型都是完全单独地 pre-training and fine-tuning、预训练得到一个 base 预训练模型然后微调得到多个子模型。我们发现后者要比前者的效果更差,虽然后者的效果仍然大大优于没有 ensemblebaseline 模型。

    • 突破极限:我们结合上述洞察,训练了更大的模型(多达 11B 个参数),从而在我们考虑的许多 benchmark 中获得 SOTA 的结果。对于无监督训练,我们从 C4 数据集中抽取文本,并应用 denoising objective 从而破坏连续的 spans of tokens 。在对单个任务进行微调之前,我们对 multi-task mixture 进行了预训练。此外,我们的模型是在超过 1Ttoken 上训练的。

      为了便于复制、扩充、以及应用我们的成果,我们公布了我们的代码、C4 数据集、以及每个 T5 变体的预训练模型权重。

  3. 展望:

    • 大型模型的不便之处:我们研究的一个不令人惊讶但重要的结果是,大型模型往往表现更好。用于运行这些模型的硬件不断变得更便宜、更强大,这一事实表明,扩大规模可能仍然是实现更好性能的一种有希望的方式。然而,在一些应用和场景中,使用较小或较便宜的模型总是有帮助的。

      例如,大模型部署的难度较大,很多真实场景都有硬件限制或 latency 的限制。

      与此相关的是,迁移学习的一个有益用途是可以在 low-resource 任务上获得良好的性能。low-resource 任务经常发生在缺乏资金来标记更多数据的环境中。因此,low-resource 的应用往往也只能获得有限的计算资源,这就会产生额外的成本。因此,我们主张研究能用更便宜的模型实现更强性能的方法,以便将迁移学习应用到它能产生最大影响的地方。目前沿着这些方向的一些工作包括知识蒸馏、参数共享、以及条件计算。

    • 更有效的知识抽取:回顾一下,预训练的目标之一是为模型提供通用的 "知识",以提高其在下游任务中的表现。我们在这项工作中使用的方法,也是目前常见的做法,是训练模型对 corrupted spans of text 进行降噪。我们怀疑这种简单的技术可能不是教给模型通用知识的一个非常有效的方法。

      更具体地说,如果能够达到良好的微调性能,而不需要首先在 1T 个文本 token 上训练我们的模型,将是非常有用的。沿着这些思路,一些同时进行的工作通过预训练一个模型来区分真实文本和机器生成的文本来提高效率(《Electra: Pre-training text encoders as discriminators rather than generators》)。

    • 任务之间相似性的公式化:我们观察到,对未标记的 in-domain data 进行预训练可以提高下游任务的性能。这一发现主要依赖于基本的观察,比如 SQuAD 是使用 Wikipedia 的数据创建的。制定一个关于预训练和下游任务之间的 "相似性" 的更严格的概念将是有用的,这样我们就可以对使用什么来源的未标记数据做出更有原则的选择。在计算机视觉领域有一些早期的经验性工作。一个更好的任务关联性 relatedness 概念也可以帮助选择有监督的预训练任务,这已经被证明对 GLUE benchmark 有帮助(《Sentence encoders on STILTs: Supplementary training on intermediate labeled-data tasks》)。

    • 语言无关模型:我们失望地发现,在我们研究的翻译任务中, English-only pre-training 没有达到 SOTA 的结果。我们也有兴趣避免需要提前指定一个可以编码哪些语言的词表的困难。为了解决这些问题,我们有兴趣进一步研究语言无关 language-agnostic 的模型,即无论文本的语言如何,都能以良好的性能执行特定的 NLP 任务的模型。

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

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

发布评论

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