distill_bert:哈工大出品,按照传统的知识蒸馏方式产出。
1,bert_base是12层,distill_bert6层,每两层丢弃一层,以对应transformer层的参数初始化
2,total_loss = soft_loss + hard_loss
soft_loss为 bert_base的logits/T(1<T<20)之后softmax的概率值 和 distill_bert的logits/T之后softmax的概率值
hard_loss为 正确标签的one-hot 和 distill_bert的logits之后softmax的one-hot
DitilBert中Student模型的整体结构和Bert相同,不过Student模型移除了token-type embedding和pooler,同时模型层数减半。同时作者对transformer中的layer normalization和全连接层的矩阵计算进行了优化。同时作者注意到hidden size维度的变化对模型计算效率的影响小于层数变化的影响,因此本文中作者主要关注模型层数对计算效率的影响。 文中作者使用Teacher模型中的层对Student模型进行初始化
tiny_bert:华为诺亚出品
采用针对transformer的特定蒸馏方式
total _loss =1, embedding_loss
2,attention layer+hidden layer
3,prediction layer
transformer层的映射方式为:bert为N层,tiny_bert为M层
g(m) = m*N/M
TinyBERT 两阶段训练方法
TinyBERT 两阶段训练
BERT 有两个训练阶段,第一个训练阶段是训练一个预训练模型 (预训练 BERT),第二个训练阶段是针对具体下游任务微调 (微调后的 BERT)。TinyBERT 的蒸馏过程也分为两个阶段。
第一个阶段,TinyBERT 在大规模的 general 数据集上,利用预训练 BERT 蒸馏出一个 General TinyBERT。
第二个阶段,TinyBERT 采用数据增强,利用微调后的 BERT 训练一个 task specific 模型。