类BERT模型蒸馏原理

如果你曾经训练过 BERT 或 RoBERTa 等大型 NLP 模型,就就会知道这个过程非常漫长。 由于此类模型规模庞大,训练可能会持续数天。 当需要在小型设备上运行它们时,可能会发现你正在为当今不断提高的性能付出巨大的内存和时间成本。

幸运的是,有一些方法可以减轻这些痛苦,同时对模型的性能影响很小,这些方法称为蒸馏(distillation)。 在本文中,我们将探讨 DistilBERT [1] 方法背后的机制,该方法可用于提取任何类似 BERT 的模型。

首先,我们将讨论蒸馏的一般情况以及为什么我们选择 DistilBERT 的方法,然后如何初始化该过程,蒸馏过程中使用的特殊损失,最后是一些足够相关的额外细节,需要单独提及。

在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 

1、DistilBERT 简介

蒸馏的概念非常直观:它是训练小型学生模型以尽可能接近地模仿大型教师模型的过程。 如果我们只在用于微调的集群上运行机器学习模型,那么蒸馏将毫无用处,但遗憾的是,事实并非如此。 因此,每当我们想要将模型移植到较小的硬件(例如有限的笔记本电脑或手机)上时,蒸馏就会出现,因为蒸馏模型运行速度更快,占用的空间更少。

你可能已经注意到,基于 BERT 的模型自在 [2] 中首次引入以来,在 NLP 中非常流行。 随着性能的提高,参数也随之增加。 准确地说,BERT 的数量超过 1.1 亿,而且我们甚至不是在谈论 BERT-large。 因此,蒸馏的必要性显而易见,因为 BERT 用途广泛且性能良好。 此外,后来的模型基本上都是以相同的方式构建的,类似于 RoBERTa [3],因此通过学习正确提炼 BERT,你可以一石二鸟。

第一篇关于 BERT 蒸馏的论文是我们的灵感来源,即 [1]。 但其他人紧随其后,比如 [4] 或 [5],所以很自然地想知道为什么我们将自己限制在 DistilBERT 上。 答案有三个:首先,它非常简单,因此这是对蒸馏的一个很好的介绍; 第二,它会带来好的结果; 第三,它还允许对基于 BERT 的模型进行蒸馏。

DistilBERT 的蒸馏有两个步骤,我们将在下面详细介绍。

2、复制教师模型的架构

BERT 主要基于一系列相互堆叠的注意力层。 因此,这意味着 BERT 学习的“隐藏知识”就包含在这些层中。 我们不会关心它们是如何工作的,但对于那些想要更多细节的人,除了原始论文 [1] 之外,我可以推荐这篇 TDS 文章,它做得非常出色 [6]。 目前,我们可以将注意力层视为黑匣子,这对我们来说并不重要。

BERT 的架构

从一个 BERT 到另一个 BERT,层数 N 各不相同,但模型的大小当然与 N 成正比。因此,训练模型所需的时间和前向传递的持续时间也取决于 N,以及 用于存储模型的内存。 因此,提炼 BERT 的逻辑结论是减少 N。

DistilBERT 的方法是将层数减半,并从教师的层初始化学生的层。 简单而高效:

学生模型初始化

DistilBERT 在一个复制层和一个忽略层之间交替,根据[4],这似乎是最好的启发式,它尝试优先复制顶层或底层。

多亏了huggingface的transformers模块和对其内部工作原理的一点了解,这可以很容易地实现。 我们将在另一篇文章中展示如何实现,因为在这篇文章中我们将只限于理论。

当然,如果你使用基于 BERT 的模型来完成特定任务,比如说序列分类,那么你还需要为学生复制老师的头部,但一般来说,BERT 头部与其注意力层相比小多了。

我们现在有了一个可以教授的学生模型。 然而,蒸馏过程并不是一个经典的拟合例程:我们并不是像平常那样教学生学习一种模式,我们的目标也是模仿老师。 因此,我们必须调整我们的训练程序,尤其是我们的损失函数。

3、蒸馏损失

我们的训练程序将基于损失,正如前面所说,它旨在实现几个目标:最小化教师训练的经典损失函数并模仿教师本身。 更糟糕的是,模仿教师需要混合使用两种损失函数。 因此,我们将从更简单的目标开始:最小化经典损失。

3.1 经典损失

关于这一部分没有太多可说的:类似 BERT 的模型都以相同的方式工作,核心将嵌入输出到特定问题的头部。 教师微调的任务有其自己的损失函数。 为了计算该损失,由于该模型是由具有与教师相同的特定问题头的注意力层组成,因此我们只需插入学生的嵌入和标签即可。

3.2 师生交叉熵损失

交叉熵损失对两个3D向量的影响

这是第一个旨在缩小学生和教师概率分布之间差距的损失。 当类似 BERT 的模型对输入进行前向传递时,无论是用于掩码语言建模、标记分类、序列分类等……它都会输出 logits,然后通过 softmax 层将其转换为概率分布。

对于输入 x,教师输出:

学生输出:

请记住 softmax 及其附带的符号,我们稍后会再讨论它。 无论如何,如果我们希望 T 和 S 接近,我们可以以 T 作为目标对 S 应用交叉熵损失。 这就是我们所说的师生交叉熵损失:

3.3 师生余弦损失

余弦损失对两个 3D 向量的影响

帮助学生成为教师的第二个损失是余弦损失。 余弦损失很有趣,因为它不是试图使向量 x 等于目标 y,而是仅仅尝试将 x 与 y 对齐,而不介意它们各自的范数或空间原点。 我们使用这种损失来使教师和学生模型中的隐藏向量对齐。 使用与之前相同的符号:

实际上,余弦损失有两种版本,一种用于对齐向量,另一种用于将一个向量拉向另一个向量的相反方向。 在本文中,我们只对第一个感兴趣。

3.4 完全蒸馏损失

完全蒸馏损失是上述三种损失的组合:

4、额外细节

softmax 温度对概率分布的影响

在解释了损失之后,蒸馏程序的其余部分就非常简单了。 该模型的训练方式与其他模型非常相似,唯一的问题是你必须并行运行两个类似 BERT 的模型。 值得庆幸的是,考虑到 GPU 的健康状况和内存,教师模型不需要梯度,因为反向传播仅在学生身上完成。 当然,仍然需要像蒸馏过程一样实现损失,但我们将在以后的一篇文章中介绍它。

4.1 温度

正如所承诺的,让我们回到 III 中使用的符号。 师生交叉熵损失:

DistilBERT 使用 [7] 中的温度概念,这有助于软化 softmax。 温度是一个变量 θ ≥ 1,随着它的升高,softmax 的“置信度”会降低。 普通的softmax描述如下:

现在,让我们无用地将其重写为:

每个人都会同意这是正确的。 1实际上对应于温度θ。 普通的softmax是温度设置为1的softmax,一般温度的softmax的公式为:

随着 θ 增大,θ 上的商变为零,因此整个商变为 1/n,softmax 概率分布变为均匀分布。 这可以在上图中观察到。

在 DistilBERT 中,学生和教师的 softmax 在训练期间都以相同的温度 θ 为条件,并且在推理期间将温度设置为 1。

5、结束语

现在你已经了解了类似 BERT 模型的蒸馏如何适用于 DistilBERT,唯一要做的就是选择一个模型并对其进行蒸馏!

显然,你仍然需要实施蒸馏过程,但我们很快就会介绍如何做到这一点。


原文链接:类BERT模型蒸馏原理 - BimAnt

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于单片机设计的电子指南针(LSM303DLH模块(三轴磁场 + 三轴加速度)

一、前言 本项目是基于单片机设计的电子指南针,主要利用STC89C52作为主控芯片和LSM303DLH模块作为指南针模块。通过LCD1602液晶显示屏来展示检测到的指南针信息。 在日常生活中,指南针是一种非常实用的工具,可以帮助我们确定方向&#xff0…

如何创建react项目

可以直接通过react脚手架进行创建 首先确保自己是否安装了create-react-app npm install -g create-react-app 如果安装不成功有可能是有缓存,可以先清除缓存再重新安装 npm cache clean --force 安装成功后就可以使用脚手架创建自己的项目,my-react就是我的项…

项目架构设计说明书编制

目录 项目名称 1 简介 1.1 目的 1.2 范围 1.3 术语及缩略语 1.4 引用文档 1.5 概述 2 构架表示方式 3 构架目标和约束 4 用例视图 4.1 用例实现 5 逻辑视图 5.1 概述 5.2 在构架方面具有重要意义的设计包 5.3 内部接口设计与协作机制 5.4 对外接…

mysql 中with的用法(3)

有表(tb),数据如下: 请用SQL,生成如下的样式: 一、建表 CREATE TABLE tb (id varchar(3) DEFAULT NULL,pid varchar(3) DEFAULT NULL,name varchar(64) DEFAULT NULL ) INSERT INTO tb (id, pid, name) VALUES(002, 0, 浙江省)…

场效应管(MOSFET)笔记-nmos和pmos仿真测试

一、场效应管的介绍 场效应管是一种半导体器件,它可以用来放大或者控制电流。根据结构的不同,场效应管可以分为结型场效应管(JFET)和绝缘栅场效应管(MOSFET)。其中,JFET是由一个pn结构组成&…

系列二、垃圾

一、什么是垃圾 简单的说,垃圾就是内存中已经不再被使用到的空间就是垃圾。 二、 如何判断一个对象是否可以被回收 2.1、引用计数法 Java中,引用和对象是有关联的,如果要操作对象则必须要用引用进行。因此判断一个对象是否可以被回收&#x…

21款奔驰E300L升级HUD抬头显示 绚丽多彩的展示

随着科技飞速地发展,从汽车领域就可以看出,尤其是汽车的抬头显示器,一经推出就吸引了很多的车主。 升级HUD抬头显示,HUD与汽车系统进行完整的数据信息连接,整合成大数据,然后将一些重要信息映射到车窗玻璃…

2243. 计算字符串的数字和

2243. 计算字符串的数字和 Java:以 k 为步长进行跳!然后再延伸k class Solution {public String digitSum(String s, int k) {while (s.length() > k) {int n s.length();StringBuilder sb new StringBuilder(); // sb存!for (int i …

禁止文件外发,企业文件禁止外发

禁止文件外发,企业文件禁止外发 禁止文件外发是企业信息安全策略中的一项重要措施,用于防止敏感数据或机密文件被员工无意或有意地传送到外部,也是企业数据防泄密的一种方法,从而保护企业数据的安全性和保密性。 下载使用安企神…

PDF控件Spire.PDF for .NET【转换】演示:将PDF 转换为 HTML

由于各种原因,您可能想要将 PDF 转换为 HTML。例如,您需要在社交媒体上共享 PDF 文档或在网络上发布 PDF 内容。在本文中,您将了解如何使用Spire.PDF for .NET在 C# 和 VB.NET 中将 PDF 转换为 HTML。 Spire.Doc 是一款专门对 Word 文档进行…

【鸿蒙应用ArkTS开发系列】- 云开发入门简介

目录 概述开发流程工程概览工程模板工程结构 工程创建与配置 概述 HarmonyOS云开发是DevEco Studio新推出的功能,可以让您在一个项目工程中,使用一种语言完成端侧和云侧功能的开发。 基于AppGallery Connect Serverless构建的云侧能力,开发…

怎样备份电脑文件最安全

怎样备份电脑文件最安全 数据对一家公司来说是非常重要的资产,数据备份是非常重要的,主要是为了保护数据免受意外损失、文件损坏、硬件故障、恶意软件攻击、盗窃或灾难性事件等影响。 下载使用安企神电脑屏幕监控软件 备份电脑文件最安全的方法包括&am…

MS90C385B——+3.3V 150MHz 的 24bit 平板显示器(FPD) LVDS 信号发送器

MS90C385B 芯片能够将 28bit 的 TTL 数据转换成 4 通道的低压差分 信号 (LVDS) 。时钟通道经过锁相之后,与数据通道并行输出。当时钟频 率为 150MHz 时, 24bit 的 RGB 数据、 3bit 的 LCD 时序数据和 1bit 的控 制数据以 1050Mbps…

安装SSL证书有什么意义?

在当今的数字化时代,网络安全已经成为了一个重要的议题。为了保护网站和用户数据的安全,许多网站都选择了安装SSL证书。同时,很多用户不明白安装SSL证书到底有什么意义? 一、网站实现加密传输 用户通过http协议访问网站时&#x…

AI监管规则:各国为科技监管开辟了不同的道路

AI监管规则:各国为科技监管开辟了不同的道路 一份关于中国、欧盟和美国如何控制AI的指南。 编译 李升伟 茅 矛 (特趣生物科技有限公司,广东深圳) 插图:《自然》尼克斯宾塞 今年5月,科技公司OpenAI首席…

uniapp App 端 版本更新检测

function checkVersion() { var req { //升级检测数据 appid: plus.runtime.appid, version: plus.runtime.version }; const timestamp Date.parse(new Date()); config.server.query_news uni.reque…

《持续交付:发布可靠软件的系统方法》- 读书笔记(十五)

持续交付:发布可靠软件的系统方法(十五) 第 15 章 持续交付管理15.1 引言15.2 配置与发布管理成熟度模型15.3 项目生命周期15.3.1 识别阶段15.3.2 启动阶段15.3.3 初始阶段15.3.4 开发与发布15.3.5 运营阶段 15.4 风险管理流程15.4.1 风险管理…

解决Windows Server 2022启动PowerShell出现乱码问题

解决 PowerShell 控制台中字符被乱码的问题 文章目录 乱码问题现象乱码问题原因乱码解决方法1. 从cmd.exe启动 PowerShell2. 更改 PowerShell 控制台中的字体 推荐阅读 乱码问题现象 Windows Server 2022启动 PowerShell 控制台时,字符会出现乱码。 此问题已知仅会…

【数据结构】树与二叉树(十七):二叉树的基础操作:删除指定结点及其左右子树(算法DST)

文章目录 5.2.1 二叉树二叉树性质引理5.1:二叉树中层数为i的结点至多有 2 i 2^i 2i个,其中 i ≥ 0 i \geq 0 i≥0。引理5.2:高度为k的二叉树中至多有 2 k 1 − 1 2^{k1}-1 2k1−1个结点,其中 k ≥ 0 k \geq 0 k≥0。引理5.3&…

workman使用手册1.0

workman官网地址:高性能PHP应用容器 workerman 1:把workman项目放到linux服务器后,需要启动你的php文件,才可以使用 定位到项目根目录:例:cd /mnt/workman 启动代码:php outin.php start -d 停…
最新文章