当前位置: 首页 > 后端技术 > Python

Knowledgedistillation-Distillingtheknowledgeinaneuralnetwork

时间:2023-03-26 14:41:48 Python

Knowledgedistillation-Distillingtheknowledgeinaneuralnetwork作者:志广达1.概念介绍“很多昆虫在幼虫时期最擅长从环境中吸收能量和养分是的,而当它们长大成人后,需要擅长迁移、繁殖等完全不同的能力。”在Hinton2014年发表的知识蒸馏论文中,用了这样一个非常形象的比喻来说明知识蒸馏的目的。在大规模机器学习任务中,我们也用训练阶段和部署阶段两个不同的阶段来表达两个不同的需求。训练阶段(trainingstage)可以使用大量的计算资源,没有实时响应,使用大量的数据进行训练。但是在部署阶段(deploymentstage),会有很多限制,例如计算资源、计算速度要求等,知识蒸馏就是为满足这种需求而设计的一种模型压缩方法,知识蒸馏的概念最早由Bulica于2006年提出,Hinton于2014年对知识蒸馏进行了总结和发展。知识蒸馏的主要思想是训练一个小网络模型来模仿一个预训练好的大网络或者集成网络,这种训练模式也o称为“师生”,大网络是“老师”,小网络是“学生”。在知识蒸馏中,教师向学生传授知识的方法是在学生的训练过程中,最小化一个以教师预测结果的概率分布为目标的损失函数。教师预测的概率分布是教师模型最后一个softmax函数层的输出。然而,在很多情况下,在传统softmax层的输出中,正确分类的概率值非常大,而其他分类的概率值几乎接近于0。因此,这并不会提供比原始数据集,并没有利用teacher强大的泛化性能。例如,训练MNIST任务中的数字“3”相对于数字“5”和数字“8”的关系更为密切。为了解决这个问题,Hinton在2015年发表的论文中提出了'softmax温度'的概念,并对softmax函数进行了改进:$$P_i=\frac{e^\frac{z_i}{T}}{\sum_j这里的e^\frac{z_j}{T}}$$$T$指的是温度参数。当$T$等于1时,就是标准的softmax函数。当$T$增加时,softmax输出的概率分布会变得更软(更平滑),从而可以使用更多来自teacher模型的信息(teacher感觉哪些类别更接近要预测的类别)。Hinton把教师模型中包含的这些信息称为“暗知识”,蒸馏的方法就是将这些“暗知识”传递给学生模型。在训练student时,student的softmax函数使用与teacher相同的$T$,损失函数针对teacher输出的softlabels。这样的损失函数称为“蒸馏损失”。在Hinton的论文中也发现在训练过程中加入正确的数据标签(hardlabel)会使效果更好。具体方法是,我在计算distillationloss的同时,也用hardlabel来计算standardloss($T=1$),我们称之为“studentloss”。整合两种损失的公式如下:这里$x$是输入,$W$是学生模型的参数,$\mathcal{H}$是交叉熵损失函数,$y$是硬标签,$\sigma$是一个函数,参数$T$,$\alpha,\beta$是系数,$z_s,z_t$分别是学生和老师的logits输出。模型的具体结构如下图所示:2.超参数的调整上式中人为设置了$\tau,\alpha,\beta$作为超参数,Hinton论文中使用的$T$的范围isFrom1to20,他们通过实验发现,当studentmodel相对于teachermodel非常小时,$T$的值相对较小效果更好。这样的结果直观的理解是,如果$T$的值增加,软标签的分布包含的信息更多,以至于一个小模型无法“捕捉”到所有的信息,但这只是一个假设,还有没有明确的方法来衡量网络“捕获”信息的能力。关于$\alpha,\beta$,Hinton的论文对这两个损失使用了加权平均:$\beta=1-\alpha$。他们实验发现,在正常情况下,当$\alpha$相对于$\beta$非常小时,可以获得最好的效果。其他人也做了一些没有加权平均的实验,设置$\alpha$为1,调整$\beta$。3.实验Hinton在他的论文中做了三个实验。前两个是MNIST和语音识别。在这两个实验中,通过知识蒸馏得到的学生模型取得了与教师模型相似的效果。与原来在数据集上训练的相同模型相比,准确率有了很大的提升。下面主要介绍第三个比较创新的实验:将知识蒸馏应用于训练集成模型。3.1模型介绍训练一个集成模型(训练多个相同的模型,然后将它们集成起来以实现更好的泛化)是一种非常简单的使用并行计算的方式,但是当数据集庞大且多样时,会产生巨大的计算量,而它也不好用。Hinton在论文中利用软标签技术设计了一个集成模型,减少了计算量,取得了很好的效果。这个模型包含两个小模型:generalistmodel和specialistmodel(网络模型一样,只是分工不同)。整个模型由许多专家模型和通才模型集成。顾名思义,通才模型负责对数据进行粗略的区分(将相似的图片归为一类),而专家模型(expertmodel)则负责对相似的图片进行更详细的分类。这种操作也很符合人脑的思维方式,先区分大类,再进行具体的分类。下面让我们看看这个实验的细节。实验使用的数据集是谷歌内部的JFT数据集。JFT数据集非常大,有1亿张图片,15000个类别。实验中用所有数据集训练通才模型,有15000个输出,即每个类别都有一个输出概率。对数据集进行分类就是利用Onlinek-meansclustering的方法对每张图片输入通才模型后得到的软标签进行聚类,最后将3%的数据作为一组分配给每个专家,每个小数据集包含一些聚合的图片,即通才认为相似的图片。specialist模型在训练阶段,模型的参数在初始化时完全是从generalist中的值复制过来的(specialist和generalist的结构是完全一样的),这样所有的知识generalist模型的部分可以保留,然后specialist可以对分配的数据集Hardlabeltraining进行一个过程。但问题是,如果专家只关注指定的数据集(trainingonlyontheassigneddataset),整个网络会很快过拟合到指定的数据集,所以Hinton提出的方法是用一半的时间用于hardLabel训练,另一半时间使用知识蒸馏的方法学习generalist生成的softlabel。这样,专家就用一半时间学习小类,另一半时间在模仿通才的行为。整个模型的预测也和往常不同。在做top-1分类时,分为以下两步:第一步:将图片输入generalist模型得到输出概率分布,取概率最高的类别k。步骤2:取出数据集中所有包含类别k的专家,组成一个集合$A_k$(每个数据集之间有类别重叠)。然后求解能最小化下式的概率分布q作为预测分布。$$KL(p^g,q)+\sum_{m\inA_k}KL(p^m,q)$$这里的KL是指KL散度(用来描述两个概率分布之间的差距)$p^g$和$p^m$分别是测试图片输入generalist和specialists(m)后的输出概率分布,累加是考虑属于$A_k$集合的所有specialists的“意见”。3.2实验结果由于Specialist模型的训练数据集很小,训练所需的时间很短,从传统方法需要的几周减少到几天。下图是generalist模型训练后逐个添加specialist的测试结果:从图中可以看出,specialist数量的增加显着提高了top1的准确率。4.总结本文结合Hinton2014年发表的论文,对知识蒸馏及相关实验进行简要介绍。现在很多模型都采用了知识蒸馏的方法,但是知识蒸馏在深度学习中仍然是一个非常新的方向。还有很多应用场景有待研究。项目地址:https://momodel.cn/explore/5dc3b1223752d662e35925a3?type=app参考文献[1]HintonG,VinyalsO,DeanJ.Distillingtheknowledgeinaneuralnetwork[J].arXiv预印本arXiv:1503.02531,2015.[2]https://nervanasystems.github.io/distiller/knowledge_distillation.html[3]https://www.youtube.com/watch?v=EK61htlw8hY&t=3323s

最新推荐
猜你喜欢