编译 | ronghuaiyang
来源 | AI公园(ID:AI_Paradise)
【导读】这是来自Google和Toyota的新NLP模型,超越Bert,参数小了18倍。
你以前的NLP模型参数效率低下,而且有些过时。祝你有美好的一天。
谷歌Research和丰田技术研究所(Toyota Technological Institute)联合发布了一篇新论文,向全世界介绍了BERT的继任者——ALBERT。(“ALBERT:A Lite BERT for Self-supervised Learning of Language Representations”)。
ALBERT在SQuAD和RACE测试上创造了新的SOTA,并在比赛中以+14.5%的优势击败BERT。
ALBERT的最终结果(为GLUE,RACE,SQuAD创造了新的SOTA)方面给人留下了深刻的印象,但是…真正令人惊讶的是模型/参数大小的显著减少。
两个关键架构的更改和一个训练更改的组合使ALBERT的表现都更好,并极大地减少了模型的大小。看看下面的模型大小的比较——BERT x-large有12.7亿个参数,而ALBERT x-large有5900万个参数!
同样大小的网络(隐藏/层),BERT的参数是12.7亿,而ALBERT的参数是59M…缩小了~21.5x。
在这篇文章中有很多内容需要解释,我将尝试深入研究下面的所有重点。
对于NLP来说,更大的模型总是更好吗?不…
让我们从NLP的一个要点开始——过去的一年,NLP已经取得了进展,通过扩展transformer类型的模型,每一个较大的模型,通过简单地构建一个越来越大的预训练模型,逐步提高最终任务的准确性。在原始的BERT论文中,他们发现更大的隐藏尺寸、更多的隐藏层和更多的注意力头导致了渐进的改进,并测试了多达1024大小的隐藏层。
迄今为止最大的NLP模型是NVIDIA最近发布的Megatron,这是一个巨大的80亿参数模型,超过BERT的24倍,接近OpenAI的GPT-2的6倍。Megatron 在512个GPU的环境下接受了9天的训练。
然而,存在一个临界点或饱和点,即越大并不总是越好,ALBERT的作者表明,他们最大的模型BERT X-Large,隐藏层大小为2048以及4倍于原BERT large的参数,实际上性能下降了近20%。
越大并不总是越好——将隐藏层大小加倍,参数大小增加4倍,但是BERT在RACE数据集上的准确性降低了。
这类似于计算机视觉层深度的峰值效应。对计算机视觉来说,按比例增加层的深度可以提高到一定程度,然后下降。例如,ResNet -1000并不比ResNet152好,即使它有6.5倍数量的层。换句话说,存在一个饱和点,在这个点上,训练的复杂性压倒并降低了来自额外网络能力的收益。
因此,考虑到这一点,ALBERT的创造者开始改进架构和训练方法,以得到更好的结果,而不是仅仅构建一个“更大的BERT”。
什么是ALBERT?
ALBERT的核心架构类似于bert,因为它使用了transformer编码器架构,同时还有GELU激活。在论文中,他们也使用了与原BERT相同的30K的词汇量。(V = 30000)。然而,ALBERT做了三个重要的改变:
架构改进,更有效地使用参数:
1 — 嵌入分解参数化
ALBERT的作者注意到,对于BERT、XLNet和RoBERTa,WordPiece Embedding的大小(E)直接与隐含层大小(H)联系在一起。
然而,ALBERT的作者指出,WordPiece Embedding是用来学习上下文独立表示的。隐含层嵌入是为了学习上下文依赖表示的。
BERT的能力很大程度上依赖于通过隐藏层学习上下文相关的表示。如果你将H和E结合起来,并且NLP需要大V (vocab),那么你的嵌入矩阵E,实际上是V*E,必须与H(隐藏层)一起扩展,因此你最终得到的模型可以有数十亿个参数,但其中大多数在训练中很少更新。
因此,绑定在不同目的下工作的两个项目意味着低效的参数。
因此,将两者分开,可以更有效地使用参数,因此H(上下文相关)应该总是大于E(上下文无关)。
为此,ALBERT将嵌入参数分成两个更小的矩阵。因此,不是将独热向量直接投射到H中,而是将独热向量投射到一个更小、更低维的矩阵E中……然后投影到H隐藏空间。
因此,参数由大的O (V*H)简化为小的O (V*E + E*H)。
2 — 跨层参数共享
ALBERT通过跨层共享所有参数进一步提高了参数效率。这意味着前馈网络参数和注意力参数都是共享的。
因此,与BERT相比,ALBERT从一层到另一层的转换更平滑,作者注意到这种权值共享有助于稳定网络参数。
训练的变换 — SOP,句子顺序预测:
ALBERT确实使用了MLM(掩码语言模型),就像BERT一样,使用最多3个单词掩码(n-gram max 3)。
然而,BERT除了MLM,还使用了NSP,即下一句话预测。ALBERT开发了自己的训练方法,称为SOP。
为什么不用NSP?值得注意的是,RoBERTa的作者指出,原BERT中使用的下一个句子预测(NSP)损失不是非常有效,所以就不用了。ALBERT作者从理论上解释了为什么NSP不是那么有效,但是他们利用NSP开发了SOP -句子顺序预测。
ALBERT认为,NSP(下一个句子预测)将话题预测和连贯预测混为一谈。作为参考,NSP使用了两个句子——正样本匹配是第二个句子来自同一个文档,负样本匹配是第二个句子来自另一个文档。
相比之下,ALBERT的作者认为句子间的连贯是真正需要关注的任务/损失,而不是主题预测,因此SOP是这样做的:
使用了两个句子,都来自同一个文档。正样本测试用例是这两句话的顺序是正确的。负样本是两个句子的顺序颠倒。
这避免了主题预测的问题,并帮助ALBERT学习更细粒度的语篇或句子间衔接。
当然,结果不言自明。
我们如何把ALBERT放大呢?
根据前面提到的关于扩展大小导致收益减小的注意事项,ALBERT的作者们进行了他们自己的ALBERT扩展测试,发现了层深度和宽度(隐藏大小)的峰值点。因此,作者推荐12层模型用于ALBERT风格的交叉参数共享。
ALBERT发现删除dropout,增加数据可以提高性能:
这个非常符合计算机视觉已经发现的结论,ALBERT的作者报告说,不使用dropout得到了性能提升,当然,使用了更多的数据进行了训练。
总结
ALBERT在几个benchmarks上刷新了SOTA。这是一个惊人的突破,它建立在一年前BERT所做的伟大工作上,并在多个方面推进了NLP。尤其令人振奋的是,人工智能的未来不仅基于添加更多的GPU和简单地构建更大的训练模型,而且还将从改进的架构和参数效率方面取得进展。
作者指出,ALBERT未来的工作是提高其计算效率,可能是通过分散注意力或分块注意力。因此,希望在未来更多的来自ALBERT的进展 !
Github和ALBERT的官方来源?我找不到ALBERT的官方版本发布到github,或者通过开源方式发布,这篇文章也没有提到。希望在不久的将来能够实现。
非官方的TensorFlow版本:https://github.com/brightmart/albert_zh?source=post_page-----df8f7b58fa28----------------------
论文链接: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