1.介绍

Albert是Bert的一个变种,它在Bert的基础上减少了参数量,使整个模型更加的“轻量化”,同时也保持了Bert的性能,但值得注意的是,Albert虽然显著地减少了参数量,但并没有显著地减少计算时间复杂度,换言之,Albert的预测速度不一定比普通的更快,甚至可能会减慢训练的速度。(Albert只降参数量,而不减少计算量)

如上图所示,在base、large、xlarge这三个不同体量的模型上,Albert的参数量对比Bert均有十分明显的减少。

Albert之所以能够实现如此有效的参数缩减,原因在于它的两个特殊的机制:Factorized embedding parameterization(矩阵分解) 与 Cross-layer parameter sharing(跨层参数共享),下面将对这两个机制进行详细的介绍。

2.Factorized embedding parameterization(矩阵分解)

这一机制主要作用与embedding层上,在Bert(包括所有基于Bert的变体模型)中,为了从此表中提取特征并降维,我们首先要使用一个embedding层对输入数据进行处理。embedding的大小为词汇表的长度V乘以每个字/单词的embedding隐藏层大小H。 也就是说,一个embedding层的参数量为\(V×H\),而在Albert中,作者通过一个参数\(E\)来分解这个embedding矩阵,从而使得整体的embedding参数变小,于是\(V×H\)就转变为了\(V×E+E×H\),如果将embedding矩阵按照这种方式分解,最后得到的结果维度是不变的,依旧是\(L×H\)(\(L\)是句子长度),但如果此时,当\(E\)远小于\(H\)时,那么模型所需的参数量就会大大减少。实验证明,当\(E=128\)时效果最好。

在Bert中,embedding层的\(H\)一般设定为\(768\),此时如果\(V\)的值为\(21000\),且\(E\)的值为\(128\),那么在使用矩阵分解前,参数量为\(21000×768=16128000=16M\),在使用矩阵分解后,参数的量为\(21000×128+128×768=2786304=2.7M\),由此可见,矩阵分解能够在一定程度上降低参数的量,但Albert最核心的机制并非矩阵分解,而是下面要介绍的Cross-layer parameter sharing(跨层参数共享)

3.Cross-layer parameter sharing(跨层数参数共享)

这是Albert的核心机制。

在Bert中,我们共有12个self-attention层,每一层的结构如下所示:

有趣的地方来了,Albert的作者经过研究发现,虽然Bert中有着12个self-attention层,但是,如果把每一层的参数都提取出来,会发现每一层的参数都基本相似。因此Albert的作者索性将一个self-attention层复制12次,用这12个完全相同的self-attention层取代原先12个不同的self-attention层。在训练时,我们其实只对一层self-attention进行训练,但在计算时,由于我们将这一层计算了12次,所以计算速度并没有显著地降低。

上图是几种不同的共享形式,all-shared降低的参数量最大,但同时会对最后的效果产生一定的影响,如果担心影响实际效果,可以选择shared-attention。Albert默认使用的是all-shared。

4.Albert与Bert的效果对比

作者在论文中将Bert与Albert进行了对比,对比的内容包括参数量、计算时间以及数据集评价指标:

在上图中,计算速度体现在Speedup列,并以BERT-large的基准。例如,Bert-base的计算速度为4.7x,就代表Bert-base的计算速度时Bert-large的4.7倍(以此类推),但上表也表现出一个较为重要的问题:Albert的计算速度对比Bert其实并没有多大的提升,但同时,由于减少了参数的量,还会对模型的性能产生一定的影响。

考虑到这一点,作者还拿Bert-large与Albert-xxlarge进行了对比,结果如下表所示:

在上表中,Albert以较小的step,差不多的训练时间,在不同的数据集上取得了比Bert更好的效果。但考虑到实际使用时,参数量减少给训练结果带来的负面影响,Albert是否比Bert优秀还是要另当别论。

最后附上一个Albert中文预训练模型的huggingface链接:

https://huggingface.co/voidful/albert_chinese_base

Albert理论详解:用矩阵分解与跨层参数共享减少参数量的更多相关文章

  1. [PXE] Linux(centos6)中PXE 服务器搭建,PXE安装、启动及PXE理论详解

    [PXE] Linux(centos6)中PXE 服务器搭建,PXE安装.启动及PXE理论详解 本篇blog主要讲述了[PXE] linux(centos)PXE无盘服务器搭建,安装,启动及pxe协议 ...

  2. Android 布局学习之——Layout(布局)详解二(常见布局和布局参数)

    [Android布局学习系列]   1.Android 布局学习之——Layout(布局)详解一   2.Android 布局学习之——Layout(布局)详解二(常见布局和布局参数)   3.And ...

  3. JVM的GC理论详解

    GC的概念 GC:Garbage Collection 垃圾收集.这里所谓的垃圾指的是在系统运行过程当中所产生的一些无用的对象,这些对象占据着一定的内存空间,如果长期不被释放,可能导致OOM(堆溢出) ...

  4. awk理论详解、实战

    答疑解惑: 为什么用awk取IP的时候用$4? ifconfig eth0 | awk -F '[ :]+' 'NR==2{print $4}' IP第二行内容如下: inet addr:10.0.0 ...

  5. elastic-job详解(五):自定义任务参数

    在elastic-job详解(三):Job的手动触发功能一文中讲到了如何手动触发一个Job,但是我们手动触发的时候常常需要输入一些参数.举个栗子:我们有个日统计报表,每天凌晨统计一次,统计上一天的数据 ...

  6. Logistic回归,梯度上升算法理论详解和实现

    经过对Logistic回归理论的学习,推导出取对数后的似然函数为 现在我们的目的是求一个向量,使得最大.其中 对这个似然函数求偏导后得到 根据梯度上升算法有 进一步得到 我们可以初始化向量为0,或者随 ...

  7. Java基础学习总结(53)——HTTPS 理论详解与实践

    前言 在进行 HTTP 通信时,信息可能会监听.服务器或客户端身份伪装等安全问题,HTTPS 则能有效解决这些问题.在使用原始的HTTP连接的时候,因为服务器与用户之间是直接进行的明文传输,导致了用户 ...

  8. Big Data(四)关于Hadoop的HA&CAP理论详解

    问题 思路: 主从集群:结构相对简单,主与从协作 主:单点,数据一致好掌握 问题: 单点故障,集群整体不可用 压力过大,内存受限 解决方案 单点故障: 高可用方案:HA(High Available) ...

  9. MaxTenuringThreshold与阈值的动态调整理论详解

    今天会学习“MaxTenuringThreshold”这样一个新的JVM参数,编写的示例还是会基于上一次的代码,新建个类,如下: 接下来给它设置JVM的参数,具体如下: 而接下来会新增三个参数: 这个 ...

  10. 华为设备RIP实施和理论详解

    1.路由协议基础 共同的目的:更新.维护和控制3层的路由 工作机制: RIP,封装在UDP这个协议上,端口号520(优先级100) OSPF,封装在IP层,协议号89(优先级,内部10,外部是150- ...

随机推荐

  1. 源代码管理工具介绍(以GITHUB为例)

    Github:全球最大的社交编程及代码托管网站,可以托管各种git库,并提供一个web界面 1.基本概念 仓库(Repository):用来存放项目代码,每个项目对应一个仓库,多个开源项目则有多个仓库 ...

  2. Spyglass CDC工具使用(四)

    最近一直在搞CDC (clock domain crossing) 方面的事情,现在就CDC的一些知识点进行总结. 做CDC检查使用的是Spyglass工具.以下内容转载自:Spyglass之CDC检 ...

  3. 变量调用分析——这个ball到底是那个ball?

    public class Ball implements Rollable{ public static void main(String[] args) { Ball ball = new Ball ...

  4. 帝国CMS 登录后跳转ecmsadmin.php 白页 多个解决方案

    帝国CMS 6.6 版本, 运维的网站查询除了问题, 把网站数据库和整体网站拷贝到本地服务器, 配置好 e/config/config.php    和 e/class/config.php 两个目录 ...

  5. C# Nilakantha级数逼近PI算法

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  6. C# Set集合

    包含不重复元素的集合称为"集(set)"..NET Framework包含两个集HashSet<T>和SortedSet<T>,它们都实现ISet<T ...

  7. JS兼容问题总结

    JS兼容问题总结 "标准浏览器"和"低版本浏览器(IE)"兼容写法 一.浏览器卷去的高度和宽度 var scrollTop = document.documen ...

  8. Weak Encryption 弱加密安全问题处理

    Weak Encryption Abstract 程序使用了弱加密算法,无法保证敏感数据的保密性. Explanation 陈旧的加密算法(如 DES)再也不能为敏感数据提供足够的保护了. 加密算法依 ...

  9. 【微信网页授权】SpringBoot+uniapp实现网页授权获取用户基本信息

    前言 缘由 起因于本狗上一个项目本打算采用微信公众号网页授权登录做用户鉴权,但最终因公众号是未认证的订阅号,无权限获取用户信息,所以改变思路,采用登录注册方式实现用户区分.但在开发中,学习了微信网页授 ...

  10. Web 前端入门 JS 基础知识梳理汇总

    Web 前端工程师是当前各大企业都比较稀缺的人才,薪资待遇和就业前景都很不错.不论是专业还是非专业,有基础亦或是无基础,都想通过学习 Web 前端实现高薪就业.不过,学习要一步一个脚印,不能一口吃一个 ...