NLP自然语言处理|【转】【NLP】【ACL2020】DeeBERT(衡量性能与效率的 BERT 推理方法)

原文链接:【ACL2020】DeeBERT:衡量性能与效率的 BERT 推理方法
DeeBERT NLP自然语言处理|【转】【NLP】【ACL2020】DeeBERT(衡量性能与效率的 BERT 推理方法)
文章图片

作者信息

Elesdspline
目前从事NLP与知识图谱相关工作。
导语 近年来预训练在 NLP 领域的各个任务上都表现出来很好的效果,但是在推理速度方面却不如人意,所以有很多的研究针对如何加快推理而提出了各种各样的尝试。
本文针对加快 BERT 预训练模型的推理速度提出的相关方法,提出了一种简单而有效的方法 DeeBERT 来加速 BERT 推理,该允许在不经过整个模型的情况下提前退出,获取推理结果。实验表明,DeeBERT 能够在模型质量最小的情况下节省 40% 的推理时间。
一、动机 现如今,大型或者超大型的预训练模型例如 BERT、XlNet、GPT、RoBERTa 等在 NLP 领域的各个任务上都表现出来很好的效果,无论是各种竞赛还是论文等,但是在推理速度方面却不如人意,所以有很多的研究针对如何加快推理而提出了各种各样的尝试,比如模型蒸馏等技术。
本文的动机来源于 CV 领域对 CNN 的一个观察结果[2]:在深度卷积神经网络中,较高的层通常产生更详细、更细粒度的知识表示结果。其实有一篇文章对 BERT 各个层学到的知识也有类似的结论, 较低的层学习到是一些基础语义知识,例如句法、词性信息等,较高的层次学到的信息更细粒度,更高级的特征表示。
因此,本文假设中间的层次也能够完成相应任务,不一定非要模型的最后一层信息。大概来说,不同的任务所需要的特征信息不一样,较低层次的信息可能便已经满足某个任务。
本文针对上述动机与假设,提出 DeeBERT : Dynamic early exiting for BERT,动态提前退出策略。
二、DeeBERT DeeBERT 具体的做法是在 BERT 的每一个 transformer 层之间加入一个分类器,称之为 off-ramp,如下图所示,灰色框代表 transformer,黄色圆圈代表 off-ramp,蓝色箭头代表在不同层退出。
NLP自然语言处理|【转】【NLP】【ACL2020】DeeBERT(衡量性能与效率的 BERT 推理方法)
文章图片
在给定的下游任务数据集上联合训练并对所有 transformer 层和 off-ramp 更新参数。在推理的时候,数据通过 transformer 层后,它被传递到下面的 off-ramp 分类器。如果这个分类器的结果对预测数据有信心,则直接返回结果;否则,数据被发送到下一个 transformer 层。至于如何判断有没有信心,论文中很简单的采用了一个阈值的方式,下面再介绍。
2.1 DeeBERT 如何微调?
假设 BERT 有 n 层 transformer,对应的有 n 个 off-ramps,每一个 off-ramp 在下游任务 fine-tune 的时候损失函数定义如下:D 是训练数据集、 是模型参数、H 是交叉熵损失函数、 是第 i 个 off-ramp 的输出。
NLP自然语言处理|【转】【NLP】【ACL2020】DeeBERT(衡量性能与效率的 BERT 推理方法)
文章图片

fine-tune 的过程遵循以下两方面:
  1. 更新嵌入层、所有 transformer 层和最后一个 off-ramp 的参数,这和 BERT 原文中一致,其中最后一个 off-ramp 就是 原始 BERT 的分类层。
  2. 冻结 1 中 fine-tune 过的所有参数,然后更新除了最后一个 off-ramp 的其他 off-ramp。冻结 transformer 层参数的原因是为了保证最后 off-ramp 的输出质量最佳。
2.2 DeeBERT 如何推理?
上文我们提到, DeeBERT 在推理的时候设置了一个阈值,来判断当前的 off-ramp 对预测结果是否有信心,这个阈值在这里表示为 S , 这个决定了是在当前层就返回结果还是要继续进入下一层的 transformer,具体的算法过程如下图:NLP自然语言处理|【转】【NLP】【ACL2020】DeeBERT(衡量性能与效率的 BERT 推理方法)
文章图片

在这里可以先说明下,从直觉和实验结果来看,S 越大,模型的推理速度越快,但推理的精确度越低;S 越小,模型推理的精确度越高,但推理速度越慢。在实验中,根据这个原则选择 S。
三、Experiment Result 3.1 实验设置
实验设置中,基线模型选用了 BERT 和 RoBERTa,并在六个分类数据集上面进行相关的实验:SST-2、MRPC、QNLI、RTE、QQP 和 MNLI。除此之外,还有对同样加快推理速度的模型进行了对比。
3.2 实验结果
下面是实验结果表:下面的表格中列出来与基线模型、加速模型以及不同阈值的 DeeBERT 的实验对比结果。从实验的结果表中能够不同的阈值下,精确度的波动范围以及推理时间的减少比例。 其实是为了权衡性能与推理时间。
NLP自然语言处理|【转】【NLP】【ACL2020】DeeBERT(衡量性能与效率的 BERT 推理方法)
文章图片

为了更好的看出性能与时间之间的权衡,论文中给出了可视化曲线图,下图中有一个明显的现象就是当达到某一个点之后都出现了性能急剧下降的情况。
NLP自然语言处理|【转】【NLP】【ACL2020】DeeBERT(衡量性能与效率的 BERT 推理方法)
文章图片

【NLP自然语言处理|【转】【NLP】【ACL2020】DeeBERT(衡量性能与效率的 BERT 推理方法)】实验结果表中列出了 DeeBERT 与 DistilBERT 的对比,在这里,DeeBERT 或许存在以下两方面的优势:
  • DeeBERT 可以根据用户的需求灵活的选择何时推理,而不像 DistilBERT 将模型压缩。
  • DeeBERT 已经对 transformer 进行了微调,推理的时候不需要对模型进行进一步的训练,这可能相比于微调要花费更多的时间。
总结 本提出了一种简单而有效的方法 DeeBERT 来加速 BERT 推理,该允许在不经过整个模型的情况下提前退出,获取推理结果。从实验结果来看,更快的推理速度所损耗的精确度可能更高,两者之间如何权衡还是要进一步考虑。
参考资料 [1] DeeBERT: Dynamic Early Exiting for Accelerating BERT Inference
[2] Visualizing and understanding convolutional networks

    推荐阅读