大型语言模型,ALBERT-自我监督学习的轻量级BERT

ALBERT 轻量级BERT模型中基于自我监督学习的大型语言模型

了解 BERT 架构选择背后的关键技术,生产紧凑高效的模型

了解 BERT 架构选择背后的关键技术,生产紧凑高效的模型

介绍

近年来,大型语言模型的发展蓬勃发展。BERT 成为最受欢迎和高效的模型之一,能够以高准确性解决各种自然语言处理任务。在 BERT 之后,出现了一系列其他模型,也展示了出色的结果。

一个明显的趋势是随着时间的推移,大型语言模型(LLMs)变得越来越复杂,参数和训练数据呈指数增长。深度学习的研究表明,这些技术通常会带来更好的结果。不幸的是,机器学习领域已经遇到了关于 LLMs 的几个问题,可伸缩性已成为有效训练、存储和使用它们的主要障碍。

因此,最近开发了新的语言模型来解决可伸缩性问题。在本文中,我们将讨论于2020年发明的 ALBERT,旨在显著减少 BERT 参数。

ALBERT

为了理解 ALBERT 中的基本机制,我们将参考它的官方论文。在很大程度上,ALBERT 派生自 BERT 的相同架构。下面将详细说明该模型的三个主要差异选择。

ALBERT 中的训练和微调过程与 BERT 中的类似。与 BERT 一样,ALBERT 在英语维基百科(2500M 词)和 BookCorpus(800M 词)上进行预训练。

1. 分解参数嵌入

当输入序列被标记化后,每个标记都映射到词汇嵌入中的一个。这些嵌入用于输入到 BERT。

假设 V 是词汇大小(可能的嵌入总数),H 是嵌入维度。那么对于 V 个嵌入,我们需要存储 H 个值,得到一个 V x H 的嵌入矩阵。实际上,这个矩阵通常具有巨大的尺寸,需要大量的内存来存储它。但更大的问题是,嵌入矩阵的大部分时间元素都是可训练的,模型需要大量资源来学习适当的参数。

例如,让我们看看 BERT 基础模型:它有一个由 30K 个令牌组成的词汇表,每个令牌由一个 768 维的嵌入表示。总计需要存储和训练 23M 个权重。对于更大的模型,这个数量甚至更大。

通过使用矩阵分解,可以避免这个问题。原始的词汇矩阵 V x H 可以分解为一对大小为 V x E 和 E x H 的小矩阵。

词汇矩阵分解

因此,与使用 O(V x H) 参数相比,分解只需要 O(V x E + E x H) 个权重。显然,这种方法在 H 远大于 E 时非常有效。

矩阵分解的另一个伟大之处是它不会改变获取标记嵌入的查找过程:左侧分解矩阵 V x E 的每一行以同样简单的方式将标记映射到其对应的嵌入。这样,嵌入的维度从 H 降低到 E。

然而,在分解矩阵的情况下,为了获得 BERT 的输入,映射的嵌入需要被投影到隐藏的 BERT 空间:这是通过将左矩阵的对应行乘以右矩阵的列来实现的。

2. 跨层参数共享

减少模型参数的一种方法是使它们可共享。这意味着它们都共享相同的值。在大多数情况下,它仅仅减少了存储权重所需的内存。然而,标准的反向传播算法或推断仍然需要在所有参数上执行。

在模型的不同但相似的块中共享权重是最优的共享方式之一。将它们放入相似的块中会增加在前向传播或反向传播期间共享参数计算相同的机会。这为设计高效的计算框架提供了更多机会。

上述思想在ALBERT中得到了实现,它由一系列具有相同结构的Transformer块组成,使参数共享更高效。实际上,Transformer中存在几种层间参数共享的方式:

  • 仅共享注意力参数;
  • 仅共享前向神经网络(FNN)参数;
  • 共享所有参数(在ALBERT中使用)。
不同的参数共享策略

通常可以将所有Transformer层划分为每个组大小为M的N个组,每个组内部共享参数。研究人员发现,组大小M越小,结果越好。然而,减小组大小M会显著增加总参数量。

3. 句子顺序预测

BERT在预训练时专注于掌握两个目标:掩码语言建模(MLM)和下一句预测(NSP)。总体而言,MLM的设计目的是提高BERT获取语言知识的能力,而NSP的目标是提高BERT在特定下游任务上的性能。

然而,多个研究表明,去除NSP目标可能是有益的,主要是因为与MLM相比,NSP过于简单。根据这个想法,ALBERT的研究人员也决定移除NSP任务,并用句子顺序预测(SOP)问题替代它,其目标是预测两个句子是正确顺序还是反向顺序。

在训练数据集方面,所有正例输入句子都是按照同一文本段落的顺序收集的(与BERT中相同的方法)。对于负面句子,原则相同,但两个句子的顺序相反。

BERT和ALBERT中正例和负例训练对的组成

实验证明,使用NSP目标训练的模型无法准确解决SOP任务,而使用SOP目标训练的模型在NSP问题上表现良好。这些实验证明,相比于BERT,ALBERT更适合解决各种下游任务。

BERT与ALBERT对比

下面的图表显示了BERT和ALBERT之间的详细对比。

BERT和ALBERT模型不同变种之间的比较。在相同配置下测量的速度显示了模型通过训练数据的迭代速度。速度值相对于每个模型(BERT large作为基准,其速度为1x)显示。在GLUE、SQuAD和RACE基准测试中衡量的准确性得分。

以下是一些最有趣的观察结果:

  • ALBERT xxlarge版本仅使用BERT large 70%的参数,并在下游任务上表现更好。
  • 相比于BERT large,ALBERT large取得了可比较的性能,并且由于大规模参数大小的压缩,速度提高了1.7倍。
  • 所有ALBERT模型的嵌入大小为128。正如论文中的消融研究所示,这是最佳值。增加嵌入大小,例如增加到768,可以提高指标,但绝对值只提高不到1%,相对于模型复杂性的增加来说并不多。
  • 尽管ALBERT xxlarge处理单次迭代的数据比BERT large慢3.3倍,但实验证明,如果将这两个模型进行相同时间的训练,那么ALBERT xxlarge在基准测试中表现比BERT large要好得多(88.7% vs 87.2%)。
  • 实验证明,具有较大隐藏大小(≥1024)的ALBERT模型不会因为层数增加而获得很多好处。这就是为什么ALBERT xxlarge版本将层数从ALBERT large的24层降低到了12层的原因之一。
ALBERT大型模型(18M个参数)随着层数增加的性能表现。图中具有≥3层的模型是从前一个模型的检查点微调得到的。可以观察到在达到12层后,性能提升变得缓慢,并且在24层后逐渐下降。
  • 随着隐藏层大小的增加,也出现了类似的现象。当隐藏层大小大于4096时,模型性能会下降。
ALBERT大型模型(来自上图的3层配置)随着隐藏层大小的增加的性能表现。隐藏层大小为4096是最佳值。

结论

乍一看,ALBERT似乎是比原始的BERT模型更好的选择,因为它在下游任务上表现更好。然而,由于其更长的结构,ALBERT需要更多的计算量。一个很好的例子是ALBERT xxlarge,它有235M个参数和12个编码器层。这235M个权重的大部分属于一个单独的Transformer块。然后,这些权重将被用于每个12层。因此,在训练或推断过程中,算法必须执行超过20亿个参数!

基于这些原因,ALBERT更适合在可以用速度换取更高准确性的问题上使用。最终,自然语言处理领域永不停止,不断在朝着新的优化技术发展。很有可能在不久的将来,ALBERT的速度会得到提高。论文的作者已经提到了一些潜在的算法,如稀疏注意力块注意力来加速ALBERT。

参考资料

所有图片(除非另有说明)均由作者提供