
























为了追求模型的效果,NLP预训练模型的规模越来越大。但是增大模型规模在给效果带来提升的同时,也给模型的训练、部署所需的计算机资源提出了更高的要求,很多模型甚至大到在一般的硬件上根本无法加载,人们直呼“玩不起”。2019年9月,时任谷歌研究员的蓝振忠(Zhenzhong Lan)老师连同另外5名来自谷歌研究院和芝加哥丰田技术学院(Toyota Technological Institute at Chicago,TTIC)的学者联名发文,提出一种“轻量化BERT”架构(A Lite BERT,ALBERT),大幅为BERT“瘦身”,更加神奇的是BERT“瘦身”后的性能还有大幅提升,不禁让人拍手称奇。ALBERT的核心工作可以用“2+1”来表示——“2”即ALBERT为了解决BERT模型存储占用过高、训练时间太长的问题,提出的两种消减模型参数的方法;“1”则表示在其开展的一项预训练优化工作。 ALBERT所采取第一个消减参数量的方法为降低符号嵌入操作的参数规模。在原文中,该工作被称为“factorized embedding parameterization”,即“因子化的嵌入参数”。我们知道,任何预训练模型都会对输入词汇进行嵌入操作,且词嵌入向量的维度也往往和模型内部特征维度保持一致,该维度我们在Transformer中用 ALBERT所采取第二个消减参数量的方法即跨层参数共享(Cross-layer parameter sharing)。我们在分析Transformer架构的参数量时就已经提到,Transformer编码器中注意力模块和全连接前馈网络才是参数“大户”,随着模型层数的不断增加,上述两个模块将导致模型参数总量的暴增。和这二者相比,上面针对词嵌入矩阵参数的消减简直就是“毛毛雨”。那么是否可以让这些编码器共享一份参数呢?2018年7月,Mostafa Dehghani等来自阿姆斯特丹大学、DeepMind和谷歌大脑的学者们提出了Universal Transformer模型,在其中提出了具有循环结构的Transformer架构。所谓循环结构,即不再像标准Transformer那样由多个不同的编码器层和解码器层堆叠构造编码器栈和解码器栈,而是分别只使用一个编码器层和解码器层,通过对其进行“将输出再作为输入”模式的循环调用,以共享权重的方式来完成对输入序列编码和解码操作,其中循环调用的步数即可视为是传统模型的层数。图1即为Universal Transformer循环编码器和解码器结构示意(注:为了简化示意,我们在该图中省略了层归一化和残差连接结构)。其中的“转换函数”(transition function)可以理解为是对注意力模块输出特征的进一步变换,可以以全连接前馈网络、可分离卷积等不同操作作为其具体实现。在ALBERT模型中,作者们借鉴了Universal Transformer模型的参数共享机制,但由于ALBERT基于BERT模型,故只涉及图中虚线框所示的编码器部分,即将唯一一份多头自注意力模块和全连接前馈网络参数全局共享。当然,需要说明的是,一个编码器层循环调用 经过上述两个参数精简操作,ALBERT的参数规模较原生BERT大幅降低。而节约下来的存储空间,可以用于增大内部特征的维度来使得模型更“宽”,从而保证模型的表达能力不发生下降。具体来说,ALBERT包括了四种不同规模的模型架构,其中ALBERT-Base、ALBERT-Large,分别对标BERT同等规模的版本。为了进一步比较模型规模,作者针对BERT又构造了更大规模版本的模型BERT-xLarge,针对ALBERT也构造了同等规模的版本ALBERT-xLarge与之对应。除此之外,还构造了一个更大规模的版本ALBERT-xxLarge。图2示意了四种ALBERT模型的规模和参数量。其中,斜线后的参数表示与之对标BERT模型的对应参数。模型参数量这一关键参数我们使用加粗字体表示。从该图可以看出,相较于原生BERT,ALBERT模型在参数精简方面非常显著,特别是针对BERT-Large模型,ALBERT的参数仅为其1/18。另外,我们也可以从中看出,ALBERT最大规模的版本——xxLarge并不是以增加模型深度来扩大规模,相反,ALBERT-xxLarge模型仅有区区12层编码器,反倒是内部特征的维度达到惊人的4096维,这是典型的“又浅又宽”的模型。事实上,很多预训练模型也都将模型“增宽”作为扩大规模的方式,例如著名的GPT-3.0即用到该方式。 在预训练目标方面,ALBERT也针对原生BERT提出了改进措施——以语句顺序预测损失(Sentence-order prediction)取代了原生BERT的下句预测损失。上文介绍的RoBERTa已经在预训练阶段变相取消了原生BERT的下句预测预训练任务,那么ALBERT算是正式将其“打入冷宫”——ALBERT的作者们承认建模语句之间关系的必要性,但认为像BERT那样以“连续来自相同文档为正,来自不同文档则为负”为监督目标的下句预测方式却发挥不了太大的作用。故ALBERT以两个语句顺序的正确与否作为新的监督目标取而代之。具体来说,语句顺序预测任务的正样本与下句预测任务相同,即来自相同文档的连续语句。但是负样本则是通过对来自相同文档的连续语句交换顺序构造得到。例如,“因为我中午没吃饭,所以我很饿”是正样本,而“所以我很饿,因为我中午没吃饭”是负样本。我们可以认为,正样本具有人类正常语句该有的顺序,体现了人类正常的说话方式,而负样本则代表了“颠倒先生”所说的那些语无伦次的不正常语句。 最后我们看看ALBERT模型实验对比的相关内容。与上文介绍的RoBERTa相同,ALBERT也是在GLUE、SQuAD和RACE三大自然语言理解公开任务/数据集上进行微调适配和实验对比。如图3所示,ALBERT的实验分为两大类(注:为了方便讨论这里我们对实验进行了分类和分组,但与ALBERT原文给出的试验顺序不同)。第一类即为常见的性能对比实验,即和其他模型“比高低、比刷榜”;第二类实验为模型配置论证实验,即探索自身在什么配置下能够达到最好性能,该类实验与RoBERTa调优实验是类似的。第一类的性能对比实验又包括两组,其中,第一组实验在ALBERT与BERT之间展开,毕竟后者是前者的直接对标对象。在该组实验中,双方最主要的“参赛选手”分别是具有235M参数的ALBERT-xxLarge和具有334M参数的BERT-Large。结论是:在SQuAD v1.1、SQuAD v2.0、MNLI(GLUE中的子任务)、SST-2(GLUE中的子任务)和RACE五个具代表性的自然语言理解子任务中,ALBERT“碾压式”的完胜BERT。即便是只有60M参数的ALBERT-xLarge,其水平已经和BERT-Large持平,这就意味着ALBERT采用1/5的参数量达到了原生BERT的最高水平,这真是一个不得了的进步。另外,从该组实验中我们还能看到一个细节:生造出的“最大规模版BERT”——BERT-xLarge,徒有1270M的庞大参数量,成绩竟然垫底,其表现反而不及更小规模的BERT-Large,甚至不如最小规模的BERT-Base。笔者认为这一结果是不正常的,也许是BERT-xLarge并未得到充分训练的缘故;第二组实验为正式的“刷榜”对比实验,毕竟超过了BERT只能证明参数精简有效这一结论,在ALBERT诞生之时,BERT已经不再代表预训练模型的最高水平。在该组实验中,对比模型除了BERT-Large,还进一步增加了XLNet和RoBERTa等“高手”。该组实验的任务设置和微调模式与RoBERTa类似,其中ALBERT也像RoBERTa那样增加了训练的步数,包括经过1M步和1.5M步训练的两个模型。针对GLUE任务/数据集的实验结论为:在针对九个子任务分别进行的独立微调适配模式下,ALBERT-1.5M获得九个任务全胜的战绩(其中在QQP和MRPC两个子任务上与RoBERTa打成平手),ALBERT-1M相较ALBERT-1.5M虽有差距,但表现也十分出色。这一结果除了证明ALBERT本身在模型层面所具有的优势之外,也再次证明了增加训练步骤能够带来性能提升这一结论;在基于GLUE积分榜测试数据集进行的模型微调模式下,ALBERT在九个任务中获得六个冠军,并且九个任务的平均得分最高;针对SQuAD(包括v1.1和v2.0两个版本)和RACE两个任务/数据集的实验对比中,ALBERT在所有子任务上获胜。第二类的模型配置论证实验包括五组具体实验。前三组实验分别对应ALBERT所做的三点改进措施,三组实验均基于ALBERT-Base架构开展。其中,第一组实验用来确定词嵌入向量维度。由于只评估词嵌入向量的维度,故作者们将跨层共享参数与各层独立参数两种架构都纳入了测评,每种架构又分别考察了词嵌入向量维度在64、128、256和768四种维度下的表现。结论为:在不进行参数共享(即标准BERT模式)时,词嵌入向量维度越大越好,但是优势非常微弱,即便是采用64维和128维的短向量,效果也完全可以接受,这就再次证明了词嵌入与模型特征在维度上关系不大这一结论;在跨层参数共享模式下,128维效果最佳。最后经过综合考量,ALBERT选择128维作为其最终特征嵌入维度,这一结论我们已经在前文中直接使用。这一结果很好理解,毕竟ALBERT消减参数最主要的举措就是跨层参数共享,故该模式下的最优结果有着“最高话语权”;第二组实验用于论证跨层参数共享的有效性。既然考察对象是跨层参数共享,那么词嵌入维度这次又成为可变因素,故ALBERT又分别在768和128维两个词嵌入维度下开展对比,每种模式又包括了只共享注意力模块参数、只共享全连接前馈网络、参数完全共享和参数完全不共享四种具体设定。实验结论是:在不同词嵌入维度下,无论采用哪种共享模式,甚至是根本不进行跨层参数共享,模型效果之间的差异都极其微小。既然如此,ALBERT自然选择参数精简最显著、实现也最简单的参数完全共享模式;第三组实验论证了语句顺序预测损失的有效性。在该组实验中,作者们对比了不做语句预测、下句预测和语句顺序预测三种模式下的预训练模型性能。结论是ALBERT使用的语句顺序预测任务能够显著提升预训练模型的效果;第四组实验用来论证增加预训练数据必要性。我们可以看到增加数据可以给模型性能带来较小的提升,但是在少量任务上不升反降;第五组实验用于考察是否使用“dropout”策略。结论为取消“dropout”策略,特别是ALBERT还得到了取消“dropout”策略能够显著提升掩膜语言模型训练效果这一结论。 最后,我们对ALBERT进行简单的总结。客观地讲,如果单单看创新性,ALBERT并没有提出多么亮眼的创新,故在很多人的眼里,ALBERT属于“老瓶装新酒”。但是,我们认为ALBERT瞄着BERT“瘦身”这一目标稳扎稳打,其工作无疑是成功的。该工作对整个领域,尤其是工业应用领域的贡献也是巨大的。“瘦身”后的BERT在性能上还能如此之好,也足见作者们的功力深厚。除此之外,几位作者在针对的实验设计与对比方面做了扎实的工作,同样非常值得我们学习。 用了三年时间,熬了不知道多少个夜写的书昨天终于上架了,全书428页,537千字。这本书想法就是借着注意力这个主题,串起计算机视觉、自然语言处理,最后到多模态这十年来的进展,大模型的相关话题也在其中。 要说为什么写书,原因有二。第一,作为人工智能从业者,得找个事情逼着自己读论文,做笔记。否则任何一个偷懒的念想都能让人瞬间倒向安逸,都会让人“一日复一日”。第二,号称人工智能从业者,年将不惑,总得给自己一个交代,慰藉一下自己,算是给自己的四十岁的礼物吧。 给个链接,感兴趣的可以了解一下: 表示,在BERT-Base模型中,
,而在BERT-Large模型中,
。词嵌入通过用使用独热编码从嵌入矩阵中“抽行”得到,嵌入矩阵维度为
,其中
为词典中的词汇数量,例如在BERT中,
。。以BERT-Lage模型为例,词嵌入矩阵的参数量约为3000万。但是有研究表明,模型内部特征和词嵌入特征关系不大,故词嵌入特征可以使用一个较小的维度,我们将其记作
。秉承这一思路,ALBERT针对词嵌入矩阵瘦身的方法非常简单——先用一个
维矩阵将
维独热编码变换为
维嵌入向量,然后再利用一个
维矩阵,将该向量变换回模型所需的
维向量输入。这样一来,原本的一个大参数矩阵变为两个小参数矩阵,改进后的词嵌入操作参数量为
。容易看出,当
时,模型词嵌入矩阵的参数量将大幅降低。例如在ALBERT中,作者们经过对比分析,认为
是一个合理的取值。在这一设定下,BERT-Base词嵌入操作所需的参数量降低至397万。
次与
个编码器层按照顺序进行调用,在计算量方面不会有区别,故ALBERT不会带来推理速度上的提升。



编辑于 2024-04-12 · 著作权归作者所有
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。