ALbert是bert的改进系列,在模型上基本没什么区别,结构上是差不多的,他改进的目的在于:想要精简bert的参数,希望bert能在更少的GPU上进行一个预训练,想方设法减少bert占用的显存,方便它的训练和部署,改进主要有以下几点:
1. embedding层低秩分解
2. 跨层参数共享
3. 使用sop训练代替NSP
1. embedding层低秩分解:
这个是为了固定住embedding层的参数规模,让他不会一直随着模型增大而增大:
具体做法思路简而言之就是,把原来一个很大的embeding层,换成一个小的embeding层加上一个全连接层,通过这这方式降低了embedding层的参数量控制它不停变大的规模。
因为embedding是连在transformer层前的 所以他的输出E和trs层的输入H维度一样,但是H很大,而且随着模型设计越来越大,导致E也变大,还要乘上字典大小V,可是embd只是一个模型的输入,不涉及上下文 没必要那么大 ,所以embd连在一个全连接后,减少参数:
2. 跨层参数共享:
它试了几种方式,一个是几个trs层中,全部参数共享,也就是只训练一套参数,一个是共享注意力参数,一个是共享全连接,一个是分为M组,组内共享所有参数,也就是训练M套参数。
最后结果都有各自的好处,他选了共享所有参数,这样性能下降,但是参数压缩率最大,性价比最高:
3. 使用sop训练代替NSP:
NSP就是训练的时候,负样本是第二个句子接了个随机句子,SOP就是,负样本是把正样本调换,也就是前句变后句,后句变前句,其他不变。结果是性能提升了
albert减少了参数,加快训练 但是并没有减少计算量,训练速度快了,推理过程反而慢了。是个有启发性的工作