ALBERT-更小更少但并不快

news2025/2/1 15:52:21

BERT模型的压缩大致可以分为:1. 参数剪枝;2. 知识蒸馏;3. 参数共享;4. 低秩分解。

其中,对于剪枝,比较简单,但是容易误操作降低精读;

对于知识蒸馏,之前我写个一系列的文章,重点可以看一下这里:

对于参数共享和低秩分解,就和今天分享的ALBERT息息相关;

它减少了BERT的参数,但是需要注意的一个细节点是,同等规格下,ALBERT速度确实变快,但是并不明显(和大量自媒体文章解读给大家的印象差距很大);

举个形象的例子就是,(这个例子并不严谨,只是帮助理解)参数共享让它训练的时候把多层压缩为一层去训练,但是在预测的时候,我们需要再展开多层去进行预测。

主要掌握以下的几个知识点:

  1. 词向量嵌入参数分解
  2. 跨层参数分享
  3. 取消NSP,使用SOP
  4. 预训练的时候采用更满的数据/n-gram mask方式

1.词向量嵌入分解

词向量嵌入参数分解,简单说就是将词向量矩阵分解为了两个小矩阵,将隐藏层的大小和词汇矩阵的大小分离开。

在Bert中,词汇表embedding大小是 V ∗ H V*H VH

Albert 的参数分解是这样的,将这个矩阵分解为两个小矩阵: V ∗ E V*E VE E ∗ H E*H EH

这样做有什么好处呢?

如果说,我觉得我的模型表达能力不够,我想要通过增大隐层H的大小来提升我们模型能力的表达能力,那么在提升H的时候,不仅仅隐层参数增多,词汇表的embedding矩阵维度也在增多,参数量也在增大。

矩阵分解之后,我们可以只是做到提升隐层大小,而不去改变表词汇表的大小。

2.跨层参数分享

跨层参数分享,这个操作可以防止参数随着网络层数的增大而增加。

跨层参数共享

分为三种形式,只是共享attentions,只是共享FFN,全部共享。

共享的意思就是我这部分结构只使用同样的参数,在训练的时候只需要训练这一部分的参数就可以了。

看表格我们可以发现一个细节,就是只是共享FFN比只是共享attention的参数,模型效果要降低的多。

小声嘀咕一下,这是不是说明FFN比attention在信息表达上要重要啊。或者说attention在学习信息表达的时候。attention层学习共性比较多。FFN学习到的差异性比较多。这只是我自己的猜测哈。

3. SOP

作者认为,NSP不必要。与MLM相比,NSP失效的主要原因是其缺乏任务难度。

NSP样本如下:

  • 从训练语料库中取出两个连续的段落作为正样本
  • 从不同的文档中随机创建一对段落作为负样本

NSP将主题预测和连贯性预测合并为一个单项任务;

但是,与连贯性预测相比,主题预测更容易学习,并且与使用MLM损失学习的内容相比,重叠性更大。

对于ALBERT,作者使用了句子顺序预测(SOP)损失,它避免了主题预测,而是着重于句间建模。

其实就是预测句子顺序,正样本是顺着,负样本是颠倒过来。都是来自同一个文档。

SOP

其他细节

  1. 数据格式:Segments-Pair

这个在RoBERTa中也有谈到,更长的序列长度可以提升性能。

  1. Masked-ngram-LM

Masked-ngram-LM

这就有点类似百度的ERINE和SpanBERT了

  1. 推测速度

ALBERT推理速度

从图中知道,同一规模ALBERT和BERT,比如同为Base:

BERT base: 4.7x;ALBERT base:5.6x;速度确实变快,但是确实加速并不明显

同等效果的情况下,比如BERT base(Avg=82.3)和ALBERT large(Avg=82.4):

BERT base:4.7x;ALBERT large:1.7x;速度变慢了

总结

总结一下可以学习的思路:

  1. 预训练的时候,数据填充的更满,到512这种,有利于提升模型效果,这点在RoBERTa有谈到
  2. mask n-gram有利于提升效果,这点类似百度的ERINE和SpanBERT了
  3. 词向量矩阵分解能减少参数,但是也会降低性能
  4. 跨层参数分享可以降低参数,也会降低性能,通过实验图知道,attention共享效果还好,FFN共享效果降低有点多
  5. 取消NSP,使用SOP,正负样本来自同一个文档,但是顺序不同。
  6. 推理速度来看,同等规格,ALBERT速度确实变快,但是并不明显,同等效果,速度变慢;https://kexue.fm/archives/7846)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1093764.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【完美世界】战王之殇特别篇定档,11月3日播,云曦受辱石昊杀红眼了

Hello,小伙伴们,我是小郑继续为大家深度解析完美世界国漫资讯。 完美世界第132集已经播出了,相信很多人都去看了。但是不知道大家注意到这一集的片尾没有。如果没有快进或者直接跳过的话,那么应该知道,官方给大家送惊喜了。 这个…

高校教务系统登录页面JS分析——四川大学

高校教务系统密码加密逻辑及JS逆向 本文将介绍高校教务系统的密码加密逻辑以及使用JavaScript进行逆向分析的过程。通过本文,你将了解到密码加密的基本概念、常用加密算法以及如何通过逆向分析来破解密码。 本文仅供交流学习,勿用于非法用途。 一、密码加…

进程同步互斥问题

互斥-临界区前后分别PV操作;同步-前V后P 一、生产者费者问题 1.过程: 生产者生产产品——>缓冲区(供两者共享使用)——>消费者取出产品使用;但缓冲区有容量要求,会导致等待与唤醒。缓冲区是临界资源,各进程必…

Jetpack:007-各种各样的Button

文章目录 1. 概念介绍2. 使用方法2.1 Button2.2 IconButton2.3 ElevatedButton2.4 OutlinedButton2.5 TextButton2.6 FloatingActionButton 3. 示例代码4. 内容总结 我们在上一章回中介绍了Jetpack中输入框相关的内容,本章回中将要介绍 Button。闲话休提&#xff0…

Linux系统编程02

makefile的原理 问题需求 之前我们讲过C语言代码主要是经过编译和链接两个步骤生成目标文件,但是在编译的时候我们可能需要进行多条指令的输入,要对main函数所在的文件进行汇编,再将我们定义的函数文件进行汇编,分别形成*.o文件&a…

网课、会议投屏自动截屏软件推荐 —— 使用定时自动截屏软件,自动截屏网课、会议投屏,方便回顾、整理

在当前的远程学习和工作环境下,我们经常需要参加网课和会议,而这些内容通常都是通过投屏的方式呈现给我们的。为了更好地记录和回顾这些内容,我们可以使用定时截屏软件来保存这些投屏截屏。 定时截屏软件功能 定时截屏软件可以帮助我们定时…

ModSecurity开源WAF防火墙和控制面板安装教程

ModSecurity开源WAF防火墙和控制面板安装教程 CyberPanel带有两个版本,一个是CyberPanel,另一个是CyberPanel Ent。CyberPanel附带OpenLiteSpeed,不限数量域名完全免费。CyberPanel Ent附带LiteSpeed Web Server Enterprise,只免…

2023年中国门把手产量、销量及市场规模分析[图]

门把手行业是指专门从事门把手的设计、制造、销售和安装等相关业务的行业。门把手是门窗装饰硬件的一种,用于开启和关闭门窗,同时也具有装饰和美化门窗的作用。 门把手行业分类 资料来源:共研产业咨询(共研网) 随着消…

leetCode 72. 编辑距离 动态规划 + 滚动数组 + 优化空间

72. 编辑距离 - 力扣(LeetCode) 给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作: 插入一个字符删除一个字符替换一个字符 编辑距离的应用场景:…

200多万开发者才开发91款应用,国产手机操作系统离开安卓活不了?

随着某国产手机操作系统强调将不再兼容安卓,他们沸腾了,表示将真正独立自主发展,然而业界人士却指出号称拥有220万开发者的该款操作系统至今仅开发了91款应用,彻底撕下了它的遮羞布。 应用对一个智能操作系统有多重要,…

Go 代码块与作用域,变量遮蔽问题详解

Go 代码块与作用域详解 文章目录 Go 代码块与作用域详解一、引入二、代码块 (Block)2.1 代码块介绍2.2 显式代码块2.3 隐式代码块2.4 空代码块2.5 支持嵌套代码块 三、作用域 (Scope)3.1 作用域介绍3.2 作用域划定原则3.3 标识符的作用域范围3.3.1 预定义标识符作用域3.3.2 包代…

互联网Java工程师面试题·Java 并发编程篇·第八弹

目录 33、Java 死锁以及如何避免? 34、死锁的原因 35、怎么唤醒一个阻塞的线程 36、不可变对象对多线程有什么帮助 37、什么是多线程的上下文切换 38、如果你提交任务时,线程池队列已满,这时会发生什么这里区分一下: 39、J…

探索JDK8新特性,Stream 流:构建流的多种方式

当我们处理集合数据时,往往需要对其进行各种操作,如过滤、映射、排序、归约等。在 Java 8 中引入的 Stream 流为我们提供了一种更加简洁和灵活的方式来处理数据。上述情况都是流对集合进行操作的,但是对于流的创建操作还是不太了解&#xff0…

解密并发编程的时间之谜:揭开Happens-Before的神秘面纱

优质博文:IT-BLOG-CN 一、简介 为什么需要happens-before原则: 主要是因为Java内存模型 , 为了提高CPU效率,通过工作内存Cache代替了主内存。修改这个临界资源会更新work memory但并不一定立刻刷到主存中。通常JMM会将编写的代码…

docker保存镜像出错

报错:open .docker_temp_801673807: Access is denied. 查询后发现是因为C盘权限问题导致失败,修改保存路径:docker save -o D:\nginx.tar nginx:latest后成功。

解决docker使用pandarallel报错OSError: [Errno 28] No space left on device

参考:https://github.com/nalepae/pandarallel/issues/127 在使用pandarallel报错OSError: [Errno 28] No space left on device,根据上述issue发现确实默认使用的MEMORY_FS_ROOT为 /dev/shm,而在docker环境下这个目录大小只有64M&#xff0…

​嵌入式VS纯软件

嵌入式VS纯软件 嵌入式系统开发与纯软件开发之间存在关键差异,涵盖了硬件依赖性、资源限制、实时性要求、安全性和维护等多个方面。最近很多小伙伴找我,说想要一些嵌入式资料,然后我根据自己从业十年经验,熬夜搞了几个通宵&#x…

序列中排列存在类dp问题+结合组合数学和拆贡献:1014T4

http://47.92.197.167:5283/contest/412/problem/4 赛时就想到枚举开头来拆贡献。 先说一下,对于A我们不关心具体的值,我们只关心哪些位置相等,哪些位置不等,最后乘上一个系数就行 然后对于序列是否存在排列类问题有个常见的dp套…

【API篇】二、源算子API

文章目录 0、demo数据1、源算子Source2、从集合中读取数据3、从文件中读取4、从Socket读取5、从Kafka读取6、从数据生成器读取数据7、Flink支持的数据类型8、Flink的类型提示(Type Hints) 0、demo数据 准备一个实体类WaterSensor: Data All…

导航栏参考代码

导航栏参考代码 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>导航栏参考代码</title> </head> <body> <table width"858" border"0" align"center"><tr&g…