(BERT蒸馏)TinyBERT: Distilling BERT for Natural Language Understanding

文章链接:https://arxiv.org/abs/1909.10351

背景

在自然语言处理(NLP)领域,预训练语言模型(如BERT)通过大规模的数据训练,已在多种NLP任务中取得了卓越的性能。尽管BERT模型在语言理解和生成任务中表现出色,其庞大的模型尺寸和高昂的计算成本限制了其在资源受限环境下的应用。

挑战

BERT等大型模型的计算成本高,不适合在移动设备或低资源环境中部署。因此,急需一种能将大型模型的能力转移到更小、更高效模型上的技术,这种技术被称为“知识蒸馏”。知识蒸馏的挑战在于如何在减小模型尺寸的同时,尽可能保留原模型的性能。

方法

TinyBERT学习框架

TinyBERT通过以下步骤实现BERT的知识蒸馏:

1. Transformer蒸馏方法:针对Transformer基础的模型设计了一种新的知识蒸馏方法,旨在将大型BERT模型中编码的丰富知识有效转移到小型TinyBERT模型。

2. 两阶段学习框架:TinyBERT采用了一种新颖的两阶段学习框架,包括预训练阶段和具体任务学习阶段的蒸馏,确保TinyBERT模型不仅能捕获通用领域知识,还能捕获特定任务知识。

3. 数据增强和多样性:为了进一步提高TinyBERT在特定任务上的性能,引入数据增强技术,通过扩展训练样本来增加模型的泛化能力。

损失计算

Transformer层中注意力矩阵和隐藏状态蒸馏示意图

其中Zs和Zt分别是学生和教师模型的逻辑输出,CE 代表交叉熵损失函数,t是一个软化温度参数,用于调整软标签的分布,使得学生模型可以从教师模型的预测中学习更多信息。

通过上述损失函数的组合,TinyBERT不仅学习了教师模型的最终输出,还学习了教师模型处理信息的内在方式,包括注意力机制和隐藏层的表示。这些损失函数的综合使用,确保了学生模型TinyBERT在显著减少模型大小和计算成本的同时,能够尽可能地保留教师模型BERT的性能。

W_hW_e矩阵说明:

目的:

尺寸转换:由于TinyBERT模型的隐藏层尺寸通常小于BERT模型的隐藏层尺寸,因此需要W_hW_e矩阵将学生模型的输出转换为与教师模型相同维度的空间,以便进行有效的比较。

信息转换:这个矩阵不仅仅是简单地改变尺寸,它还能帮助学生模型学习如何将其较小的、压缩的表示形式映射到一个更丰富的表示空间,这是教师模型所使用的。

获取方式(以W_h为例):

通过训练过程中的反向传播得到的,具体步骤如下:

初始化:W_h矩阵在训练前随机初始化

损失函数:通过定义一个损失函数来量化学生模型转换后的输出与教师模型输出之间的差异。常用的损失函数包括均方误差(MSE)。

反向传播更新:在训练过程中,使用梯度下降方法(或其他优化算法)根据损失函数的结果来调整W_h矩阵的值,以最小化学生和教师模型输出之间的差异。

训练过程:在Transformer层蒸馏的上下文中,每当输入一个训练样本,学生模型(TinyBERT)和教师模型(BERT)都会计算各自的隐藏状态。然后,使用W_h矩阵将TinyBERT的隐藏状态转换到与BERT相同的维度,接着计算和反向传播这两者之间的差异,不断更新W_h矩阵以及其他相关的模型参数。通过这样的过程,W_h矩阵最终能够有效地帮助TinyBERT模仿BERT的行为和输出,尽管TinyBERT的模型尺寸更小,参数更少。这种方法是蒸馏技术中减小模型尺寸同时保持性能的关键步骤之一。

数据增强

输入x:一个单词序列(句子或文本片段)

参数:

P_t:阈值概率,决定是否对单词进行替换的门槛。

N_a:每个样本生成的增强样本数量。

K:候选集大小,即为每个单词生成的可能替换词的数量。

输出D:增强后的数据集

算法过程:

1.初始化计数器n为0,并创建空的增强数据集列表D’。

2.当n小于需要生成的样本数量N_a时,执行循环

3.将输入序列x赋值给X_m,以开始对其进行增强。

4.遍历序列x中的每个单词x[i]:

如果x[i]是一个单片词(即不可分割的词),就执行两步操作,第一步是将X_m[i]替换为特殊标记[MASK],第二步是使用BERT模型找出当X_m[i]是[MASK]时,K个最有可能的单词,然后把这个集合赋值给集合C

反之如果x[i]不是一个单片词,使用GloVe模型找出与x[i]最相似的K个单词,并赋值给集合C

5.从[0,1]中均匀采样一个概率值p,如果p≤P_t,就在集合C中随机选择一个单词替换X_m[i]

6.替换操作完成后,继续遍历X_m中的下一个单词

7.当所有单词都遍历完,将增强后的序列X_m添加到D中

8.增加计数器n 的值

9.如果n<N_a,则重复上述操作

10.当所有增强样本都生成后就返回增强后的数据集D

总的来说,这个算法通过在原始文本序列中替换一些单词,来生成新的文本样本。这些替换基于BERT或GloVe模型的输出,取决于待替换的词是否是单片词。通过这种方式,它创造出与原始样本在语义上保持一致,但在表述上有所变化的新样本。这有助于学生模型在训练过程中获得更广泛的语言表达能力,以及更好的泛化性能。

结果

TinyBERT在GLUE基准测试中表现出色,与教师模型BERT相比,TinyBERT在模型大小和推理速度上均有显著改进,同时保持了相近的性能。例如,TinyBERT在模型大小上缩小了7.5倍,在推理速度上提高了9.4倍,而在性能上能达到教师模型的96.8%。

总结

TinyBERT的成功证明了通过精心设计的知识蒸馏方法和两阶段学习框架,可以有效地将大型模型的能力转移到更小、更高效的模型上,从而在保持性能的同时显著减少计算资源的需求。这为在资源受限的环境下部署高性能NLP模型提供了可能。

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

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

相关文章

深度学习 Lecture 7 迁移学习、精确率、召回率和F1评分

一、迁移学习&#xff08;Transfer learning) 用来自不同任务的数据来帮助我解决当前任务。 场景&#xff1a;比如现在我想要识别从0到9度手写数字&#xff0c;但是我没有那么多手写数字的带标签数据。我可以找到一个很大的数据集&#xff0c;比如有一百万张图片的猫、狗、汽…

论文笔记:(INTHE)WILDCHAT:570K CHATGPT INTERACTION LOGS IN THE WILD

iclr 2024 spotlight reviewer 评分 5668 1 intro 由大型语言模型驱动的对话代理&#xff08;ChatGPT&#xff0c;Claude 2&#xff0c;Bard&#xff0c;Bing Chat&#xff09; 他们的开发流程通常包括三个主要阶段 预训练语言模型在被称为“指令调优”数据集上进行微调&…

网卡接收数据的关键过程

网卡接收数据的关键过程 网卡中断处理网络软中断处理协议栈处理传输层处理 Linux内核tracers的实现原理与应用 前年ftrace for io /去年ftrace for mm/今年ftrace for network.今年ftrace也被深度定制加强。 在这篇文章中,我们将深入探讨网卡接收数据的完整过程,了解数据是如何…

【2024年5月备考新增】《软考真题分章练习(含答案解析) - 24 信息系统安全(1)》

1、保护等级分为五级。“信息系统受到破坏后,会对社会秩序和公共利益造成严重损害,或者对国家安全造成损害”是()的特征。 A.第二级 B.第三级 C.第四级 D.第五级 【答案】B 【解析】信息安全保护等级分为五级: 第一级,信息系统受到破坏后,会对公民、法人和其他组织的合法…

JDK5.0新特性

目录 1、JDK5特性 1.1、静态导入 1.2 增强for循环 1.3 可变参数 1.4 自动装箱/拆箱 1.4.1 基本数据类型包装类 1.5 枚举类 1.6 泛型 1.6.1 泛型方法 1.6.2 泛型类 1.6.3 泛型接口 1.6.4 泛型通配符 1、JDK5特性 JDK5中新增了很多新的java特性&#xff0c;利用这些新…

v-for中涉及的key

一、为什么要用key&#xff1f; key可以标识列表中每个元素的唯一性&#xff0c;方便Vue高效地更新虚拟DOM&#xff1b;key主要用于dom diff算法&#xff0c;diff算法是同级比较&#xff0c;比较当前标签上的key和标签名&#xff0c;如果都一样&#xff0c;就只移动元素&#…

【刷题笔记】第七天

文章目录 [924. 尽量减少恶意软件的传播](https://leetcode.cn/problems/minimize-malware-spread/)方法一&#xff0c;并查集方法二&#xff0c;dfs [GCD and LCM ](https://vjudge.net.cn/problem/HDU-4497#authorKING_LRL) 924. 尽量减少恶意软件的传播 如果移除一个感染节…

上海计算机学会 2023年10月月赛 乙组T4 树的覆盖(树、最小点覆盖、树形dp)

第四题&#xff1a;T4树的覆盖 标签&#xff1a;树、最小点覆盖、树形 d p dp dp题意&#xff1a;求树的最小点覆盖集的大小和对应的数量&#xff0c;数量对 1 , 000 , 000 , 007 1,000,000,007 1,000,000,007取余数。所谓覆盖集&#xff0c;是该树的点构成的集合&#xff0c;…

[ LeetCode ] 题刷刷(Python)-第20题:有效的括号

题目描述 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 1、左括号必须用相同类型的右括号闭合。 2、左括号必须以正确的顺序闭合。 3、每个右括号都有一个对…

docker 环境变量设置实现方式

1、前言 docker在当前运用的越来广泛&#xff0c;很多应用或者很多中间软件都有很多docker镜像资源&#xff0c;运行docker run 启动镜像资源即可应用。但是很多应用或者中间件有很多配置参数。这些参数在运用过程怎么设置给docker 容器呢&#xff1f;下面介绍几种方式 2 、do…

输入两个链表,找出它们的第一个公共结点。当不存在公共节点时,返回空节点。

class Solution { public: ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) { ListNode *p1 headA; ListNode *p2 headB; while (p1 ! p2) { if(p1 ! NULL)//p1没有走到结尾 p1 p1->next;//p1指向下一…

无线网络安全之WiFi Pineapple初探

背景 WiFi Pineapple&#xff08;大菠萝&#xff09;是由国外无线安全审计公司Hak5开发并售卖的一款无线安全测试神器。集合了一些功能强大的模块&#xff0c;基本可以还原钓鱼攻击的全过程。在学习无线安全时也是一个不错的工具&#xff0c;本文主要讲WiFi Pineapple基础配置…

MongoDB聚合运算符:$regexFind

MongoDB聚合运算符&#xff1a;$regexFind $regexFind在聚合表达式中提供正则表达式&#xff08;regex&#xff09;模式匹配功能。如果找到匹配&#xff0c;则返回包含第一个匹配信息的文档。如果未找到匹配&#xff0c;则返回空值。 在MongoDB 4.2 之前&#xff0c;聚合管道…

Python中CSRF攻击是什么

CSRF&#xff08;跨站请求伪造&#xff0c;Cross-Site Request Forgery&#xff09;攻击是一种网络攻击方法&#xff0c;它迫使终端用户在当前已认证的Web应用中执行非授权的命令。攻击者利用用户的信任&#xff0c;诱导或通过其他方式使用户的浏览器产生对受信任站点的恶意请求…

【Python】如何在Ubuntu上设置Python脚本开机自启

你不知道我为什么狠下心 盘旋在你看不见的高空里 多的是 你不知道的事 蝴蝶眨几次眼睛 才学会飞行 夜空洒满了星星 但几颗会落地 我飞行 但你坠落之际 很靠近 还听见呼吸 对不起 我却没捉紧你 &#x1f3b5; 王力宏《你不知道的事》 前置要求 确保你的Ub…

和鲸科技将参与第五届空间数据智能学术会议并于应急减灾与可持续发展专题论坛做报告分享

ACM SIGSPATIAL中国分会致力于推动空间数据的研究范式及空间智能理论与技术在时空大数据、智慧城市、交通科学、社会治理等领域的创新与应用。ACM SIGSPATIAL中国分会创办了空间数据智能学术会议&#xff08;SpatialDI&#xff09;&#xff0c;分会将于2024年4月25日-27日在南京…

javaWeb项目-快捷酒店管理系统功能介绍

项目关键技术 开发工具&#xff1a;IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架&#xff1a;ssm、Springboot 前端&#xff1a;Vue、ElementUI 关键技术&#xff1a;springboot、SSM、vue、MYSQL、MAVEN 数据库工具&#xff1a;Navicat、SQLyog 1、Spring Boot框架 …

PSCAD|应用于输电线路故障测距的行波波速仿真分析

1 主要内容 该程序参考文献《应用于输电线路故障测距的行波波速仿真分析》&#xff0c;利用线路内部故障产生的初始行波浪涌达线路两端测量点的绝对时间之差值计算故障点到两端测量点之间的距离&#xff0c;并利用小波变换得到初始行波波头准确到达时刻&#xff0c;从而精准定…

富文本在线编辑器 - tinymce

tinymce 项目是一个比较好的富文本编辑器. 这里有个小demo, 下载下来尝试一下, 需要配置个本地服务器才能够访问, 我这里使用的nginx, 下面是我的整个操作过程: git clone gitgitee.com:chick1993/layui-tinymce.git cd layui-tinymcewget http://nginx.org/download/nginx-1.…

JavaEE:JVM

基本介绍 JVM&#xff1a;Java虚拟机&#xff0c;用于解释执行Java字节码 jdk&#xff1a;Java开发工具包 jre&#xff1a;Java运行时环境 C语言将写入的程序直接编译成二进制的机器语言&#xff0c;而java不想重新编译&#xff0c;希望能直接执行。Java先通过javac把.java…