文章目录
前言
论文名:TinyBERT: Distilling BERT for Natural Language Understanding
论文作者:Xiaoqi Jiao et al.
机构:
1)Key Laboratory of Information Storage System, Huazhong University of Science and Technology, Wuhan National Laboratory for Optoelectronics
(华中科技大学信息存储系统重点实验室,武汉光电国家实验室)
2)Huawei Noah’s Ark Lab
(华为诺亚方舟实验室)
3)Huawei Technologies Co., Ltd.
(华为技术有限公司)
期刊/会议名:EMNLP 2020
本文作者:XMU_MIAO
日期:2021/1/23
摘要
预训练语言模型如BERT大大提升了许多自然语言处理任务的性能。但预训练语言模型一般都是计算昂贵的,因而在资源受限的设备上难以有效地运行。 为了在加速推理速度和减少模型大小的同时保持精度,我们首先提出一种针对transformer-based模型的知识蒸馏(KD)方法,通过利用这种新的KD方法,"Teacher"模型(BERT)中的大量知识能够有效地迁移到“Student”模型中(TinyBERT),然后我们为TinyBERT介绍了一种新的two-stage学习框架,其在预训练(pre-training)阶段和特定任务学习(specific-task learning)阶段都使用KD方法。这种框架能够保证TinyBERT能够在BERT中捕捉一般领域(general-domain)和特定任务的知识(task-specific)
有4个层的 T i n y B E R T 4 TinyBERT_4 TinyBERT4在实验上证实是有效的,在GLUE Benchmark达到了其teacher模型( B E R T B A S E BERT_{BASE} BERTBASE)的96.8%以上的性能,并且比后者小了7.5倍,推理速度快了9.4倍。 有6个层的 T i n y B E R T 6 TinyBERT_6 TinyBERT6与其Teacher模型( B E R T B A S E BERT_{BASE} BERTBASE)性能相当。
1、Introduction & Motivation
这篇文章的工作是从知识蒸馏的角度对预训练模型BERT进行压缩,提出新的压缩模型 T i n y B E R T TinyBERT TinyBERT。在运用知识蒸馏技术时,关键在于如何设计损失函数以及如何学习teacher模型的知识。本文提出的蒸馏方法是针对transformer编码器的每一层的,模型预训练一般遵循这样的范式: p r e − t r a i n − t h e n − f i n e − t u n i n g pre{-}train{-}then{-}fine{-}tuning pre−train−then−fine−tuning,即两个阶段:在大型语料上预训练,针对特定任务进行微调。 TinyBERT将知识蒸馏是在这两个阶段分别进行的。
BERT采用Transformer编码器部分作为其主要结构,Transformer编码器部分的每一层包含两个子层: M u t i l − H e a d A t t e n t i o n Mutil{-}Head\,\,Attention Mutil−HeadAttention 和 F F N FFN FFN ,TinyBERT对这两个子层以及分类器(softmax)分别设计了知识蒸馏的损失函数,第2部分会进行详细介绍。
2、How to do ?
本文针对Transformer-Layer的知识蒸馏方法为: T r a n s f o r m e r D i s t i l l a t i o n Transformer\,\,Distillation TransformerDistillation,并将这种蒸馏方法运用在预训练模型的两个阶段中,在微调阶段,除了使用本文提出的知识蒸馏技术,还使用了数据增强的技术。TinyBERT的总体学习过程如下:
总结一下TinyBERT的思路,其实际上就是一个两阶段蒸馏:
预训练阶段->知识蒸馏
微调阶段->数据增强+知识蒸馏
2.1 Transformer Distillation
将 N N N层的BERT模型(teacher)中的知识迁移到 M M M层的TinyBERT模型(student)中( N > M N>M N>M),整个模型蒸馏时的损失函数如下:
L m o d e l = ∑ x ∈ X ∑ m = 0 M + 1 λ m L l a y e r ( f m S ( x ) , f g ( m ) T ( x ) ) L_{model}=\sum_{x\in X}\sum_{m=0}^{M+1}\lambda_mL_{layer}(f_m^S(x),f_{g(m)}^T(x)) Lmodel=x∈X∑m=0∑M+1λmLl