模型介绍
通过应用最新的神经结构搜索算法,提取了BERT体系结构参数的最优子集。这个最优子集(称为BORT)比原来的模型小,其中网络结构大小为原来BERT-large 结构大小的15%,有效大小(没有计算嵌入层)为5.5%。
BORT预训练了288个GPU小时,这是预训练性能最高的BERT参数化结构变体RoBERTa-large所需时间的1.2% ,是在相同硬件上训练BERT-large所需GPU小时的世界纪录的33%左右。在CPU上训练速度也快了7.9倍,并且比该体系结构的其他压缩变体和一些非压缩变体的性能更好:在多个公共自然语言理解(NLU)基准测试中,与BERT-large相比,它的性能提高了0.3%到31%。
模型改进
BERT’s Optimal Subarchitecture
BERT是双向的、基于transformer的全连接结构。它由一个依赖于词汇量大小的嵌入层(在BERT的情况下词汇量大小 V = 28 , 996 V = 28,996 V=28,996)、基于transformer的D层编码器和一个输出层组成。最初,BERT结构有两种变体:BERT-large(编码器层数 D = 24 D = 24 D=24,注意力头数 A = 16 A = 16 A=16,隐藏层大小 H = 1024 H = 1024 H=1024,中间层大小 I = 4096 I = 4096 I=4096)和BERT-base,对应结构参数为 ⟨ D = 12 , A = 12 , H = 768 , I = 3072 ⟩ \lang D = 12, A = 12, H =768, I = 3072 \rang ⟨D=12,A=12,H=768,I=3072⟩。
形式上,设 Ξ \Xi Ξ 为一个有限集合,由一个四元组 ⟨ D , A , H , I ⟩ \lang D, A, H, I \rang ⟨D,A,H,I⟩(模型结构的参数)的值组成。这样,就可以将BERT的模型结构用函数描述为:
BERT : Ξ → B \operatorname {BERT} : \Xi \rightarrow B BERT:Ξ→B
这样,每个 b ∈ B b \in B b∈B 就对应于 D D D 层参数化编码器的一层,由一个元组 ξ = ⟨ D , A , H , I ⟩ ∈ Ξ \xi = \lang D, A, H, I \rang \in \Xi ξ=⟨D,A,H,I⟩∈Ξ 表示。其中,有 A A A 个注意力头,以及可训练的参数 w 1 , w 2 , . . . , w k ∈ W w_1, w_2, ..., w_k \in W w1,w2,...,wk∈W,每个 w i w_i wi 属于 R H × I , R H × H , R I × H R^{H \times I},R^{H \times H}, R^{I \times H} RH×I,RH×H,RI×H 中的任意一个。有时,可以将 b b b 写成另外一种形式 b ( X ; W ) b (X;W) b(X;W),其中, X X X 为一个输入集合。这样,对于一个固定的序列长度 s s s,批处理大小 z z z,输入 x ∈ X , x ∈ N z , s x \in X,x \in N^{z,s} x∈X,x∈Nz,s。
然后,希望找到一个结构的参数集 ξ ∈ ⟨ D , A , H , I ⟩ \xi \in \lang D, A, H, I \rang ξ∈⟨D,A,H,I⟩,它有最优的三个指标:推断速度 i ( b ( X ; ⋅ ) ) i(b(X;\cdot)) i(b(X;⋅)),参数大小 p ( b ( ⋅ ; W ) ) p(b(\cdot;W)) p(b(⋅;W))和错误率 e ( b ( X ; W ∗ ) , Y ) e(b(X;W^*),Y) e(b(X;W∗),Y),作为相对于一组期望值 Y Y Y 和训练参数 W ∗ W^* W∗ 的度量。如果没有歧义的话,可以省略函数的参数。
对于任意的结构,这是一个 NP-Hard 问题。对于 p ( ⋅ ) p(\cdot) p(⋅) 和 i ( ⋅ ) i(\cdot) i(⋅)而言,如果编码器的输入和输出层都被限制的话,则有可能有效地解决这个问题。考虑到嵌入层是一个可训练的查找表,并且大部分操作在编码器中执行,而且嵌入层的参数足够大,能够在三个指标上占主导地位,因此嵌入层呈现了这样的特性。此外,BERT 结构包含了一个层归一化和GeLU激活函数。如果用于求解该算法的损失函数对 W W W 是 L L L-Lipschitz 光滑的,并且下有界和有界的随机梯度,则该结构表现出很强的 A B n C AB^nC ABnC 性质。该算法的表现有点像 FPTAS,在多步 ( 1 / ϵ , ∣ P 1 ∣ , . . , ∣ P k ∣ ) (1/\epsilon,|P_1|,..,|P_k|) (1/ϵ,∣P1∣,..,∣Pk∣) 中返回一个 1 − ϵ 1-\epsilon 1−ϵ 精确解,其中 P i P_i Pi 为过程的一个参数。可以很容易的看到,这些近似和假设与所有的 b ∈ B b \in B b∈B 有关,需要算法和 FPTAS 一样工作。
FPTAS 算法是一个近似算法,依赖于 p ( ⋅ ) , i ( ⋅ ) , e ( ⋅ , ⋅ ) p(\cdot),i(\cdot),e(\cdot,\cdot) p(⋅),i(⋅),e(⋅,⋅) 的代理,分别表示为 p ~ ( ⋅ ) , i ~ ( ⋅ ) , e ~ ( ⋅ , ⋅ ) \tilde p(\cdot),\tilde i(\cdot),\tilde e(\cdot,\cdot) p~(⋅),i~(⋅),e~(⋅,⋅)。通过将它们表示为函数 Ξ \Xi Ξ 来实现,然后通过选择一个最大参数,最大推理时间的结构 T ∈ B T\in B T∈B,又称为最大值点,并通过一个称为 W W W系数的指标,将它们进行标量化。
虽然计算 p ( ⋅ ) , i ( ⋅ ) p(\cdot),i(\cdot) p(⋅),i(⋅) 相对简单,但 p ( ⋅ ) ≃ p ~ ( ⋅ ) − e ( b ( X ; W ∗ ) , Y ) p(\cdot) \simeq \tilde p(\cdot) - e(b(X;W^*),Y) p(⋅)≃p~(⋅)−e(b(X;W∗),Y) 必须通过损失函数进行计算。类似地,运行时和近似性的保证依赖于两个额外的输入参数:选择的最大训练步数 n > 0 n > 0 n>0,以及期望的间隔大小 1 ≤ ϵ ≤ Ξ 1 \le \epsilon \le \Xi 1≤ϵ≤Ξ。 ϵ \epsilon ϵ 的选择直接影响该近似算法所得到的解的质量。
BORT通过使用 Bookcorpus 数据集训练的候选结构 b ∈ B b\in B b∈B,训练步长 n = 3 n=3 n=3,间隔大小 ϵ = 2 \epsilon = 2 ϵ=2以及一个完全预训练好的 RoBERTa-large 作为最大点 T T T 来运行 FPTAS 算法。 e ~ ( ⋅ , ⋅ ) \tilde e(\cdot,\cdot) e~(⋅,⋅) 为 T T T 的最后一层和每一个 b ∈ B b \in B b∈B 之间交叉熵。另外两个条件(有界随机梯度和下有界)可以直接通过梯度裁剪和有限精度计算实现。
对于BORT模型的输入,它的输入序列长度 s = 512 s = 512 s=512,保持大小写,使用相同的词汇表( V = 50 , 265 V= 50,265 V=50,265)和分词过程。使用随机梯度下降作为优化器,并在所有的实验中保持单一的超参数集,即批处理大小 1024 1024 1024,学习率 5 × 1 0 − 4 5 \times 10^{-4} 5×10−4,梯度裁剪常数 c = 1 c=1 c=1,慢热学习的比例 0.05。搜索空间 Ξ : = D × A × H × I \Xi:=D \times A \times H \times I Ξ:=D×A×H×I 由参数集 D = { 2 , 4 , 6 , 8 , 10 , 12 } , A = { 4 , 8 , 12 , 16 } , H = { 512 , 768 , 1024 } , I = { 256 , 512 , 768 , 1024 , 3072 } D = \{2, 4, 6, 8, 10, 12\}, A = \{4, 8, 12, 16\}, H = \{512, 768, 1024\}, I = \{256, 512, 768, 1024, 3072\} D={2,4,6,8,10,12},A={4,8,12,16},H={512,768,1024},I={256,512,768,1024,3072} 构成。构成BERT-base的 ξ ∈ ⟨ 12 , 12 , 768 , 3072 ⟩ \xi \in \lang 12,12,768,3072 \rang ξ∈⟨12,12,768,3072⟩ 出现在这个集合中,如果忽视这个设定 ⟨ D , A , H , I ⟩ ∈ Ξ \lang D, A, H, I \rang \in \Xi ⟨D,A,H,I⟩∈Ξ,其中 H H H 不能被 A A A 整除,那么就会出现 transformer 实现问题。
通过评估在11,828行数据集上并且在单个nVidia V100 GPU上执行推理所需的平均时间来计算 i ( ⋅ ) i(\cdot) i(⋅),该数据集具有相同的序列长度、批处理大小为1024。这个语料库只是没有替换的Bookcorpus的一个小子集,它比原始语料库小得多。用上面提到的批处理大小,可以提供一个推断延迟合理的近似值,在测试集上 e ~ ( b ( X ; W ∗ ) , T ( X ) ) \tilde e(b(X;W^*),T(X)) e~(b(X;W∗),T(X)) 是原来的两倍。
通过运行FPTAS算法,取 W W W系数最高的前三个结果。如上表所示, W W W系数最高的结果对应结构(A1),就是BORT模型。
Pre-training Using Knowledge Distillation
尽管FPTAS保证能够获得最优子结构的结构参数集,但有效地预训练参数化的模型仍然是一个开放的问题。用于预训练BERT和RoBERTa的过程(自我监督的预训练)成本很高,并且违背了高效结构的目的。然而,在一个内在评估指标下的预训练,会导致更专业化的下游任务的参数大幅增加。
我们知道,使用知识蒸馏(KD)预训练语言模型可以在选定的内在评价指标上取得良好的表现。选用交叉熵作为最大点的计算错误函数 e ~ ( ⋅ , ⋅ ) \tilde e(\cdot,\cdot) e~(⋅,⋅),通过知识蒸馏似乎有很好的扩展性。将使用自监督训练和 KD 预训练的 BORT 模型进行对比,发现基于KD 预训练的,并使用学生和教师最后一层之间的直接交叉熵的模型具有更高的掩码语言模型 (MLM) 准确性和更快的预训练速度。