Abstract
在预训练无言模型中,增加网络参数的规模能带来在下游任务的性能的提升,但是随着参数量的增加,会带来一些困难:GPU内存的限制和训练时间长的问题。
本文提出两种减少参数的技术,来降低内存开销、增加训练速度,能够解决内存限制问题,并且较少交互开销。
ALBERT联合两只中采参数降低技术来消散放缩预训练模型的主要阻碍。
-
因子分解embedding 参数
通过分解大的vocabulary embedding matrix变成两个小的矩阵,这种方法使得增加hidden_size但是不会显著地增加vocabulary embedding的参数量
-
层间参数共享
这项技术阻止了随着网络层的加深,参数量也成正比的问题。
为了更好地提升ALBERT的性能表现,介绍了一种自监督损失(SOP),SOP主要关注于内部句子的共现,同时解决原始bert的NSP算是的无效性。
1 Related Work
1.1 自然语言表征学习的缩放
学习自然语言的表示对于各种各样的NLP任务来说都是非常重要的,这几年最大的变化就是从预训练Word Embedding到预训练语言模型。
增加模型的规模对于模型效果的提升很重要,但是由于==计算的限制(尤其是GPU内存的限制)==,很难去实验更大得模型。为了解决这个问题,很多学者提出了自己的方法,一些学者提出方法缩小内存消耗的速度;一些学者提出利用并行化获得更大地模型。
通过对比,本文的方法不仅能降低内存开销,而且能够增加训练速度。
1.2 层间参数共享
层间层数共享的方法在TRansformer被探索过,但是其主要工作专注于标准的encoder-decoder架构的训练而不是预训练/微调的设置。
1.3 设置顺序目标
ALBERT在预测一段文本的两个连续的片段的顺序来构建预训练损失。
本文的损失与句子顺序目标相似,其句子的嵌入为了决策出两个连续语句的先后顺序被学习,不太像以前的工作那样只是局限于句子之间,本文的损失定义在文本片段之间的先后顺序的判定。
bert所使用的的第二个segment可能会来自其他的文档。
2 ALBERT
展示ALBERT的设计并与原始的bert作比较。
ALBERT的基本结构与bert一样都是使用transformer的encoder,使用GELU非线性激活函数。
2.1 Embedding parameterization
在bert、XLNET、RoBERTa中,embedding_size(E)和hidden_size(H)一致,也即:,这种做法使得建模和实际使用中都是不理想的。
从模型的角度去考虑,embedding的目的是学习上下文独立的表示,而hidden_size是要学习上下文依赖的表示,类Bert的文本表示的能力来自于基于上下文依赖所学习到的上下文表示,也即hidden_size更加重要。
松开的限制,使得可以更加有效地利用建模所需求的模型参数,也即
。
从实用角度去看,NLP通常要求比较大的词典大小,如果
,那么增加H也会增加嵌入矩阵
的大小,这会使得模型很容易就达到了百万级的参数,而且其中大多数在训练期间更新都很少。
因此,在ALBERT中实用embedding参数的分解,将其分解成为两个小矩阵。不在将one-hot向量直接映射到H大小的隐层参数空间,首先将其映射到一个低维的嵌入空间E,之后将其映射到hidden space,通过使用这种分解方法,降低了embedding的参数从到
。这种参数降低方法在
时,时==非常显著==的。
2.2 层间参数共享
存在着很多的参数共享方法,如仅仅共享全连接的参数、仅仅共享attention的参数等。对于ALbert来说,默认设置是共享层之间的所有参数。

从上图可看到,albert的参数共享方法相比较bert层到层之间的变换更加地平滑。