美文网首页
Distilbert

Distilbert

作者: 三方斜阳 | 来源:发表于2021-06-16 10:11 被阅读0次

因为Bert本身参数量大,所以上线的过程中会碰到需求大空间和速度慢等问题。当前对Bert瘦身有三个思路,分别是Distillation(蒸馏)、Quantization(量化)和Pruning(剪枝)。

Quantization(量化):

通过降低模型参数的精度来达到压缩模型的目的。

  • 该方法也常用于输入法压缩模型。例如,将32-bit Float类型的模型参数,用最接近的8 bit的整形数值表示。又如,通过聚类的方式,将部分数值用该类别固定数值替代。
    在训练过程中进行量化:
  • 量化weights
  • 计算量化网络的loss
  • 计算非量化weights的梯度loss
  • 更新非量化weights
  • 不断反复,得到最后量化后weights的模型

Pruning(剪枝):

通过移除部分模型内容来达到压缩模型目的。

    1. 删除部分weight connections:
      一个好的模型,可以尽可能让期望的结果概率接近1,而不期望的结果接近0。所以我们可能会有很多接近0的权值,我们可以删除这些接近0的权值,从而达到压缩模型目的。
    1. 删除部分neurons:
      可以通过评估某些神经元的重要性,删除一些不重要的神经元,从而达到压缩模型目的。
    1. 删除部分weight matrices:
      有的工作会删除整个Attentional heads,并且尽可能保证最小损失。

Distillation(蒸馏):

  • 蒸馏方法也叫teacher-student learning, 是一种压缩大模型的方法,核心思想就是训练小模型。它首先训练一个大的,复杂的,慢的完整模型(Teacher),然后再训练一个小的,简单的,快的模型(Student),并且通过最小化Kullback-Leibler Divergence(KL)值让学生模型(分布)尽可能接近老师模型(分布)。
  • 相对熵有一个性质:两个分布差异越大,KL散度越大。实际应用需要两个分布尽可能的相等,于是就需要KL散度尽可能的小。
  • 让KL尽可能小,就可以让学生模型尽可能接近教师模型。
  • 首先训练了一个大的,复杂的,慢的完整教师模型,然后我们用该模型结果指导训练学生模型。上图代码,14行对学生模型进行训练,然后将相同输入,输入教师模型和学生模型,得到结果,然后通过KL计算之间误差,我们目标是通过不断训练student模型,减小这个误差。
  • 学生模型,使用相同隐藏层大小,但是将层数减去一半。
  • 采用了一些RoBERTa中的训练技巧:大批量,动态掩码,删除NSP
  • 根据知识蒸馏方法提出了DistilBert,在保留 bert 97%的性能的前提下,模型大小下降40%,inference运算速度快了60%

参考:[深度学习:前沿技术-DistilBERT ]

相关文章

  • Distilbert

    因为Bert本身参数量大,所以上线的过程中会碰到需求大空间和速度慢等问题。当前对Bert瘦身有三个思路,分别是Di...

  • 让BERT飞一会

    [TOC] 1. 模型蒸馏 1. DistilBERT(2019.10.2) 知识蒸馏的基础原理: 定义两个网络,...

  • DistilBERT 怎么样

    如果你真的需要推理速度快一点,可以接受代价是预测精度稍微下降那么一些的话,那么 DistilBERT 会是一个合适...

网友评论

      本文标题:Distilbert

      本文链接:https://www.haomeiwen.com/subject/mhsxyltx.html