前几天看没事看了眼GLUE榜单就发现了ALBERT这个模型,去arxiv搜了下没搜到,还在想何时放出来,没想到在Openreview上。。html
ALBERT原文 openreview.netGoogle一出手就是不同,再也不是BERT+的模式,而是作了个大改动。node
先来感觉一下刷榜的乐趣,GLUE:git
SQuAD:github
RACE可能没找对,没看到。网络
ALBERT主要对BERT作了3点改进,缩小了总体的参数量,加快了训练速度,增长了模型效果。分布式
接下来介绍这三点改进。svg
在BERT、XLNet、RoBERTa中,词表的embedding size(E)和transformer层的hidden size(H)都是相等的,这个选择有两方面缺点:学习
所以做者使用了小一些的E(6四、12八、25六、768),训练一个独立于上下文的embedding(VxE),以后计算时再投影到隐层的空间(乘上一个ExH的矩阵),至关于作了一个因式分解。spa
从后续的实验中来看,E的大小与实验效果也不是彻底正相关,所以其余实验中E都取的128。.net
跨层参数共享,就是无论12层仍是24层都只用一个transformer。这在以前读过Universal Transformer就有了,可是觉得会火,由于作语言模型的效果比标准Transformer好。结果没什么人用,此次被提起来了。
做者对比了每层输入输出的L2距离和类似度,发现了BERT的结果比较震荡,而ALBERT就很稳定,可见ALBERT有稳定网络参数的做用。
后BERT时代不少研究(XLNet、RoBERTa)都发现next sentence prediction没什么用处,因此做者也审视了一下这个问题,认为NSP之因此没用是由于这个任务不只包含了句间关系预测,也包含了主题预测,而主题预测显然更简单些(好比一句话来自新闻财经,一句话来自文学小说),模型会倾向于经过主题的关联去预测。所以换成了SOP(sentence order prediction),预测两句话有没有被交换过顺序。实验显示新增的任务有1个点的提高:
刚开始看这篇文章是很惊喜的,由于它直接把同等量级的BERT缩小了10倍+,让普通用户有了运行GPT二、威震天的可能。可是仔细看了实验后才发现体量的减少是须要付出代价的:
能够仔细看一下model的量级,而且注意一下这个speedup是训练时间而不是inference时间(由于数据少了,分布式训练时吞吐上去了,因此ALBERT训练更快),但inference仍是须要和BERT同样的transformer计算。
能够得出的结论是:
鱼与熊掌不可兼得,尤为是对于工程落地而言,须要在速度与效果之间寻找一个trade-off。
另外,结合Universal Transformer能够想到的是,在训练和inference阶段能够动态地调整transformer层数(告别十二、2四、48的配置吧)。同时能够想办法去避免纯参数共享带来的效果降低,毕竟越深的transformer层所学到的任务相关信息越多,能够改进transformer模块,加入记忆单元、每层的个性化embedding。