TinyBERT论文及代码详细解读-程序员宅基地

技术标签: NLP  论文解读  Attention  tinybert  自然语言处理  bert  

简介

TinyBERT是知识蒸馏的一种模型,于2020年由华为和华中科技大学来拟合提出。

常见的模型压缩技术主要分为:

  1. 量化
  2. 权重减枝
  3. 知识蒸馏

为了加快推理速度并减小模型大小,同时又保持精度,Tinybert首先提出了一种新颖的transformer蒸馏方法,引入了一个新的两阶段蒸馏框架,如下图:
在这里插入图片描述
Transformer蒸馏方法用来提取BERTteacher中嵌入的知识。具体来说,设计了三种类型的损失函数,以适应BERT层的不同表示形式:

  • 1)嵌入层的输出;
  • 2)源自Transformer层的隐藏状态和注意力矩阵;
  • 3)预测层输出的logits。

性能表现:在GLUE基准测试中, 具有4层TinyBERT效果,达到BERTBASE的性能96.8%以上,而推理速度则快7.5倍至9.4倍。

Transformer 蒸馏

问题表述:

假设student模型具有M个Transformer层,teacher模型具有N个Transformer层。

我们首先从teacher模型的N个层中选择M个,以进行Transformer层蒸馏。然后将函数n = g(m)定义为从student层到teacher层的索引之间的映射函数,这意味着第m层student模型从第g(m)层teacher模型中学习信息。

准确地说,我们将0设为嵌入层的索引,将M +1设为预测层的索引,并将相应的层映射定义为0 = g(0)和N +1 = g(M + 1 )。在实验部分研究了选择不同映射函数对性能的影响。正式地,student可以通过最小化以下目标从teacher那里获得知识:
在这里插入图片描述
其中 L l a y e r L_layer Llayer表示给定模型层(例如,transformer层或嵌入层)的损失函数,fm(x)表示从第m层导出的行为函数,而λm是表示第m层蒸馏的重要性的超参数层。

Transformer层蒸馏主要包括注意力attn的蒸馏和隐藏层hidn的蒸馏
在这里插入图片描述

基于注意力的蒸馏

BERT学习的注意力权重可以捕获丰富的语言知识(Clark等。2019)。这种语言知识包括语法和相关信息,这对于自然语言理解至关重要。提出了基于注意力的蒸馏,以鼓励语言知识可以从teacher(BERT)转移到student。具体来说,student学习在teacher网络中拟合多头注意力矩阵,目标定义为:
在这里插入图片描述
其中h是注意力头的数量,Ai∈Rl×l表示对应于第i个teacher或student的头注意力矩阵,MSE()表示均方误差损失函数。

在这项工作中,非归一化的注意力矩阵Ai被用作拟合目标,而不是其softmax输出softmax(Ai),因为我们的实验表明,前一种设置具有更快的收敛速度和更好的性能。

基于隐藏状态的蒸馏

对隐层的输出进行蒸馏:
在这里插入图片描述
其中矩阵HS ∈ Rl×d和HT ∈ Rl×d分别指代student和teacher网络的隐藏状态,它们由transformer的前馈神经网络(FNN)计算得出。标量值d和d’表示teacher和student模型的hidden size。并且d’通常小于d,以获得较小的student网络。矩阵Wh∈Rd’×d是可学习的线性变换,它将student网络的隐藏状态转换为与teacher网络的状态相同的空间。

还有对嵌入层进行蒸馏,类似于隐含状态:
在这里插入图片描述

其中矩阵ES和HT分别指的是student和teacher网络的嵌入。在本文中,它们具有与隐藏状态矩阵相同的形状。矩阵We是线性变换,起着与Wh相似的作用

预测层蒸馏

和之前的知识蒸馏思路一样,针对预测输出层进行蒸馏,拟合教师模型的输出,惩罚了student网络的logits与teacher logits信息之间的软交叉熵损失:

在这里插入图片描述
其中zS和zT分别是student和teacher预测的logits向量,CE表示交叉熵损失,t表示温度值。在我们的实验中,我们发现t = 1表现良好

使用以上蒸馏目标(即方程式7、8、9和10),我们可以统一teacher和student网络之间相应层的蒸馏损失:
在这里插入图片描述

TinyBERT学习

在bert的应用中,通常分为预训练和微调。在这里,也分成两个阶段,通用蒸馏和特定任务蒸馏。

General Distillation

针对通用bert预训练模型进行蒸馏,得到通用的tinybert,通用形式蒸馏帮助TinyBERT学习预训练BERT中嵌入的丰富知识,这在改进TinyBERT的泛化能力中起着重要作用。

在原始的BERT,作为teacher model,并使用大型文本语料库作为训练数据。通过对来自一般领域的文本执行Transformer蒸馏,我们获得了可以针对下游任务进行微调的常规TinyBERT。

然而,由于隐藏/嵌入大小和层数的显着减少,一般TinyBERT的性能通常比BERT差。

TinyBERT在预训练阶段主要学习BERT的中间结构。从我们的初步实验中,我们还发现,在已经进行了transformer层蒸馏(Attn和Hidn蒸馏)和嵌入层蒸馏的情况下,在预训练阶段进行预测层蒸馏不会对下游任务带来额外的改进。

Data Augmentation

主要基于BERT微调模型以及词向量(文中选择的Glove词向量)进行词级别的替换,实现数据增强。

在官方代码中进行了17( N α N_\alpha Nα)倍的增强,以GLUE/QQP数据集为例效果如下:

id	     qid1  	qid2	question1	question2	is_duplicate
402555	536040	536041	how do i control my 40-something emotions ?	How do you control your horniness?	1
402555	536040	536041	but do i control my horny brain ?	How do you control your horniness?	1
402555	536040	536041	way do i control my horny urges ?	How do you control your horniness?	1
402555	536040	536041	when do i control my horny emotions ?	How do you control your horniness?	1
402555	536040	536041	how do i suppress my rubbery self ?	How do you control your horniness?	1
402555	536040	536041	how do i control my horny emotions ?	How do you control your horniness?	1
402555	536040	536041	how do i contain my ornery emotions ?	How do you control your horniness?	1
402555	536040	536041	how do i controls my tipsy self ?	How do you control your horniness?	1
402555	536040	536041	and do i control my horny emotions ?	How do you control your horniness?	1
402555	536040	536041	and do i control my horny emotions ?	How do you control your horniness?	1
402555	536040	536041	and do i control my horny emotions ?	so do you control your horniness ?	1
402555	536040	536041	and do i control my horny emotions ?	what do you control your horniness ?	1
402555	536040	536041	and do i control my horny emotions ?	why do you control your horniness ?	1
402555	536040	536041	and do i control my horny emotions ?	how do you hide your horniness ?	1
402555	536040	536041	and do i control my horny emotions ?	how do you tame your horniness ?	1
402555	536040	536041	and do i control my horny emotions ?	""" do you control your horniness ?"	1
402555	536040	536041	and do i control my horny emotions ?	how do you control your horniness ?	1

数据增强算法:
在这里插入图片描述

在以上算法中,核心主要分为两步:

  1. 对于single_piece word
    如果x[i]是single_piece word,标记为{MASK],通过bert预训练模型预测该词,取概率最大的前k个词,放进C
  2. 对于一般的word
    通过Glove计算词向量相似性,找到距离最近的k个词,放进C
  3. 对于C,随机一个概率p(0,1)。如果大于阈值pt,则从C中随机取一个词替换x[i],进而得到增强后的句子。

Task-specific Distillation

在特定任务的蒸馏中,我们在增强的特定任务的数据集上重新执行提议的Transformer蒸馏。

具体来说,使用微调的BERT作为teacher,并提出了一种数据扩充方法来扩展特定任务的训练集。通过训练更多与任务相关的样本,可以进一步提高student模型的泛化能力。

这里主要分为两个步骤,分别是transformer层蒸馏和输出预测层蒸馏。

任务1:中间层蒸馏

python task_distill.py --teacher_model /data/models/pytorch_models/bert_based_uncased_pytorch/ \
                       --student_model /data/models/pytorch_models/TinyBERT_4L_en  \
                       --data_dir /data/datasets/glue_data/QQP \
                       --task_name 'QQP' \
                       --output_dir TMP_TINYBERT_DIR  \
                       --max_seq_length 128 \
                       --train_batch_size 64 \
                       --num_train_epochs 2 \
                       --eval_step 500 \
                       --aug_train \
                       --do_lower_case

任务2:预测层蒸馏

python task_distill.py --pred_distill  \
                       --teacher_model /data/models/pytorch_models/bert_based_uncased_pytorch/ \
                       --student_model TMP_TINYBERT_DIR/QQP/03300837/  \
                       --data_dir /data/datasets/glue_data/QQP \
                       --task_name 'QQP' \
                       --output_dir TINYBERT_DIR \
                       --do_lower_case \
                       --aug_train  \  # 采用增强后的训练集
                       --learning_rate 3e-5  \
                       --num_train_epochs  3  \
                       --eval_step 1000 \  # 每隔1000进行验证集
                       --max_seq_length 128 \
                       --train_batch_size 32 
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42327752/article/details/123816230

智能推荐

GBase 8s V8.8 SQL 指南:教程-9.5.1_gbase prepare from-程序员宅基地

文章浏览阅读185次。9.5.1 准备语句在形式上,动态 SQL 语句像任何其他写入程序的 SQL 语句一样,除了它不可包含任何主变量的名称之外。准备好的 SQL 语句有两个限制。首先,如果它是 SELECT 语句,则它不可包括INTO variable 子句。INTO variable 子句指定将列数据放入其内的主变量,而不允许在准备好的对象的文本中使用主变量。其次,不论主变量的名称通常出现在表达式中的任何位置,都将问号(?)写作 PREPARE 语句中的占位符。仅 PREPARE 语句可指定问号(?)占位符。._gbase prepare from

PyCharm 社区版 安装 教程(Windows)_pycharm 社区版本安装-程序员宅基地

文章浏览阅读1w次,点赞4次,收藏26次。注:如果已经安装过python 3.5 及以上版本的解释执行器则跳过此步骤下载 PyCharm 社区版 软件PyCharm windows 版本 安装包如下:Thank you for downloading PyCharm!https://www.jetbrains.com/pycharm/download/download-thanks.html?platform=windows&code=PCC PyCharm Mac OS X (苹果mac 系统) 版本 安装包如下:Than._pycharm 社区版本安装

iOS所有框架总览与介绍_ios所有框架的分类-程序员宅基地

文章浏览阅读4.8k次。原文地址:http://blog.csdn.net/GooHong/article/details/28911301在iOS中框架是一个目录,包含了共享资源库,用于访问该资源库中储存的代码的头文件,以及图像、声音文件等其他资源。共享资源库定义应用程序可以调用的函数和方法。 iOS为应用程序开发提供了许多可使用的框架,并构成IOS操作系统的层次架构,分为四层,从上到下依次为:Coc_ios所有框架的分类

Linux系统结构-程序员宅基地

Linux系统结构包括内核、GNU工具、桌面环境和应用软件,这些部分相互配合,丰富了Linux系统的用途,值得我们深入学习。

喜讯:Ubuntu来到中国地级城市_中国地图各省份地级市shp-程序员宅基地

文章浏览阅读2.6k次。 根据Softpedia的一则报道,10月26日,预装Ubuntu操作系统的戴尔笔记本与台式机在江苏徐州、连云港、宿迁、盐城等地市的220多个零售店一起“开卖“,见图:(请见“Canonical Sells Ubuntu Dells in China”一文_中国地图各省份地级市shp

【深度学习注意力机制系列】—— ECANet注意力机制(附pytorch实现)_eca注意力机制-程序员宅基地

文章浏览阅读9.5k次,点赞9次,收藏102次。ECANet是一种高效的神经网络架构,通过引入通道注意力机制,能够有效地捕捉图像中的通道关系,提升特征表示的能力。它的结构包括通道注意力模块和嵌入式通道注意力模块,具有高效性、提升特征表示和减少过拟合等优势。通过这种设计,ECANet在图像处理任务中取得了优越的性能。_eca注意力机制

随便推点

CSS--解决position: absolute无效的问题_position: absolute; 无效-程序员宅基地

文章浏览阅读9.4k次,点赞25次,收藏3次。本文介绍CSS进行定位时使用 position:absolute (绝对定位)却不起作用的问题。 需求:已有一个外层的元素(class为"container"),这个外层元素已经设置了margin,现在有一个元素(class为"test"),放在这个外层元素里边,想要基于这个外层元素的margin进行绝对定位。_position: absolute; 无效

值得你关注的Android6.0上的重要变化(二)_谁调用setkeyguarddisabled-程序员宅基地

文章浏览阅读817次。转自:http://blog.csdn.net/w7849516230/article/details/50358907十、Android KeyStore变化 此版本上Android Keystore provider不再支持DSA,仍旧支持ECDSA。 锁屏密码在(如用户或设备管理器)禁用或重置的情况下,不需要加密部分将不再被删除,而加密部分则会被删除。十一、Wi-Fi_谁调用setkeyguarddisabled

matlab 贝叶斯信息标准_Matlab关于贝叶斯的一点体会-程序员宅基地

文章浏览阅读304次。最近,开始学习和概率模型相关的智能算法。这类算法能解决的问题很多,包括模式识别(分类问题)、预测、决策等等。是非常具有实际应用价值的一类算法。当然,这类算法体系也非常的庞大,尤其是其中涉及高深的数学原理的方法众多。但是,显然,我们要讨论的问题算法并不属于此类(很大原因是因为我概率挂了)。我们今天讨论的重点将放在:如果一个概率我无法求得,那么我们有什么其他办法获得。首先,我们来考虑著名的“蒙特卡洛法..._matlab贝叶斯决策实验心得

JavaWeb学习总结(一)——JavaWeb开发入门-程序员宅基地

文章浏览阅读153次。一、基本概念1.1、WEB开发的相关知识  WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源。  Internet上供外界访问的Web资源分为:静态web资源(如html 页面):指web页面中供人们浏览的数据始终是不变。动态web资源:指web页面中供人们浏览的数据是由程序产生的,不同时间点访问web页面看到的内容各不相同。  静态web资源开发技术:Ht...

arcgis 无法编辑元素的解决办法(无法删除元素或者缺失值替换)_arcgis无法删除要素-程序员宅基地

文章浏览阅读363次。arcgis 无法编辑元素的解决办法(无法删除元素或者缺失值替换)_arcgis无法删除要素

redis 实现消息队列的三种方式_redis 创建队列-程序员宅基地

文章浏览阅读805次。"发布/订阅"模式同样可以实现进程间的消息传递,其原理如下:"发布/订阅"模式包含两种角色,分别是发布者和订阅者。订阅者可以订阅一个或者多个频道(channel),而发布者可以向指定的频道(channel)发送消息,所有订阅此频道的订阅者都会收到此消息。和数据结构中的普通链表一样,我们可以在其头部(left)和尾部(right)添加新的元素。在插入时,如果该键并不存在,Redis将为该键创建一个新的链表。发现消息已经被消费完了,消费方还不停的消费为NULL,这样造成不必要的浪费。关于List的命令如下。_redis 创建队列

推荐文章

热门文章

相关标签