DistilBert解读
背景
NLP预训练模型随着近几年的发展,参数量越来越大,受限于算力,在实际落地上线带来了困难,针对最近最为流行的BERT预训练模型,提出了DistilBert,在保留97%的性能的前提下,模型大小下降40%,inference运算速度快了60%,具体论文参考《DistilBERT, a distilled version of BERT: smaller, faster, cheaper and lighter》
Knowledge Distilling(知识蒸馏)
首先我们介绍下知识蒸馏这一概念。即用一个小的模型(student)去学习一个大模型或一个ensemble模型(teacher)的输出。最早提出于Hinton大佬的论文《Distilling the Knowledge in a Neural Network》
在监督学习领域,对于一个分类问题,定义soft label为模型的输出(即不同label的概率), hard label为最终正确的label(也就是ground truth),通常是通过最大化正确label的概率来进行学习的,通常采用 cross-entropy作为损失函数,即让正确label的概率尽可能预测为1,其余label的概率趋近于0,但是这些不正确趋近于0的label也是有大有小的(比把图片数字2识别成3的概率还是要比识别成9大,尽管他们都趋近于0),这被称为"暗知识(Dark Knowledge)", 这也反应了模型的泛化能力。但因为过于趋紧0不利于student模型学习,为了让student也容易学习tearcher的输出,引入了带温度T的softmax概率为
当温度T为1的时候,即为标准的softmax。训练的时候T>1, 方便学到类间信息;预测的时候T=1,恢复到标准的softmax进行计算。T越大,输出的概率约平滑。
具体模型的训练方式如图
Loss Fn为cross entropy,最终的损失函数为图中两个loss的线性组合。
DistilBERT: a distilled version of BERT
Student architecture
和BERT类似,只是layer的数量减半
Student initialization
因为Student模型和Teacher模型每层的layer一样,因此每两层保留一层,利用相关的参数
Distillation
采用了RoBERTa的优化策略,动态mask,增大batch size,取消NSP任务的损失函数,
Training Loss
The final training objective is a linear combination of the distillation loss LceL_{ce}Lce with the supervised training loss, in our case the masked language modeling loss LmlmL_{mlm}Lmlm We found it beneficial to add a cosine embedding loss (LcosL_{cos}Lcos) which will tend to align the directions of the student and teacher hidden states vectors.
最终的loss由三部分构成
- 蒸馏损失,即Lce=∑iti∗log(si)L_{ce}=\sum_it_i*log(s_i)Lce=∑iti∗log(si), 其中sis_isi是student输出的概率,tit_iti是teacher输出的概率,當BERT预测的tit_iti越高,而DistilBERT预测(sis_isi)越低,得到的Loss就会越高
- Mask language model loss,参考BERT,这部分也就是为hard loss
- Cosine Embedding Loss,利于让student学习和teacher一样的hidden state vector
总结
DistilBERT利用知识蒸馏的技术,达到不过分降低性能的情况下,减少模型大小和inference速度
DistilBert解读相关推荐
- 深度学习:蒸馏Distill
Distilling the knowledge in a neural network Hinton 在论文中提出方法很简单,就是让学生模型的预测分布,来拟合老师模型(可以是集成模型)的预测分布,其 ...
- Bert RoBerta DistilBert ALBert 解读
目录 1 Transformer结构 1.1 self attention的理解 1.2 Multi head理解 1.3 transformer基本单元构成 2 Bert 2.1 bert的输入三部 ...
- Simple Transformer:用BERT、RoBERTa、XLNet、XLM和DistilBERT进行多类文本分类
作者 | Thilina Rajapakse 译者 | Raku 编辑 | 夕颜 出品 | AI科技大本营(ID: rgznai100) [导读]本文将介绍一个简单易操作的Transformers库- ...
- 48小时单GPU训练DistilBERT!这个检索模型轻松达到SOTA
©PaperWeekly 原创 · 作者 | Maple小七 单位 | 北京邮电大学 研究方向 | 自然语言处理 论文标题: Efficiently Teaching an Effective De ...
- Python Re 模块超全解读!详细
内行必看!Python Re 模块超全解读! 2019.08.08 18:59:45字数 953阅读 121 re模块下的函数 compile(pattern):创建模式对象 > import ...
- Bert系列(二)——源码解读之模型主体
本篇文章主要是解读模型主体代码modeling.py.在阅读这篇文章之前希望读者们对bert的相关理论有一定的了解,尤其是transformer的结构原理,网上的资料很多,本文内容对原理部分就不做过多 ...
- Bert系列(三)——源码解读之Pre-train
https://www.jianshu.com/p/22e462f01d8c pre-train是迁移学习的基础,虽然Google已经发布了各种预训练好的模型,而且因为资源消耗巨大,自己再预训练也不现 ...
- NLP突破性成果 BERT 模型详细解读 bert参数微调
https://zhuanlan.zhihu.com/p/46997268 NLP突破性成果 BERT 模型详细解读 章鱼小丸子 不懂算法的产品经理不是好的程序员 关注她 82 人赞了该文章 Goo ...
- 解读模拟摇杆原理及实验
解读模拟摇杆原理及实验 Interpreting Analog Sticks 当游戏支持控制器时,玩家可能会一直使用模拟摇杆.在整个体验过程中,钉住输入处理可能会对质量产生重大影响.让来看一些核心概念 ...
- 自监督学习(Self-Supervised Learning)多篇论文解读(下)
自监督学习(Self-Supervised Learning)多篇论文解读(下) 之前的研究思路主要是设计各种各样的pretext任务,比如patch相对位置预测.旋转预测.灰度图片上色.视频帧排序等 ...
最新文章
- CGAN生成cifar10, cifar100, mnist, fashion_mnist,STL10,Anime图片(pytorch)
- 每日程序C语言32-取一个整数从右端开始的4-7位
- JavaScript pop()函数弹出数组最后数据
- 让 .Net 更方便的导入导出Excel
- SQL日期与时间函数
- 一点创业想法:读书类垂直博客
- 串口调试助手使用说明
- 计算机用户密码在哪里设置,电脑开机密码在哪里设置?怎么设置?
- vue3.0 + xlsx 实现纯前端生成excel表格
- 国产三维CAD华天软件STNOVATION 几何造型内核CRUX IV 解析
- Qt解决资源文件中添加图片,对应控件不显示图片的问题
- C++ vector详细用法
- 商务蓝牙降噪耳机什么牌子好?商务蓝牙降噪耳机推荐
- Java8 Zip 压缩与解压缩
- 计算机显卡显示图片原理,认识显卡!浅析显卡及显卡工作原理
- Android root检测方法总结
- 能够在乱世中_东夏国,为何在乱世中还可以立国?是有什么原因呢?
- star ccm 报java错误_在 Linux VM 上运行 STAR-CCM+ 与 HPC Pack - Azure Virtual Machines | Microsoft Docs...
- 朝花夕拾---dubbo源码分析
- 记录一次服务器CPU负载高,利用率正常的处理方法