finish 3.1
This commit is contained in:
@@ -149,7 +149,53 @@ BERT 原始的 bpe 词表大小为 30K,RoBERTa 选择了 50K 大小的词表
|
||||
|
||||
通过上述三个部分的优化,RoBERTa 成功地在 BERT 架构的基础上刷新了多个下游任务的 SOTA,也一度成为 BERT 系模型最热门的预训练模型。同时,RoBERTa 的成功也证明了更大的预训练数据、更大的预训练步长的重要意义,这也是 LLM 诞生的基础之一。
|
||||
|
||||
|
||||
## 3.1.3 ALBERT
|
||||
|
||||
在 BERT 的基础上,RoBERTa 进一步探究了更大规模预训练的作用。同样是基于 BERT 架构进行优化的 ALBERT 模型,则从是否能够减小模型参数保持模型能力的角度展开了探究。通过对模型结构进行优化并对 NSP 预训练任务进行改进,ALBERT 成功地以更小规模的参数实现了超越 BERT 的能力。虽然 ALBERT 所提出的一些改进思想并没有在后续研究中被广泛采用,但其降低模型参数的方法及提出的新预训练任务 SOP 仍然对 NLP 领域提供了重要的参考意义。
|
||||
|
||||
### (1)优化一:将 Embedding 参数进行分解
|
||||
|
||||
BERT 等预训练模型具有远超传统神经网络的参数量,如前所述,BERT-large 具有 24层 Encoder Layer,1024 的隐藏层维度,总共参数量达 340M。而这其中,Embedding 层的参数矩阵维度为 $V*H$,此处的 V 为词表大小 30K,H 即为隐藏层大小 768,也就是 Embedding 层参数达到了 23M。而这样的设置还会带来一个更大的问题,即 Google 探索尝试搭建更宽(也就是隐藏层维度更大)的模型时发现,隐藏层维度的增加会带来 Embedding 层参数的巨大上升,如果把隐藏层维度增加到 2048,Embedding 层参数就会膨胀到 61M,这无疑是极大增加了模型的计算开销。
|
||||
|
||||
而从另一个角度看,Embedding 层输出的向量是我们对文本 token 的稠密向量表示,从 Word2Vec 的成功经验来看,这种词向量并不需要很大的维度,Word2Vec 仅使用了 100维大小就取得了很好的效果。因此,Embedding 层的输出也许不需要和隐藏层大小一致。
|
||||
|
||||
因此,ALBERT 对 Embedding 层的参数矩阵进行了分解,让 Embedding 层的输出维度和隐藏层维度解绑,也就是在 Embedding 层的后面加入一个线性矩阵进行维度变换。ALBERT 设置了 Embedding 层的输出为 128,因此在 Embedding 层后面加入了一个 128\*768 的线性矩阵来将 Embedding 层的输出再升维到隐藏层大小。也就是说,Embedding 层的参数从 $V*H$ 降低到了 $V*E + E*H$,当 E 的大小远小于 H 时,该方法对 Embedding 层参数的优化就会很明显。
|
||||
|
||||
### (2)优化二:跨层进行参数共享
|
||||
|
||||
通过对 BERT 的参数进行分析,ALBERT 发现各个 Encoder 层的参数出现高度一致的情况。由于 24个 Encoder 层带来了巨大的模型参数,因此,ALBERT 提出,可以让各个 Encoder 层共享模型参数,来减少模型的参数量。
|
||||
|
||||
在具体实现上,其实就是 ALBERT 仅初始化了一个 Encoder 层。在计算过程中,仍然会进行 24次计算,但是每一次计算都是经过这一个 Encoder 层。因此,虽然是 24个 Encoder 计算的模型,但只有一层 Encoder 参数,从而大大降低了模型参数量。在这样的情况下,就可以极大程度地扩大隐藏层维度,实现一个更宽但参数量更小的模型。ALBERT 通过实验证明,相较于 334M 的 BERT,同样是 24层 Encoder 但将隐藏层维度设为 2048 的 ALBERT(xlarge 版本)仅有 59M 的参数量,但在具体效果上还要更优于 BERT。
|
||||
|
||||
但是,上述优化虽然极大程度减小了模型参数量并且还提高了模型效果,却也存在着明显的不足。虽然 ALBERT 的参数量远小于 BERT,但训练效率却只略微优于 BERT,因为在模型的设置中,虽然各层共享权重,但计算时仍然要通过 24次 Encoder Layer 的计算,也就是说训练和推理时的速度相较 BERT 还会更慢。这也是 ALBERT 最终没能取代 BERT 的一个重要原因。
|
||||
|
||||
### (3)优化三:提出 SOP 预训练任务
|
||||
|
||||
类似于 RoBERTa,ALBERT 也同样认为 NSP 任务过于简单,在预训练中无法对模型效果的提升带来显著影响。但是不同于 RoBERTa 选择直接去掉 NSP,ALBERT 选择改进 NSP,增加其难度,来优化模型的预训练。
|
||||
|
||||
在传统的 NSP 任务中,正例是由两个连续句子组成的句对,而负例则是从任意两篇文档中抽取出的句对,模型可以较容易地判断正负例,并不能很好地学习深度语义。而 SOP 任务提出的改进是,正例同样由两个连续句子组成,但负例是将这两个的顺序反过来。也就是说,模型不仅要拟合两个句子之间的关系,更要学习其顺序关系,这样就大大提升了预训练的难度。例如,相较于我们在上文中提出的 NSP 任务的示例,SOP 任务的示例形如:
|
||||
|
||||
输入:
|
||||
Sentence A:I love you.
|
||||
Sentence B: Because you are wonderful.
|
||||
输出:
|
||||
1(正样本)
|
||||
|
||||
输入:
|
||||
Sentence A:Because you are wonderful.
|
||||
Sentence B: I love you.
|
||||
输出:
|
||||
0(负样本)
|
||||
|
||||
ALBERT 通过实验证明,SOP 预训练任务对模型效果有显著提升。使用 MLM + SOP 预训练的模型效果优于仅使用 MLM 预训练的模型更优于使用 MLM + NSP 预训练的模型。
|
||||
|
||||
通过上述三点优化,ALBERT 成功地以更小的参数实现了更强的性能,虽然由于其架构带来的训练、推理效率降低限制了模型的进一步发展,但打造更宽的模型这一思路仍然为众多更强大的模型提供了参考价值。
|
||||
|
||||
作为预训练时代的 NLP 王者,BERT 及 BERT 系模型在多个 NLP 任务上扮演了极其重要的角色。除去上文介绍过的 RoBERTa、ALBERT 外,还有许多从其他更高角度对 BERT 进行优化的后起之秀,包括进一步改进了预训练任务的 ERNIE、对 BERT 进行蒸馏的小模型 DistilBERT、主打多语言任务的 XLM 等,本文就不再一一赘述。以 BERT 为代表的 Encoder-Only 架构并非 Transformer 的唯一变种,接下来,我们将介绍 Transformer 的另一种主流架构,与原始 Transformer 更相似、以 T5 为代表的 Encoder-Decoder 架构。
|
||||
|
||||
**参考资料**
|
||||
|
||||
1. [BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding](https://arxiv.org/abs/1810.04805)
|
||||
2. [RoBERTa: A Robustly Optimized BERT Pretraining Approach](https://arxiv.org/abs/1907.11692)
|
||||
2. [RoBERTa: A Robustly Optimized BERT Pretraining Approach](https://arxiv.org/abs/1907.11692)
|
||||
3. [ALBERT: A Lite BERT for Self-supervised Learning of Language Representations](https://arxiv.org/abs/1909.11942)
|
||||
Reference in New Issue
Block a user