解读ALBERT《A LITE BERT FOR SELF-SUPERVISED LEARNING OF LANGUAGE REPRESENTATIONS》

转载地址https://blog.csdn.net/weixin_37947156/article/details/101529943

原文作者:sliderSun

    解读ALBERT《A LITE BERT FOR SELF-SUPERVISED LEARNING OF LANGUAGE REPRESENTATIONS》

    中文预训练ALBERT模型:https://github.com/brightmart/albert_zh

    曾经,预训练是大模型(玩家)的天下

    语言表征学习领域的这些进展表明,大模型对于实现 SOTA 性能表现极其重要。预训练大模型,并在实际应用中将它们提炼成更小的模型已经成为一种常见的做法。考虑到模型大小的重要性,研究者提出一个问题:建立更好的 NLP 模型像构建更大的模型一样容易吗?

    解答该问题的难点在于可用硬件的内存会受到限制。考虑到当前的 SOTA 模型常常包含数亿甚至数十亿参数,扩展模型时很容易受到内存的限制。

    研究者还观察到,仅仅增加 BERT-large 等模型的隐藏层大小也会导致性能下降。如下表 1 和图 1 所示,研究者将 BERT-large 的隐藏层大小增加一倍,该模型(BERT-xlarge)在 RACE 基准测试上的准确率显著降低。

    表 1:增加 BERT-large 的隐藏层大小,模型在 RACE 上的表现变差。

    解读ALBERT《A LITE BERT FOR SELF-SUPERVISED LEARNING OF LANGUAGE REPRESENTATIONS》_第1张图片

    图 1:BERT-large 和 BERT-xlarge 的训练损失(左)和 dev mask 的 LM 准确率(右)。模型增大之后,其 mask LM 准确率降低了,同时没有出现明显的过拟合迹象。

    现在,小模型也已崛起(其实还是玩不起)

    为了解决上述问题,谷歌的研究者设计了「一个精简的 BERT」(A Lite BERT,ALBERT),参数量远远少于传统的 BERT 架构。

    ALBERT 通过两个参数削减技术克服了扩展预训练模型面临的主要障碍。

    • 第一个技术是对嵌入参数化进行因式分解。研究者将大的词汇嵌入矩阵分解为两个小的矩阵,从而将隐藏层的大小与词汇嵌入的大小分离开来。这种分离使得隐藏层的增加更加容易,同时不显著增加词汇嵌入的参数量。
    • 第二种技术是跨层参数共享。这一技术可以避免参数量随着网络深度的增加而增加。两种技术都显著降低了 BERT 的参数量,同时不对其性能造成明显影响,从而提升了参数效率。ALBERT 的配置类似于 BERT-large,但参数量仅为后者的 1/18,训练速度却是后者的 1.7 倍。

    这些参数削减技术还可以充当某种形式的正则化,可以使训练更加稳定,而且有利于泛化。

    为了进一步提升 ALBERT 的性能,研究者还引入了一个自监督损失函数,用于句子级别的预测(SOP)。SOP 主要聚焦于句间连贯,用于解决原版 BERT 中下一句预测(NSP)损失低效的问题。

    基于这些设计,ALBERT 能够扩展为更大的版本,参数量仍然小于 BERT-large,但性能可以显著提升。研究者在知名的 GLUE、SQuAD 和 RACE 自然语言理解基准测试上都得到了新的 SOTA 结果:在 RACE 上的准确率为 89.4%,在 GLUE 上的得分为 89.4,在 SQuAD 2.0 上的 F1 得分为 92.2。

    ALBERT 的三大改造

    前面已经展示了小模型的优势,以及 ALBERT 的核心思想,那么 ALBERT 具体结构又是怎么样的。在这一部分中,我们将简要介绍 ALBERT 的三大模块,并提供与标准 BERT 的量化对比。

    ALBERT 架构的骨干网络与 BERT 是相似的,即使用 Transformer 编码器和 GELU 非线性激活函数。现在先约定一下 BERT 的表示方式,即指定词嵌入大小为 E、编码器层数为 L、隐藏层大小为 H。与 Devlin 等人的研究一样,这篇论文将前馈网络/滤波器大小设置为 4H,将注意力 Head 的数量设置为 H/64。如下将介绍 ALBERT 的三大特效。

    嵌入向量参数化的因式分解

    在 BERT 以及后续的 XLNet 和 RoBERTa 中,WordPiece 词嵌入大小 E 和隐藏层大小 H 是相等的,即 E ≡ H。由于建模和实际使用的原因,这个决策看起来可能并不是最优的。

    从建模的角度来说,WordPiece 词嵌入的目标是学习上下文无关的表示,而隐藏层嵌入的目标是学习上下文相关的表示。通过上下文相关的实验,BERT 的表征能力很大一部分来自于使用上下文为学习过程提供上下文相关的表征信号。因此,将 WordPiece 词嵌入大小 E 从隐藏层大小 H 分离出来,可以更高效地利用总体的模型参数,其中 H 要远远大于 E。

    从实践的角度,自然语言处理使用的词典大小 V 非常庞大,如果 E 恒等于 H,那么增加 H 将直接加大嵌入矩阵的大小,这种增加还会通过 V 进行放大。

    因此,对于 ALBERT 而言,研究者对词嵌入参数进行了因式分解,将它们分解为两个小矩阵。研究者不再将 one-hot 向量直接映射到大小为 H 的隐藏空间,而是先将它们映射到一个低维词嵌入空间 E,然后再映射到隐藏空间。通过这种分解,研究者可以将词嵌入参数从 O(V × H) 降低到 O(V × E + E × H),这在 H 远远大于 E 的时候,参数量减少得非常明显。

    
     
       
       
       
       
    1. O(V * H) to O(V * E + E * H)
    2. 如以ALBert_xxlarge为例,V= 30000, H= 4096, E= 128
    3. 那么原先参数为V * H= 30000 * 4096 = 1.23亿个参数,现在则为V * E + E * H = 30000* 128+ 128* 4096 = 384万 + 52万 = 436万,
    4. 词嵌入相关的参数变化前是变换后的 28倍。

    跨层参数共享

    对于 ALBERT,研究者提出了另一种跨层参数共享机制来进一步提升参数效率。其实目前有很多方式来共享参数,例如只贡献前馈网络不同层之间的参数,或者只贡献注意力机制的参数,而 ALBERT 采用的是贡献所有层的所有参数。

    参数共享能显著减少参数。共享可以分为全连接层、注意力层的参数共享;注意力层的参数对效果的减弱影响小一点。
     
       
       
       
       

    这种机制之前也是有的,但研究者的度量发现词嵌入的 L2 距离和余弦相似性是震荡而不是收敛。如下图 2 展示了每一层输入与输出嵌入矩阵间的 L2 距离与余弦相似性。

    解读ALBERT《A LITE BERT FOR SELF-SUPERVISED LEARNING OF LANGUAGE REPRESENTATIONS》_第2张图片

     

    图 2:BERT-Large 与 ALBERT-Large 每一层输入嵌入与输出嵌入间的 L2 距离与余弦相似性。

    研究者发现 ALBERT 从一层到另一层的转换要比 BERT 平滑得多,结果表明,权重共享有效地提升了神经网络参数的鲁棒性。即使相比于 BERT 这两个指标都有所下降,但在 24 层以后,它们也不会收敛到 0。

    句间连贯性损失

    除了自编码语言建模损失外,BERT 还是用了额外的下一句预测损失。下一句预测损失本来是为了提升下游任务的性能,但是后来很多研究者发现这种机制并不是很高效,因此决定去除它。

    研究者猜测,下一句预测任务低效的原因,主要是它的难度太小。因为下一句预测将主题预测和连贯性预测结合到单个任务中,然而主题预测比连贯性预测简单得多,因此它与语言建模损失函数学到的内容是有重合的。

    研究者表示,句间建模在语言理解中是非常重要的,因此他们提出了一种基于语言连贯性的损失函数。对于 ALBERT,研究者使用了一个句子顺序预测(SOP)损失函数,它会避免预测主题,而只关注建模句子之间的连贯性。

    具体的损失函数表达式读者可以查阅原论文,但研究者表示,在使用了该损失函数后,ALBERT 能显著提升下游多句子编码任务的性能。

    你可能感兴趣的:(语言模型,ALBERT,NLP,自然语言处理)