模型蒸馏,Bert模型蒸馏之distilbert

因为现在用的模型越来越大,所以出现了模型蒸馏,模型蒸馏出现的意义在于,用更少的参数,继承模型里面的效果,现在用的模型蒸馏常用teacher-student模型的方式进行蒸馏,整个理念就是让teacher模型学习到模型的大参数,让student模型继承它。

Distill的意思是蒸馏,我们可以从字面上猜测,我们要从一个很大的模型,蒸馏成比较小的模型,也可以用一种角度想,我们让大的模型当作小的模型的老师,而小模型这个学生,只会尽可能的学老师的每个输出。

Bert是12层transformer encode,Distilled BERT是6层transformer encode,Distilled BERT是没有进行自己的预训练,而是将bert的部分参数直接加载到Distilled BERT结构中作为初始化。

很多先前的工作都研究了使用蒸馏来构建特定于任务的模型,但我们在预训练阶段利用了知识蒸馏,并表明有可能将ERT模型的大小减少40%,同时保留其97%的语言理解能力,并将速度提高60%。为了利用较大模型在预训练期间学习的归纳偏差,我们引入了结合语言建模、蒸馏和余弦距离损失的三重损失。我们的模型更小、更快、更轻,预训练成本更低,我们在概念验证实验和比较设备上研究中展示了它在设备上计算的能力。

大致上Distilled BERT的思想就是这样简单,根据作者的实验数据,DistilBERT的参数大约只有BERT的40%,而速度快了60%,并且保持了一定精度。

注意那个温度T的概念,其实就是除,他会把所有logit都除于T,可以想象T越大,大家都除了他之后,大家的“差别”就越小,这样一来,模型就不止能学到对的那个标签,其他错误的标签也学到,一样的道理,T如果是1,就是之前的普通情况,T越小,对的标签越大(例如一般是99%)别的都1%这样,那模型就学不到错误的标签了,所有蒸馏通过把T变大,让学生模型学到所有信息不仅是对的还有错的吗,上图就是这样,它通过soft的标签,通过T,得到一个蒸馏的损失,在让T=1,得到一个正常的损失和预测,从而完成蒸馏模型loss的联动。

distilbert就差不多是这样的,一个基本的蒸馏 用了6层tranformer,

 it is possible to reduce the size of a BERT model by 40%, while retaining 97% of its language understanding capabilities and being 60% faster. 

  • DistilBERT doesn’t have token_type_ids, you don’t need to indicate which token belongs to which segment. Just separate your segments with the separation token tokenizer.sep_token (or [SEP]).
  • DistilBERT doesn’t have options to select the input positions (position_ids input). This could be added if necessary though, just let us know if you need this option.

模型压缩除了蒸馏,还要量化和剪枝,共三个常见操作:

量化简单来说是把数据的bit变低,例如本来32bit存储,现在改成16这种,类似于图片的降低分辨率

剪枝就是把一些没用的参数去掉,例如设一个阈值,低于0.1的参数都设为0这种(当然有更复杂的,注意力剪枝等等)。

基础思想就上面,遇到了细讲。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
BERT(Bidirectional Encoder Representations from Transformers)是一种基于Transformer架构的预训练语言模型,由Google在2018年提出[^1]。BERT的主要创新之处在于引入了双向上下文信息,通过同时考虑左右两个方向的上下文,使得模型能够更好地理解语言的语境和含义。 BERT模型的训练过程包括两个阶段:预训练和微调。在预训练阶段,BERT模型使用大规模的无标签文本数据进行训练,通过预测遮蔽词(Masked Language Model,MLM)和下一句预测(Next Sentence Prediction,NSP)任务来学习语言的表示。具体来说,BERT模型通过随机遮蔽输入文本中的一些词,并预测这些被遮蔽的词是什么,从而学习词的上下文表示。同时,BERT模型还通过判断两个句子是否是连续的来学习句子级别的表示。 在微调阶段,BERT模型使用有标签的任务特定数据进行微调,例如文本分类、命名实体识别等。通过在特定任务上进行微调,BERT模型可以将预训练得到的通用语言表示适应到具体任务上,从而提升模型在各种自然语言处理任务上的性能。 DistilBERT是一种基于BERT模型的知识蒸馏方法,旨在通过压缩和提炼BERT模型的知识,来获得一个更轻量级、更高效的模型DistilBERT通过在预训练阶段使用与BERT相同的训练目标,但使用更小的模型结构和更短的训练时间来训练模型。然后,通过将BERT模型的知识转移到DistilBERT模型中,可以在保持相对较高性能的同时,减少模型的大小和计算资源的消耗。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值