FastBERT解读

FastBERT

https://aclanthology.org/2020.acl-main.537/

首先给出模型的提出原文地址

https://zhuanlan.zhihu.com/p/127869267

对于FastBERT的定义和解读,知乎这篇文章讲的十分优秀,可以仔细阅读

简单来理解,单纯使用BERT对样本进行预测工作需要经过完整的网络,FastBERT的主要目的是为了让降低计算。

  1. 从蒸馏的角度来说是创建一个全新的学生网络去拟合本地的大BERT模型从而实现对模型的简化。
  2. 但是FastBERT的思想是对于模型进行改造。聚焦于一些简单的样本,也就是不需要通过整个网络就可以进行分类的样本进行优化。解决方案为:给每一层后接上分类器。这样主要的结构就出现了。

作者称之BERT模型为主干,Backbone

每一个分类器为分支,Branch

这一过程作者称之为自蒸馏,在pre-train & fine-tuning 的时候只更新主干,tuning结束之后freeze主干用branch获得蒸馏结果

总结,fastBERT主要思想是提前输出简单样本,来减少模型的计算压力,从而提高推理速度。优点:不需要改变主要的BERT结构(相比于Distill-BERT)

思考:如何去决定当前批数据经过的层数,如何去定义?

在原文中提到,不确定性高于speed的将会被传入下一层,低于speed的就停止传递

其中,对于不确定性的定义是当前批的数据的煽值(正则化),其中包括一些假设:低不确定性对应高精度。这样子理解,speed在原文中的意义就是threshold,去定义以及划分不确定性的高低。越高的speed,越高的层收到的样本就越少,也就意味着门槛变低,更多的样本被直接输出,从而提高了模型的计算速度。

至于模型的loss计算,GPT给出的解释为分类loss和层选择的loss(CE, MSE[选择的层和全部的层])但是觉得与原文有些出入,还需要进一步研究。(对于损失函数的观点未经证实)

本文记录了阅读FastBERT paper的笔记以及对于前辈的知识总结进行归纳。大致了解了FastBERT的思路和实现原理,但对于原文中的KL散度分布还有些困惑,需要进一步研究。