预训练语言模型 | (4) AlBert

原文链接

目录

1. 背景

2. Albert流程和技术细节

3. 总结


1. 背景

增大预训练模型的大小通常能够提高预训练模型的推理能力,但是当预训练模型增大到一定程度之后,会碰到GPU/TPU memory的限制。因此,作者在bert中加入了2项减少参数的技术,能够缩小bert的大小,并且修改了bert NSP的loss,在和bert有相同参数量的前提之下,有更强的推理能力。

 

2. Albert流程和技术细节

  • 参数减少技术

1)词向量/嵌入矩阵分解

在bert以及诸多bert的改进版中,embedding size都是等于hidden size的,这不一定是最优的。因为bert的token embedding是上下文无关的,而经过multi-head attention+ffn后的hidden embedding是上下文相关的,bert预训练的目的是提供更准确的hidden embedding,而不是token embedding,因此token embedding没有必要和hidden embedding一样大。albert将token embedding进行了分解,首先降低embedding size的大小,然后用一个Dense操作将低维的token embedding映射回hidden size的大小。bert的embedding size=hidden size,因此词向量/嵌入矩阵的参数量是vocab size * hidden size,进行分解后的参数量是vocab size * embedding size + embedding size * hidden size,只要embedding size << hidden size,就能起到减少参数的效果。

注意,bert系列预训练语言模型有三个embedding,三者相加,作为模型输入。因此,有3个embedding matrix(词嵌入矩阵、位置嵌入矩阵、segment 嵌入矩阵),这里只对最大的词嵌入矩阵进行分解。

2)参数共享

bert的12层transformer encoder block是串行在一起的,每个block虽然长得一模一样,但是参数是不共享的。albert将transformer encoder block进行了参数共享,这样可以极大地减少整个模型的参数量。

3)参数减少技术详解

albert使用了2项参数减少的技术,但是2项技术对于参数减少的贡献是不一样的,第1项是词向量矩阵的分解,当embedding size从768降到64时,可以节省21M的参数量,但是模型的推理能力也会随之下降。第2项是multi-head attention+ffn的参数共享,在embedding size=128时,可以节省77M的参数量,模型的推理能力同样会随之下降。虽然参数减少会导致了模型推理能力的下降,但是可以通过增大模型使得参数量变回和bert一个量级,这时模型的推理能力就超过了bert。

现在学术界发论文有2种常见的套路,第1种是往死里加参数加数据量,然后提高模型的推理能力;第2种是减参数,然后使模型的推理能力不怎么降。albert使用的参数减少技术看似是第2种,实则是第1种。当bert从large变到xlarge时,虽然模型变大到了1270M,但是模型出现了退化现象,推理能力下跌了一大截,说明在bert的框架下,large已经是模型推理能力的极限了。albert使用了参数减少技术,相比于bert的large是334M,albert的large只有18M,虽然推理能力比bert差,但是参数减少后的albert还有成长空间,将albert从large变到xlarge,甚至是xxlarge时,模型的推理能力又得到了提高,并且超过了bert最好的模型。

  • loss

1)sentence order prediction(SOP)

在auto-encoder的loss之外,bert使用了NSP的loss,用来提高bert在句对关系推理任务上的推理能力。而albert放弃了NSP的loss,使用了SOP的loss。NSP的loss是判断segment A和segment B之间的关系,其中0表示segment B是segment A的下一句,1表示segment A和segment B来自2篇不同的文本。SOP的loss是判断segment A和segment B的的顺序关系,0表示segment B是segment A的下一句,1表示segment A是segment B的下一句。

2)SOP loss 详解

在albert之前,很多bert的改进版都对NSP的loss提出了质疑。structbert在NSP的loss上进行了修改,有1/3的概率是segment B是segment A的下一句,有1/3的概率是segment A是segment B的下一句,有1/3的概率是segment A和segment B来自2篇不同的文本。roberta则是直接放弃了NSP的loss,修改了样本的构造方式,将输入2个segment修改为从一个文本中连续sample句子直到塞满512的长度。当到达文本的末尾且未塞满512(bert系列预训练语言模型的最大输入长度,输入过长时,可以先对输入进行切割,具体方式可以查看我的CCF情感分析比赛专栏)的长度时,先增加一个“[SEP]”,再从另一个文本接着sample,直到塞满512的长度。

albert在structbert的基础之上又抛弃了segment A和segment B来自2篇不同的文本的做法,只剩下1/2的概率是segment B是segment A的下一句,1/2的概率是segment A是segment B的下一句。论文中给出了这么做的解释,NSP的loss包含了2部分功能:topic prediction和coherence prediction,其中topic prediction要比coherence prediction更容易学习,而MLM的loss也包含了topic prediction的功能,因此bert难以学到coherence prediction的能力。albert的SOP loss抛弃了segment A和segment B来自2篇不同的文本的做法,(来自同一篇文本)让loss更关注于coherence prediction,这样就能提高模型在句对关系推理上的能力。

 

3. 总结

albert虽然减少参数量,但是并不会减少推理时间,推理的过程只不过是从串行计算12个transformer encoder block变成了循环计算transformer encoder block 12次。albert最大的贡献在于使模型具备了比原始的bert更强的成长性,在模型变向更大的时候,推理能力还能够得到提高。

 

你可能感兴趣的:(预训练语言模型)