本文部分内容来自博文链接[1],同时也补充了自己看过的一些论文。模型蒸馏在自然语言处理、计算机视觉和语音识别等领域得到了广泛的研究。本阅读笔记仅包含一些与计算机视觉相关的论文。模型压缩和加速的四种技术是设计高效的小型网络、剪枝、量化和蒸馏[2]。Distillation即知识蒸馏,将教师网络的知识迁移到学生网络,使学生网络的性能与教师网络相似。我们可以愉快地将学生网络部署到手机和其他边缘设备上。通常,我们会从两个方向进行蒸馏,一个是从深大网络到浅小网络,另一个是从分类器的集成到个体分类器。2015年,Hinton等人。[2]首先提出了神经网络中的知识蒸馏(KnowledgeDistillation,KD)技术/概念。这是一种通用但简单的模型压缩技术,不同于以前的一些作品[3-4]。具体来说,首先,与Bucilua等人的工作相比。[3],欣顿等人的工作。利用teachernetwork或ensemblenetwork(很多teachernetworks)的输出logits,而前者使用复杂的ensemble系统(SVMs、baggedtrees、boostedtrees等10个baselearners)对MUNGE生成的伪数据进行预测,得到伪标签,然后用这些伪标签的伪数据和原始训练数据训练快速小型网络,达到“压缩”的目的,特别是模型尺寸可以压缩100到10万倍,执行速度可加速100至10000次;其次,与Li等人的工作相比。[4],欣顿等人的工作。usesDifferenttemperature充分利用teachernetwork输出的小logits,而前者使用temperature为1,蒸馏模型效果不佳。Ba和Caruana[5]的工作首先使用logits作为目标而不是概率值,这启发了KD。我们通常将这种分类任务中低概率类别和高概率类别之间的关系称为暗知识。知识蒸馏原理[2],简单来说,首先,利用大规模数据训练一个teachernetwork;第二,使用大规模数据训练学生网络。此时损失函数由两部分组成:一部分是将teacher与student网络的输出logits计算distillationloss/KLdivergence,见[2]中的公式(4),一部分是对使用学生网络的输出和数据标签计算交叉熵损失。Hinton等人的工作。以手写数字识别和语音识别为例,验证上述蒸馏的有效性。蒸馏模型确实获得了教师网络的泛化能力。截至2019年11月23日,Hinton等人的KD[2]。已被引用2489次。回顾过去的5年,KD发生了哪些变化?(ICLR2015)FitNetsRomero等人。[6]不仅使用teachernetwork最终输出的logits,还使用它的中间隐藏层参数值(intermediaterepresentations)来训练studentnetwork,以获得深度和细节的FitNets。前者是KD的内容,后者是作者提出的hint-basedtraining,如图1所示。由于teachernetwork和studentnetwork输出的featuremap大小不同,通常featuremap提供提示的特征图更大(图1中间绿色框的输出),被引导的featuremap(图1中间红色框的输出)更大。Small,作者引入了一个基于卷积的回归器来使featuremap的大小一致。因为输入相同,要求输出尽可能相似,那么中间隐藏层参数值也会尽可能相似。图1:基于提示的学习(ICLR2017)更加关注注意力Zagoruyko和Komodakis提出将注意力用于知识转移[7],具体来说,是基于激活和基于梯度的空间注意力图,如图2所示。基于激活的空间注意力图构造了一个映射函数F,其输入为3D激活值张量,输出为2D空间注意力图。作者给出了三种这样的映射函数F,都是有效的。基于梯度的空间注意力图使用了Simonyan等人的工作。[8],即输入敏感图。简单来说,KD希望师生网络的输出概率分布相似,而PayingMoreAttentiontoAttention则希望师生网络的中间激活与原来的RGB激活区域相似。两种知识转移的效果可以叠加。图2:注意图(NIPS2017)学习高效对象检测模型Chen等人的工作。[9]使用KD[2]和hintlearning[6]两种方法将teacherFasterR-CNN的知识迁移给studentFasterR-OnCNN,如图3所示,对于物体检测,作者改了原来的KDcross-entropylosstocategory-weightedcross-entropyloss解决分类不平衡问题;对于检测框回归,作者使用teacherregressionloss作为studentregressionloss的上界;对于backbone的中间表示,作者使用hintlearning进行特征适配。二级检测器比一级检测器和无锚检测器更复杂。相信KD将在未来用于单级和无锚检测器。本文为目标检测与知识蒸馏的结合提供了实践经验。图3:DistilledFasterR-CNN(arXiv2017)TuSimple的NeuronSelectivityTransferNST[10]使用MaximumMeanDiscrepancy在中间计算层做分布匹配。(AAAI2018)TuSimpleDarkRank[11]的DarkRank认为KD使用的知识来自单个样本,忽略了不同样本之间的关系。因此,作者提出了从跨样本相似性中得出的新知识。验证任务是行人再识别和图像检索。(CVPR2017)来自知识蒸馏的礼物Yim等人。[12]表明KD有助于以下三项任务:1.快速网络优化,2.模型压缩,3.迁移学习。作者的知识蒸馏法是让学生网络的FSP矩阵(求解过程的流程)和教师网络的FSP矩阵尽可能相似。FSP矩阵指的是一个卷积网络的两层计算层结果(featuremaps)之间的关系。如图4所示,使用格拉姆矩阵来描述这种关系。教师网络的“知识”以几个FSP矩阵的形式被提取出来。通过最小化教师网络和学生网络的FSP矩阵,知识从教师网络提炼到学生网络。作者的实验证明这种知识迁移方法比FitNet的要好。图4:FSP矩阵(arXiv2019)ContrastiveRepresentationDistillation(CRD)Tian等人的工作。[13]指出原始KD适用于网络输出为类别分布的情况,但不适合跨模态蒸馏。例如,将图像处理网络(处理RGB信息)的表示/特征迁移到深度处理网络(处理深度信息),因为在这种情况下没有定义KL散度。作者利用对比目标来捕获结构化特征知识的相关性和高阶输出依赖性。简而言之,对比学习就是在一定的度量空间中学习正对更近,负对更远的表示。CRD适用于如图5所示的三种特定应用场景,其中模型压缩和集成蒸馏是原始KD适用的任务。这里有一些题外话。熟悉域自适应的同学一定知道,像素级自适应(CycleGAN)、特征级自适应和输出空间自适应(AdaptSegNet)是改进模型适应目标域数据的三个角度。原来KD是输出空间蒸馏,CRD是特征蒸馏,两者可以叠加使用。图5:ContrastiveRepresentationDistillation(arXiv2019)TeacherAssistantKnowledgeDistillation(TAKD)的三种应用场景MirzadehS-I等人的工作。[14]指出KD并不总是有效。当teachernetwork和studentnetwork的modelsize差距过大时,KD会失败,studentnetwork的performance会下降【这点需要特别注意】。作者在教师网络和学生网络之间引入了一个助教网络,如图6所示。TAKD的原理,简单来说就是在教师网络和助教网络之间进行知识蒸馏,在教师网络和助教网络之间进行知识蒸馏。助教网络和学生网络,即多步知识升华。图6:TeachingAssistantKnowledgeDistillationTAKD(ICCV2019)OntheEfficacyofKnowledgeDistillationCho和Hariharan的工作[15]侧重于KD的有效性,结论是教师网络的准确率越高,准确率越高学生网络高。这一结论与MirzadehS-I等人的工作一致。[14]。不匹配的容量使得学生网络无法稳定地模仿教师网络。有趣的是,Cho和Hariharan的工作认为TAKD的上述多步蒸馏是无效的,并提出应该采取的措施是提前停止教师网络的训练。(ICCV2019)AComprehensiveOverhaulofFeatureDistillationHeo等人的工作。[16]侧重于特征蒸馏,这与Hinton等人的工作不同:暗知识或输出蒸馏。隐藏的特征值/中间表示蒸馏从FitNets开始。本文着重于特征蒸馏,迁移了两种知识。第一个是ReLU后特征响应的大小;第二个是每个神经元的激活状态。以ResNet50为学生网络,ResNet152为教师网络,采用作者的特征蒸馏方法,学生网络ResNet50(student)从76.16提升到78.35,超越了教师网络ResNet152的78.31(ImageNet中的Top-1)。此外,本文对通用分类、检测和分割这三个基本任务进行了实验。Heo等人。先前在AAAI2019[17]上提出了基于激活边界的知识蒸馏。(ICCV2019)从深度姿态回归网络中提取知识Saputra等人的工作。[18]对用于回归任务的网络的知识蒸馏具有一定的实用指导价值。(arXiv2019)路线约束优化(RCO)Jin和Peng等人的工作。[19]受到curriculumlearning的启发,他们知道student和teacher之间的差距过大会导致distillation失败,提出了路由约束提示学习(RouteConstrainedHintLearning),如图7所示。简单的说,我们在训练teachernetwork的时候,会有一些中间模型叫做checkpoints,RCO论文叫做anchorpoints,这些中间模型的性能是不一样的。因此,studentnetwork可以从这些中间模型一步步慢慢学习,从easy到hard。此外,本文在开放集人脸识别数据集MegaFace上进行了实验,在0.8MB参数的1:10^6任务上取得了84.3%的准确率。图7:RouteConstrainedHintLearning(arXiv2019)Architecture-awareKnowledgeDistillation(AKD)Liu等人的工作。[20]指出对于给定的教师网络,存在最好的学生网络,即不仅对教师网络的权重进行蒸馏,而且对教师网络的结构进行蒸馏得到学生网络。(文章RethinkingtheValueofNetworkPruning也指出剪枝后的网络可以从头开始训练并取得良好的性能,说明通过搜索/剪枝得到的网络结构非常重要。)(ICML2019)TowardsUnderstandingKnowledgeDistillation的Phuong和Lampert[21]的工作,研究线性分类器(层数等于1)和深度线性网络(层数大于2),回答了什么是学生模型学习?(WhatDoestheStudentLearn?),学生模型学到了多少?(HowFastDoestheStudentLearn?),并从DataGeometry、OptimizationBias、StrongMonotonicity(单调性)三个方面解释为什么蒸馏起作用?(为什么蒸馏有效)。数学够好的同学可以看论文。(ICLR2016)统一蒸馏和特权信息Lopez-Paz等人的工作。[22]结合了两种允许机器相互学习的技术:蒸馏和特权信息,并提出了一个新的框架广义蒸馏。是一篇从理论上解释蒸馏的论文。(ICML2018)重生神经网络(BAN)BAN不算作模型压缩,因为学生模型容量等于教师模型容量。然而,Furlanello等人。[23]发现以KD方式训练具有相同模型容量的学生网络会超过教师网络,称这样的学生网络为主网络。真是个惊喜!与Hinton对暗知识的理解不同,BANs的作者Furlanello等人认为软目标分布之所以有效,是因为它是重要性采样权重。(ICLR2018)ApprenticeApprentice[24]使用KD技术来提高低精度网络的分类性能,结合量化和蒸馏两种技术。引入量化,那么teachernetwork是一个参数未量化的高精度网络,apprenticenetwork是参数量化的低精度网络。(ICLR2018)ModelCompressionviaDistillationandQuantization这项工作[25]与Apprentice类似,希望通过结合量化和蒸馏技术来获得浅层和量化的小型网络。(CVPR2019)StructuredKnowledgeDistillationLiu等人的工作。[26-27]集成了暗知识的像素级蒸馏和马尔可夫随机场的成对蒸馏Holisticdistillationwithconditionalgenerativeadversarialnetworks,如图8所示,用于密集预测任务:语义分割、深度估计和对象检测.图8:StructuredKnowledgeDistillation(arXiv2019)xxxLi等人的工作。[28]。(arXiv2019)xxxKim等人的工作。[29]。在模型压缩中,由于模型蒸馏可以用于任何网络(从大型网络到小型网络,从递归网络到卷积网络,从集成网络到单一网络等),极具吸引力,因此被广泛研究并应用于特定的视觉计算任务。天下没有免费的午餐,蒸馏的一些“坑”也逐渐被试验和发现,为蒸馏技术的应用提供了一些宝贵的经验。还研究了知识蒸馏背后的原理。总之,从简单的理论到具体的应用,蒸馏都有大量的研究和实践,不妨一试。其他一些有用的原理介绍和论文解读,可以在知乎搜索“知识蒸馏”学习。
