深度学习笔记之DistilBERT
引言
本节将介绍一种参数、消耗计算资源少的 BERT \text{BERT} BERT改进模型—— DistilBERT \text{DistilBERT} DistilBERT模型。
回顾:BERT模型的弊端
虽然 BERT \text{BERT} BERT性能优秀并且对各类 NLP \text{NLP} NLP下游任务通用,但依然存在一些弊端:
- 在 RoBERTa \text{RoBERTa} RoBERTa模型中提到过下句预测策略( Next Sentence Prediction,NSP \text{Next Sentence Prediction,NSP} Next Sentence Prediction,NSP)在训练任务过程中表现得并不优秀,并删除了该策略;
- 在 ALBERT \text{ALBERT} ALBERT模型中也提到过 BERT \text{BERT} BERT模型的参数量过大,从而消耗更多的时间和计算资源。
本节就从计算资源开始,介绍一种新的算法模式—— DistilBERT \text{DistilBERT} DistilBERT,一种基于 BERT \text{BERT} BERT的知识蒸馏版本。
什么是知识蒸馏
即便是使用预训练好的 BERT \text{BERT} BERT模型,我们在使用其执行下游任务时,依然需要消耗相当多的计算资源。例如:想要将一个模型迁移到更小的硬件上,例如手机等移动设备、笔记本电脑,它使用的计算资源、空间占用依然很高,计算效率较差。如果能够得到一个和预训练 BERT \text{BERT} BERT模型相差不大,但模型体量更小,参数更少、运行得更快、占用空间更少的模型,在使用过程中会更加方便。这体现了知识蒸馏的必要性。
什么是知识蒸馏呢 ? ? ? 它是指:基于一个已预训练好的模型作为教师模型,训练一个学生模型模仿教师模型,使学生模型的性能尽可能接近教师模型的过程。后续使用学生模型执行相关下游任务时,由于学生模型的体量更小,从而达到运行更快、占用空间更少的目的。
DistilBERT模型架构
基于上述理念, DistilBERT \text{DistilBERT} DistilBERT的模型架构表示如下:
结合论文中作者的描述观察:
论文链接在文章末尾~
- 教师模型是一个 BERT-base \text{BERT-base} BERT-base模型 ( param:110 M ) (\text{param:110 M}) (param:110 M),它是由若干相互堆叠的注意力层构成。由于它已经是预训练好的,因而它并不是我们关注的重点;
- 对学生模型 ( param:66 M ) (\text{param:66 M}) (param:66 M)的设计是:层内维度(神经元数量)与教师模型相同的基础上,将 Encoder \text{Encoder} Encoder层数量减半,并且在初始化过程中从教师的 Encoder \text{Encoder} Encoder层中每两层中选择一层作为学生对应 Encoder \text{Encoder} Encoder层的初始化。
- 整个 Inference \text{Inference} Inference过程中,教师模型没有参与;只有学生模型在反向传播过程中存在梯度更新。
那么如何实现将有效信息从教师模型蒸馏到学生模型呢 ? ? ? 这意味着模型的训练过程将不同于传统的训练过程,因为训练学生模型的主要目标是模仿教师模型,从而训练策略发生一系列变化。
softmax温度函数
在介绍 DistilBERT \text{DistilBERT} DistilBERT模型策略之前,先介绍一下 Softmax \text{Softmax} Softmax温度函数。它的函数表达式如下所示:
P i = exp ( Z i / T ) ∑ j exp ( Z j / T ) \mathcal P_i = \frac{\exp (\mathcal Z_i / \mathcal T)}{\sum_{j} \exp (\mathcal Z_j / \mathcal T)} Pi=