深入理解深度学习——BERT派生模型:ALBERT(A Lite BERT)

news2024/10/7 14:24:41

分类目录:《深入理解深度学习》总目录


预训练语言模型的一个趋势是使用更大的模型配合更多的数据,以达到“大力出奇迹”的效果。随着模型规模的持续增大,单块GPU已经无法容纳整个预训练语言模型。为了解决这个问题,谷歌提出了ALBERT,该模型与BERT几乎没有区别,但其所占用的显存空间可以减少至BERT的十分之一乃至更少,方便了预训练语言模型的训练与部署。为了不大幅降低模型的性能,相比BERT,ALBERT有如下几点改进:

  • Embedding层低秩分解。
  • 跨层参数共享。
  • 使用SOP(Sentence Order Prediction)训练方法代替NSP训练方法

Embedding层低秩分解是为了固定Embedding层的参数规模,使其不随模型的增大而增大。跨层参数共享则让模型只记住一个Transformer Block的参数,就可以还原整个模型,大大减少了参数存储的空间,是ALBERT效果如此突出的最重要原因。NSP训练方法已经被诸多模型证明没有效果,故ALBERT采用了SOP训练方法,并用实验证明其有效。

算法细节

Embedding层低秩分解

设Embedding层的输出向量维度为 E E E,隐层向量(Transformer Block的输入/输出向量)维度为 H H H,模型词表大小为 V V V。在BERT中,一般默认 E E E H H H一致,即Embedding层的输出直接作为Transformer Block层的输入。Embedding层只是一个静态映射,词的向量化过程不涉及上下文信息,因此Embedding层的输出维度 E E E没有必要随着 H H H的增大而增大,保持在一定规模即可,以免造成参数冗余。具体而言,ALBERT在固定 E E E之后,引入了一个变换矩阵,该矩阵的作用就是将维度为E的Embedding层输出向量变换为维度为 H H H的向量,以便输入至Transformer Block模块。在数学上,这个变换可以视为如下因式分解操作:
V × H = V × E × H V\times H=V\times E\times H V×H=V×E×H

从参数量的角度看,参数规模从BERT的 O ( V × H ) O(V\times H) O(V×H)下降到ALBERT的 O ( V × E + E × H ) O(V\times E+E\times H) O(V×E+E×H)。以BERT为例,词表的大小 V V V为30000,隐层向量维数 H H H为768,光是Embedding层就需要2304万个参数,而ALBERT固定Embedding层输出维数 E E E为128,可以计算得到ALBERT的Embedding层只需要约394万个参数,只有BERT的六分之一。若BERT继续横向扩大, H H H变为2048乃至4096,则ALBERT节省参数空间的特性将更明显,可以达到更大的压缩比。

跨层参数共享

ALBERT采用了Transformer Block层参数共享的方法来减少模型的存储参数量。为了寻找最佳的参数共享方案,ALBERT做了大量实验,分别探究了以下几种情况下的模型性能:

  • 所有层的所有参数均共享。
  • 只共享Multi-Head Attention层参数。
  • 只共享Feed Forward层参数。
  • 每M层为一组,组内共享所有参数。

实验结果如下图所示,ALBERT-base在只共享Multi-Head Attention层参数时可以取得最好的效果,几乎没有任何负面影响,甚至在某些任务上还能有增益。可惜的是,Multi-Head Attention层参数并不是ALBERT-base的主要参数部分,即参数存储空间压缩力度不够。所有层的参数都共享和只共享Feed Forward层参数,均有性能上可控范围内的损失,但是压缩力度很强。对于每 M M M层一组的共享方法,实验结果表明, M M M越小,性能越好(当 M M M为1时为不共享),但是参数压缩力度也越小。
ALBERT参数共享策略及实验结果
最终,ALBERT选择了“性价比”最高的共享所有层参数的方案,牺牲了一定的性能,换来了极大的参数存储空间压缩比。

SOP训练方法

SOP与NSP一样,也是一种以句对分类标签为训练目标的训练方法,其与NSP的差别在于负样本的选取。SOP挑选正样本的方式与NSP一样,均为连续的两个句子,但与NSP随机挑选毫无语义关系的句子作为负样本不同,SOP将正样本的两个句子交换位置,作为负样本。为了证明SOP训练方法的有效性,ALBERT也做了一组对比实验,分别探究了只使用MLM训练方法、使用“MLM+NSP”训练方法和使用“MLM+SOP”训练方法的性能对比,如下图所示。实验结果表明,在二分类任务中,额外使用SOP训练方法得到的模型在NSP任务上表现较好(78.9%的准确率),而额外使用NSP训练方法得到的模型在SOP任务上表现得一般(52.0%的准确率)。在各项任务的平均准确率上,使用NSP与不使用NSP训练方法的模型基本一致,而使用SOP训练的模型会略胜一筹。
SOP与NSP实验对比
综上所述,ALBERT对Embedding层和Transformer Block层分别使用了低秩分解和参数共享的方法,大大减少了参数存储空间,使得一个超大模型可以顺利地在单块GPU上训练与部署。值得一提的是,ALBERT减少的是参数的存储空间,并没有减少模型在训练及推理过程中的计算量。在训练过程中,由于需要梯度更新的参数大大减少,训练速度有所加快,但是在下游任务达到同样表现时,ALBERT的计算量远超参数更大的BERT,导致其推理速度更慢。虽然ALBERT没有减少整体的运算量,但是在模型与训练数据规模与日俱增的“军备”竞赛中,参数共享是一个非常值得重视的工作。未来,配合蒸馏等方法,其模型参数压缩比和性能会更好。

参考文献:
[1] Lecun Y, Bengio Y, Hinton G. Deep learning[J]. Nature, 2015
[2] Aston Zhang, Zack C. Lipton, Mu Li, Alex J. Smola. Dive Into Deep Learning[J]. arXiv preprint arXiv:2106.11342, 2021.
[3] 车万翔, 崔一鸣, 郭江. 自然语言处理:基于预训练模型的方法[M]. 电子工业出版社, 2021.
[4] 邵浩, 刘一烽. 预训练语言模型[M]. 电子工业出版社, 2021.
[5] 何晗. 自然语言处理入门[M]. 人民邮电出版社, 2019
[6] Sudharsan Ravichandiran. BERT基础教程:Transformer大模型实战[M]. 人民邮电出版社, 2023
[7] 吴茂贵, 王红星. 深入浅出Embedding:原理解析与应用实战[M]. 机械工业出版社, 2021.

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

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

相关文章

Redis【web应用实践_网页缓存、其他功能(发布与订阅、慢查询 、流水线pipeline)】(四)-全面详解(学习总结---从入门到深化)

目录 ​编辑 Redis构建web应用实践_网页缓存 创建springboot项目 选择组件 编写配置文件 创建表 编写持久层 编写业务层 编写控制层 下载压测工具 启动Jmeter工具 修改语言 创建压测任务 添加HTTP请求 配置HTT请求 添加压测结果报告 没有加缓存的吞吐量 ​ …

【java爬虫】selenium+browsermob入门实战

在爬虫领域,selenium几乎是最无所不能的一个框架了,在传统的爬虫无能为力的时候,我们可以使用selenium来请求动态页面获取信息。 当然,只有selenium还是不够的,因为使用selenium我们只能获取页面上展示的数据&#xf…

Linux驱动入门(四)——内核进程管理

文章目录 前言进程进程描述符及任务结构分配进程描述符进程描述符的存放进程状态设置当前进程状态进程上下文进程家族树 进程创建写时拷贝fork()vfork() 线程在Linux中的实现创建线程内核线程 进程终结删除进程描述符孤儿进程造成的进退维谷 总结 前言 进程是Unix操作系统抽象…

Vue--》Vue3打造可扩展的项目管理系统后台的完整指南(七)

今天开始使用 vue3 ts 搭建一个项目管理的后台,因为文章会将项目的每一个地方代码的书写都会讲解到,所以本项目会分成好几篇文章进行讲解,我会在最后一篇文章中会将项目代码开源到我的GithHub上,大家可以自行去进行下载运行&…

驱动开发:摘除InlineHook内核钩子

在笔者上一篇文章《驱动开发:内核层InlineHook挂钩函数》中介绍了通过替换函数头部代码的方式实现Hook挂钩,对于ARK工具来说实现扫描与摘除InlineHook钩子也是最基本的功能,此类功能的实现一般可在应用层进行,而驱动层只需要保留一…

idea如何使用git指令

(1)、打开setting,直接搜git (2)、点一下text 如果显示成功就不用管了,但如果失败就要重新设置一下目录: (3)、找到自己设置gitee ssh目录: 这里我们是不需要用.git对.idea进行管理的&#xff…

vue3原理和源码分析 - VirtualDOM和DOMDIFF

目录 VUE3的h/createVNode函数【vue的概念模型】 Virtual DOM(组件化的概念模型) VirtualDOM更新 WHY DOM-DIFF? DOM-DIFF原理 DOM-DIFF伪代码 DOM-DIFF分类讨论:属性变更 DOM-DIFF分类讨论:节点类型不同 DOM-…

正负整数小数在内存的存储

目录 补码引入 整数在内存的存储 小数十进制与二进制相互转化 小数的内存存储 本节会主要学习正负的整数小数在内存的存储方式 补码引入 补码在计算机有着重要的地位,计算机本身只能完成的加法,移位运算,减法,乘法&#xff0…

深入解析多人共享云盘:便捷文件协作与分享的全新模式

在当今数字化时代,云盘已成为许多人存储和共享文件的首选方式。但是,传统的个人云盘服务在多人协作方面存在一些限制。为了解决这个问题,多人共享云盘应运而生。什么是多人共享云盘? 多人共享云盘是一种允许多个用户同时访问、编辑…

【数据库六】存储过程

存储过程 1.存储过程概述1.1 存储过程定义1.2 存储过程优点1.3 创建存储过程 2. 存储过程参数2.1 输入参数2.2 输出参数2.3 输入输出参数2.4 存储过程参数总结 3. 删除存储过程4.存储过程的控制语句4.1 条件语句if --else4.2 循环语句4.3 存储过程控制语句总结 1.存储过程概述 …

Qt 实现SQLite全部语法(增删改查、内置函数、高级语法)

Qt 实现SQLite全部语法 【1】SQLite Qt界面设计【2】SQLite Qt数据库创建、打开、关闭、删除【3】SQLite Qt表格的创建【4】SQLite Qt表格的插入【5】SQLite Qt表格的查询【6】SQLite Qt表格的删除【7】SQLite Qt表格的更新【8】SQLite Qt表格的结构【9】SQLite Qt表格的修改【…

Python 教程:从零到大师

首先, 什么是Python? 用python作者Guido van Rossum自己的话来说,Python是这样的一门语言: "它是一门高级编程语言, 它的核心设计理念是让所有代码变得更易阅读,并给开发者们提供一种“仅仅几行代码就能编写编程逻辑”的语法。 那么&am…

SD/StableDiffusion部署图文教程,ai绘画教程,实现谷歌云端零成本部署,中文UI

目录 一、前言 二、准备前提 三、教程说明 四、开始搭建 1、第一步,下载ipynb脚本文件 2、第二步,上传一键脚本文件到谷歌云盘 3、选择该.ipynb文件--右键--打开方式--关联更多应用 4、输入框搜索Colaboratory找到该应用,安装 5、安…

【瑞萨RA6系列】RASC+Keil开发环境搭建和GPIO点灯指南

瑞萨RASCKeil开发环境搭建 一、简单开箱二、资料下载三、芯片简介四、开发环境搭建4.1 安装RASC4.2 安装Keil MDK4.3 安装RA6E1的MDK支持包 五、GPIO点灯指南5.1 创建RASC项目5.2 查阅开发板原理图5.3 设置LED1引脚为输出3.4 编写LED1闪烁的代码5.5 编译Keil项目5.6 修改Keil调…

产品设计.B端设计师不可忽视的产品和用户

B端产品与C端产品不同,前者强调客户价值,企业决策链路长,用户难获得的同时也相对难流失。而作为B端产品设计师,就需要根据B端产品业务特点,从用户、产品等角度进行考量,以求做出符合市场和用户的设计方案。…

【HTTP 协议】

一、HTTP 协议简介 在真实的网络环境中采用 TCP/IP 五层网络传输模型这样的结构传输. 物理层 -> 数据链路层 -> 网络层 -> 传输层 -> 应用层 1. 应用层: 应用层是模型的最顶层,它为用户提供了一种与网络进行通信的方法。应用层包含了各种应用程序&…

【Linux基础及shell脚本】在VMware16中安装CentOS7.6

文章目录 1. Linux和CentOS2. 虚拟机3. 为什么选择在VMware上安装CentOS?4. 准备工作5. 创建新的虚拟机6. 安装CentOS 7.67. 初次启动和设置 在我们了解如何在VMware16中安装CentOS 7.6之前,让我们首先对Linux、CentOS以及虚拟机有一些基本的认识。 1. …

【性能测试一】性能测试概述

目录 🌟一、性能测试的基础概念 🌈1、生活中软件相关的性能问题? 🌈2、性能测试的概念 🌈3、性能测试与功能测试的区别? 🌈4、什么样的软件属于性能好?什么样的软件属于性能不好…

搭建Vue项目以及项目的常见知识

前言:使用脚手架搭建vue项目,使用脚手架可以开发者能够开箱即用快速地进行应用开发而开发。 搭建 #创建一个基于 webpack 模板的新项目 vue init webpack my-project #选择所需要的选项如图: cd my-project npm run dev访问localhost:808…

分布式数据库架构

分布式数据库架构 1、MySQL常见架构设计 对于mysql架构,一定会使用到读写分离,在此基础上有五种常见架构设计:一主一从或多从、主主复制、级联复制、主主与级联复制结合。 1.1、主从复制 这种架构设计是使用的最多的。在读写分离的基础上…