FastBert学习笔记

news2025/1/31 11:29:02

论文标题《FastBERT: a Self-distilling BERT with Adaptive Inference Time》。

关于这个论文已经有不错的解读了,所以我写的侧重点可能和别人的不太一样,具体的往下看吧,欢迎讨论。

这个论文从两个方面去掌握:

  1. 样本自适应推断:使用不确定性指标(a normalized entropy)去过滤样本;
  2. 模型自蒸馏:分支网络分类器学习主干网络分类器,并使用KL散度进行度量;

然后我们聊一聊 FastBert 究竟在做什么事情?

Bert本身有12层,模型在进行推理的时候, 每一个样本都会完整的走过12层。而 FastBert 做到了让简单的样本的不必走过12层,只需要走过3层或者4层(这个数字并不确定)就可以。

仔细想一下这个过程,简单来讲,就是杀鸡不要用牛刀,一件很简单的样本,不值得我们调用12层去搞定它,3层transformer学的参数就可以消灭掉这个样本。

1. 整体过程

整个过程分为三步:

  1. 微调主干网络:使用自己下游数据微调主干网络。
  2. 自蒸馏:可以使用无监督数据,用KL散度度量每一层和最后一层分布距离,并使用和作为损失。交叉熵也没差,H§不变,两者等价。
  3. 自适应推理:自己设定速度(阈值),大于这个的往后走,小于这个的输出结果。
2. 需不需要自蒸馏

但是,看到这里,我们肯定会有一个疑问。

基于“杀鸡不用牛刀”的想法,我可以简单改造 Bert 模型,在每一层都加一个分类器,使用我自己的下游数据训练模型就可以了,损失函数直接使用每一层的交叉熵损失之和就可以了,为什么需要用到自蒸馏呢?

简单来说,就是我完全可以不需要使用自蒸馏就可以达到同样的目的。

基于这一点,作者有做一个实验对比,得出的结论就是没有自蒸馏,会导致精读的降低。

具体看这个图:

img

其实从这个图可以看到,如果没有自蒸馏,确实会有精度的下降。

论文中在自蒸馏的时候,使用的是无监督的数据。

我们一般可以会有大量的无监督数据,所以这个方法真的很适合少样本的情况的冷启动问题。

不过,如果有监督数据,使用 labeled data应该会取得更好的效果,也就是不用去学习soft,而是去学习Hard。

3. LUHA假设证明

这个论文其实我自己更感兴趣的是文中针对假设:“不确定性越低,分类的准确度越高”的证明。

作者分析了一个 FastBert 模型的三层:Student-Classifier0, StudentClassifier5, Teacher-Classifier 的分类结果,并在不同的不确定度区间评判分类准确度。

img

我自己的理解哈,在这里是没有进行speed的筛选的,而是计算所有的样本,不然对于第一层,大于speed的地方准确度应该是0(因为直接就往后走了,并没有使用它的分类结果),不应该出现在图中。

从这个图中,我们可以得到一个结论,就是不论是是针对分支网络的哪一层,还是针对主干网络,不确定性越高,分类的准确度越低。

换过来讲,不确定性越低(图中横坐标越靠左),分类的准确度越高。

当然作者是使用画图的方式来证明的,我自己当时理解的时候是这么想的:

作者对不确定性的定义就是熵(在类别维度上做了normalized)。

熵越低,说明分布的越集中,也就是说在做类别判定的时候,出现在某个类别的地方的概率越大,这样当然可以说明分类的准确度越高。

我这个思路可能并不严谨,不过我觉得还是挺好理解的。

4. 每层样本分布问题

从这个图,还有一个问题需要注意:

就是学生网络的分类层在每个不确定区间内的准确度都是高于主干网络分类层的(看最下面一个和最上面一个对比)。

这一点真是非常的奇怪,如果按照这个理解,那么完全可以使用第一层替代主干网络。

当然作者这里也给出了解释,就是每层的样本分布其实是不一样的,越靠近后面的层,样本的不确定度越低,越靠近左边,所以样本走完12层之后使用主干网络整体准确度肯定是比直接使用第一层的要好。

具体可以看下面这个图(a):

img

对于上面这个图,我们还可以仔细去看一看里面的内容。

需要明确一点,同一个样本,每经过一层计算一次它的不确定度(熵),都是在变化的,而且会逐渐靠近不确定度低的地方。

也就是这个样本被分出类别的可能性越来越大。

这一点其实很容易理解,就是Bert抽取能力随着层数越来越强,那么文本被正确分类的可能性当然越来越大,不确定度当然越来越大。

你的Speed越高,筛选出来的样本越多,留给后面的就越是不确定高的样本,那么分布越高近图中的右侧。

其他细节李如(她原来是个女生…)有个文章讲的挺好的,在这里:

FastBERT:又快又稳的推理提速方法 - 李rumor的文章 - 知乎 https://zhuanlan.zhihu.com/p/127869267

代码地址在这里:

https://github.com/autoliuweijie/FastBERT

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

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

相关文章

Oracle11g在红帽Linux上的安装教程

一、版本介绍 本次实验环境所使用虚拟机为VMware17(16或15版本也可以) 镜像版本为Red Hat 7.9: ISO镜像地址: 百度网盘链接 链接:https://pan.baidu.com/s/1p318ZZGMfDp4MllXZXbusg?pwdmpic 提取码&…

C++学习——继承(1)

目录 一,继承是什么? 二,继承的权限 三,继承赋值兼容规则 四,继承中的作用域 一,继承是什么? 我们说面向对象的语言有三大特性:1.封装,2,继承,…

鸿蒙tabbar ArkTS

鸿蒙tabbar ArkTS 做了仿照现在应用的做了一个tabbar。 官方文档地址 参考文档 tabbar 其中有个比较重要的点是,对image资源的引用问题。 资源相关说明 图片是resources目录下的base目录下的。 media目录下的图片的资源不能添加文件夹,只能是文件&a…

【Spring框架】Spring监听器的源码分析

目录 一、Spring监听器模型 二、源码分析 2.1 initApplicationEventMulticaster():事件广播器的初始化 2.1.1 Spring默认的事件广播器SimpleApplicationEventMulticaste 2.2 registerListeners():注册事件监听器 2.3 finishRefresh():完…

京东店铺所有商品数据接口,京东整店所有商品数据接口,京东店铺商品接口,京东API接口

京东店铺所有商品数据接口是开放平台提供的一种API接口,通过调用API接口,开发者可以获取京东整店的商品的标题、价格、库存、月销量、总销量、库存、详情描述、图片、价格信息等详细信息。 京东店铺所有商品数据接口可以用于不同的业务场景,…

【HHO-KELM预测】基于哈里斯鹰算法优化核极限学习机回归预测研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

博图数值按照特定格式(“T000000”)转换成字符串

一、前言 数值按照协议格式,转成字符串。方便和第三方厂家对接。如码垛线使用字符串数据,立库厂家使用dint数据类型,上位机使用DINT数据类型,为了判断数据传输、与动作流程,需要条码的比较,此时可以将数值转…

Kotlin vs Java:为什么Springboot官方教程选择了Kotlin?

导语 作为Java开发者的你,是否在为寻找Java的替代品而烦恼?担心受知识产权问题困扰?别担心,Kotlin来了!它是你的救星,也是Springboot官网教程的选择。想知道为什么吗?那就往下翻吧!…

“通胀噩梦:恶梦继续还是即将终结?经济前景备受关注!“

尽管美联储采取了激进的利率策略,昨天公布的 9 月份 CPI 数据显示,整体同比增长 3.7%,而预期为 3.6%,高于预期。环比预期,为 0.4%,而预期为 0.3%。核心 CPI 环比上涨 0.3%,同比上涨 4.1%&#x…

极限号可以拿到函数的内部吗?【复合函数中极限的进入】

极限号无脑直接拿进来 1.1 如果f(极限值)在该点连续,ojbk,拿进来。 1.2 如果f(极限值)不存在或不连续,不能拿进来,出去。

Flask (Jinja2) 服务端模板注入漏洞复现

文章目录 Flask (Jinja2) 服务端模板注入漏洞1.1 漏洞描述1.2 漏洞原理1.3 漏洞危害1.4 漏洞复现1.4.1 漏洞利用 1.5 漏洞防御 Flask (Jinja2) 服务端模板注入漏洞 1.1 漏洞描述 说明内容漏洞编号漏洞名称Flask (Jinja2) 服务端模板注入漏洞漏洞评级高危影响版本使用Flask框架…

【剑指Offer】27.二叉树的镜像

题目 操作给定的二叉树,将其变换为源二叉树的镜像。 数据范围:二叉树的节点数 0≤n≤1000 , 二叉树每个节点的值 0≤val≤1000 要求: 空间复杂度 O(n) 。本题也有原地操作,即空间复杂度O(1) 的解法,时间…

Servlet--Request请求对象

1.请求对象的概述 请求:获取资源。在BS架构中,就是客户端浏览器向服务器端发出询问 请求对象:就是在项目当中用于发送请求的对象 2.获取各种路径的方法 返回值方法名说明StringgetContextPath()获取虚拟目录名称StringgetServletPath()获…

C++前缀和算法:构造乘积矩阵

题目 给你一个下标从 0 开始、大小为 n * m 的二维整数矩阵 grid ,定义一个下标从 0 开始、大小为 n * m 的的二维矩阵 p。如果满足以下条件,则称 p 为 grid 的 乘积矩阵 : 对于每个元素 p[i][j] ,它的值等于除了 grid[i][j] 外所…

Django使用Token认证(simplejwt库的配置)

目录 官网文档安装项目配置拓展配置 官网文档 https://django-rest-framework-simplejwt.readthedocs.io/en/latest/ 安装 pip install djangorestframework-simplejwt项目配置 REST_FRAMEWORK {...DEFAULT_AUTHENTICATION_CLASSES: (...rest_framework_simplejwt.authent…

【斗破年番】彩鳞换装美翻,雁落天惨死,萧炎暗杀慕兰三老遇险,彩鳞霸气护夫

Hello,小伙伴们,我是小郑继续为大家深度解析斗破苍穹年番资讯。 斗破苍穹动画已经更新了,小医仙与萧炎相认,三国联军撤退,随后彩鳞与萧炎以及小医仙夜晚相会,一起制定了刺杀行动。从官方公布的第68集预告,彩…

ST‐LINK V2 使用说明(安装,调试,烧录)

目录 1. 初识 ST-LINK V2 1.1 ST-LINK V2 简介 2. ST-LINK V2 驱动的安装与固件升级 2.1 驱动的安装 2.2 固件的升级 3. 使用 STM32 ST-LINK Utility 烧写目标板 hex 3.1 ST-LINK 烧写 hex 文件 4.使用 ST-LINK V2 调试 STM8 4.1 ST‐LINK 调试 STM8 5.…

【GA-ACO-RFR预测】基于混合遗传算法-蚁群算法优化随机森林回归预测研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

时序分解 | Matlab实现EEMD集合经验模态分解时间序列信号分解

时序分解 | Matlab实现EEMD集合经验模态分解时间序列信号分解 目录 时序分解 | Matlab实现EEMD集合经验模态分解时间序列信号分解效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现EEMD集合经验模态分解时间序列信号分解 1.分解效果图 ,效果如图所示&…

4.1 继承性

知识回顾 (1)类和对象的理解? 对象是现实世界中的一个实体,如一个人、一辆汽车。一个对象一般具有两方面的特征,状态和行为。状态用来描述对象的静态特征,行为用来描述对象的动态特征。 类是具有相似特征…