刘铁岩:如何四两拨千斤,高效地预训练NLP模型?
智源社区 & AI科技评论作者 | 熊宇轩智源导读:2020 年 11 月 1 日,微软亚洲研究院副院长、IEEE会士、ACM杰出科学家刘铁岩博士在第十九届中国计算语言学大会(C...
智源社区 & AI科技评论
作者 | 熊宇轩
智源导读:2020 年 11 月 1 日,微软亚洲研究院副院长、IEEE会士、ACM杰出科学家刘铁岩博士在第十九届中国计算语言学大会(CCL)上发表了题为「四两拨千斤:实现高效的NLP模型预训练」的主题演讲。目前,GPT-3 等模型的预训练任务需要使用大量的计算资源,计算效率低下。在本次演讲中,刘铁岩博士从数据处理、模型结构、损失函数、优化算法等多个维度介绍了微软亚洲研究院(MSRA)的研究者们针对高效 NLP 模型训练的研究。
01
大规模预训练模型
图 1:自然语言理解
2018 年,微软亚洲研究院主任研究员周明博士带领其团队在自然语言理解数据集 SQuAD 1.1 上使用深度学习方法首次使机器阅读理解达到了人类的水平,进一步吸引了越来越多的研究人员加入到该赛道中来,不断刷新该领域的世界纪录。
图 2:机器翻译
此外,微软 2018 年研发的「中-英」机器翻译技术的翻译水平也可以「与人类相媲美」,刘铁岩教授团队所研发的「对偶学习」技术正是这一成就背后的核心技术。次年,微软将对偶学习技术应用到了更多的语言对上,在 WMT 2019 的多个赛道中取得了优异的成绩。
图 3:内容生成
近年来,自然语言处理模型的预训练成为了 NLP 研究领域的热点,著名的 GPT-3 最近也掀起了一波新的研究浪潮, 它在内容生成、问答系统等任务中都取得了令人瞩目的优异性能。
图 4:Transformer 模型
从机器学习模型的角度来看,2017 年提出的 Transformer 模型是上述预训练技术的基础。除了「编码器-解码器」架构之外,Transformer 还引入了大量的注意力机制(例如,自注意力机制、交叉注意力机制等)。Transformer 是机器学习和 NLP 领域的里程碑式的工作,为我们带来了很多新的可能性。
图 5:大规模预训练——大力出奇迹
然而,2017 年后,人们在机器学习模型创新方面乏善可陈,并未出现类似于 Transformer 的强大的新模型。于是,越来越多的研究人员关注于利用更大的数据量和更强的计算资源,在现有模型的基础上训练规模更大、参数更多的模型架构。他们相信,在使用大量数据和计算资源的条件下,即使使用简单的模型也可以取得比创新性模型更好的性能。
图 6:大规模预训练高昂的计算开销
这种大规模预训练的计算开销是十分巨大的。如图 6 所示,起初大多数科研机构的计算资源还足以复现大规模预训练的结果,然而,2020 年提出的 GPT-3 已经拥有了 1,750 亿个参数,需要花费近 1,200 万美元才能完成一次训练,这是绝大多数科研机构无法负担的。因此,尽管大规模预训练带来许多惊喜的性能提升,但巨大的开销导致相关研究被科技巨头垄断,大多数科研人员的资源并不足以支撑相关的研究,无法实现公平的百家争鸣的局面。这样一来,掌握大量计算资源和资本的寡头可能会完全掌控学术的发展,导致创新停滞,这并不是一种健康的学术生态状况。
02
如何打破魔咒?
我们可以通过对预训练过程形式化建模,分析每一步的计算开销,来改善问题。
图 7:预训练的机器学习视角
如图 7 所示,模型预训练问题可以表述为以下四个方面:
紫色的部分为满足一定底层的概率分布的训练数据;
红色部分为模型架构(例如,神经网络的层数、每层的连接结构、是否包含注意力机制、是否包含跳跃链接等);
绿色的部分为训练的目标函数;
蓝色的部分为最大化或最小化目标函数的优化策略。
案例:BERT
图 8:BERT 简析
以 BERT 为例,在数据方面,BERT 使用了来自于文本语料库与 WikiPedia 的数据;在模型方面,BERT 使用了标准的 12 层 Transformer 架构;在目标函数方面,BERT 使用了基于类似于「完形填空」的掩模语言模型,随机地将 15% 的单词屏蔽掉,并试图根据上下文预测出被屏蔽掉的单词;在优化方面,BERT 采用了标准的 SGD、Adam 等常用的优化技巧。
图 9:预训练的计算开销
基于上述分析,在这四个方面可以作出如下改善:
从数据的层面上来说,我们需要考虑数据的质量和利用效率;从模型架构的角度来说,BERT 使用的是 Transformer 模型,可以参考 Transformer 收敛过程的效率(即 Transformer 对信息编码和分析的效率及其稳定性);从目标函数的角度来说,BERT 等模型都使用了掩模语言模型目标,可以改进该任务词例(Token)的效率以及任务的难度;在优化策略方面,采用更加高级的「训练路线图」(Roadmap),从而共享中间结果,节省计算量可以成为不错的方案。
图 10:算法加速整体解决方案
近期,Fast-BERT、Light-BERT、Tiny-BERT等轻量级的模型旨在基于预训练好的大型模型,通过知识蒸馏、剪枝、稀疏表达等技术在推理阶段压缩大型预训练模型,从而提升推理效率。然而,这类工作并未严肃考量如何提升预训练过程本身的效率。
为此,微软亚洲研究院团队在过去的两年中研发了 FastPT,在训练数据、模型架构、训练目标、优化策略四个方面都进行了深入的探索,并将这些研究成果集成在一起,极大提高了预训练的性能和效率。值得一提的是,这个研究方向仍然存在着很大的提升空间。
03
大数据≠好数据
图 11:NLP 训练数据中的词例
在训练语料中,存在着大量的高频词例,其上下文信息和统计信息有助于利用这些词训练模型,我们将其称为「好数据」。然而,训练预料中也存在一些较难训练的罕见词例,它们的上下文信息不如高频词例显著,我们将其称为「坏数据」。但是这些罕见词例仍然包含很大的信息量,在许多任务中具有重要意义,我们仍然需要设法利用它们。此外,还有一类数据被称为「Ugly data」,这类数据可能会对训练带来意外的干扰。
图 12:不可学习的数据
如图 12 所示,绿色的 BERT 模型旨在预测出被屏蔽掉的网站 URL 部分,此处的 URL 就是一种典型的「Ugly data」。这是因为任何的 URL 都是可能是合理的,我们几乎无法根据上下文预测出 URL。此外,UTF-8 等编码可能对「子词」(sub-word)的嵌入带来巨大的挑战。上述两类数据都与我们预想的自然语言文本中的关联关系不一致,它们会对训练过程造成负面影响。而如 11 所示,这类「Ugly data」符合长尾分布,即存在大量「Ugly data」。简而言之,我们可以检测出这些模式,用特殊的词例(例如,<URL>、<EMAIL>等)将这些部分的文本替换掉,转而预测这种特殊词例。
图 13:包含不相关子词的低频词
此外,有些低频词包含特定的「子词」,但这些子词并不具备我们想象的含义。一方面,这些词例的嵌入难以学习;另一方面,在我们通过反向传播等方法学习「子词」嵌入时,这些极为低频的、不可学习的词例可能会为已经学好的「子词」嵌入带来随机的噪声。例如,电影《太空堡垒》的片名「macross」中包含子词「macro」,但「macross」与「宏」的意思并无关联,该词例中的上下文可能对「macro」的嵌入产生负面影响。因此,对于符合长尾分布的不可学习的「Ugly data」,为了避免发生训练发散的现象,我们需要对这类数据进行细致的数据清洗,检测并替换这些不可学习的词例。
图 14:数据清洗实验结果
通过上述数据清洗过程,我们可以将BERT 的训练速度提升 2 倍以上。这说明在预训练过程中,有许多词例实际上对训练造成了负面影响。然而,目前鲜有研究人员针对「Ugly data」进行分析和研究,该领域仍然存在很大的探索空间。
图 15:处理罕见词例
另一方面,具有重要意义的罕见词例往往也难被学习。如图 15 所示,在没有额外统计信息的情况下,想要回答图 15 左侧的完形填空问题是十分困难的。如果我们想要正确回答这个问题,需要真正理解「COVID-19」一词的含义。此时,我们需要利用历史上记录的句子学习出「COVID-19」的意义。根据「The COVID-19 pandemic is an ongoing global crisis」(COVID-19 是一场持续发生的全球危机),我们可以推测出「COVID-19」与生命有关,从而得出上述完形填空问题的答案「lives」。
图 16:为罕见词例「记笔记」
然而,「COVID-19」本身是一个罕见词例,训练次数较少,传统方法学习到的嵌入往往不够好。为了解决这一问题,我们可以隐式地记录一部分罕见词例的上下文信息,单独为其维护一个嵌入空间,从而在整个循环过程中提升 Transformer 的学习效果。在为罕见词例进行掩模语言模型的预测时,我们会将罕见词例的词嵌入、位置编码以及「笔记词典」同时作为 Transformer 的输入。
图 17:罕见词例处理实验结果
基于上述方案,我们对罕见词例以及其它词例的预测性能都得到了大幅提升,通过论文「Taking Notes on the Fly Help BERT Pre-training」中的技术,我们将时间复杂度降低了 60%。
04
大模型≠好模型图 18:Transformer 中的位置编码
然而,Transformer 模型本身仍然存在一些不足。首先,Transformer 中使用了绝对位置编码和相对位置编码。绝对位置编码指的是,针对每个位置 i,我们人为地设计出启发式的位置嵌入或学习出该位置嵌入。接着将位置嵌入与词嵌入相加,得到最终的输入。相对位置编码指的是在自注意力中加入一些显示的偏置项。
图 19:重新思考绝对位置编码
那么,加入位置编码对于学习有什么帮助呢?回想一下,在词嵌入的过程中,人们往往假设:在嵌入空间中对词语做线性变换,其语义可以在很大程度上得以保留。然而,位置编码在语义空间中并不具有这种可变换性,它相当于人为设计的一种索引。那么,将这种位置编码与词嵌入相加,进而进行线性变换,是否合理呢?
图 20:在第一层中自注意力的展开式
如图 20 所示,在第一层自注意力的展开式中包含四项,其中绿色剪头指向的是「单词-单词」和「位置-位置」的相关性,红色箭头指向的是「单词-位置」和「位置-单词」的相关性。直观地说,计算绿色部分的相关性是较为合理的,只是这两种相关性是否应该共享同一个参数矩阵,仍待思考。然而,对于红色的部分而言,单词和位置之间的相关性高意味着单词会很有可能出现在特定的位置上,这种假设相对就不太合理了。
图 21:调整绝对位置编码
为此,我们对绝对位置编码进行了如下调整,实现了名为「TUPE」的位置编码方式:(1)去掉自注意力展开式中计算单词与位置相关性的两项(2)对「单词-单词」和「位置-位置」的相关性使用不同的参数进行计算。
图 22:TUPE 实验结果
实验结果表明,TUPE 可以将注意力层中的计算开销降低 70%,同时提升模型在下游任务中取得的 GLUE 值。
图 23:Transformer 模型的鲁棒性
另一方面,就模型的鲁棒性而言,在训练 Transformer 的过程中,我们往往需要进行学习率的预热(Warm up),将学习率逐步提升然后再逐渐衰减。然而,对于不同的 Transformer 模型(例如,大型 Transformer 模型和 base 版的 Transformer 模型)和下游任务(例如,机器翻译、语言模型预训练),尽管学习率预热往往有所帮助,但是其拐点也不尽相同,从而具有不同的超参数调优需求。相较之下,在计算机视觉领域中,ResNet 在 ImageNet 图像的分类任务上具有很强的鲁棒性,较为合理的学习率 Scheduling 都可以获得不错的训练效果,学习率较易收敛。
图 24:Transformer 模型缺乏鲁棒性的原因
通过进一步分析 Transformer 模型的内部结构,我们发现,Transformer 模型实际上是由一些残差模块与层归一化模块组合而成。目前最常见的 Transformer 模型都使用了「后处理层归一化」(Post Layer Norm),即层归一化模块位于两个残差模块之间。因此,最终的输出层与之前的 Transformer 层都没有直连通路,梯度流会被层归一化模块阻断。相比较ResNet, 每一层的输出与输入之间都会有跨越非线性变换的直连通路,将误差信息反向传播回来,因而ResNet 每一层的训练都是充分的,而 Transformer 中只有最接近输出的层中训练较为充分,其它层都会发生较为严重的梯度衰减(弥散)的现象。
图 25:Transformer 与 ResNet 训练过程对比
如图 25 所示,在 Transformer 中,接近输出的最顶层具有较大的梯度,而下方的隔层由于被层归一化模块阻断而发生了指数级的梯度衰减现象。因此,在设置学习率时,我们往往会面临两难的境地:若使用较大的学习率,在 Transformer 顶层可能会发生梯度爆炸现象;而如果使用较小的学习率,在 Transformer 的底层可能会发生梯度弥散现象。这也正是 Transformer 学习率调优困难的原因,而 ResNet 则不存在上述问题。
图 26:前处理层归一化
为了使 Transformer 具备像 ResNet 一样的鲁棒性, 我们将层归一化模块合并到残差模块中,而不在将其设置在两个残差模块之间,即 Transformer 的「Pre Layer Norm」。通过使用这种方法,顶层的梯度范数将会从 O(d(ln_d)^(1/2)) 降为 O(d(ln_d/L)^(1/2)),同时在底层不会出现梯度弥散现象,从而有效提升模型的稳定性。这样一来,我们就无需进行复杂的学习率 Scheduling (减少超参数调优时间),并且可以使用更大的学习率(在训练前期收敛更快)。
图 27:层归一化调整实验结果
在一系列预训练实验中的结果表明,通过上述层归一化的调整,我们可以将时间复杂度降低近 60%。
至此,通过对 Transformer 模型的深刻分析,我们认为与模型有关的算法创新是具有重大意义的,一味追求大模型并不一定能解决算法本身存在的问题。
05
掩模语言模型≠好任务
图 28:掩模语言模型——完形填空
在目标函数方面,目前许多预训练模型都会使用掩模语言模型任务,该任务实际上相当于「完形填空」问题。然而,即使对于人类来说,在没有备选答案的开放环境下,想要准确完成完形填空任务也是十分困难的。
图 29:多选题任务
实际上,人类更容易完成选择题或判断题。在给定选项的条件下,任务的难度会极大降低。著名的「ELECTRA」模型使用的是判断题任务,在前期的训练效率很高,模型训练不会受困于困难的训练任务。因此,我们希望能够动态地调整任务难度,在早期学习到的嵌入较弱时令模型完成相对简单的任务,从而加快学习进程;在后期逐渐加大任务难度,从而获得更精细的结果。在这里,我们选择了难度适中的多选题任务,并且通过选项的个数调节任务的难度(选项越多任务越困难)。
图 30:使用元控制器进行预训练
为此,我们实现了一个能够出题的「元控制器」,它能够自适应地改变多选题的难度。我们首先训练了一个较小的 BERT 模型,它为我们提供与当前目标词相关的词例,这些词例将被用于构造备选答案。
图 31:基于自适应多选题任务的预训练实验结果
通过引入元控制器自适应地生成多选题任务,我们可以在提升 GLUE 值的同时将计算开销降低 80%。
06
优化策略同样重要
图 32:CNN 和 Transformer 之间的差别
为了了解如何设计优化策略、算法以及如何从宏观上组织不同的优化阶段,我们试图分析模型不同层的参数各自有何作用,如果参数之间存在相关性,我们就可能利用这些规律对优化策略进行高级的组织。对卷积神经网络(CNN)而言,不同层的特征图表征了不同的语义。因此,我们认为 CNN 中不同层的卷积核差异较大,其相关性较小。
图 33:Transformer 中的注意力分布
然而,对 Transformer 而言,其不同层的 Transformer 模块都表征了嵌入语义之间的自注意力。如图 33 所示,Transformer 不同层中的不同注意力头的自注意力可视化结果存在着一定的规律(主对角线和第一列的注意力得分较高)。
图 34:渐进堆叠
受此启发,我们试图通过一种堆叠的方式,首先训练一种浅层的 Transformer,进而根据上述注意力的相似性,使用浅层 Transformer 初始化更深层的 Transformer。通过这种方式,我们可以实现渐进式的堆叠,通过较小的计算开销训练更深的 Transformer。
图 35:渐进堆叠实验结果
实验结果表明,这种渐进堆叠的方式可以提升大概 30% 的计算效率。
07
结 语
至此,我们从数据、模型、损失函数、优化策略四个方面介绍了如何提升 NLP 预训练模型的效率。当我们将这四个方面的工作结合在一起,可以得到更大的模型性能提升。
图 36:GLEU 任务实验结果
如图 36 所示,以 BERT 作为对比基线时,FastPT 在使用 BERT 的 1/8 左右的计算开销的条件下,可以达到优于 BERT 的准确率。以使用了更大数据量的 RoBERTa 作为对比基线时,FastPT 在使用与 BERT 相当的计算开销的条件下,就可以达到优于 RoBERTa 模型的准确率,相较于 RoBERTa 模型将训练过程加速了 12 倍。我们相信,如果在该领域进行进一步的探索,完全有可能将训练效率再提升几个数量级。
图 37:Bing QA 任务实验结果
此外,在微软的 Bing QA 任务上,相较于 RoBERTa 模型,FastPT 也将训练效率提升了 10 倍以上。
图 38:NLP 模型预训练的未来
在此,我们呼吁更多的机器学习和 NLP 研究人员将精力投入到对模型和算法的创新型改进上,改变 NLP 预训练领域过度依赖「大力出奇迹」的局面,实现百花齐放、百家争鸣。在本次演讲中,我们以 BERT 为蓝本展开,但是大多数创新聚焦于对数据处理和机器学习模型的创新本身,本文提到的工作对更广泛的 NLP 任务也具有一定的启示意义。此外,我们也期待有超越 Transformer 的革命性的新模型诞生。
图 39:MSRA 在机器学习领域的研究成果
图 39 列举出了微软亚洲研究院(MSRA)过去五年在机器学习领域取得的一系列研究成果。MSRA 机器学习研究组旨在解决机器学习领域核心的痛点问题,例如:主题模型、决策树、文本到语音的转录系统(TTS)、Transformer 训练结构等。此外,许多开源社区中的从业者也在试图复现 MSRA 的一系列工作。例如,FastSpeech 是 MSRA 2019 年发布的神经语音合成引擎,它通过神经 TTS 技术实现了实时的语音合成。MSRA 发布的 TOWER 架构也在蛋白质结构预测领域相较于著名的 AlphaFold 模型将性能提升了 8.6%。
点击左下角“阅读原文”,观看视频回放!
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)