返回介绍

数学基础

统计学习

深度学习

工具

Scala

十九、ALBERT [2019]

发布于 2023-07-17 23:38:25 字数 59652 浏览 0 评论 0 收藏 0

  1. 全网络预训练 full network pre-training 已经导致了 language representation learning 的一系列突破。许多困难的 NLP 任务,包括那些训练数据有限的任务,都大大受益于这些预训练的模型。这些突破之中最引人注目的标志之一是机器在 RACE test 上(为中国初中和高中英语考试设计的阅读理解任务)的性能演进:

    • 最初描述该任务并提出 modeling challenge 的论文报告了当时 SOTA 的机器准确率为 44.1%
    • 最新发表的结果(即 RoBERTa )报告了他们的模型性能为 83.2%
    • 论文 《A Lite BERT for Self-supervised Learning of Language Representations》 提出的 ALBERT 将其推高到 89.4% ,达到一个惊人的 45.3% 的改进,这主要归功于我们目前建立高性能预训练的 language representation 的能力。

    这些改进的证据显示,大型网络对于实现 SOTA 的性能至关重要。预训练大型模型并将其蒸馏成较小的模型,这种做法已成为实际应用的普遍做法。鉴于模型规模的重要性,我们问:拥有更好的 NLP 模型和拥有更大的模型一样容易吗?

    回答这个问题的一个障碍是现有硬件的内存限制。鉴于目前 SOTA 的模型往往有数亿甚至数十亿的参数,当我们试图扩大我们的模型规模时,很容易就会遇到这些限制。在分布式训练中,训练速度也会受到很大影响,因为通信开销与模型中的参数规模成正比。

    上述问题的现有解决方案包括模型并行 model parallelization 、以及巧妙的内存管理。这些解决方案解决了内存限制问题,但没有解决通信开销问题。在论文 《A Lite BERT for Self-supervised Learning of Language Representations》 中,作者通过设计 A Lite BERT: ALBERT 架构来解决上述所有问题,该架构的参数明显少于传统的 BERT 架构。

    ALBERT 采用了两种参数缩减 parameter reduction 技术,解除了 scale 预训练模型的主要障碍:

    • 第一个技术是因子分解的 embedding parameterization 。通过将大型词表的 embedding matrix 分解成两个小矩阵,论文将隐层的维度与 vocabulary embedding 的维度分离。这种分离使得在不显著增加 vocabulary embedding 的参数规模的情况下,更容易增长隐层的维度。
    • 第二种技术是跨层参数共享 cross-layer parameter sharing 。这种技术可以防止参数随着网络的深度而增长。

    这两种技术都大大减少了 BERT 的参数数量而不严重损害性能,从而提高了参数效率。配置类似于 BERT-largeALBERT 的参数数量减少了 18 倍,训练速度可以提高约 1.7 倍。参数缩减技术也作为一种正则化的形式,稳定了训练并有助于泛化。

    为了进一步提高 ALBERT 的性能,作者引入了一个自监督的损失用于 sentence-order prediction: SOPSOP 主要关注句子间的连贯性,旨在解决 original BERT 中提出的 next sentence prediction: NSP 损失的无效性。

    由于这些设计决策,论文能够扩展到更大的 ALBERT 配置,这些配置的参数仍然比 BERT-large 更少,但是性能更好。论文在著名的 GLUESQuADRACE 等自然语言理解 benchmark 上建立了新的 SOTA 结果。具体而言, ALBERTRACE 的准确率提高到89.4%、将 GLUE benchmark 提高到 89.4%、将 SQuAD 2.0F1 得分提高到 92.2

    虽然准确率更高,但是训练时间要长三倍。

  2. 相关工作:

    • 为自然语言 scale up representation learning:学习自然语言的 representation 已被证明对广泛的 NLP 任务有用,并被广泛采纳。过去两年中最重要的变化之一是,从预训练 word embedding (无论是标准的、还是上下文 contextualized 的),都转变为全网络预训练 full-network pre-training ,然后再紧跟着进行 task-specific 的微调。在这个工作方向,通常显示较大的模型规模可以提高性能。例如,BERT 原始论文表明:在三个自然语言理解任务中,使用更大的隐层维度、更多的隐层和更多的注意力头总是能带来更好的性能。然而,他们止步于 1024 的隐层维度,可能是因为模型规模和计算成本的问题。

      即,BERT_LARGE 的性能比 BERT_BASE 的性能更好。

      由于计算上的限制,特别是 GPU/TPU 内存的限制,很难对大型模型进行实验。鉴于目前 SOTA 的模型往往有数亿甚至数十亿的参数,我们很容易遇到内存限制。为了解决这个问题:

      • 《Training deep nets with sublinear memory cost》 提出了一种叫做 gradient checkpointing 的方法,以额外的前向传播为代价,将内存需求降低到亚线性 sublinear
      • 《The reversible residual network: Backpropagation without storing activations》提出了一种从 next layer 重构每一层的 activation 的方法,这样就不需要存储 intermediate activation
      • 这两种方法都以速度为代价降低了内存消耗。 《Exploring the limits of transfer learning with a unified text-to-text transformer》提出使用模型并行来训练一个巨型模型。

      相比之下,我们的参数缩减技术减少了内存消耗,提高了训练速度。

    • 跨层参数共享:跨层共享参数的思想之前已经用 Transformer 架构进行了探索,但这之前的工作主要是针对标准的 encoder-decoder 任务的训练,而不是 pretraining/finetuning setting

      • 与我们的观察不同,《Universal transformers》 表明,具有跨层参数共享的网络(Universal Transformer: UT )在语言建模任务和主谓一致 subject-verb agreement 任务上得到了比标准 transformer 更好的性能。

        ALBERT 的论文实验表明:跨层参数共享会损害模型性能。

        此外,UTencoder-decoder 架构,它分别在 encoderdecoder 上进行参数共享。而 ALBERT 只有 encoder,因此只有 encoder 的参数共享。

      • 最近,《Deep equilibrium models》 针对 transformer 网络提出了 Deep Equilibrium Model: DQE ,并表明 DQE 可以达到一个平衡点,即某一层的 input embeddingoutput embedding 保持一致(即,到达不动点)。

        我们的观察表明,我们的 embedding 是振荡的,而不是收敛的。

      • 《Modeling recurrence for transformer》将参数共享的 transformer 与标准的 transformer 相结合,这进一步增加了标准 transformer 的参数数量。

    • Sentence Ordering ObjectivesALBERT 使用了一个预训练损失,该损失基于预测两个连续的文本片段 text segment 的顺序。一些研究者已经尝试了与篇章连贯性 discourse coherence 类似的预训练目标。篇章中的连贯性 coherence 和凝聚力 cohesion 已被广泛研究,许多现象已被确定为连接相邻的文本片段。在实践中发现的大多数有效目标都很简单。

      • SkipthoughtFastSentsentence embedding 是通过使用一个句子的编码来预测相邻句子中的单词来学习的。

      • sentence embedding learning 的其他目标包括:预测未来的句子(而不是仅仅预测邻居),以及预测显式的篇章标记 discourse marker

        我们的损失与 《Discourse-based objectives for fast unsupervised sentence representation learning》sentence ordering objective 最为相似。该方法学习 sentence embedding 从而确定两个连续句子的顺序。然而,与上述大多数工作不同的是,我们的损失是在文本片段上而不是句子上定义的。

      • BERT 使用的损失是基于 next sentence prediction 。我们在实验中与这种损失进行了比较,发现 sentence ordering 是一项更具挑战性的预训练任务,对某些下游任务更有用。

      • 与我们的工作同时,《StructBERT: Incorporating language structures into pre-training for deep language understanding》 也试图预测两个连续的文本片段的顺序,但他们把它与原来的 next sentence prediction 结合起来从而得到一个三分类任务,而不是二分类任务(比较两个连续的文本片段的顺序)。

19.1 模型

19.1.1 模型架构选择

  1. ALBERT 架构的 backboneBERT 类似,它使用了一个具有 GELU 非线性激活函数的 transformer encoder 。我们遵从 BERT 的惯例,将 vocabulary embedding size 记做E$ E $ ,将 encoder layer 数量记做L$ L $ ,将 hidden size 记做H$ H $ ,将 feed-forward/filter size 设定为4H$ 4H $ ,将注意力头的数量设定为H/64$ H/64 $ 。

    BERT 的设计选择相比,ALBERT 有三个主要贡献:因子分解的 embedding 参数化 factorized embedding parameterization、跨层参数共享cross-layer parameter sharing 、句子间的一致性损失 Inter-sentence coherence loss

  2. Factorized embedding parameterization:在 BERT ,以及 XLNetRoBERTa 等后续建模改进中,WordPiece embedding sizeE$ E $ 与隐层维度H$ H $ 绑定,即E=H$ E=H $ 。这个决定无论从建模的角度还是从实践的角度来看,都是不理想的,原因如下:

    • 从建模的角度来看,WordPiece embedding 是为了学习 context-independent representation ,而 hidden-layer embedding 则是为了学习 context-dependent representation 。正如关于上下文长度的实验所示(见 RoBERTa 原始论文),BERT-like representation 的力量来自于上下文的使用,从而提供用于学习这种 context-dependent representation 的信号。因此,将 WordPiece embedding sizeE$ E $ 与 hidden layer sizeH$ H $ 解绑,使我们能够更有效地利用总的模型参数,即HE$ H \gg E $ 。
    • 从实践的角度来看,自然语言处理通常需要很大的词表大小V$ V $ 。如果E=H$ E = H $ ,那么增加H$ H $ 就会增加 embedding matrix 的大小,其中 embedding matrix 的大小为V×E$ V\times E $ 。这很容易导致一个具有数十亿个参数的模型,其中大部分在训练期间只被非常少地地更新。

    因此,对于 ALBERT ,我们使用 embedding 参数的因子分解,将它们分解成两个较小的矩阵。我们不是直接将 one-hot 向量投影到维度为H$ H $ 的隐空间,而是先将它们投影到维度为E$ E $ 的低维 embedding 空间,然后再投影到隐空间。通过使用这种分解,我们将 embedding 参数的规模从O(V×H)$ O(V\times H) $ 降低到O(V×E+E×H)$ O(V\times E + E\times H) $ 。当HE$ H \gg E $ 时,这种参数的减少是显著的。

    我们选择对所有的 word piece 使用相同的E$ E $ ,因为与 whole-word 相比, word piece 在文档中的分布更加均匀。在 whole-word embedding 中,对不同的词有不同的 embedding size 是很重要的。

  3. Cross-layer parameter sharing:跨层参数共享是提高参数效率的另一种方式。有多种共享参数的方式,例如,仅共享跨层的 feed-forward network: FFN 参数、或者仅共享注意力参数。ALBERT 的默认决定是跨层共享所有参数。除非另有说明,我们所有的实验都使用这个默认决定。我们在实验中把这个设计决定与其他共享参数策略进行了比较。

    虽然参数共享降低了参数规模,但是并没有降低计算量。

    Universal Transformer: UTDeep Equilibrium Models: DQETransformer 网络也进行了类似的探索。

    • 与我们的观察不同,《Universal Transformer》 表明:UT 优于普通的 Transformer
    • 《Deep equilibrium models》 表明,他们的 DQE 达到了一个平衡点,对于这个平衡点,某一层的 input embeddingoutput embedding 保持不变。我们对 L2 距离和余弦相似度的测量表明,我们的 embedding 是振荡的而不是收敛的。

    下图显示了每一层的 input embeddingoutput embeddingL2 距离和余弦相似度,使用 BERT-largeALBERT-large 配置(如下表所示)。我们观察到:ALBERT 的层与层之间的转移 transitionBERT 的平滑得多。这些结果表明,权重共享对稳定网络参数有一定的影响。

    尽管与 BERT 相比,两个指标(即, L2 距离和余弦相似度)都有下降,但即使在 24 层之后,它们也没有收敛到 0 。这表明:ALBERT 参数的解空间与 DQE 所发现的解空间非常不同。

  4. Inter-sentence coherence loss:除了 masked language modeling: MLM 损失,BERT 还使用了一个额外的损失,称为 next-sentence prediction: NSPNSP 是一种二元分类损失,用于预测两个 segment 是否在原始文本中连续出现,具体如下:通过从训练语料库中抽取连续的 segment 来创建正样本,通过将不同文档中的 segment 配对来创建负样本,正样本和负样本是以相同的概率进行采样。NSP 的目的是为了提高下游任务(如自然语言推理)的性能,这些任务需要推理 sentence pair 之间的关系。然而,随后的研究(XLNetRoBERTa)发现 NSP 的影响不可靠,并决定取消 NSP

    我们猜想,NSP 的无效性背后的主要原因是:与 MLM 相比,NSP 任务缺乏难度。正如该任务的表述,NSP 将话题预测 topic prediction 和连贯性预测 coherence prediction 混合在一个任务中。 然而,与连贯性预测相比,话题预测更容易学习,而且也与MLM 损失所学到的内容有很多重叠。

    SpanBERT 认为 NSP 的无效性背后的主要原因是:

    • 在双序列上下文中,模型无法从较长的 full-length 上下文中获益。
    • 在双序列上下文中,以另一个文档中的、通常不相关的上下文为条件,会给 MLM 增加噪音。

    我们坚持认为句子间建模 inter-sentence modeling 是语言理解的一个重要方面,但我们提出了一个主要基于连贯性的损失。也就是说,对于 ALBERT ,我们使用了一个 sentence-order prediction: SOP 损失,它避免了主题预测,而是专注于建模句子间的连贯性。SOP 损失使用与 BERT 相同的技术(来自同一文件的两个连续 segment )作为样本,并使用相同的两个连续 segment 但是调换顺序之后作为负样本。这就迫使模型学习关于篇章级 discourse-level 连贯性的更精细的区分。

    正如我们在实验部分所显示的,事实证明:

    • NSP 根本不能解决 SOP 的任务(也就是说,它最终学习了更容易的话题预测信号,并在SOP 任务中表现为随机水平)。
    • SOP 可以在一定程度上解决 NSP 的任务,大概是基于分析 misaligned coherence cue

    因此,ALBERT 模型为 multi-sentence encoding 任务一致性地改善了的下游任务表现。

19.1.2 模型配置

  1. 我们在下表中列出了 BERT 模型和 ALBERT 模型在可比的超参数设置下的差异。由于上面讨论的设计选择,ALBERT 模型与相应的BERT 模型相比,其参数规模要小得多。

    例如:

    • BERT-large 相比,ALBERT-large 的参数少了大约 18 倍,即 18M334M

      参数少了 18 倍,但是模型的效果也有所降低。

    • H=2048ALBERT-xlarge 只有60M 的参数,H=4096ALBERT-xxlarge 只有 235M 的参数(约为 BERT-large 参数规模的 70% )。

    请注意,对于 ALBERT-xxlarge ,我们主要报告 12 层网络的结果,因为 24 层网络(具有相同的配置)获得了类似的结果,但计算成本更高。

    这种参数效率的提高是 ALBERT 的设计选择的最重要的优势。

19.2 实验

  1. 为了使对比尽可能的有意义,我们遵从 BERT 的设置,使用 BOOKCORPUSEnglish Wikipedia 用于预训练 baseline 模型。这两个语料库包括大约 16GB 的未压缩文本。

    我们将输入格式化为[CLS]X1[SEP]X2[SEP]$ \text{[CLS]} X_1\text{[SEP]}X_2 \text{[SEP]} $ ,其中X1=x1,1,x1,2,$ X_1=x_{1,1},x_{1,2},\cdots $ 以及X2=x2,1,x2,2,$ X_2=x_{2,1},x_{2,2},\cdots $ 是两个 segment 。我们总是将最大输入长度(即,拼接之后的序列的最大长度)限制为 512token ,并以 10% 的概率随机生成短于 512 的输入序列。

    BERT 一样,我们使用大小为 30K 的词表 vocabulary ,使用 SentencePiece 进行 tokenization (如同 XLNet )。

    我们使用 n-gram maskingMLM 目标生成 masked input (如同 SpanBERT),每个 n-gram masking 的长度n$ n $ 是随机选择的,由如下的概率给出(N$ N $ 为n-gram masking 的最大长度):

    (8)p(n)=1/nk=1N1/k

    这个概率倾向于更短的 n-gram masking 。例如,当N=10$ N=10 $ 时,n=1,2,,10$ n=1,2,\cdots,10 $ 的概率分别为:0.341, 0.171, 0.114, 0.085, 0.068, 0.057, 0.049, 0.043, 0.038, 0.034

    我们设定 n-gram masking 的最大长度为 3 ,即 MLM 目标可以由最多 3 个完整的单词组成,如 "White House correspondents"

    所有的模型更新都使用了 batch size = 4096 、以及学习率为 0.00176LAMB 优化器。除非另有说明,我们对所有模型进行了125Kstep 的训练。训练是在 Cloud TPU V3 上进行的。用于训练的 TPU 数量从 64512 不等,取决于模型大小。

    LAMB 优化器是针对大 batch size 的训练。首先我们看下 Adam 优化器:

    (9)mt=β1×mt1+(1β1)×gtvt=β2×vt1+(1β2)×gt2m^t=11β1tmt,v^t=11β2tvtθt=θt1η×m^tv^t+ϵ

    其中:mt$ \mathbf{\vec m}_t $ 为动量,vt$ \mathbf{\vec v}_t $ 为速度,gt$ \mathbf{\vec g}_t $ 为梯度,gt2$ \mathbf{\vec g}_t^2 $ 为梯度的逐元素平方,η$ \eta $ 为学习率,ϵ$ \epsilon $ 为一个很小的正数用于防止除零的错误,β1,β2$ \beta_1,\beta_2 $ 为超参数,θt$ \theta_t $ 为待优化的参数。

    AdamW 是为了适配 weight decay(权重衰减相当于参数的 L2 正则化),在 Adam 的基础上进行修改:

    (10)θt=θt1η×(m^tv^t+ϵ+λ×θt1)

    其中:λ$ \lambda $ 为权重衰减系数,通常设置为 0.005/0.01

    LAMBAdamW 的基础上继续修改:

    (11)rt=m^tv^t+ϵθt=θt1η×ϕ(||θt1||)×rt+λθt1rt+λθt1

    其中:ϕ()$ \phi(\cdot) $ 为一个映射函数,可以选择为ϕ(z)=z$ \phi(z) = z $ 、或者ϕ(z)=min(max(z,γl),γu)$ \phi(z) = \min(\max(z,\gamma_l),\gamma_u) $ ,γl,γu$ \gamma_l,\gamma_u $ 为预定义的超参数分别代表z$ z $ 的下界和上界。

    除非另有说明,本节中描述的实验设置用于我们自己的所有版本的 BERT 以及 ALBERT 模型。

  2. 评估 benchmark

    • 固有评估 Intrinsic Evaluation:为了监控训练进度,我们使用前面相同的程序和配置,在 SQuADRACE 的验证集基础上创建了一个验证集。我们同时报告了 MLM 和句子分类任务的准确率。

      注意,我们只用这个创建的验证集来检查模型是如何收敛的,它的使用方式不会影响任何下游评估的性能(例如,该验证集不是用于模型选择)。

    • 下游评估 Downstream Evaluation:遵从 XLNetRoBERTa ,我们在三个流行的 benchmark 上评估我们的模型:General Language Understanding Evaluation: GLUE 基准、两个版本的 Stanford Question Answering Dataset: SQuAD、以及 ReAding Comprehension from Examinations: RACE 数据集。与 RoBERTa 一样,我们对验证集进行了早停 early stopping ,在此基础上我们报告了所有的比较,除了基于任务排行榜的最终比较(在最终比较,我们也报告了测试集的结果)。对于在验证集上有较大方差的 GLUE 数据集,我们报告了 5 次运行的中位数。

      • GLUEGLUE9 个任务组成,即 :

        
        
        xxxxxxxxxx
        Corpus of Linguistic Acceptability: CoLA Stanford Sentiment Treebank: SST Microsoft Research Paraphrase Corpus: MRPC Semantic Textual Similarity Benchmark: STS Quora Question Pairs: QQP Multi-Genre NLI: MNLI Question NLI: QNLI Recognizing Textual Entailment: RTE Winograd NLI: WNLI

        GLUE 聚焦于评估模型的自然语言理解能力。当报告 MNLI 结果时,我们只报告 "match" 条件(即,MNLI-m )。我们遵循先前工作中的微调程序( BERTRoBERTaXLNet),并报告 GLUE sbumissionheld-out test set 性能。对于测试集的 submission,我们遵从 RoBERTaXLNet 的描述,对 WNLIQLNLI 进行了 task-specific 修改。

      • SQuADSQuAD 是一个从 Wikipedia 建立的提取式问答数据集 extractive question answering dataset 。答案是来自上下文段落的 segment ,任务是预测 answer span 。我们在两个版本的 SQuAD 上评估我们的模型:v1.1v2.0SQuAD v1.1100K个人类标注的 question/answer pairSQuAD v2.0 还额外引入 了 50K 个无法回答的问题。

        对于 SQuAD v1.1 ,我们使用与 BERT 相同的训练程序;而对于 SQuAD v2.0 ,模型是用 span extraction loss 和额外的 predicting answerability 分类器联合训练的(RoBERTaXLNet)。我们同时报告了验证集和测试集的性能。

      • RACERACE 是一个大规模的多选阅读理解数据集,收集自中国的英语考试,有近 100K 个问题。RACE 中的每个实例有 4 个候选答案。遵从之前的工作(RoBERTaXLNet),我们使用段落、问题、以及每个候选答案的拼接作为模型的输入。然后,我们使用来自 "[CLS]" tokenrepresentation 来预测每个答案的概率。

        该数据集包括两个 domain:初中和高中。我们同时在这两个 domain 上训练我们的模型,并同时报告验证集和测试集的准确率。

  3. 下游任务的超参数配置如下表所示。

19.2.1 BERT 和 ALBERT 的整体比较

  1. 我们现在准备量化 ALBERT 模型架构设计选择的影响,特别是围绕参数效率 parameter efficiency 的选择。如下表所示,参数效率的提高展示了 ALBERT 设计选择的最重要的优势:ALBERT-xxlarge 只用了 BERT-large70% 左右的参数,就比 BERT-large 取得了显著的改进,这可以通过几个有代表性的下游任务的验证集分数的差异来衡量:SQuAD v1.1+1.9%)、SQuAD v2.0+3.1%)、MNLI+1.4%)、SST-2+2.2%)、以及 RACE+8.4%) 。

    另一个有趣的观察是在相同的训练配置(相同数量的 TPU )下,训练期间的数据吞吐速度。由于较少的通信和较少的计算,ALBERT 模型与它们相应的 BERT 模型相比,具有更高的数据吞吐量。如果我们使用 BERT-large 作为 baseline ,我们观察到 ALBERT-large 在训练期间大约快 1.7 倍,而 ALBERT-xxlarge 由于结构较大,大约慢 3 倍。

    这种比较的意义不大:

    • 虽然 ALBERT-xxlarge 的平均准确率更高(+3.5%),但是它要慢 3 倍。
    • 虽然 ALBERT-large 更快(快 1.7 倍),但是它的平均准确率更低(-2.8%)。
    • ALBERT-xlarge 的效果与 BERT 几乎差不多(略高 +0.3%),但是要慢 1.5 倍。

    这表明 ALBERT 虽然降低了参数数量,但是没有降低总的计算量。但是,接下来作者比较了在相同训练时间情况下,ALBERT-xxlarge 仍然要超过 BERT-large,这才证明了 ALBERT 的价值。

    接下来,我们进行消融实验,从而量化 ALBERT 的每个设计选择的单独贡献。

19.2.2 因子分解的 Embedding Parameterization

  1. 下表显示了使用 ALBERT-base 配置(见 Table 1)时改变 vocabulary embedding 维度E$ E $ 的效果,其中使用相同的一组代表性的下游任务。可以看到:

    • not-shared 条件下( BERT-style ),较大的 embedding 维度会带来更好的性能,但幅度不大。
    • all-shared 条件下( ALBERT-style ,即 ALBERT base 对应的结果),128 维的 embedding 似乎是最好的。

    这样看起来,embedding size 超过了 64 之后,似乎模型性能差距不大?这是否说明此时模型容量已经足够强大,而瓶颈在于训练数据?可以通过在 embedding size 小于 64 上进行验证,如 embedding size{1, 4, 8, 16, 32}

    基于这些结果,我们在未来的所有设置中使用 embedding 维度E=128$ E = 128 $ ,作为进一步 scaling 的必要步骤。

    下表还说明:相同 embedding size 下,ALBERTBERT 的效果更差。

19.2.3 跨层参数共享

  1. 下表 列出了各种跨层参数共享策略的实验,其中使用 ALBERT-base 配置(见 Table 1)和两种 embedding 维度(E=768$ E=768 $ 和E=128$ E=128 $ )。我们比较了 all-shared 策略(ALBERT-style )、not-shared 策略(BERT-style )、以及中间策略(只有注意力参数被共享、或只有 FFN 参数被共享)。可以看到:

    • 相比较于 not-sharedall-shared 在两种 embedding 维度下都会损害性能,但与E=768$ E=768 $ (平均准确率 -2.5% )相比,E=128$ E=128 $ (平均准确率 -1.5% )的情况稍微好一点。

      这和 《Universal Transformer》 的实验结论相反。

    • 此外,相比较于 not-shared,大部分的性能下降似乎来自于共享 FFN 参数,而共享注意力参数在E=128$ E=128 $ 时没有下降(平均准确率 +0.1% )、在E=768$ E=768 $ 时有轻微下降(平均准确率 -0.7%)。

    • 还有其他跨层共享参数的策略。例如,我们可以把L$ L $ 层分成N$ N $ 个大小为M$ M $ 层的组,每个组(包含M$ M $ 层)共享参数。总的来说,我们的实验结果表明,组的大小M$ M $ 越小,我们得到的性能就越好。然而,减少组的大小M$ M $ 也会极大地增加整体参数的数量。我们选择 all-shared 作为我们的默认选择。

19.2.4 Sentence Order Prediction

  1. 我们使用 ALBERT-base 配置,对额外的句间损失 inter-sentence loss 进行了三个实验:noneXLNet-styleRoBERTa-style )、NSPBERT-style )、以及 SOPALBERT-style )。结果如下表所示,包括固有任务(MLMNSP 、以及 SOP 任务的准确率)和下游任务。可以看到:

    • 固有任务的结果显示:

      • NSP loss 没有给 SOP 任务带来判别能力(52.0% 的准确率,类似于 None 条件下的随机猜测性能)。这使我们可以得出结论:NSP 最终仅建模话题漂移 topic shift
      • 相比之下,SOP loss 确实能比较好地解决 NSP 任务(准确率 78.9% ),解决 SOP 任务甚至更好(准确率 86.5% )。

      这三种方式对 MLM 任务都没有帮助。

    • 更重要的是,相比 NoneSOP loss似乎一致地改善下游 multi-sentence encoding 任务的表现(SQuAD1.1 约提升 +1%SQuAD 2.0 约提升 +2%RACE 约提升 +1.7% ),平均得分提高了约 +1%

19.2.5 相同训练时间

  1. Table 2 中的加速结果表明,与 ALBERT-xxlarge 相比,BERT-large 的数据吞吐量高出约 3.17 倍。由于更长的训练时间通常会导致更好的性能,我们进行了一个比较,其中,我们不控制数据吞吐量(即,训练步数),而是控制实际训练时间(即,让不同的模型训练相同的小时数)。在下表中,我们比较了一个 BERT-large 模型在 400K 个训练 step (经过 34 小时的训练)后的性能,大致相当于训练一个 ALBERT-xxlarge 模型所需的125K 个训练 step32 小时的训练)的时间。

    在训练了大致相同的时间后,ALBERT-xxlarge 显著优于 BERT-large :平均值提高了 +1.5% ,在 RACE 上的性能提升高达+5.2%

19.2.6 额外的训练数据和 Dropout 效果

  1. 到目前为止所做的实验只使用了 WikipediaBOOKCORPUS 数据集,就如 BERT 所使用的。在本节中,我们报告了 XLNetRoBERTa 所使用的额外数据的影响。下图 (a) 显示了在没有额外数据、以及有额外数据两种条件下的验证集 MLM 准确率,可以看到有额外数据条件下有显著的提升。从下表中我们还观察到,除了 SQuAD benchmarkWikipedia-based ,因此受到 out-of-domain 训练数据的负面影响)之外,下游任务的性能也有所提高。

    BERT-large 模型训练了 400K 步,因此 ALBERT-base 也用 Wikipedia + BOOKCORPUS 训练了 400K 步。然后在此之后使用了额外的数据。因此下图 (a) 中,前面 400K 步,二者的曲线是重合的。

    我们还注意到,即使在训练了 1M 步之后,我们最大的模型仍然没有过拟合训练数据。因此,我们决定移除 dropout 从而进一步提高我们的模型容量。如下图 (b) 所示,移除 dropout 显著提高了 MLM 的准确率。对 ALBERT-xxlarge 在大约 1M 步训练的中间评估(如下表所示)也证实:移除 dropout 有助于下游任务。有经验(《Inception-v4, inception-resnet and the impact of residual connections on learning》)和理论(《Understanding the disharmony between dropout and batch normalization by variance shift》)证据表明:卷积神经网络中的 batch normalizationdropout 组合可能会产生有害的结果。据我们所知,我们是第一个表明 dropout 会损害大型 Transformer-based 模型的性能。然而,ALBERT 的底层网络结构是 transformer 的一个特例,需要进一步的实验来观察这种现象是否出现在其他 transformer-based 的架构中。

    注意,下图 (b) 是从 1M 步之后再移除 dropout 的,而不是一开始就移除 dropout 。所以前面 1M 步,二者的曲线是重合的。

    另外,论文的结论有点问题。这里仅仅说明,前 2/3 的时间使用 dropout 然后剩余时间移除 dropout,要比全部时间使用 dropout 的效果更好。而无法说明移除 dropout 比带 dropout 更好。

    另外,论文的 Table 8 仅仅说是在大约 1M 步时的评估结果,但是没有说具体在什么时候。是 110 万步?还是 120 万步?

19.2.7 NLU 任务上的当前 SOTA

  1. 我们在本节报告的结果利用了 BERT 使用的训练数据,以及 RoBERTaXLNet 使用的额外数据。我们报告了两种 setting 下的微调的 SOTA 结果:单模型single-model 和集成 ensemble 。在这两种 setting 中,我们只做单任务微调。遵从 RoBERTa 的做法,在验证集上,我们报告了五次运行的中位数。

    • 单模型的 ALBERT 配置包含了所讨论的最佳性能的settingALBERT-xxlarge 配置(参考 Table 1 ),组合 MLM lossSOP loss,以及 no dropout

    • ensembleALBERT 是从多个 checkpoint 来获取的,这些 checkpoint 根据验证集的性能来选择,被选中的 checkpoint 的数量从 619 不等。

      对于GLUETable 9 )和 RACETable 10 ),我们对集成模型 ensemble models 的预测值取平均,其中候选模型是微调了不同的预训练模型(这些预训练模型使用 12 架构层和 24 层架构,并预训练了不同的步数)。

      对于 SQuADTable 10 ),我们对那些有多个概率的 span 的预测分数进行了平均。我们还对 "unanswerable" 的决定的分数进行了平均。

    单模型结果和集成模型结果都表明:

    • ALBERT 在所有三个 benchmark 上都大大改善了 SOTA 的水平,实现了89.4GLUE 得分、92.2SQuAD 2.0 测试F1 得分、以及 89.4RACE 测试准确率。

      这些都是集成模型的效果。

    • RACE 上似乎是一个特别强大的改进:

      • 我们的集成模型比 BERT 的绝对分值跃升 +17.4%、比 XLNet 提升 +7.6% 、比 RoBERTa 提升 +6.2% 、比 DCMI+ 提升 5.3%

        这里只有 DCMI+ 是集成模型的效果,其它的 BERT/XLNET/RoBERTa 都是单模型的效果(不公平的比较)。

      • 我们的单模型达到了 86.5% 的测试准确率,比 SOTA 的集成模型仍好 2.4%

19.2.8 附录:网络的深度和宽度

  1. 在本节中,我们检查了网络深度(层数)和宽度(隐层维度)对 ALBERT 的性能的影响。

    • 下表显示了使用不同层数的 ALBERT-large 配置(见 Table 1 )的性能。具有 3 层或更多层的网络是通过使用之前深度的网络参数进行微调来训练的(例如,12 层的网络参数是从 6 层网络参数的 checkpoint 进行微调的)。《Efficient training of bert by progressively stacking》也使用了类似的技术。

      >=3 层的网络都不是从头开始训练的,而是利用更浅网络的参数来微调的。

      对于 ALBERT-large,可以看到:

      • 对比 3 网络与 1 层网络,虽然它们的参数数量相同,但性能显著提高。

        所有不同层的网络,它们的参数数量都相同,因为是参数共享。

      • 然而,当继续增加层数时,会出现收益递减:12 层网络的结果与24 层网络的结果相对接近,而48 层网络的性能似乎有所下降。

    • 网络宽度也出现了类似的现象,如下表所示(针对不同宽度的 ALBERT-large 配置)。可以看到:

      • 当增加隐层维度时,模型性能增加,但会出现收益递减。
      • 在隐层维度为 6144 时,模型性能似乎明显下降。

      我们注意到,这些模型似乎都没有过拟合训练数据,而且与表现最好的 ALBERT 配置相比,它们的训练损失和验证损失都比较高。

  2. 是否更宽的模型需要更深?在前面我们表明:对于隐层维度H=1024$ H=1024 $ 的 ALBERT-large12 层和 24 层模型 之间的差异很小。对于更宽的 ALBERT ,如 ALBERT-xxlargeH=4096$ H=4096 $ ),这一结果是否仍然成立?

    答案如下表所示。12 层和 24 层的 ALBERT-xxlarge 配置在下游任务准确率方面的差异可以忽略不计,Avg 得分相同。我们的结论是:当共享所有跨层参数(ALBERT-style )时,没有必要建立比 12 层更深的模型。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文