Distilling transformers into simple neural networks with unlabeled transfer data论文解读

Distilling transformers into simple neural networks with unlabeled transfer data

论文地址:https://arxiv.org/pdf/1910.01769.pdf

motivation

一般来说,蒸馏得到的student模型与teacher模型的准确率还存在差距。文章利用大量in-domain unlabeled transfer set以及有限数量的标记训练实例来弥补这一差距。

运用在文本分类任务上。

文章提出的两个蒸馏方法:

  • hard distillation:用fine-tuned teacher对大量的无标签数据进行标注,标注硬标签。然后用这些augmented data来对student进行监督学习。loss函数是交叉墒。
  • soft distillation:用教师模型在unlabeled data上生成的logits和内部表示,来对student进行不同蒸馏方式(不同loss函数)的训练。

模型的输入用Wordpiece tokenization

student模型

embedding层+BiLSTM层+最大池化层(因为如果只用最后一个hidden state,对于长语句来说信息量不够)

损失函数为交叉墒函数

teacher模型

用标注数据来fine tune预训练模型,用的是最后一层的 [CLS]向量,loss是交叉墒。

选什么特征来蒸馏

teacher logits

对于unlabeled数据,教师产生的logits和学生生成的分类score之间的loss,均方误差。

hidden teacher representations

用教师学到的中间表示来指导学生模仿自己。文中用的是教师模型最后一层。

因为两个模型结构不同,最后一层的维度也会不同。用Gelu激活函数进行转换到相同维度。
然后依然是两个模型最后一层表示之间的均方误差作为loss。

(文中提到,他们发现均方误差得到的结果比KL散度更好些)

整体框架

损失函数:

三个loss函数组合起来,不同的权重。

loss函数

较高的α值使学生模型更多地关注容易实现的目标。而较高的γ可使学生专注于困难的目标,并使模型适应嘈杂的地面真相标签。后者不是这项工作的重点,因此在进一步分析中将其省略。

训练方式:

  1. 联合训练,三个loss函数并在一起,
  2. 逐渐解冻的分层训练。
  • 第一步,先训练LRL ,学习参数,模仿teacher最后一层的表示。
  • 第二步,以LCE和LLL作为loss,但是不能一下子优化所有参数,会造成灾难性遗忘。因此,将每层的参数frozen,然后从最后一层一层的解冻。直到收敛。
  1. 先蒸馏,再finetune,与方式2相似,
  • 第一步,先以LRL 和LLL作为loss,不需要labeled数据。
  • 第二步,用labeled数据进行fine tune,loss为LCE,微调的时候和方式2一样,逐层解冻。
    这样相当于第一步得到了一个蒸馏后的student,然后之后就可以根据不同的任务数据来fine tune它。

实验

四个数据集:
  • IMDB:电影评论情感分类
  • Elec:亚马逊电子产品的情感分类
  • DbPedia:Wikipedia的主题分类
  • Ag News:新闻文章的主题分类。
一些参数

数据比例 train:validation=9:1

Tensorflow

4 Tesla V100 gpus

Adadelta优化器 + early stopping (也用了Adam,Adam收敛更快,但是最终结果没有Adadelta好)

所有层dropout=0.4,Bi-LSTM层dropout=0.2

300d的glove预训练词向量。

LSTM隐层维度=600,batch size=64,

loss函数中的 α = β = 10, γ = 1

教师模型

选的是BERT-base和BERT-large

学生模型:
  1. Bi-LSTM encoder,最后一个隐向量+soft Max作分类,用基础的空格分词法。只用labeled data,交叉墒为损失函数来训练。
  2. 不蒸馏的Bi-LSTM encoder+Max pooling,用wordpiece tokenization,训练loss和1相同。
  3. 蒸馏的student。和上文中提到的一样,三个loss,3种不同的训练方式。
数据处理部分:

有的数据集没有unlabeled data,所以就把数据集分为两部分,一部分有标签,另一部分去掉标签作为unlabeled data。

实验结果:

用BERT-base做老师

在这里插入图片描述
可以看出用了wordpiece和加了Max pooling层的模型比普通的RNN模型效果好。然后通过蒸馏可以明显的提升学生模型的准确率,甚至高于teacher。

用更大的BERT-large做老师:

在这里插入图片描述
可以看出,teacher性能越好,蒸馏得到的student也越好。(符合思维,好老师教出好学生)

参数量比较
Distilled StudentBERT BaseBERT Large
13M110M340M
Distilling Hard Targets vs. Soft Logits

hard distillation是指,finetune之后的teacher对unlabeled data进行预测标注,然后用原本的标注数据和teacher标注的数据一起,对student进行蒸馏。不涉及到logits和最后层表示。
在这里插入图片描述

Distillation with Less Training Labels
  • 每类留500个标注数据的蒸馏结果:
    在这里插入图片描述
  • 每类留100个标注数据:

每类100个,对BERT large进行fine tune时,DbPedia和Ag News两个数据集的微调结果和之前500个的时候差不多,但是IMDB和Elec数据集只有50%的准确率,几乎是随机了。

于是文章又做了一个实验,用这两个数据集对pretrained BERT接着进行预训练,然后用每类100个进行微调。最后再用每类100个进行蒸馏,得到的学生模型甚至超过了BERT large。

在这里插入图片描述

不同训练方式的对比:

可以看出,方式2的结果最好,先学习最后一层的表示,再学习logits和CE。

在这里插入图片描述

总结

这篇论文的创新性不高,思路其实和Distilling Task-Specific Knowledge from BERT into Simple Neural Networks这篇论文差不多。

但是文章里的实验做的很详细,该比较的点都比较了。论文也写的很清晰易懂。

可以看出蒸馏到小模型确实是Bert这些大模型很好的应用方向。自己也做了相关的实验,确实有效。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
将神经网络中的知识进行提取,是一种将模型的信息转化为更为简洁和易于理解形式的过程。 神经网络是一种由许多神经元组成的复杂计算模型,它们通过学习和调整权重来解决各种问题。然而,神经网络通常具有大量的参数和复杂的结构,这使得它们难以解释和应用到其他领域。因此,我们需要一种方法来提取和总结神经网络中的知识,以便更好地理解和应用这些模型。 在进行神经网络知识提取时,有几种常见的方法。一种常见的方法是使用可视化技术,如热力图、激活图和网络结构图等,来可视化网络中不同层的活动模式。这些可视化技术能够帮助我们发现网络中的模式和特征,并从中推断出网络的知识。 另一种方法是使用特征提取技术,如卷积神经网络(CNN)的滤波器、自动编码器的隐藏层和循环神经网络(RNN)的隐状态等,来提取网络学习到的重要特征。这些重要特征可以帮助我们更好地理解网络学习到的信息,并将其应用到其他问题中。 此外,还有一种被称为知识蒸馏的技术,它通过训练一个较小的模型来提取大型模型中的知识。知识蒸馏通过引入目标函数和额外的训练策略,使小模型能够学习到大模型中的重要知识,并在不损失太多性能的情况下将其应用到实际问题中。 总而言之,提取神经网络中的知识是一项重要任务,它能够帮助我们更好地理解和应用这些复杂的模型。通过可视化、特征提取和知识蒸馏等方法,我们能够从神经网络中提取出有用的信息,并将其应用到其他领域或解决其他问题中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值