如何实现动态加速网络?

这篇文章主要介绍两篇文章关于动态网络中的早退机制,有意思的是两篇文章都出自2020年ACL,并且两者有很多相似点。两篇论文地址如下:

DeeBert

FastBert

1. 动机

由于大规模预训练模型的兴起,如Bert,它确实有很不错的表现能力。然而,在实际应用中Bert规模太大,在推理时计算复杂度太高,往往需要很长的时间,因此需要设计一种自适应推理模型。

2. DeeBert

2.1. 介绍

DeeBert是在Bert每一层encoder后增加一个输出出口(即一个分类器)。如下图所示,长方形表示的是encoder,圆形表示的是分类器,其实DeeBert的模型架构与FastBert的模型架构几乎一致。

DeeBert

2.2. Training

DeeBert的训练分为两阶段:

  • 第一阶段,禁用除最后一个分类器以外的所有分类器,使用有标签数据集微调最后一个分类器以及所有的encoder,这与原论文Bert的微调保持一致。
  • 第二阶段,禁用第一阶段微调的所有参数,使用有标签数据集仅仅微调第一阶段所禁用的分类器。

2.3. inference

当输入样本x到达某一层的分类器,如果该分类器的预测结果的信息熵小于设定的阈值S,则直接返回该分类器的预测结果同时不在往后执行;如果该分类器的预测结果的信息熵大于设定的阈值S,则继续往后执行。

2.4. experiments

DeeBert使用GLUE数据集进行实验,实验结果如下:

3. FastBert

3.1. 介绍

FastBert的模型架构与DeeBert的模型架构类似,都是在Bert的每层encoder后增加一个分类器,FastBert给最后一个分类器取名为老师分类器,其它分类器都称为学生分类器。如下图所示:

3.2. Training

FastBert的训练也分为两阶段:

  • 第一阶段,与DeeBert一样,冻结所有学生分类器,使用有标签数据微调所有encoder以及老师分类器
  • 第二阶段,冻结第一阶段微调的所有参数,使用自蒸馏技术,这里使用无标签数据就可以,将老师分类器预测的概率分布蒸馏给学生分类器。这里使用KL散度衡量分布距离,loss是所有学生分类器与老师分类器的KL散度之和。

3.3. inference

在推理阶段,FastBert与DeeBert的策略也是几乎一样,都使用了分类器输出的信息熵作为是否早退的指标,当信息熵小于阈值S则早退,大于阈值S则继续执行。FastBert只是在信息熵基础上乘了一个系数,如下图所示:

其中N是分类类别,分子部分其实就是信息熵。

3.4. experiment

FastBert选取了六个中文数据集以及六个中文数据集进行实验,结果如下:

4. DeeBert与FastBert对比

4.1. 相同点

  1. 两个模型的架构都是一致,只是取名不一样
  2. 两个模型训练都是两个阶段,并且第一阶段是一致的,都与Bert的微调一致
  3. 两个模型推理阶段一致,都使用分类器输出概率的信息熵作为早退指标,信息熵小于阈值S则早退,信息熵大于阈值S则继续执行

4.2. 不同点

不同点主要是训练的第二阶段,DeeBert采用有标签数据微调分类器,使用交叉熵作为loss。而FastBert采用自蒸馏技术,使用无标签数据,将老师分类器的概率分布蒸馏给学生分类器的概率分布,使用kL散度作为loss。

event_note 10月 17, 2022

account_box 回国加速器

发表回复