(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的性能。

数据增强

输入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模型提供了可能。

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

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

相关文章

【刷题笔记】第一天

两道贪心题 文章目录 [3106. 满足距离约束且字典序最小的字符串](https://leetcode.cn/problems/lexicographically-smallest-string-after-operations-with-constraint/)[3107. 使数组中位数等于 K 的最少操作数](https://leetcode.cn/problems/minimum-operations-to-make-me…

ubuntu安装python3.10

1. 官网下载源程序 2. 解压进入文件夹&#xff1a; ./configure --prefix/usr/local/python3/ 3. 编译安装&#xff1a; make && make install 4. 添加环境变量&#xff1a; vim ~/.bashrc PATH/usr/local/python3/bin:$PATH #保存后&#xff0c;刷新配置文件 sour…

HCIP的学习(8)

OSPF数据报文 OSPF头部信息&#xff08;公共固定&#xff09; 版本&#xff1a;OSPF版本&#xff0c;在IPv4网络中版本字段恒定为数值2&#xff08;v1属于实验室版本&#xff0c;v3属于IPv6&#xff09;类型&#xff1a;代表具体是哪一种报文&#xff0c;按照1~5排序&#xff…

C++从入门到精通——类的6个默认成员函数之赋值运算符重载

赋值运算符重载 前言一、运算符重载定义实例注意要点 二、赋值运算符重载赋值运算符重载格式赋值运算符重载要点重载要点传值返回和传址返回要点 三、前置和后置重载 前言 类的6个默认成员函数&#xff1a;如果一个类中什么成员都没有&#xff0c;简称为空类。 空类中真的什么…

xcode c++项目设置运行时参数

在 Xcode 项目中&#xff0c;你可以通过配置 scheme 来指定在运行时传递的参数。以下是在 Xcode 中设置运行时参数的步骤&#xff1a; 打开 Xcode&#xff0c;并打开你的项目。在 Xcode 菜单栏中&#xff0c;选择 "Product" -> "Scheme" -> "E…

利驰软件亮相第二届全国先进技术成果转化大会

4月8日&#xff0c;第二届全国先进技术成果转化大会在苏开幕。省长许昆林出席大会开幕式并致辞。国家国防科工局局长张克俭&#xff0c;省委常委、苏州市委书记刘小涛分别致辞。 本次转化大会由江苏省国防科学技术工业办公室、苏州市人民政府、先进技术成果长三角转化中心主办…

无人棋牌室软硬件方案

先决思考 软件这一套确实是做一套下来&#xff0c;可以无限复制卖出&#xff0c;这个雀氏是一本万利的买卖。 现在肯定是有成套的方案&#xff0c;值不值得重做&#xff1f;为什么要重做&#xff1f; 你想达到什么效果&#xff1f;还是需要细聊的。 做这个东西难度不高&…

自动发版工具以及本地debug

# 定义变量 $jarFile "xxx.jar" $server "ip" $username "user" $password "password" $remoteHost "${username}${server}" $remoteFolderPath "path" $gitDir "$PSScriptRoot\..\.git" # 设置…

每日OJ题_BFS解决最短路①_力扣1926. 迷宫中离入口最近的出口

目录 力扣1926. 迷宫中离入口最近的出口 解析代码 力扣1926. 迷宫中离入口最近的出口 1926. 迷宫中离入口最近的出口 难度 中等 给你一个 m x n 的迷宫矩阵 maze &#xff08;下标从 0 开始&#xff09;&#xff0c;矩阵中有空格子&#xff08;用 . 表示&#xff09;和墙&…

汽车抗疲劳驾驶测试铸铁试验底座技术要求有哪些

铸铁平台试验台底座的主要技术参数要求 1、 试验台底座设计制造符合JB/T794-1999《铸铁平板》标准。 2、 试验铁底板及所有附件的计量单位全部采用 单位&#xff08;SI&#xff09;标准。 3、铸铁平台平板材质&#xff1a;用细密的灰口铸铁HT250或HT200&#xff0c;强度符…

默认图表太丑!?快来看看这个好看的绘图主题吧~~

有很多小伙伴经常私信给小编&#xff0c;问自己绘制的图表为啥没小编绘制的精美&#xff1f; 听到这句话&#xff0c;小编老脸一红&#xff0c;还是比较惭愧的&#xff0c;因为并不是像小伙伴说的那样对每一个图表元素都进行定制化涉及操作&#xff0c;是借助优秀的“第三方工具…

Python 正则表达式模块使用

目录 1、匹配单个字符 2、匹配多个字符 3、匹配开头结尾 4、匹配分组 说明&#xff1a;在Python中需要通过正则表达式对字符串进行匹配的时候&#xff0c;可以使用re模块 表达式&#xff1a;re.match(正则表达式&#xff0c; 要匹配的字符串) 有返回值说明匹配成功&#x…

vue3项目 使用 element-plus 中 el-collapse 折叠面板

最近接触拉了一个项目&#xff0c;使用到 element-plus 中 el-collapse 折叠面板&#xff0c;发现在使用中利用高官网多多少少的会出现问题。 &#xff08;1.直接默认一个展开值&#xff0c;发现时显时不显 2 . 数据渲染问题&#xff0c;接口请求了&#xff0c;页面数据不更新 …

通过Omnet++官网tictoc教程学习在Omnet++中构建和运行仿真 Part3

TicToc Part3 增强2节点 TicToc增加图标增加 日志添加状态变量增加参数使用NED 继承模拟处理延时随机数字和参数超时、取消计时器重传同样的消息 官方文档 在官方文档中&#xff0c;你可以看见所有的代码 增强2节点 TicToc 增加图标 为了使模型在GUI中看起来更好看&#xff…

计算机网络—TCP协议详解:协议构成、深度解析(1)

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;マリンブルーの庭園—ずっと真夜中でいいのに。 0:34━━━━━━️&#x1f49f;──────── 3:34 &#x1f504; ◀️…

vs2008使用 openmp

目录 1 在项目中找到property pages>>c/c>>language>>openmp支持 2 在环境变量中增加“OMP_NUM_THREADS”变量&#xff0c;数值自己根据你的CPU的性能来设置&#xff0c;一般2、4、8等 3 在项目中输入如下代码&#xff0c;并编译运行 4 结果与不使用omp的…

浅谈Java IO流

Java中的IO流&#xff08;Input/Output streams&#xff09;是Java程序用来处理数据输入和输出的核心工具集。IO流抽象了数据流动的概念&#xff0c;允许Java程序与外部世界进行数据交换&#xff0c;无论是从文件、网络、键盘输入还是向屏幕、文件或网络发送数据。Java IO流按照…

RAG 如何消除大模型幻觉

什么是大模型幻觉 假设我们有一个基于大型生成模型&#xff08;如GPT-3&#xff09;的问答系统&#xff0c;该系统用于回答药企内部知识库中的问题。我们向其提出一个问题&#xff1a;“阿司匹林的主要药理作用是什么&#xff1f;” 正确的答案应该是&#xff1a;“阿司匹林主…

Qt 的内存管理机制

目录 Qt 的内存管理机制 Qt 的对象树 利用代码查看自动释放 Qt 的内存管理机制 Qt 的对象树 Qt 中所有的控件都是被一颗多叉树管理起来的&#xff0c;这样就是为了方便释放资源的时候方便释放&#xff0c;而我们在编写代码的时候&#xff0c;创建对应的控件&#xff0c;然…

Samtec科普 | 一文入门连接器电镀的QA

【摘要/前言】 像大多数电子元件一样&#xff0c;无数子元件和工艺的质量直接影响到成品的质量和性能。对于PCB级连接器&#xff0c;这些因素包括针脚材料、塑料类型、模制塑料体的质量、尾部的共面性、表面处理&#xff08;电镀&#xff09;的质量、选择正确的连接器电镀、制…