点击上方,选择星标置顶,每天给你送干货

阅读大概需要8分钟

跟随小博主,每天进步一丢丢

作者:光彩照人

学校:北京邮电大学

原文地址:https://www.cnblogs.com/gczr/p/12761962.html

一、概述

  Albert是谷歌在Bert基础上设计的一个精简模型,主要为了解决Bert参数过大、训练过慢的问题。Albert主要通过两个参数削减技术克服预训练模型扩展的障碍:

  • 1、Factorized embedding parameterization(embedding参数因式分解),将大的词嵌入矩阵分解为两个小的矩阵,从而将隐藏层与词典的大小关系分割开来,两者不再有直接关系,使得隐藏层的节点数扩展不再受限制,后面会详细介绍。

  • 2、Cross-layer parameter sharing(跨层参数共享),这样就可以避免参数量随着网络的深度增加而增加。

  两种技术都显著降低了参数量,同时不对其性能造成明显影响。Albert配置类似于Bert-large级别的,但参数量减少了18倍,训练速度提升了1.7倍。同时参数削减技术还扮演了正则化的角色,有力增强了模型的泛化能力。

  

  其实Albert共做了三大方面的改造,除了上面两项参数削减技术之外,还有句间连贯性损失(Inter-sentence coherence loss),不同于NSP(next sentence predict)任务,本次任务为sentence-order predict (SOP),下面会分别详细介绍Albert这三项改造。

二、Albert的三大改造

1、Factorized embedding parameterization(Embedding参数因式分解)

   这里我们设定词的embedding size用E表示,隐藏层的大小用H表示,在Bert、XLNet、RoBERTa中E≡H的,即两者永远相等的。但是这种设置,无论从模型角度还是实用性角度考虑,都是欠优的,原因如下:

  1)模型视角

  词嵌入训练是为了让模型学习到上下文无关的向量,也就是最后生成的向量不仅仅局限于某一片段的上下文语境中,而是能够从本质上代表本词的全局语境;而bert的隐藏层学习学出来的是上下文相关的向量,最终一层层学出来的词向量正是为了能够最大限度结合当前训练文本的语境,与当前文本片段语境越贴切越好。所以,类似于bert这种预训练模型,可以将E和H分别设定更好,这样H可以设置的更大,能够包含更多的信息,甚至可以根据需要设置H>>E。

 2)实用视角

  NLP中的字典大小V通常是非常大的,例如bert的V=30000,如果E≡H,增大H,那么词嵌入矩阵VxE也将变得非常大,将导致产生数十亿的参数,并且在反向传播中,更新的都是比较稀疏的值。

  解决方案

  所以,综合上述两点,Albert采用了一种因式分解的方法来降低参数量,通过把E和H分开设定,这样就把原来的VxH大矩阵变成两个小矩阵,参数量将从O(VxH)变成O(VxE+ExH),当H>>E的时候,参数削减更加明显。例如:V=30000,E=128,H=768,则原参数量V*H=30000*768=23,040,000,削减后V*E+E*H=30000*128+128*768=3,938,304,参数变成了原来的1/6。

  从上述ALBERT-base(参数配置参考最上面的配置)实验数据可以看出,在跨层参数没有共享的一组,E越大,表现效果越好,但是并没有区别特别大;在下面参数共享的一组,E=128一组似乎表现的是最好。综上所述,后面的实验都采用E=128的配置。

2、Cross-layer parameter sharing(跨层参数共享)

  Transformer中可以共享全连接层,也可以共享Attention层参数,但是albert选择共享了所有层,也就是12个encoder都用一样的参数,再次大幅减少参数量。论文中作者对比了输出向量在L2距离和相似度的计算,发现Bert的结果更加震荡,而Albert的结果比较稳定,可见参数共享有稳定网络参数的作用(参数变化大,必然引起最终输出结果变化大)。

  

  实验采取E=128和E=768两种情况分别进行对比分析,从实验数据可以看出:

  • 参数共享后都会降低模型的表现,但是E=128的时候,对模型的损害相对较小一些。

  • 两组数据都出现FFN层参数共享后,模型效果出现了较大波动;而attention层的参数共享后,模型表现却变化不大。

  • 如果将L层分层N组,每组大小为M,仅仅组内进行参数共享,实验结果显示M越小,模型表现越好,但是参数也越多。极端情况每一个encoder就是一个小组,就相当于不进行参数共享了。

3、Inter-sentence coherence loss(句间连贯性损失)

  Bert使用的NSP损失,预测两个片段在原文中是否连续出现的二分类损失,但是最近的研究都表示NSP的作用不可靠,究其原因主要因为该任务缺乏难度。因为NSP其实就是同一主题的预测,相比连贯性预测更容易,而且可能与MLM任何存在学习重叠情况。

  Albert提出一种的句间连贯性预测任务,称之为sentence-order prediction(SOP),正负样本表示如下:

  正样本:与bert一样,两个连贯的语句

  负样本:在原文中也是两个连贯的语句,但是顺序交换一下。

  SOP因为正负样本都是在同一个文档中选的,只关注句子的顺序而不考虑主题方面的影响,所以这将迫使模型在话语层面学习更细粒度的区分。并且通过实验发现,SOP能解决NSP的问题,但是只学习NSP的模型却不能解决SOP的任务

 三、去掉dropout实验

  实验发现在largest模型上训练1M步后,模型仍然没有过拟合,前面也提到过参数修剪可以有效防止过拟合,所以实验决定对比去掉dropout:

  可以看出,去掉dropout后能够提升MLM的精度,同时在其它任务上也基本都有所提升;当然这可能是源于ALBERT的特殊架构,在其它transfomer架构上需要进一步实验论证。

四、总结

  最后我们最终对比一下ALBERT和BERT的实现效果:

  • 精度方面,ALBERT-xxlarge模型参数量仅仅是BERT-large模型的70%,但是下游各个任务上却都有较明显的效果提升

  • 速度方面,这里以BERT-large模型作为baseline,因为ALBERT因为更少的通信和更少的计算,与相应的BERT模型相比,ALBERT模型具有更高的数据吞吐量。所以从实验数据可以看到,ALBERT-base和ALBERT-large分别是BERT-large训练速度的5.6倍和1.7倍,但是精度却仅有略微的降低。

五、ALBERT_ZH
  中文预训练ALBERT模型ALBERT_ZH上不是谷歌出的,而是由徐亮基于ALBERT开发,是一个更加精简的版本。相比ALBERT,ALBERT_ZH参数少了90%,但精度并没有损失。同时支持TensorFlow、PyTorch和Keras。虽然体积小,但却是建立在海量中文语料基础上,30G中文语料,超过100亿汉字,包括多个百科、新闻、互动社区。

  预训练序列长度sequence_length设置为512,批次batch_size为4096,训练产生了3.5亿个训练数据(instance);每一个模型默认会训练125k步,ALBERT_xxlarge将训练更久。作为比较,roBERTa_zh预训练产生了2.5亿个训练数据、序列长度为256。由于ALBERT_zh预训练生成的训练数据更多、使用的序列长度更长。

交流学习,进群备注:昵称-学校(公司)-方向,进入DL&NLP交流群。

方向有很多:机器学习、深度学习,python,情感分析、意见挖掘、句法分析、机器翻译、人机对话、知识图谱、语音识别等。

广告商、博主勿入!

【Albert】一文轻松理解Albert相关推荐

  1. 轻松理解UML用例图时序图类图的教程

    摘自https://zhuanlan.zhihu.com/p/29874146 写在前面 当你老大扔给你这样的图,或者你需要完成某些功能而去看文档的时候发现以下类似这样的图会不会不(一)知(脸)所(懵 ...

  2. python语言在命名上是什么敏感的_一文轻松掌握python语言命名规范规则

    和C/C++.Java等语言一样,python在命名上也有一套约定俗成的规则,符合规范的命名可以让程序的可读性大大增加,从而使得代码的逻辑性增强,易于自己和其他协作者在以后的拓展中理解代码的意义,从而 ...

  3. python语言命名规则-一文轻松掌握python语言命名规范规则

    和C/C++.Java等语言一样,python在命名上也有一套约定俗成的规则,符合规范的命名可以让程序的可读性大大增加,从而使得代码的逻辑性增强,易于自己和其他协作者在以后的拓展中理解代码的意义,从而 ...

  4. mysql 锁机制 mvcc_轻松理解MYSQL MVCC 实现机制

    轻松理解MYSQL MVCC 实现机制 轻松理解MYSQL MVCC 实现机制 #### 1. MVCC简介 ##### 1.1 什么是MVCC MVCC是一种多版本并发控制机制. ##### 1.2 ...

  5. 一文深入理解协同过滤

    一文深入理解协同过滤 写在之前- 从这篇文章开始,我的下一个算法职业生涯方向将专注于推荐算法- 看了那么多书和代码,还是peter 的那本<<机器学习实战>>最为经典,说实话很 ...

  6. 看图轻松理解数据结构与算法系列(合并排序)

    前言 推出一个新系列,<看图轻松理解数据结构和算法>,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握.本系列包括各种堆.各种队列.各种列表.各种树.各种图.各种排序等等几十篇的 ...

  7. MSRA-万字综述 直击多模态文档理解

    文 | 付奶茶 随着最近几年多模态大火的,越来越多的任务都被推陈出新为多模态版本.譬如,传统对话任务,推出了考虑视觉信息的多模态数据集:事件抽取,也推出视频形式的多模态版本:就连 grammar in ...

  8. 别再搞纯文本了!多模文档理解更被时代需要!

    文 | Ryan 都已经2021年了,互联网已经今非昔比,20年前纯文本的日子已经一去不复返,文字已经满足不了网页.文章的需求,绝大部分都会有着精心设计的表格.图片,甚至视频.PDF文档这种富文本格式 ...

  9. 谷歌发布端到端AI平台,还有用于视频和表格的AutoML、文档理解API等多款工具

    谷歌又有了大动作.在大洋彼岸的谷歌Cloud Next conference大会上,谷歌一口气发布了多款AI新品和工具,主要包括: 端到端的AI平台 用于处理视频和表格数据的AutoML Tables ...

  10. 文档理解最新技术介绍 | DAS 2020 Keynote Speech

    DAS 2020 (Document Analysis System,文档分析系统研讨会) 于 7月26-29日在武汉召开,本次研讨会中有不少精彩的内容,昨天向大家推荐了来自华南理工大学金连文老师和 ...

最新文章

  1. cvCreateMat函数
  2. insert into 多条数据_最全总结 | 聊聊 Python 数据处理全家桶(Sqlite篇)
  3. 容易被误读的IOSTAT
  4. Codeforces 924D Contact ATC (看题解)
  5. js笔记(一)js基础、程序结构、函数
  6. 香港政府活用无人机,正式应用到调研检测领域
  7. axios 文档中文翻译
  8. linux 组建raid0教程,用两块硬盘组建RAID0磁盘阵列简单教程(图文详解)
  9. 从乘客丢钱包的报警处理过程谈职业化和专业化
  10. python颜色代码棕色_图表的基本配色方法
  11. LNBP10L_LNB电源和控制电压调节器——科时进商城
  12. 固高运动卡的使用 4 运动之PT(点位)运动
  13. ArcGIS for Android 100.3.0(10):Callout的使用
  14. 矩形选框工具 部分快捷键练习
  15. 利用 node.js 云函数解密获取微信小程序的手机号码等加密信息 encryptedData 的内容。
  16. [搞笑]后舍男生视频
  17. ICC布局规划---1
  18. VIII openstack(2)
  19. java.lang.NullPointterException:
  20. 新鲜的蔬菜和水果中富含抗氧化物,可以有效延缓衰老和疾病

热门文章

  1. Bytom矿池接入协议指南
  2. python 继承与多态
  3. Git学习收获(一)
  4. 华中农业大学第五届程序设计大赛 (7/12)
  5. 腾讯微信惊天漏洞,利用手机号致帐号丢失无法找回!——论个人信息安全与防护...
  6. window.opener=null;window.close(),只支持IE6不支持IE7,IE8的问题
  7. POJ 3468 A Simple Problem with Integers(线段树区间更新)
  8. ActiPro.Syntax.Editor破解版
  9. EF Core 小工具
  10. foreach写失效的问题