12层的bert参数量_宅家NLP(四)—— 听ALBERT第一作者亲自讲解:从BERT到ALBERT

4e27d895e515203066e77580e2b45938.png

BERT 模型提出已经有接近两年的时间了,学术界和工业界也都在不断迭代。想要深入掌握的话,不仅要知道原理,更要懂得源码细节,以及亲手实战 BERT 精调,了解这两年来一系列模型的发展脉络。想要全面地学习这些知识点的话,可以学习 bienlearn 上的 BERT 专栏。


这个 BERT 专栏由自然语言处理领域的 KOL——「夕小瑶的卖萌屋」作者团主笔,帮助新手以及有一定基础的同学快速上手 BERT,既包括原理、源码的解读,还有 BERT 系的改进串讲与高级精调技巧。不管是准备面试、项目实战还是比赛刷分,都可以找到对应的内容。
目前在限时优惠,更详细的内容大家可以点击下方卡片查看。

e95d52229d0d71b39126a765d6576fa7.png

正文:

感谢@贪心科技,听到@蓝振忠 老师亲自讲解ALBERT感觉赚到了:)

附上NLP系列第四场《从BERT到ALBERT》笔记整理;本篇文章仅在于记录课程内容略加入自己的理解与扩充,如有错误,请交流指正~

btw 如果文章对您有帮助,可以在文末戳赞同表示支持~(据说收藏不点赞的都是耍流氓 [狗头保命]

ALBERT(A Lite BERT) —— 参数数量更少的轻量级BERT模型

https://arxiv.org/abs/1909.11942​arxiv.org

一、背景

在计算机视觉领域,提升性能的主要方法是通过将网络加深实现的;

bb73efb28220fdb0fb19b20e59110cf1.png
计算机视觉领域通过加深网络提升效果

同样地,BERT也可以通过将网络变深变宽来提升性能;

6040df765bab909d9727d5e71309425d.png
BERT变深变宽在下游任务上的表现

因此,起初的想法是也让网络变大,但网络变宽导致参数爆炸;

5fd3959827ecc5df22def13e258684c3.png

因此,“怎样做到减少参数,而不减弱performance”,成为ALBERT关注的主题;

二、ALBERT的改进策略

减少参数首先要知道Transformer的参数来源于哪儿

对Transformer的网络结构不理解的可以移步:

宅家NLP(三) —— 从Transformer到BERT模型​zhuanlan.zhihu.com
c94b2c1d6949bcca9c223145055ac104.png

参数主要来源于两个模块:token embedding映射模块attention与FFN模块

其中,前者的参数量大约占整体参数量的20%,后者约占80%;

1347ebea5c9bac8ed57f7faed8ad3376.png
参数来源

1、对embedding参数因式分解

ALBERT采用因式分解的方式减少embedding映射模块的参数量,即将词的one-hot向量映射到一个低维(大小为E)的空间,再映射回一个高维(大小为H)的空间,这样就把参数量从O(V×H)降低到了O(V×E+E×H),当E<<H时参数量减少的很多。

1c60d3e19a6e0f8bf8a8c25fe9fe8d1d.png
对embedding参数因式分解

可以这样做的原因是token embeddings是上下文独立的(由one-hot向量转化成dense向量),而hidden-layer embeddings是上下文依赖的,因此hidden-layer embeddings应该包含更多的信息,所以可以利用一个小于H的E做中介将词的one-hot向量先经过一个低维的embedding矩阵再经过一个高维的embedding矩阵映射到隐藏层空间;

560883352c9ce791b037f8b9851deded.png

e48aedb4839e1f7964948ddfc89cfa1b.png
将一个矩阵解锁成两个

效果如下图所示:

236a1723830ddada5d56a9beee756be6.png

2、共享层与层之间的参数

这样做的原因是,在对L=2,L=4,L=6各层参数效果可视化后(没有截到图,后续补充)得到结论:各层参数相似,都是在[CLS] token和对角线上分配更多的注意力;

跨层的参数共享有两种方案:attention模块的参数共享 FFN的参数共享,效果如下图;

a94190b6cd0768027a8ba66123fe865e.png
跨层参数共享

可以看到,共享FFN的参数是导致结果下降的主要原因

ALBERT采用了attention模块和FFN模块的参数都共享的方案,尽可能减少参数量,而对performance不会产生大的影响;

  • 再次尝试对ALBERT变宽和变深之后的表现:

00f1e9f3f0f3e96953fd3a45d00b2ba0.png
增加ALBERT的深度

c6bc7a290efd5efa6e367b9003f5851f.png
增加ALBERT的宽度

3、 构建自学习任务-句子连贯性预测

在预训练任务上提高:改造NSP任务,强化网络学习句子的连续性

NSP任务实际上是一个二分类任务,即预测两句话是采样于同一个文档中的两个连续的句子(正样本),还是采样于两个不同的文档中的句子(负样本)。NSP任务实际上包含两个子任务,即topic预测和关系一致性预测,而topic预测其实很简单;NSP在很多实践中被证明没有太好效果;

dcf5f86663ce0eae9aaad52a3a9cf17a.png
NSP主题预测过于简单

因此,ALBERT选择去除topic预测的影响,只保留关系一致性预测,于是提出了一个新的任务 Sentence-Order Prediction (SOP),SOP的正样本和NSP的获取方式一样,负样本把正样本的两句话顺序反转;

e864d438054ae3f3b6ca0608469de7c2.png
Sentence-Order Prediction

效果如下图所示:

c9d0902fff577aa78cb6205af267cfe9.png

4、去掉dropout

dropout在防止过拟合上有显著效果,但是实际上MLM很难过拟合,去掉dropout,由于可以腾出很多临时变量占用的内存而使得内存上有所提升;

d4d8098de53d0880c406fbb12d0c13f3.png

3262272e22f9939f31325fbf3f514a27.png
去掉dropout可以显著减少内存占用

三、总结

总而言之,ALBERT的贡献可以总结成以下四点:

5f18af4f4ed0072448406f25f474c927.png

一些将来的和正在推进的工作:

ef5661a4e219ad3354c43b7f44bddb48.png

四、Code

1acafb8ea32d2889fb9f63092869625e.png

github:https://github.com/google-research/ALBERT

btw 如果文章对您有帮助,可以在文末戳赞同表示支持~(据说收藏不点赞的都是耍流氓 [狗头保命]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值