Bert不完全手册5. BERT推理提速?训练提速!内存压缩!Albert

Albert是A Lite Bert的缩写,确实Albert通过词向量矩阵分解,以及transformer block的参数共享,大大降低了Bert的参数量级。在我读Albert论文之前,因为Albert和蒸馏,剪枝一起被归在模型压缩方案,导致我一直以为Albert也是为了优化Bert的推理速度,但其实Albert更多用在模型参数(内存)压缩,以及训练速度优化,在推理速度上并没有提升。如果说蒸馏任务是把Bert变矮瘦,那Albert就是把Bert变得矮胖。正在施工中的文本分类库里也加入了Albert预训练模型,有在chinanews上已经微调好可以开箱即用的模型,同时支持半监督,领域迁移,降噪loss,蒸馏等模型优化项,感兴趣戳这里SimpleClassification;

Albert主要有以下三点创新

  • 参数共享:降低Transfromer Block的整体参数量级
  • 词向量分解:有效降低词向量层参数量级
  • Sentence-Order-Prediction任务:比NSP更加有效的学习句间关系

下面我们分别介绍这三个部分

词向量分解

其实与其说是分解,个人觉得词向量重映射的叫法更合适一些。在之前BERT等预训练模型中,词向量的维度E和之后隐藏层的维度H是相同的,因为在Self-Attention的过程中Embedding维度是一直保持不变的,所以要增加隐藏层维度,词向量维度也需要变大。但是从包含的信息量来看,词向量本身只包含上下文无关的信息,并不需要像隐藏层一样存储大量的上下文语义,所以相同维度的限制在词向量部分存在一定的参数冗余。所以作者对词向量做了一层映射,词向量本身的参数变成Vocab * E,映射层是E H,这样本身的复杂度O(Vocab * H),就降低成了O(Vocab * E + EH ),相当于把隐藏层大小和词向量部分的参数做了解耦。

这个Trick其实之前在之前的NER系列中出现过多次,比如用在词表增强时,不同词表Embeeding维度的对齐,以及针对维度太高/太低的词表输入,进行适当的降维/升维等等~

以下作者分别对比了在参数共享/不共享的情况下,词向量维度E对模型效果的影响,从768压缩到64,非共享参数下有1个点的下降,共享参数时影响较小。这个在下面参数共享处会再提到,和模型整体能处理的信息量级有一定关系,整体上在共享参数的设定下词向量压缩影响有限~

Bert不完全手册5. BERT推理提速?训练提速!内存压缩!Albert

参数共享

参数共享是ALbert提高参数利用率的核心。作者对比了各个block只共享Attention,只共享FFN,和共享所有参数,结果如下~

Bert不完全手册5. BERT推理提速?训练提速!内存压缩!Albert

共享参数多少都会影响模型表现,其中效果损失主要来自共享FFN参数。以及在压缩词向量之后,共享参数带来的影响会降低。这里感觉和之前在做词表增强时观察到的现象有些相似,也就是模型的天花板受到输入层整体信息量的影响,因为压缩了词向量维度,限制了输入侧的信息量,模型需要处理的信息降低,从而参数共享带来的损失影响也被降低了

最终作者的选择更多是for最大程度压缩参数量级,share attenion缩减的参数有限,索性就共享了全部的参数。

SOP

在第三章讲到Roberta的时候,提到过Roberta在优化Bert的训练策略时,提出NSP任务没啥用在预训练中只使用了MLM目标。当时就提到NSP没有用一定程度上是它构造负样本的方式过于easy,NSP中连续上下文为正样本,从任意其他文档中采样的句子为负样本,所以模型可以简单通过topic信息来判断,而这部分信息基本已经被MLM任务学到。Albert改良了NSP中的负样本生成方式,AB为正样本,BA为负样本,模型需要判别论述的逻辑顺序和前后句子的合理语序。

作者也进行了对比,在预训练任务上,加入NSP训练的模型在SOP目标上和只使用MLM没啥区别,这里进一步证明了NSP并没有学到预期中的句子关联和逻辑顺序,而加入SOP训练的模型在NSP上表现要超过只使用MLM。在下游依赖上下文推理的几个任务上,加入SOP的模型整体表现略好。不过差异没有想象中的明显,感觉在如何构建负样本上应该还有优化的空间。个人感觉只是AB,BA的构造方式可能有些过于局部了

Bert不完全手册5. BERT推理提速?训练提速!内存压缩!Albert

整体效果

Albert在以上三点改良之外,在训练中也进行了一些优化,例如使用了SpanBert的MASK策略,用了LAMB optimizer来加速训练等等,Albert总共放出了以下几种参数的模型,和BERT之间的效果对比如下~

Bert不完全手册5. BERT推理提速?训练提速!内存压缩!Albert

Bert不完全手册5. BERT推理提速?训练提速!内存压缩!Albert

需要注意最后一列是训练速度的对比哈,哈哈之前看paper没带脑子,想都没想就给当成了推理速度,琢磨半天也没明白这为啥就快了???

  1. 直接base和base比,large和large比:参数可以压缩到1/10,适合大家自己跑来玩玩,整体模型大小甚至比一些词表大的词向量模型还要小,训练速度上也有提升但是模型效果都有2个点以上的损失,以及因为层数没变,所以推理速度不会更快,以及因为词向量分解的原因多了一层,所以还会略慢些
  2. 相似表现对比:ALbert xlarge和Bertlarge对比,都是24层,xlarge的隐藏层是bert的两倍,这里也是为啥说albert是矮胖,因为参数共享所以加层数效果有限,只能增加隐藏层维度。虽然albert xlarge参数压缩到1/5,但是训练更慢,推理也更慢
  3. 超越Bert:Albert xxlarge虽然只有12层,但是4倍的隐藏层还是让它的表现全面超越了Bert large,参数压缩到2/3,但是训练速度更更慢,以及超大隐藏层会导致计算中中间变量的存储过大,一般机子跑不动。。。

所以整体感觉albert的实际应用价值比较有限,最常用的地方就是因为模型小,可以直接放在仓库里上传,对一些和外部交互不方便的场景,可以直接从内部加载模型,除此之外应用的地方比较少。不过ALbert提出的两个点还有进一步深挖的价值,其一NSP任务负样本是否有进一步改造的空间,其二如何更有效地利用Bert的参数?

BERT手册相关论文和博客详见BertManual

Reference

  1. ALBERT: A Lite BERT for Self-supervised Learning of Language Representations
  2. https://zhuanlan.zhihu.com/p/84273154
  3. https://zhuanlan.zhihu.com/p/343729067

Original: https://www.cnblogs.com/gogoSandy/p/16265469.html
Author: 风雨中的小七
Title: Bert不完全手册5. BERT推理提速?训练提速!内存压缩!Albert

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/805181/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Django忘记后台超级管理员(root)密码

    一、忘记管理员密码,但记得账号: 第一步:控制台输入 python3 manage.py shell 第二步:重设密码 from django.contrib.auth.model…

    Python 2023年8月3日
    029
  • 如何使用ChatGPT辅助AI绘画?

    如何使用ChatGPT辅助AI绘画? AI自动化内容生成(AIGC)是一种利用人工智能技术生成新内容的方法。它可以快速、自动、准确地从大量原始数据中生成新内容,大大提高了内容创作效…

    Python 2023年11月4日
    050
  • Python-Flask+Mysql搭建后台接口实例

    SQLAlchemy是一个关系型数据库框架,它提供了高层的 ORM 和底层的原生数据库的操作。 flask-sqlalchemy是一个简化了SQLAlchemy操作的flask扩展…

    Python 2023年8月9日
    099
  • python版使用tinypng压缩图片大小

    第一步,前往tinypng官网或组自己的key值。 第二步,配置uncompressResPath、compressedResPath、largeRes路径。 第三步,拷贝以下代码…

    Python 2023年8月21日
    045
  • 2022年底,我手里一共负责了30套系统

    2022年真是不平凡的一年,往常熙熙攘攘的办公室人越来越少,真是像曹操说的兄弟相继凋零,好似风中落叶啊。结果人少了,手里的系统一个没少,慢慢年底了,我汇总了一下,手里的系统达到了3…

    Python 2023年9月5日
    041
  • python外星人入侵小项目(四)

    每当用户按键时,都将在Pygame中注册一个事件。事件都是通过方法 pygame.event.get() 获取的,因此在函数 check_events() 中,我们需要指定要检查哪…

    Python 2023年9月24日
    052
  • 基于Selenium与Pytest框架的Web UI自动化测试系统的设计与实现

    摘要 随着互联网的高速发展,软件技术日新月异,产品更新换代的加快等,始终都离不开一个最核心的要素就是保证产品的质量,测试人员则在其中担任着不可或缺的角色。测试人员的主要工作职责就是…

    Python 2023年9月9日
    092
  • numpy安装

    1.以 管理员的形式打开cmd 2.安装numpy插件 pip install numpy 3.安装成功后,输入pip list 命令查看是否安装成功 pip list 3.创建 …

    Python 2023年8月3日
    045
  • pip提高下载速度

    各位在使用pip下载第三方库的时候肯定有一个困惑,那就是:外国网实在是太慢了!!!那有没有什么办法可以提速呢?用中国网下载第三方库不就好了。 https://pypi.tuna.t…

    Python 2023年9月21日
    045
  • python 爬虫 中的正则表达式

    正则表达式虽然不是python语言,但在python爬虫中却有着普遍的应用,可以说没有正则表达式的爬虫是一个没有灵魂的爬虫,话不多说,直接上干货! 首先介绍一个验证正则表达式的在线…

    Python 2023年5月24日
    057
  • 微服务低代码Serverless平台(星链)的应用实践

    导读 星链是京东科技消金基础研发部研发的一款研发效能提升的工具平台,面向后端服务研发需求,尤其是集成性、场景化、定制化等难度不太高、但比较繁琐的需求,如服务前端的后端(BFF)、服…

    Python 2023年10月21日
    047
  • python游戏目标识别_来试试用python写个游戏,本次的游戏叫做alien invasion

    本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。 安装pygame并创建能左右移动的飞船 安装pygame 本…

    Python 2023年9月15日
    028
  • contos mongodb 安装

    vi /etc/yum.repos.d/mongodb-org-4.0.repo [mongodb-org-4.0] name=MongoDB Repository baseurl…

    Python 2023年6月12日
    066
  • 《我用Python写网站06》Editor.md

    上一篇:《我用Python写网站05》文章编辑 本系列所有代码均可在Gitee仓库对应分支找到欢迎来我的论坛讨论 Python搭建博客网站的问题和经验。www.ahoh.club。…

    Python 2023年8月14日
    050
  • R-CNN系列目标检测算法对比

    引言 对比了R-CNN,Fast R-CNN,Faster R-CNN,Mask R-CNN目标检测算法的发展过程与优缺点。 R-CNN R-CNN是第一个成功第将深度学习应用到目…

    Python 2023年10月8日
    061
  • Python 绘制数据散点图

    🏳️‍🌈Python 有着强大的绘图库 matplotlib, 该库集成了大量的绘图函数,可以满足我们平时绝大多数的绘图需求。其中,matplotlib 库是 Python 进行可…

    Python 2023年8月30日
    064
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球