认识ALBERT:来自Google和Toyota的全新轻量级BERT,性能不变、参数减少18倍

谷歌研究院与丰田技术学院联合发布了一篇最新论文,正式公布取代BERT的下一代方案——即体积更小、智能度更高的ALBERT。(ALBERT:用于语言表示自监督学习的精简版BERT,ALBERT: A Lite BERT for Self-supervised Learning of Language Representations

ALBERT在SQuAD与RACE测试中刷新了SOTA,并在RACE测试当中以14.5%的优势击败BERT……但先别急,后文将具体比较双方的成绩(表中的1M与1.5M代表训练步数)。

从最终结果来看,ALBERT的表现确实令人惊艳(刷新了GLUE、RACE以及SQuAD的分数纪录)。但是……更让人印象深刻的,是ALBERT在模型/参数大小方面的瘦身效果。

两大关键架构变更与训练调整,使得ALBERT同时获得了出色的测试成绩与良好的瘦身效果。先来看ALBERT及其前辈BERT的参数差异——BERT x-large拥有12.7亿个参数,而ALBERT x-large仅拥有5900万个参数!

在同等网络规模(隐藏层)下,BERT拥有12.7亿个参数,ALBERT仅拥有5900万个参数……缩小约21.5倍。

这无疑是个值得认真探讨的大问题,我们将在本文中慢慢推进。

NLP模型不是越大越好

我们先从NLP的一大重要方面入手——今年以来,NLP技术取得了一系列辉煌成就,特别是transformer类模型的扩展使我们只需要简单扩大预训练模型的规模,就能够快速提高其最终准确性。在BERT论文当中,作者们曾提出并在一定程度上论证了hidden size越多、隐藏层越多、attention head越多,模型的实际表现就越好。

目前规模最大的NLP模型为英伟达公司最近公布的Megatron,这是一套包含80亿个参数的庞大模型,体积达BERT的24倍、OpenAI GPT-2的6倍。Megatron在512块GPU上经过9天才训练完成。

然而,其中无疑存在一个临界点或者说饱和点,导致模型体积并不是越大越好。ALBERT的作者们证明,拥有2048个hidden size与4倍于原始BERT体积的BERT X-Large模型反而表现不佳——其准确率得分下降了近20%。

越大并不一定就越好——将hidden size加倍(相当于将参数量提升至4倍),反而会导致BERT在RACE数据集上出现性能下降。

这类似于计算机视觉领域的层深峰值效应。提升计算机视觉模型中的层深会推动性能水平不断提升,但到某个临界点后则开始下降。例如,ResNet-1000虽然拥有6.5倍于ResNet152的层数,但成绩仍然不及后者。换句话说,模型训练存在一个饱和点,一旦训练复杂性越过该饱和点,那么任何额外网络元素的加入都只会拉低增益。

考虑到这一点,ALBERT的开发者们开始着手改进架构与训练方法,希望在构建“更大的BERT”之外找到新的性能突破之道。

ALBERT是何方神圣?

ALBERT的核心架构与BERT非常相似,其中同样使用到transformer编码器架构以及GELU激活机制。在论文中,研究人员们还使用了与原始BERT相同的、包含3万个单词的语料库。(V=30000。)但最重要的是,ALBERT做出以下三项重要且实质性的调整:

改进架构以提高参数使用效率:

1 分解式嵌入参数化

ALBERT的作者们注意到,对于BERT、XLNet以及RoBERTa而言,WordPiece嵌入的大小(E)与隐藏层大小(H)直接相关。

但是,ALBERT的作者们指出,WordPiece嵌入学习到的实际是与上下文无关的表示形式。而隐藏层嵌入则用于学习与上下文相关的表示形式

BERT的强大,主要取决于通过隐藏层学习到的、与上下文相关的表示形式。如果将H与E绑定在一起,则NLP必然需要极大的V(词汇量),因此实际上只需要V * E的嵌入矩阵就必须要按照H(隐藏层)进行规模设计。这就导致最终得到的模型往往拥有数十亿个参数,且其中大部分参数在实际训练中极少更新。

换言之,硬要把不同目标下的两种要素捆绑在一起,自然会导致参数使用效率低下。

反过来看,将二者彼此独立开来,则意味着参数使用效率将得到提高,并保证H(与上下文相关)始终大于E(与上下文无关)。

为了实现这个目标,ALBERT将嵌入参数拆分成两个较小的矩阵。相较于以往将一个热矢量直接投向至H中,现在新模型会将热矢量投射至一个较小的低维矩阵E中,而后再将E投射至H隐藏空间中。

如此一来,参数则从VH,瘦身成VE + E*H的形式。

2 跨层参数共享

ALBERT还在所有层之间共享参数,从而进一步提高参数效率。具体来讲,前馈网络参数与注意力参数都实现了全面共享。

如此一来,与BERT相比,ALBERT从一层到另一层的过渡变得更加顺滑。研究人员们还注意到,这种权重分配有助于稳定网络参数。

训练的革命——句子顺序预测,简称SOP:

与BERT一样,ALBERT也采用MLM(屏蔽语言建模),且最多使用3个屏蔽字(n-gram最大值为3)。

然而,BERT同时也使用到下一句预测(NSP)来配合MLM……相比之下,ALBERT拿出了自己的独家绝技——SOP训练方法。

为什么不使用NSP?这里需要强调一点,RoBERTa的作者们已经证明,初始BERT当中使用的下一句预测(NSP)损失函数的训练效果并不好。以此为基础,ALBERT的发明者们进一步从理论上解释了NSP为什么无法带来良好收效,并据此开发出SOP——句子顺序预测。

SOP (ALBERT)、NSP (BERT) 以及不使用(XLNet, RoBERTa)结果对比。

ALBERT作者们认为,NSP(下一句预测)在理论上会尝试将主题预测与相干预测相结合。作为参考,NSP会使用两个句子——若第二句来自同一文档,则代表匹配成功;若第二句来自不同文档,则代表匹配失败。

相比之下,ALBERT作者们认为句子之间的一致性(而非主题预测)才是最重要的指标。因此,SOP采用了如下执行方式:

使用来自同一份文档的两个句子,如果句子的顺序排列正确则视为匹配成功,如果句子顺序排列错误则代表匹配失败。

这就避免了主题预测的问题,同时帮助ALBERT逐步掌握了更细腻的话语或句子间衔接方式。

测试结果当然也证明了这一思路的正确性。

如果进行规模扩展,ALBERT的表现如何?

正如之前提到,规模扩展会先增加收益、后降低收益,ALBERT的作者们也进行了自己的规模测试,并发现了其中的层深与层宽(即hidden大小)峰值。因此,作者推荐在ALBERT当中采用12层参数交叉共享模型。

ALBERT发现,删除随机失活(dropout)并添加数据能够提升性能:

ALBERT的作者们在报告中指出,与计算机视觉技术领域发现的结论一致,删除随机失活并训练更多数据能够实现性能提升。

总结

ALBERT在多个基准测试当中获得了目前最强的NLP性能水平,亦把参数效率提升到新的高度。这是一项了不起的突破,继承了一年之前BERT的出色表现,并从多个方面推动NLP技术的整体进步。令人耳目一新的是,AI的未来并不单纯依赖于更多GPU以及直接构建规模更大的已训练模型,同时还取决于架构自身的改进以及参数效率的提升。在打破现有技术纪录的同时,参数的大量缩减(或者说参数效率的显著增长)也将让实用AI的可用性更上一层楼。

作者们指出,ALBERT未来的工作可能是通过稀疏或者阻塞注意力来提高计算效率。期待这位后起之秀能为我们带来更多惊喜!

ALBERT的Github以及官方/非官方消息源在哪里?

遗憾的是,我找不到任何正式发布至GitHub或者以其他方式进行开源的ALBERT代码,论文当中也没有提及。希望情况能够尽快得到改观。

非官方PyTorch版本:感谢Tyler Kalbach的帮助,我们找到了ALBERT的一套非官方PyTorch版本,GitHub地址如下:

https://github.com/graykode/ALBERT-Pytorch

非官方TensorFlow版本:感谢Engbert Tienkamp的协助,我们找到了ALBERT的一套非官方TensorFlow版本,GitHub地址如下:

https://github.com/brightmart/albert_zh

论文链接:

https://arxiv.org/abs/1909.11942v1

原文链接:

https://medium.com/@lessw/meet-albert-a-new-lite-bert-from-google-toyota-with-state-of-the-art-nlp-performance-and-18x-df8f7b58fa28

  • 发表于:
  • 本文为 InfoQ 中文站特供稿件
  • 首发地址https://www.infoq.cn/article/J1xU9BLMiFs1lgz0Cr8V
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券