FastBert:a self-distilling bert with adaptive inference time
摘要
类似Bert的预训练语言模型已经被证明有很好的效果,但是计算昂贵,模型很难加载。Fastbert在微调时使用自适应机制,确保模型性能的前提下,提高效率,根据不同需求,灵活调整速度,同时避免了样本的冗余计算。
1. introduction
在未标注的文本上预训练,标注的样本上进行微调,预训练模型Bert、gpt、xlnet在很多nlp任务上有了很大的效果提升。
- 缺点:计算量大、推理速度慢、实用性差
- 改进方向:quantinization、weights pruning、knowledge distillation
- KD通过减少模型大小获得速度-准确率的平衡,却还是无法应对假日的高峰
- 样本有难度等级,复杂模型会过量计算简单样本,简单模型又会在复杂样本上栽跟头
- fastBert–the sample-wise adaptive mechanism and the self-distillation mechanism
- 能在保证准确率的情况下,有2-11倍的速度提升
- 代码
- 论文
2. related work
Bert、roberta、t5、uer、k-bert、Albert、pkd-bert、tinybert、distilbert
3. methodology
3.1 model architecture
fastbert包含backbone和branches。backbone包含12层的transformer encoder和一个teacher-classifier;branches包含11个student-classifier,每一个都和transformer相连
3.1.1 backbone
backbone包含三部分:embedding层、包含transformer的encoder层、teacher classifier层。
embedding层(word、position、segment embeddings)和encoder层同Bert,teacher classifier层由全连接层(768–128)、self-attention层(128–128)、全连接层(128–128)、softmax层(128–N)
3.1.2 branches
student classifier和teacher classifier有相同的结构,被加到每一个transformer块的输出上,为了解决简单的样本。这些student classifier是为了平衡模型准确率和推理速度的。
3.2 model training
fastbert针对backbone和student classifier有各自的训练,当一个训练的时候,另一个的参数会被冻结。在下游任务中,会有三个训练步骤:backbone 预训练、backbone 微调、student classifier的自适应
3.2.1 pre-training
与Bert的预训练相同。注意:teacher classifier只在推理中用到,所以这个阶段不训练,可以自由加载高质量的预训练模型。
3.2.2 fine-tuning for backbone
对于任何下游任务,微调backbone和teacher classifier,所有的student classifier不参加训练
3.2.3 self-distillation for branch
当backbone被微调结束,teacher classifier的输出 p t p_t pt会作为每一层student classifier p s p_s ps的label,使用KL散度作为差的度量
D K L ( p s , p t ) = ∑ i = 1 N p s ( i ) log p s ( i ) p t ( j ) D_{KL}(p_s,p_t) = \sum_{i=1}^Np_s(i)\log\frac {p_s(i)}{p_t(j)} DKL(ps,pt)=i=1∑Nps(i)logp