一、简介

随着Transfomer结构的普及,一时间大语料、大参数量的预训练模型成为主流。当在实际部署BERT等模型时,往往需要使用蒸馏、压缩或其他优化技术对模型进行处理。

ALBERT模型来自论文 Google 最近公布的论文 《ALBERT: A LITE BERT FOR SELF-SUPERVISED LEARNING OF LANGUAGE REPRESENTATIONS》从名字就可以看出 ALBERT 是 BERT 的“改进版”,其进步的地方,一言以蔽之,就是 用更少的参数,取得了更好的效果

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

ALBERT模型也是基于这一点考虑,通过各种手段减少参数量,得到一个占用较小的模型,对实际落地有较大的意义,不过由于其主要还是减少参数量,所以在推断时间上并没有优化,所有对量大的需求还是很有问题的。

总体来说,ALBERT有意义的创新主要有:

  1. 修正了句子预测这一一直被诟病的预训练任务,改为了预测句子之间的连贯性;

  2. 对Embedding进行因式分解;

  3. 跨层的参数共享。

模型大小与模型性能之间的关系

  这是作者开篇讨论的问题。近一两年,预训练语言模型给自然语言处理领域带来了巨大的突破。从 ELMO,GPT,到 Bert,XLNet 和 RoBerta,我们不难看出,性能越强的模型,参数量也越大。既然模型的参数量如此重要,我们就会有一个很直接的假设:参数量越大,模型的性能就会越高。

  先不考虑硬件资源和训练时间(还是要考虑,如此大的开销已经将很多参与者挤出门外了),如果上述假设成立,那么我们只需要想方设法地扩展模型规模就可以了。作者为验证假设,将 Bert-large 模型的隐藏层 size 扩展了一倍,构建了 Bert-xlarge模型。该模型的参数量较 Bert-large 提升了一倍,然而遗憾的是,如图1所示,Bert-xlarge 出现了模型退化(model degradation)现象,性能不升反降。因此,简单地推高参数量,不仅会面临更加严峻的硬件资源不足以及训练时间过长问题,且无法获得更好的效果的。

Bert-large 与 Bert-xlarge 对比图

  其实这也比较好理解,参数量越大性能越好,我认为这本身是没有正确的,但前提是对模型中参数的运用没有退化,或者说模型内单位参数所发挥的作用没有退化。举个例子,鲸鱼大脑的绝对体积和重量都要超过人类,但其大脑很大一部分精力用在控制其“臃肿”的体积上,而不是用来思考和记忆,因此远不如人类聪明。
  因此为了提升模型性能,我们既可以“做加法”,在模型结构合理有效的前提下,增大模型的规模(e.g. Bert --> Bert-large, Bert --> XLNet);也可以“做减法”,降低参数量,但提升参数的利用效率、更大地发挥参数的效果。本篇论文中所设计的 ALBERT,就是在“做减法”的基础上,在性能上全面超越 Bert。

三  ALBERT的改进

1. SOP任务

BERT在提出的时候提供了两种预训练任务,一个是遮蔽语言模型,即以一定比例随机遮蔽一定比例的输入标记,然后预测那些被遮蔽的标记的预训练任务(PS:ALBERT也不是直接做这个任务,而是换成N-gram的预测任务),另一个则是预测第二个句子是不是第一个句子的下一句。但在随后的实践中,第二个任务被证明并没有给模型带来受益,主要由于这个任务过于简单。于是,在ALBERT中这个任务被换成了预测句子间的顺序,增加模型学会这种任务的能力:

从实验上看,有所提升,但个人感觉这个预训练任务还是有待改进。

2. Embedding因式分解

这一步操作其实就是没啥特别好说的,无外乎就是觉得词嵌入时的向量维度应该小一点,然后通过个网络扩充一下提升维度,这样一通操作就可以把参数量从 O(V x H)   降到了   O(V x E  + E x H)

(有点像深度可分离卷积的做法):

论文实验结果

从实验上看,使用这种方法降低了词向量维度,但没有损失太多的精度(相对来说吧),使用权值共享的策略时增加词向量不升反降(感觉有点神奇)。

3. 跨层的参数共享

共享权值不是什么新鲜的事情,之前一般采用只共享全连接层或只共享attention层,ALBERT则更直接全部共享,不过从实验结果看,全部共享的代价是可以接受的,同时共享权值带来了一定的训练难度,使得模型更鲁棒:

ALBERT 在参数量上要远远小于 Bert。譬如,ALBERT-large 的参数量仅有 18M,仅为 Bert-large 的 1/18;将 Bert 的隐藏层扩展到 2048 维,参数量会飙升到 1.27G 且性能下降,而 H = 2048 的 ALBERT-xlarge 模型只有 59M 的参数,更大的模型 ALBERT-xxlarge(H=4096)参数量也仅有 233M。另外作者在 ALBERT-xxlarge 中设定了 12 层的网络,之所以不设置为 24 层,是因为通过实验作者验证了二者在性能上相近,而后者的计算成本更高。

4. dropout的移除

在ALBERT的实验中作者提到对掩码任务和下游任务取消dropout都带来了提升,这一点无疑非常值得去思考:

掩码任务

下游任务

同时,作者也提到100w步之后,ALBERT依旧没有过拟合的迹象。

四、ALBERT的实验结果

最后作者又总结了一遍论文中提出的模型——ALBERT-xxlarge 的强大性能(使用了 Bert、XLNet 和 RoBERTa 的训练数据):在 13 项 NLP 任务上都取得了最佳,包括 GLUE 上的 9 个任务 和 SQuAD、RACE等 4 个数据集。

简单一句话来说,就是小但强。仅从ALBERT本身来说其实是蛮让人失望的,因为并没有带来很多有营养的创新,同时由于其的小更多是共享权值带来的,这也就导致它并没有减少推断时的时间。但另一方面来说,ALBERT减少了占用,本身就给大规模部署带来优势,如果再结合上蒸馏等技术,占用小、速度快、精度高的Bert仿佛就在眼前。

最近,谷歌开源了中文版本和Version 2

ALBERT 2性能再次提升

在这个版本中,“no dropout”“additional training data”“long training time”策略将应用到所有的模型。

与初代ALBERT性能相比结果如下:

从性能的比较来说,对于ALBERT-base、ALBERT-large和ALBERT-xlarge,v2版要比v1版好得多。

说明采用上述三个策略的重要性。

平均来看,ALBERT-xxlarge比v1略差一些,原因有以下2点:

额外训练了1.5M步(两个模型的唯一区别就是训练1.5M和3M步)

对于v1,在BERT、Roberta和XLnet给出的参数集中做了一点超参数搜索;对于v2,只是采用除RACE之外的V1参数,其中使用的学习率为1e-5和0 ALBERT DR。

参考

  1. 「NLP」ALBERT:更轻更快的NLP预训练模型
  2. 一文揭开ALBERT的神秘面纱
  3. albert_pytorch
  4. ALBERT 论文:ALBERT: A LITE BERT FOR SELF-SUPERVISED LEARNING OF LANGUAGE REPRESENTATIONS

[深度学习] 自然语言处理 --- ALBERT 介绍相关推荐

  1. [深度学习] 自然语言处理 --- Self-Attention(一) 基本介绍

    [深度学习] 自然语言处理 --- Self-Attention(一) 基本介绍_小墨鱼的专栏-CSDN博客https://zengwenqi.blog.csdn.net/article/detail ...

  2. 15个小时彻底搞懂NLP自然语言处理(2021最新版附赠课件笔记资料)【LP自然语言处理涉及到深度学习和神经网络的介绍、 Pytorch、 RNN自然语言处理】 笔记

    15个小时彻底搞懂NLP自然语言处理(2021最新版附赠课件笔记资料)[LP自然语言处理涉及到深度学习和神经网络的介绍. Pytorch. RNN自然语言处理] 笔记 教程与代码地址 P1 机器学习与 ...

  3. [深度学习] 自然语言处理 --- Bert开发实战 (Transformers)

    本文主要介绍如果使用huggingface的transformers 2.0 进行NLP的模型训练 除了transformers,其它兼容tf2.0的bert项目还有: 我的博客里有介绍使用方法  [ ...

  4. [深度学习] 自然语言处理---Transformer原理(一)

    <Attention Is All You Need>是Google在2017年提出的一篇将Attention思想发挥到极致的论文.该论文提出的Transformer模型,基于encode ...

  5. 机器学习/深度学习/自然语言处理学习路线

    原文地址:http://www.cnblogs.com/cyruszhu/p/5496913.html 未经允许,请勿用于商业用途!相关请求,请联系作者:yunruizhu@126.com转载请附上原 ...

  6. 【CS224n】2斯坦福大学深度学习自然语言处理课程笔记——词向量、词义和神经分类器

    Natural Language Processing with Deep Learning 课程笔记2 1. 词向量和word2vec 2. 优化基础知识 3. 我们能否通过计数更有效地抓住词义的本 ...

  7. 五个入门深度学习自然语言处理资源

    From Richard Socher's slides 这里收集了五个入门深度学习自然语言处理资源,这些资源为你介绍了目前一些最新的技术.它也为你提供了一些下一步自然语言发展的方向. 1.Deep ...

  8. 【NAACL2021】Graph4NLP:图深度学习自然语言处理(附ppt)

    来源:专知本文约1500字,建议阅读5分钟 最新图深度学习在自然语言处理应用的概述报告,不可错过! 深度学习已经成为自然语言处理(NLP)研究的主导方法,特别是在大规模语料库中.在自然语言处理任务中, ...

  9. 程序如何在两个gpu卡上并行运行_深度学习分布式训练相关介绍 - Part 1 多GPU训练...

    本篇文章主要是对深度学习中运用多GPU进行训练的一些基本的知识点进行的一个梳理 文章中的内容都是经过认真地分析,并且尽量做到有所考证 抛砖引玉,希望可以给大家有更多的启发,并能有所收获 介绍 大多数时 ...

最新文章

  1. 海洋分享lol皮肤插件_LOL手游:能否火起来,梦泪测试后给出评价,网友:说的太真实了...
  2. JavaScript对数组的处理(一)
  3. 单片机定时器精准定时_PIC单片机的定时器精准计时的计算
  4. java退出不报异常_如何优雅的处理异常(java)?
  5. 牛客-服务器需求【线段树】
  6. 直面Java第45期
  7. 如何通过JMX远程监控Solr?
  8. [PetShop]园子里petshop的几篇文章,先来个了解吧
  9. 三七互娱U3D面经2021.3.31
  10. Sass 内置函数总结
  11. AngularJs的基础——$http请求数据
  12. C#复习笔记(3)--C#2:解决C#1的问题(泛型)
  13. JS编程建议——72:惰性载入函数
  14. Python仿黑客帝国代码雨
  15. android 开机启动无效,Android实现开机自启动无效问题
  16. java 获取系统默认打印机状态
  17. 基于FL2440 的V4L2采集 + H264编码 + LIVE555发布的实时视频监控系统
  18. edi许可证和ICP区别
  19. 数字货币量化分析报告_2017-09-04
  20. 新特效火爆抖音!各路神仙齐唱《蚂蚁呀嘿》,网友:短短几秒需一生来治愈

热门文章

  1. java银行叫号模拟系统_Java 模拟银行叫号机
  2. iPhone/iOS图片相关(读取、保存、绘制、其它相关)
  3. php ftp rmdir,PHP中的ftp_rmdir()函数
  4. 转载,关于缓存穿透、缓存并发、缓存雪崩那些事
  5. 揭开AS程序的外纱(四) -- 全屏模式的那点事
  6. MyBatis基本配置和实践(三)
  7. 中移动12580领跑世界杯商旅营销
  8. this指针_C++:07this指针
  9. 封装的ExtGrid 实现增、删、改、查等功能
  10. python编译器怎么运行不在路径中的py文件_对python当中不在本路径的py文件的引用详解...