6.4 ALBERT全面理解

Posted 炫云云

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了6.4 ALBERT全面理解相关的知识,希望对你有一定的参考价值。


在预训练自然语言表示时增加模型大小通常会提高下游任务的性能。 ALBERT提出了两种参数减少技术来降低内存消耗并提高BERT的训练速度,还使用了一种自我监督的损失,该损失集中于对句子之间的连贯性进行建模,并表明它始终可以通过多句子输入帮助下游任务。

可以在https://github.com/google-research/ALBERT上找到代码和预先训练的模型。

1简介

全面的网络预训练在语言表示学习方面取得了一系列突破。许多非平凡的NLP任务,包括那些训练数据有限的任务,都从这些预 训练的模型中受益匪浅。这些突破最令人信服的迹象之一是针对中国的中学和高中英语考试而设计的阅读理解任务RACE测试上机器性能的演变:该论文最初描述了这项任务,并制定了建模挑战报告,然后最先进的机器精度为44.1%;最新公布的结果显示,他们的模型性能为83.2% ;我们在这里展示的工作将其进一步提高到89.4%,一个惊人的45.3%的改进,这主要归功于我们当前构建高性能预训练语言表示的能力。

这些改进的证据表明,大型网络对于实现最新性能至关重要。大型预训练模型并将其提炼成较小的模型已成为常见的实际应用。考虑到模型大小的重要性,我们问:拥有更好的NLP模型是否像拥有更大的模型一样容易?

回答此问题的障碍是可用硬件的内存限制。鉴于当前最先进的模型通常具有数亿甚至数十亿个参数,当我们尝试扩展模型时,很容易遇到这些限制。由于开销与模型中参数的数量成正比,因此在分布式训练中,训练速度也可能受到很大的阻碍。

解决上述问题的现有解决方案包括模型并行化和内存管理。

这些解决方案解决了内存限制问题,但没有解决通信开销。 在本文中,我们通过设计具有比传统BERT架构更少的参数的Lite BERT(ALBERT)架构来解决所有上述问题。

ALBERT结合了两种参数减少技术,这些技术可消除预训练模型时的主要障碍。第一个是分解式嵌入参数化。通过将大的词汇嵌入矩阵分解为两个小的矩阵,我们将隐藏层的大小与词嵌入层的大小分开。这种分解使得在不显着增加词汇表的嵌入参数大小的情况下,更容易增加隐藏的大小。第二种技术是跨层参数共享。此技术可防止参数随着网络的深度而增长。与BERT-large相似的ALBERT配置参数减少了18倍,并且训练速度提高了约1.7倍。参数减少技术还可以充当正则化的形式,从而稳定训练并有助于泛化。

为了进一步提高ALBERT的性能,我们还引入了一种自监督的句子顺序预测(SOP)损失。 SOP主要关注句子间的连贯性,旨在解决原始BERT中提出的下一个句子预测(NSP)的无效性。

这些设计决定的结果是,我们能够扩展到更大的ALBERT配置,这些配置的参数仍然比BERT-large少,但性能却明显好于BERT。

2相关工作

2.1扩大自然语言的表征学习

已经证明,学习自然语言的表示形式对广泛的自然语言处理很有用任务并已被广泛采用等。最重大的变化之一在过去的两年中,无论是标准的或情境化,进行全网络预训练,然后进行针对特定任务的微调。在这方面的工作中,通常显示出更大的模型尺寸可以改善性能。例如,Devlin等。 显示了三种选定的自然语言理解任务,使用更大的hidden size,更多hidden layers和更多attention heads导致更好的性能。但是,它们的隐藏大小为1024,可能是因为模型大小和计算成本问题。

由于计算限制,尤其是在GPU / TPU内存限制方面,很难对大型模型进行实验。 鉴于当前最先进的模型通常具有数亿甚至数十亿个参数,我们可以轻松达到内存限制。 为了解决这个问题,Chen等。 提出了一种称为梯度检查点的方法,以减少额外的前向通过为代价的亚线性存储需求。 Gomez等。 提出了一种从下一层重建每个层的激活的方法,这样它们就不需要存储中间激活。 两种方法都以速度为代价减少了内存消耗。 Raffel等。建议使用模型并行化来训练巨型模型。 相反,我们的参数减少技术可减少内存消耗并提高训练速度。

2.2跨层参数共享

具有跨层参数共享的网络(Universal Transformer,UT)在语言建模和主谓词一致方面比标准转换器具有更好的性能。 最近,提出了transformer网络的Deep Equilibrium Model(DQE),并表明DQE可以达到一个平衡点,对于该平衡点,某层的输入嵌入和输出嵌入保持相同。 将参数共享transformer与标准transformer相结合,这进一步增加了标准transformer的参数数量。

2.3句子排序目标

ALBERT根据预测两个连续文本段的顺序使用预训练损失。话语中的连贯性和衔接性已得到广泛研究,并且已经发现许多现象将相邻的文本片段连接起来。在实践中发现大多数有效的目标都非常简单。 句子嵌入通过使用句子编码来预测相邻句子中的单词来学习。句子嵌入学习的其他目标包括预测未来的句子而不是仅预测邻居和预测显式话语标记。ALBERT的损失与句子排序目标最相似, 学习句子嵌入以确定两个连续句子的顺序。但是,与上述大多数工作不同,ALBERT的损失是按文本段而不是句子来定义的。 BERT使用损失的依据是预测对中的第二个片段是否已与另一个文档中的一个片段交换。排序是一项更具挑战性的预训练任务,并且对某些下游任务更有用, 还尝试预测文本的两个连续段的顺序,将其与原始的下一句预测结合在三向分类任务中。

3 ALBERT基本原理

3.1模型架构选择

ALBERT架构的主干与BERT相似,因为它使用具有GELU非线性的transformer encoder。将词汇embedding size表示为E,将encoder layers层数表示为L,将hidden size表示为H,将feed forward/filter size设置为4H,attention heads数设置为H / 64。

ALBERT对BERT的设计选择有三个主要的贡献。

分解式嵌入参数化

在BERT中,以及随后的建模改进(例如XLNet和RoBERTa)中,单词 embedding size E与hidden layer size H捆绑在一起,即 E ≡ H E≡H EH 出于建模和实际原因,此决定似乎不是最佳选择,如图 1 所示。

从建模角度来看,单词 embeddings旨在学习上下文无关的表示,而 hidden-layer embeddings 旨在学习上下文相关的表示。 类似BERT是使用上下文来获得表示,以提供学习此类依赖于上下文的表示的信号。 这样,将单词 embedding size E与hidden layer size H脱开,就可以使我们更有效地利用由建模需求所决定的总模型参数,从而决定了 H ≫ E H \\gg E HE

从实际的角度来看,自然语言处理通常需要词汇量V很大。如果 E ≡ H E ≡H EH ,则增加H会增加embedding矩阵的大小,其大小 V × E V\\times E V×E 。这很容易产生一个拥有数十亿参数的模型,其中大多数参数在训练期间只进行少量更新。

因此,对于ALBERT,我们对embedding参数使用因式分解,将它们分解成两个更小的矩阵。我们不直接将one-hot vectors投影到大小为 H H H的hidden space中,而是先将其投影到大小为 E E E的低尺寸的embedding space中,然后再将其投影到隐藏空间中。即分解 O ( V × H ) O(V×H) O(V×H) O ( V × E + E × H ) O(V×E + E×H) O(V×E+E×H)

H ≫ E H \\gg E HE时,此参数的减少意义重大。我们选择对所有单词使用相同的E,因为与全词embedding相比,它们在文档中的分布要均匀得多。具有不同embedding大小对于不同的单词很重要。

因式分解过程

图 1 因 式 分 解 过 程 图 1 因式分解过程 1

参数减少:
V ∗ H = 30000 ∗ 768 = 23 , 040 , 000 V ∗ E + E ∗ H = 30000 ∗ 256 + 256 ∗ 768 = 7 , 876 , 608 V∗H=30000∗768=23,040,000\\\\ V∗E+E∗H=30000∗256+256∗768=7,876,608 VH=30000768=23,040,000VE+EH=30000256+256768=7,876,608

跨层参数共享

有多种共享参数的方式,例如,仅跨层共享前馈网络(FFN)参数,或仅共享attention参数。 ALBERT的默认决定是跨层共享所有参数

传统 Transformer 的每一层参数都是独立的,包括各层的 self-attention、全连接。这样就导致层数增加时,参数量也会明显上升。之前有工作试过单独将 self-attention 或者全连接层进行共享,都取得了一些效果。ALBERT 作者尝试将所有层的参数进行共享,相当于只学习第一层的参数,并在剩下的所有层中重用该层的参数,而不是每个层都学习不同的参数

跨层共享所有参数

图 2   跨 层 共 享 所 有 参 数 图 2 ~跨层共享所有参数 2 

(Universal Transformer,UT)和 (2019)(Deep Equilibrium Models,DQE)也探索了类似的策略. 他们的DQE达到了平衡点,对于该平衡点,特定层的输入和输出嵌入保持不变。 我们对L2距离和余弦相似度的测量表明,bert的embeddings 是振荡的,而不是收敛的。

图3

$$
图3:BERT-large和ALBERT-large的各层输入和输出embeddings的L2距离和余弦相似度(以度表示)。

$$
图3显示了使用BERT-large和ALBERT-large配置的每一层的输入和输出embeddings的L2距离和余弦相似度(见表1)。结果表明,权值共享对网络参数的稳定有一定的影响。尽管与BERT相比,这两个指标都有下降,但即使在24层之后,它们也不会收敛到0。这说明ALBERT参数的解空间与DQE的解空间有很大的不同。

句子顺序预测

除了掩蔽语言建模(MLM)损失之外,BERT还使用了另一种损失,称为下一句话预测(NSP)。NSP是预测两个片段在原文中是否连续出现的二分类损失,具体如下:从训练语料库中提取连续片段,生成正例;负面的例子是由来自不同文档的片段配对产生的;正、负样本的抽样概率相等。NSP的目标是为了提高下游任务的性能,比如自然语言推理,这些任务需要对句子对之间的关系进行推理。然而,后续研究发现NSP的影响不可靠,并决定消除它,这一决定在多个任务之间的下游任务性能得到了提升。

我们推测,与MLM相比,NSP失效的主要原因是其缺乏任务难度。 按照规定,NSP将主题预测和连贯性预测合并为一个任务。然而,与一致性预测相比,主题预测更容易学习,也与使用MLM损失学习到的知识有更多的重叠。

我们坚持说句间建模是语言理解的一个重要方面,但是我们提出了一个主要基于连贯性的损失。也就是说,对于ALBERT,我们使用句子顺序预测(Sentence-Order Prediciton)(SOP)损失,该方法避免了主题预测,而侧重于建模句子间的连贯性。

  • SOP损失使用与BERT(同一文档中的两个连续段)相同的技术作为肯定示例
  • 并使用相同的两个连续段(但顺序互换)作为否定示例

图 4 句 子 顺 序 预 测 图 示 图4 句子顺序预测图示 4

这迫使模型学习关于话语级连贯性的细粒度区别。正如我们在第二节中所示。 4.6,事实证明NSP根本无法解决SOP任务(即,它最终学习了更容易的主题预测信号,并在SOP任务上以随机基线水平执行),而SOP可以在一定程度上解决NSP任务,大概是基于分析错位的相干线索。结果,ALBERT模型持续提高了多语句编码任务的下游任务性能。

3.2模型设置

表1给出了BERT和ALBERT模型在超参数设置上的差异。由于以上讨论的设计选择,ALBERT模型的参数尺寸比相应的BERT模型要小得多

表 1 : 本 文 分 析 的 主 要 B E R T 和 A L B E R T 模 型 的 配 置 表1:本文分析的主要BERT和ALBERT模型的配置 1BERTALBERT

例如,与BERT-large相比,ALBERT-large少了大约18倍的参数,前者是18M,后者是334M。H = 2048的ALBERT-xlarge配置只有60M参数和H = 4096的ALBERT-xxlarge配置有233M参数,即,约70%的参数。请注意,对于ALBERT-xxlarge,我们主要报告12层网络上的结果,因为24层网络(具有相同的配置)可以获得类似的结果,但在计算上更昂贵。

这种参数效率的提高是ALBERT设计选择的最重要的优势。在我们能够量化这一优势之前,我们需要更详细地介绍我们的实验设置。

4实验结果

4.1实验装置

为了使比较尽可能有意义,我们遵循BERT 的设置,使用BOOKCORPUS 和英语Wikipedia 进行训练前基线模型。这两个语料库由大约16GB的未压缩文本组成。我们将输入格式化为“ [ C L S ] x 1 [ S E P ] x 2 [ S E P ] [CLS] x_1 [SEP] x_2 [SEP] [CLS]x1[SEP]x2[SEP] ”,其中 x 1 = x 1 , 1 , x 1 , 2 ⋅ ⋅ ⋅ , x 2 = x 1 , 1 , x 1 , 2 ⋅ ⋅ ⋅ x_1 = x_{1,1}, x_{1,2}···,x_2 = x_{1,1}, x_{1,2}··· x1=x1,1,x1,2x2=x1,1,x1,2 是两个句段(句段通常由一个以上的自然句子组成,Liu等人已证明这对提高表现很有帮助。 我们总是将最大输入长度限制为512,并随机生成小于512的输入序列,概率为10%。和BERT一样,我们使用的词汇量是30,000,语句标识使用同XLNet。

我们使用n-gram mask为MLM目标生成 mask输入,每个n-gram mask的长度是随机选择的。 长度为n的概率为

我们将n-gram(即n)的最大长度设置为3(即,MLM 目标最多可以包含3个完整的单词,例如“White House correspondents”)。

所有的模型更新都使用batch size为4096和一个具有学习率0.00176的LAMB优化器 。除非另有说明,我们对所有型号进行125,000步的培训。在Cloud TPU V3上进行培训。根据模型大小,用于训练的TPUs数量从64到512不等。

4.2评价基准

4.2.1内在准备评估

为了监控培训进度,根据SQuAD和RACE的开发集创建了一个开发集。 我们报告MLM和句子分类任务的准确性。 注意,我们仅使用此集合来检查模型如何收敛; 它的使用方式不会影响任何下游评估的性能,例如通过模型选择。

4.2.2下游评价

我们在三个流行的基准上评估我们的模型:通用语言理解评估(GLUE)基准,两个版本的斯坦福问答数据集,以及考试的复习理解(RACE)数据集(Lai等人,2017)。 为了完整起见,我们在附录A.3中提供了这些基准的描述。 我们对开发集执行早期停止操作,除了基于任务排行榜的最终比较(我们还报告测试集结果)之外,我们会报告所有比较。 对于开发集上存在较大差异的GLUE数据集,我们报告了5次运行的中位数。

4.3 BERT和ALBERT的总体比较

我们现在准备量化第3节中描述的设计选择的影响,特别是关于参数效率的选择。参数效率的提高体现了ALBERT设计选择最重要的优势,如表2所示:只有约70%的BERT-large的参数,ALBERT-xxlarge比BERT-large取得了显著的改进,这是通过几个代表性下游任务的开发集得分的差异来衡量的:SQuAD v1.1 (+1.9%), SQuAD v2.0 (+3.1%), MNLI (+1.4%), SST-2 (+2.2%), and RACE (+8.4%)

另一个有趣的发现是,在相同的训练配置(相同数量的TPUs)下,训练时的数据吞吐量的速度。因为交流少,计算少,与相应的BERT模型相比,ALBERT模型具有更高的数据吞吐量。如果我们使用BERT-large作为基线,我们观察到ALBERT-large在遍历数据时大约快1.7倍,而ALBERT-xxlarge由于结构更大,大约慢3倍。

接下来,我们进行切除实验,量化每个设计选择对ALBERT的贡献。

4.4因式分解嵌入参数化

表3显示了使用ALBERT-base配置设置更改词汇表嵌入大小E的效果(参见表1),使用的是同一组具有代表性的下游任务。在非共享条件下(BERT-style),更大的嵌入大小提供更好的性能,但并不是很多。在全共享条件下(albert风格),大小为128的嵌入似乎是最好的。基于这些结果,我们在以后的所有设置中使用嵌入大小E = 128,作为进一步扩展的必要步骤。

表2

表 2 表2 2

表2:Dev设置了基于BOOKCORPUS和Wikipedia的125k步预训练模型的结果。在这里和其他地方,Avg列的计算方法是对其左侧的下游任务的得分进行平均(每个SQuAD的F1和EM两个数字首先进行平均)。

表3

表 3 : 词 汇 表 嵌 入 大 小 对 A L B E R T − b a s e 性 能 的 影 响 表3:词汇表嵌入大小对ALBERT-base性能的影响 3:ALBERTbase

4.5跨层参数共享

表4

表 4 : 跨 层 参 数 共 享 策 略 的 效 果 , A L B E R T − b a s e 配 置 表4:跨层参数共享策略的效果,ALBERT-base配置 4:ALBERTbase

表4展示了各种跨层参数共享策略的实验,使用了一个ALBERT-base配置(表1),包含两个embedding 大小(E = 768和E = 128)。我们比较了全共享策略(albert风格)、非共享策略(bert风格)和中间策略,在这些策略中,只有attention参数是共享的(但不包括FNN参数)或只有FFN参数是共享的(但不包括attention参数)。

全共享策略在两种情况下都会影响性能,但在E = 128(- 1.5 on Avg)时影响不那么严重与E = 768相比(-2.5 on Avg)。此外,性能下降主要来自共享FFN-layer参数,而共享attention参数在E = 128 (+0.1 on Avg)时没有下降,在E = 768 (-0.7 on Avg)时略有下降。

还有其他跨层共享参数的策略。例如,我们可以将L层划分为N个大小为M的组,每个大小为M的组共享参数。总的来说,我们的实验结果表明,组规模M越小,我们得到的性能越好。然而,减小组大小M也会显著增加总体参数的数量。我们选择共享策略作为默认选择。

4.6句子顺序预测(SOP)

我们比较了句子间附加损失的三个实验条件:none (XLNet- and RoBERTa-style), NSP (BERT-style), and SOP (ALBERT-style),使用ALBERTbase配置。结果如表5所示,包括内在的(MLM, NSP, and SOP tasks的准确性)和下游任务。

img

表 5 : 句 子 预 测 损 失 、 N S P 和 S O P 对 内 在 任 务 和 下 游 任 务 的 影 响 。 表5:句子预测损失、NSP和SOP对内在任务和下游任务的影响。 5:NSPSOP

固有任务的结果表明,NSP损失对SOP任务没有任何判别能力(准确性为52.0%,类似于“None”条件下的随机猜测性能)。 这使我们可以得出结论,NSP最终仅对主题转移建模。 相反,SOP损失确实可以较好地解决NSP任务(准确度为78.9%),而SOP任务甚至更好(准确度为86.5%)。 更重要的是,SOP损失似乎可以持续改善多句编码任务的下游任务性能(SQuAD1.1大约为+ 1%,SQuAD2.0为+ 2%,RACE为+ 1.7%),从而提高了平均得分 大约+ 1%。

4.7如果我们训练同样的时间呢?

表2中的加速结果表明,与ALBERT-xxlarge相比,BERT-large的数据吞吐量大约高3.17倍。 由于更长的训练通常会带来更好的性能,因此我们进行比较,而不是控制数据吞吐量(训练步骤数),而是控制实际训练时间(即让模型训练相同的小时数) 。 在表6中,我们比较了在进行了400k训练步骤(训练34h)之后,BERT-large模型的性能,大致相当于训练有125k训练步骤(训练32h)的ALBERT-xxlarge模型所需的时间。

经过大致相同的时间训练后,ALBERT-xxlarge明显优于BERT-large:平均水平提高+ 1.5%,RACE的差异高达+ 5.2%

表6

表 6 : 训 练 时 间 控 制 的 效 果 , B E R T − l a r g e 对 比 A L B E R T − x x l a r g e 配 置 。 表6:训练时间控制的效果,BERT-large对比ALBERT-xxlarge配置。 6:BERTlargeALBERTxxlarge

4.8附加训练数据和DROPOUT效应

至此,完成的实验仅使用Wikipedia和BOOKCORPUS数据集。 在本节中,我们报告了XLNet)和RoBERTa所使用的附加数据的影响的测量结果。

图2a绘制了在没有附加数据和有

以上是关于6.4 ALBERT全面理解的主要内容,如果未能解决你的问题,请参考以下文章

CentOS 6.4 编译安装 gcc 4.8.1(转)

金蝶handler中 collection 代码片段理解

调用模板化成员函数:帮助我理解另一个 *** 帖子中的代码片段

如何理解这段代码片段中的两对括号?

《ALBERT 论文解读》

《ALBERT 论文解读》