BERT 在很多 NLP 任务上都取得不错的效果,但是其模型体积与计算量都很大,而且现在出现了更多越来越大的模型,例如 roBERTa 和 GPT2。由于这些模型的太大,难以用于一些性能没那么好的机器上,也不能很好地用于实时性要求高的应用中。因此有不少针对 BERT 模型压缩的研究,其中模型蒸馏 Distillation 是一种比较好的解决方法,本文介绍两种基于模型蒸馏的 BERT 模型压缩方法。
上图展示了很多基于 Transformer 的模型,模型下方的数字对应了模型的参数数量,单位是百万,可以看到这些模型变得越来越大。这些模型的体积也限制了其在现实世界中的使用,因为各方面因素:
- 这种模型的训练花费大量的金钱,需要使用昂贵的 GPU 服务器才能提供大规模的服务。
- 模型太大导致 inference 的时间也变长,不能用于一些实时性要求高的任务中。
- 现在有不少机器学习任务需要运行在终端上,例如智能手机,这种情况也必须使用轻量级的模型。
基于以上的原因,不少研究开始针对 BERT 模型压缩进行,常见的模型压缩方法有以下几种:
- 模型蒸馏 Distillation,使用大模型的学到的知识训练小模型,从而让小模型具有大模型的泛化能力。
- 量化 Quantization,降低大模型的精度,减小模型。
- 剪枝 Pruning,去掉模型中作用比较小的连接。
- 参数共享,共享网络中部分参数,降低模型参数数量。
RoBERTa 和 ALBERT中介绍的 ALBERT 也是一种 BERT 压缩方法,主要是用了参数共享和矩阵分解的方法压缩 BERT,但是 ALBERT 只减少模型的参数,并不能减少其 inference 的时间。
两种使用模型蒸馏压缩 BERT 的算法,第一种是 DistilBERT,将 12 层的 BERT-base 模型蒸馏到 6 层的 BERT 模型;第二种是将 BERT 模型蒸馏到 BiLSTM 模型。
参考资料:
BERT 模型蒸馏 Distillation BERT
深度神经网络模型蒸馏Distillation
深度学习模型压缩方法(4)-----模型蒸馏(Distilling)与精细模型网络
模型蒸馏(Model Distillation)
知识蒸馏的过程是怎样的?与迁移学习的区别在哪里?
模型蒸馏(Distil)及mnist实践
BERT 模型蒸馏 Distillation BERT