导航:首页 > 蒸馏问题 > 知识蒸馏的坑

知识蒸馏的坑

发布时间:2024-01-10 21:24:51

Ⅰ 高中化学中蒸馏应有哪些注意事项

高中化学中蒸馏应注意事项:

1、 控制好加热温度。

2、选用短颈蒸馏瓶或者采取其它保温措施等,保证蒸馏顺利进行。

3、蒸馏之前,必须了解被蒸馏的物质及其杂质的沸点和饱和蒸气压,以决定何时收集馏分。

4、 蒸馏烧瓶应当采用圆底烧瓶。

5、在蒸馏烧瓶中放少量碎瓷片,防止液体暴沸。

6、温度计水银球的位置应与支管口下端位于同一水平线上。

7、蒸馏烧瓶中所盛放液体不能超过其容积的2/3,也不能少于1/3。

8、冷凝管中冷却水从下口进,上口出。

9、加热温度不能超过混合物中沸点最高物质的沸点。

(1)知识蒸馏的坑扩展阅读

蒸馏是指利用液体混合物中各组分挥发性的差异而将组分分离的传质过程。

一、特点

1.通过蒸馏操作,可以直接获得所需要的产品,而吸收和萃取还需要如其它组分。

2.蒸馏分离应用较广泛,历史悠久。

3.能耗大,在生产过程中产生大量的气相或液相。

二、分类

1.按方式分:简单蒸馏、平衡蒸馏 、精馏、特殊精馏。

2.按操作压强分:常压、加压、减压。

3.按混合物中组分:双组分蒸馏、多组分蒸馏。

4.按操作方式分:间歇蒸馏、连续蒸馏。

三、主要仪器

蒸馏烧瓶(带支管的),温度计,冷凝管,牛角管,酒精灯,石棉网,铁架台,支口锥形瓶,橡胶塞。

Ⅱ 蒸箱里面有个圆坑中要加水吗

蒸箱里边有个圆坑中要加水吗?这个问题是这样的,那个圆坑是纯蒸馏水流下来用的,不需要你往里加水,如果加水蒸馏水留下来没地方去了,蒸出来,这效果就不好了

Ⅲ 酿酒知识-制酒蒸馏上甄小技巧

一、取料时装甄要注意将取出的料装入甄桶时要注意:装甄要疏松,动作要轻快,上汽要均匀,甄料不宜太厚且要平整,盖料要准确。

二、装甄完毕时要注意插好馏酒管,盖上甄盖,盖内倒入水。甄桶蒸馏要做到缓汽蒸馏,大汽追尾。在整个馏酒过程中,冷却水的温度大致控制在:酒头30左右,酒身不超过30,酒尾温度较高。

三、装甄工序应注意 “见湿盖料”的装甄方法要注意:酒醅发湿时盖一层发酵的材料,避免跑汽,但若掌握不好,容易压汽; “见汽盖料”酒汽上升至甄桶表层要注意:在酒醅表层稍见白色雾状酒汽时,迅速准确地盖一层发酵材料,此法不易压汽,但易跑汽。这两种操作方法各有利弊,可根据自己装甄技术的熟练程度选择使用。

Ⅳ 【技术博客】通过量化知识来解释知识蒸馏

【技术博客】****通过量化知识来解释知识蒸馏

知识蒸馏介绍

知识蒸馏(Knowledge Distillation)最早是在2006年由 Bulica 提出的,在2014年 Hinton 对知识蒸馏做了归纳和发展。知识蒸馏主要思想是训练一个小的网络模型来模仿一个预先训练好的大型网络或者集成的网络。Hinton 在2015年发表的论文中提出了‘softmax temperature’的概念,对 softmax 函数做了改进:

当 T 等于1时就是标准的 softmax 参数,前者比后者具有这样一个优势:经过训练后的原模型,其 softmax 分布包含有一定的知识,真实标签只能告诉我们,某个图像样本是一辆宝马,不是一辆垃圾车,也不是一颗萝卜;而带有温度参数T的softmax函数可能会告诉我们,它最可能是一辆宝马,不大可能是一辆垃圾车,但不可能是一颗萝卜。

Hinton 等人做了三组实验,大体上验证了知识蒸馏方法的有效性。 Hinton 等人促进了知识蒸馏的发展并从实验的角度来验证了知识蒸馏的有效性,而本篇介绍的论文则提出了一些量化知识的概念来解释知识蒸馏的成功机理。

该论文为了解释知识蒸馏的成功机理,提出了三个假设,并根据假设基于可视化的量化标准,提出了三种类型的度量标准来验证了关于知识蒸馏的三个假设,为解释知识蒸馏提供了依据。

假设提出

假设1:知识蒸馏使 DNN 可以学习更多的视觉概念。我们将与任务相关的视觉概念和其他概念区分开来,如下图所示,前景上的视觉概念通常被认为是与任务相关的,而背景上的视觉概念则被认为是与任务无关的。

假设2:知识蒸馏确保了 DNN 易于同时学习各种视觉概念。相比之下基础网络倾向于顺序学习视觉概念,即在不同的 epoch 学习不同的概念。

假设3:知识蒸馏的模型优化方向更加稳定。DNN 在对原始数据进行学习时,通常会在早期尝试对各种视觉概念进行建模,然后在后期抛弃某些视觉概念;而在知识蒸馏的过程中,教师网络直接引导学生网络瞄准特定视觉概念,没有明显的迂回。

在该文章的研究中,视觉概念被定义为一个图像区域,如物体的一个部分:翅膀、头、爪子等。基础网络被定义为从原始数据中学习的网络。

算法

在该节,我们给定一个提前训练好的 DNN 网络(教师网络)和一个经蒸馏形成的另一个 DNN 网络(学生网络),为了解释知识蒸馏,我们将学生网络与从原始数据中学习生成 DNN 网络相比较,另外我们将任务限制为分类任务来简化下面的理论分析。

为了验证假设1,这里定义几个度量的标准:

这里

和[图片上传失败...(image-dffcd3-1601385590605)]

的图像区域可以视为有效的视觉概念,b为一个正标量。当括号内条件满足时,返回1,否则返回0.

(上图为视觉概念(visual concepts)的可视化表现,第二列表示了不同图像每个像素的熵值,在第三列中,具有低熵值的区域被视为视觉概念)

参数会更高。

来测量在视觉概念最多时的学习过程。没有使用 epoch number 而是使用 weight distance 的原因是后者更好的量化了每个epoch后参数更新的总路径,因此我们使用平均值[图片上传失败...(image-381693-1601385590604)]

标准差[图片上传失败...(image-184659-1601385590604)]

来量化一个 DNN 是否同时学习视觉概念:

[图片上传失败...(image-127b3a-1601385590604)]

平均值[图片上传失败...(image-e1aaea-1601385590604)]

和标准差[图片上传失败...(image-171a50-1601385590604)]

的数值越小,代表 DNN 能够快速同时地学习各种视觉概念。

(DNN 倾向于在前期学习各种视觉概念,之后主要丢弃与任务无关的概念)

结论

该文章从对 DNN 的知识进行量化的角度来解释了知识蒸馏的成功。提出了三种类型的度量标准来验证分类场景中的三种假设,也就是相对于从原始数据进行学习,知识蒸馏可以确保 DNN 学习更多与任务相关的概念,学习更少与任务无关的概念,具有更高的学习速度,并以更少的弯路进行优化。

参考文献

[1]Hinton G, Vinyals O, Dean J. Distilling the knowledge in a neural network[J]. arXiv preprint arXiv:1503.02531, 2015.

[2]Cheng X , Rao Z , Chen Y , et al. Explaining Knowledge Distillation by Quantifying the Knowledge[J]. 2020.

Ⅳ 名师出高徒:关于知识蒸馏技术的一点思考

在最初听说知识蒸馏技术的时候,我是持怀疑态度的,甚至觉得不可思议,为什么通过用简单模型去学习复杂模型的效果会比直接用训练标签来训练简单模型要好???

但是,它的存在必有其合理性,更何况是我偶像,深度学习第一人Hinton等人最早开始提出这种思想的.
于是便带着疑惑,对所谓的模型蒸馏技术做了一番研究,发现这个东西确实有过人之处,能够用更简单的模型获得更优质的推理效果,这在工程上,简直是妙不可言.下面就让我们来think think,模型蒸馏为什么有用,又是怎么来实现的.

众所周知,对于各类任务,当有足够多的数据的情况下,我们的神经网络模型越大越深,往往效果也会越好,正如ResNet50在图像任务上摧枯拉朽,Large Bert在语言任务上效果拔群,除了优秀的模型结构涉及,可以归结为是大力出奇迹.
但是,在实际的生产中,部署一个很大的推理模型是十分困难的,因为它的计算量是无数大大小小公司不能承受之痛,并不是每个企业都像Google那样拥有成千上万的TPU,当然即使有,在大部分场景下,也显然是不划算的.为了解决日益增长的模型预测效果的追求和和工程师想要提高性能老板想要节省成本之间的矛盾,有人提出了知识蒸馏技术.
即我们先在原始的训练数据上训练一个大的复杂的拟合的好泛化能力也很好的巨无霸模型(教师模型),再用这个复杂模型的inference结果取代原有的标签,用于训练一个新的更小的效果跟教师模型相差不大的模型(学生模型).然后生产环节只要部署这个性能强劲和推理效果足够好的学生模型就可以了.

好,这个想法实在是太好了..但是旁观者大概会有些不明觉厉....直接从原始的训练数据学不好吗?干嘛还多此一举去学一个更不精确的拟合结果数据?

这样做自然是有好处滴,且听我给你慢慢分析...这一切应该从一个软妹字说起..... [噗..抱歉,多打了一个妹字...

人类能够非常好的从许许多多的特征之中找到主要特征来区分不同的物品,而不会被表面很多相似的特征所迷惑,比如,人类可以较好的区分一只像猫的狗或是一只像狗的猫,而对于深度神经网络来说,却并没有那么容易.正如Hinton等人的一个经典论述: 一辆宝马被深度网络识别为一台垃圾车的可能性很小,但是被错误的识别为一个胡萝卜的可能性却要高很多倍.
为了让网络能够获得学习这些东西的能力,我们不得不让网络变得更深更复杂.知识蒸馏的目的就是希望大模型能够将学习到的这些区分近似特征的能力教给小模型,教育这种知识的精髓就恰好在于用softmax的软特征来取代原始one-hot标注的硬特征.

仔细想一下,软特征的好处实际上是显而易见的.

就拿手写数字识别的例子来说,我们的标注数据的不同分类之间,实际是无法捕捉到它们之间的关系的,因为它们都是只有自己的分类位置是0,其余位置是1,每个目标向量之间的距离是一样的,因此这种标注的方式实际上是存在一定缺陷的,它无法包含这样一种信息:比如数字1,和只带有一点点弯曲的7实际是极为相似的,但实际的标注数据并不能体现这一点.但是经过一个大模型的学习之后,或许对于一个只有一点点弯曲的7模型的预测结果中,1的score是0.4,7的score是0.5,其余score都接近0. 当我们看到这样一组特征向量的时候,是可以很清晰的发现这个手写图片非常相7同时又有点像1而和其他数字不像.
因此,再用这个向量作为target给小模型进行学习的时候,小模型只需要很小的代价就能学习到这一复杂的关系了~

是不是觉得我上面的说法很有道理? 如果你真的就这么认为,那就too naive了! 梦想很丰满,而现实却很骨感..真实的情况是,经过softmax函数之后,几乎不可能出现某个分类0.5,另一个分类0.4的情况,更一般的是某个分类0.99,另一个分类0.01......

当然,别担心,前面的想法这么好,自然遇到一点困难不该轻易放弃,既然softmax不行,那我们就不如就给它调整一下..

Hinton等大佬的解决方案是:将原始logits传递给softmax之前,将教师模型的原始logits按一定的温度进行缩放.这样,就会在可用的类标签上得到更加广泛的分布.并且这个温度缩放机制同样可以用于学生模型.

然后,原始的softmax操作就变成了:

其中, 便是一个缩放因子的超参数,这些得到的结果便是所谓的软目标...
变大,类别概率就会变软,也就是说会相互之间更加接近,从而达到了捕捉类别间关系的目的.

除了上述这种方法,还有其他人有一些别的不使用softmax获得软特征的方法,各有优劣...因为想快点写完这篇,所以别的方法先不介绍了,有兴趣可以自己了解,或者改天有时间我回来补充上这个部分....

如果想要更大限度的压缩模型,可以使用一些十分高效的传统机器学习方法作为学生去蒸馏
比如决策树。我觉得这可能是一个很好的方法,尽管它们的表达能力不如神经网络,但它们的预测非常可控和具有解释性,并有可能实现自动的更新和快速迭代.可以看一下Hinton他们的研究,读下这篇论文 Distilling a Neural Network Into a Soft Decision Tree

他们的研究表明,尽管更简单的神经网络的表现比他们的研究要好,但蒸馏确实起到了一点作用。在MNIST数据集上,经过蒸馏的决策树模型的测试准确率达到96.76%,较基线模型的94.34%有所提高。然而,一个简单的两层深卷积网络仍然达到了99.21%的准确率。因此,在任务追求的精度和推理性能及边界性之间寻求一个权衡即可。

个人认为知识蒸馏是一个极具前途的研究.它让更好的推理效果以更小更便捷的方式得以部署,这在工业界简直是无敌的存在.正所谓名师出高徒,和人类的学习一样,能够有一个牛逼的老师对你进行深入浅出的指导,能让你的学习过程事半功倍.而知识蒸馏,正好就是实现了这样一个深入浅出的功能,这种思想我个人十分推崇.

Ⅵ 知识蒸馏 | 模型压缩利器_良心总结

最近利用知识蒸馏的方法,对业务中的性能有了可观的提升,因此在这里总结一波。本文主要从宏观的角度分析一下各个蒸馏算法的蒸馏方式,具体细节可以根据兴趣阅读论文~ 知识蒸馏是一种模型压缩常见方法,用于模型压缩指的是在teacher-student框架中,将复杂、学习能力强的网络学到的特征表示“知识蒸馏”出来,传递给参数量小、学习能力弱的网络。从而我们会得到一个速度快,能力强的网络,因此这是一个概念上的模型压缩方案。从另一个角度来说,蒸馏可以使得student学习到teacher中更加软化的知识,这里面包含了类别间的信息,这是传统one-hot label中所没有的。由于蒸馏中软化标签的本质,因此蒸馏也可以被认为是一种正则化的策略。总结来说,知识蒸馏除了能够学习到大模型的特征表征能力,也能学习到one-hot label中不存在的类别间信息。现有的知识蒸馏方法主要侧重于两点: 从teacher的什么位置学习 和 用什么方式学习 。以下的总结图概述了本文要介绍的蒸馏方法。

目录结构:

(1)KL:知识蒸馏:蒸馏开山之作
https://arxiv.org/pdf/1503.02531.pdf

如上图所示,本文中直接利用KL散度来衡量教师模型和学生模型的输出分布,通过最小化KL散度的方式,使得学生模型的输出分布能够尽可能的逼近教师模型,从而实现知识蒸馏的目的。KL散度是一种衡量两个概率分布之间的差异的数学概念,有不懂的同学请出门左拐网络一下,右拐也行Google一下。

(2)FT:相关性因子加权学习法
https://arxiv.org/pdf/1802.04977.pdf
(3)PKT:概率分布学习法
https://arxiv.org/pdf/1803.10837.pdf

上述两篇文章的作者认为学生一般都是不聪明的,为了让学生能够更好的理解教师模型,FT算法这篇文章提出了一种新的知识转移方式,如图所示,利用卷积运算对教师模型的输出进行编码,并解码(翻译)给学生。而位于学生模块部分也添加一个卷积操作,用来学习翻译后的教师知识。实验证明这种方式要比直接学习效果好。PKT算法这篇文章提出了另一种新的知识转移方式,如图所示,该文章让学生模型学习教师模型的概率分布,使得整体的学习更加容易,更鲁棒。作者提出了一种通过匹配数据在特征空间中的概率分布进行知识蒸馏,PKT算法的另一个优势是该方法可以直接转移不同架构和维度层之间的知识。

(4)RKD:关系型学习法
https://arxiv.org/pdf/1904.05068.pdf
(5)CC:多输入联系型学习法
https://arxiv.org/pdf/1904.01802.pdf

所谓的单打独斗就是一个样本进行自我学习,单打独斗的蒸馏方法使得学生模型只能学习教师模型的输出表现,无法真正学习到教师模型的结构信息。而这两篇文章的作者都提出了多个样本之间进行合作学习的蒸馏学习方法,使得学生模型能够更好的学习到教师模型的结构信息。RKD关系型学习算法的核心是以多个教师模型的输出为结构单元,取代传统蒸馏学习中以单个教师模型输出学习的方式,利用多输出组合成结构单元,更能体现出教师模型的结构化特征,使得学生模型得到更好的指导。CC多输入联系型学习法在上述RKD算法的基础上,为了更好的扩大类间差异,更好的缩小类间距离,CC算法提出了两种采样方法:包括均衡类别采样法和均衡超类别采样法。所谓的均衡类别采样法,即假设每个batch大小为48,则这48个样本分布来自于6个类别,每个类别8个样本,使得整体的学习样本不像RKD算法那样是随机的。

(1)Fitnet:阶段性知识蒸馏
https://arxiv.org/pdf/1412.6550.pdf

FItnet这篇文章首次提出了从教室模型的中间层去进行蒸馏学习,而不仅仅关注教室模型的输出。因为通过中间层的引导,使得学生模型进行了提前学习,使得最终的蒸馏学习效果变得更好。

(2)VID:互信息学习法
https://arxiv.org/pdf/1904.05835.pdf
(3)SP:相似性矩阵学习
https://arxiv.org/pdf/1907.09682.pdf
(4)AT:注意力学习法
https://arxiv.org/pdf/1612.03928.pdf

为了更好的表征神经网络中间层的特征,如上图所示,本文列举了三种不同形式的用于更好抽象的表征中间层特征的新的蒸馏形式。其中VID互信息学习法,将中间层知识蒸馏的最优性能定义为最大化教师和学生网络之间的互信息。那么为什么通过最大化互信息可以使得蒸馏学习变得有效呢?首先作者对互信息做了定义:互信息为[教师模型的熵值] - [已知学生模型的条件下的教师模型熵值]。而我们又有如下常识:当学生模型已知,能够使得教师模型的熵很小,这说明学生模型以及获得了能够恢复教师模型所需要的“压缩”知识,间接说明了此时学生模型已经学习的很好了。而这种情况下也就是说明上述公式中的熵很小,从而使得互信息会很大。作者从这个角度解释了为什么可以通过最大化互信息的方式来进行蒸馏学习。而在SP相似性矩阵学习法中,作者提出了一种新的知识蒸馏形式,该方法是作者观察到相似语义的输入往往会使得神经网络输出相似的激活模式这一现象启发得到的。该知识蒸馏方法被称为保持相似性知识蒸馏(SPKD),该方法使得教师网络中相似(不同)激活的输入样本对,能够在学生网络中产生相同(不同)的激活,从而指导学生网络的学习。而在AT注意力学习法中,作者认为注意力在人类视觉体验中起着至关重要的作用。以图像分类为例,注意力地图展示了学习完成后的网络模型更关注于图像的哪个区域,是网络模型学习成果的体现。本文通过迫使学生模型模仿强大的教师模型的注意力特征图,来显著提高学生模型的性能。为此,本文提出了基于激活注意力地图的蒸馏法。

(5)NST:基于滤波器的知识蒸馏
https://arxiv.org/pdf/1707.01219.pdf

(6)FSP:授之以鱼不如授之以渔
http://openaccess.thecvf.com/content_cvpr_2017/papers/Yim_A_Gift_From_CVPR_2017_paper.pdf

和之前对中间层特征进行直接学习的方式不同,本文提出了一个偏哲学的论点:授之以鱼不如授之以渔。具体来说就是,如上图所示,本文将教师模型网络层与层之间的映射关系作为学生网络学习的目标,而不是像之前提到的直接对教师模型的中间结果进行学习。通过让学生学习这种获得特征的方法,而不是直接学习特征本身,文章的结果显示,这种方式确实有助于提高学生模型的鲁棒性。

(1)AB:激活边界学习
https://arxiv.org/abs/1811.03233.pdf
(2)利用对抗样本进行激活边界学习
https://arxiv.org/abs/1805.05532.pdf

在分类任务中,小模型真正的缺陷更多的在于对边界样本(难例样本)的分类困难。而这真是我们在分类任务中最关心的问题。而教师模型处理边界的能力一定是要优于学生模型的。因此尝试用学生模型学习教师模型的边界分布,这将是蒸馏学习的新思路。本部分列举了两种不同的边界学习方法。AB激活边界学习法,通过最大化边界误差的方式,来引导学生模型学习更强的边界约束能力。利用对抗样本进行边界激活学习的方法,首先定义一个基类并通过基类找到各个类别中的对抗边界,最终通过对抗边界样本进行蒸馏学习。

(1)be your own teacherr
https://arxiv.org/pdf/1905.08094.pdf
(2)强制拉近类内距离:regularzing class-wise
https://arxiv.org/pdf/2003.13964.pdf
(3)类内的鲁棒性学习:Data-Distortion Guided
https://www.researchgate.net/publication/335476911_Data-Distortion_Guided_Self-Distillation_for_Deep_Neural_Networks

由于我们不一定可以在所有任务中都顺利的获取教师模型,有的大模型由于数据的缺失,很难被正常的训练出来。基于这种情况,很多研究者提出了自我学习的策略。简单来说该策略就是自己作为自己的老师,进行自我优化。本部分列举了三种自学习的方式。be your own teacher这篇文章将网络较深部分的知识压缩到较浅部分,也就是说该蒸馏策略的教师模型和学生模型来自与同一个模型,这大大降低了蒸馏学习的复杂度,并且通过增加额外的训练检测模型,在不增加前向推理时间的前提下提升了自我学习的能力。举例来说,如上图中以resnet50为例,在每个block之后都接出一个bottleneck作为隐藏层的监督输出模块,并接出一个全连接层作为每个子模块的子分类器。每个子分类器都作为一个小的学生模型,其对应的教师模型为主分类层的输出,最终实现自我蒸馏的学习。另外两篇文章的思路主要从同一个类内的样本出发进行自我学习。其中强制拉近类内距离这篇文章,在训练的过程中,首先我们会从数据迭代器中提取batch1大小的数据,同时选出和当前batch1中类别相同的样本形成batch2,并将两个batch的样本组合起来进行联合训练。具体来说就是每一此计算loss时,从batch1和batch2中各挑选出一个同类样本,在loss计算中尽可能的是的这两个同类样本的输出分布一致,这种方式是一种广义上的自我学习的策略,且这种训练方式能够强制减小类内的差异,且可以利用这种方式减小某些过度自信的异常值的预测。其中增强类内鲁棒性这篇文章,也是从对同一个类别的样本进行联合学习,具体操作如下:对输入batch中每个图片利用不同的数据增强方式增强层两份输入,这两份输入的标签为同一个类别,将两份输入特征concat之后通过卷积层提取全局特征,并将得到的特征向量进行对应的切分,在训练过程中通过最小化切分后特征向量间的差异,从而增强同一个类内的多样性提升鲁棒性,该过程也可以被认为是自己和自己学习。

(1)DML:互相学习
https://arxiv.org/pdf/1706.00384.pdf
(2)知识嫁接
https://arxiv.org/pdf/2001.05868.pdf

与自学习类似的是互相学习策略中不存在教师模型,与自学习不同的是互相学习的方式通用是多个模型之间的学习,而自学习仅仅只有一个模型。其中DML:互相学习这篇文章就是一种典型的互相学习的方式,DML是在训练过程中,几个需要反向传播的待训学生网络协同学习,互相传递知识。每个互相学习的网络都有一个标准的分类Loss和互学习Loss,其中互学习Loss是一个KL散度。 具体而言,两个网络的softmax输出为p1,p2.则互学习的意义在于,对于Net1(Net2亦然),对了提高其泛化能力,使用Net2的p2作为一种后验概率,然后最小化p1,p2的KL散度。而知识蒸馏这篇文章更像是一种广义上的互相学习方法,该文章的主要是思想是并行地训练多个网络,对所有网络的参数进行重要性排序,并另一个并行网络中的更有效的权重替换到当前网络的不重要权重的位置,在训练过程中通过这种重要性权重的互相替换实现互相学习。

(1)GAN对抗学习
https://arxiv.org/pdf/1709.00513.pdf
(2)无监督对抗学习
https://arxiv.org/pdf/1904.01186.pdf

本部分主要列举了两种利用GAN网络进行蒸馏的文章。GAN对抗学习这篇文章就是典型的利用生成对抗网络的例子,具体来说,学生网络作为生成器,生成对应的输出结果,而教师网络用来表征GT信息,而鉴别器主要被用来鉴别学生网络的输出和教师网络的输出,最终学习的目的就是是的学生网络能够欺骗鉴别器,是的鉴别起无法区分出学生网络和教师网络的输出。最终实现学生网络学习到了教师网络的输出特征和分布。而无监督对抗学习这篇文章的出发点有点不一样,由于一些实践问题(如隐私、法律等问题),给定深度网络的训练数据往往不可用,除了一些接口之外,给定网络的架构也是未知的。基于此,本文提出了一种利用生成对抗网络训练高效深度神经网络的新框架。讲预先训练好的教师网络看作一个固定的鉴别器,利用该鉴别器产生的训练样本可以得到最大的鉴别结果。然后,利用生成的数据和教师网络,同时训练出模型尺寸较小、计算复杂度较低的高效网络。

Ⅶ 知识蒸馏-Distilling the knowledge in a neural network

“很多昆虫在幼虫形态的时候是最擅长从环境中吸取能量和养分的,而当他们成长为成虫的时候则需要擅长完全不同能力比如迁移和繁殖。”在2014年Hinton发表的知识蒸馏的论文中用了这样一个很形象的比喻来说明知识蒸馏的目的。在大型的机器学习任务中,我们也用两个不同的阶段 training stage 和 deployment stage 来表达两种不同的需求。training stage(训练阶段)可以利用大量的计算资源不需要实时响应,利用大量的数据进行训练。但是在deployment stage (部署阶段)则会有很多限制,比如计算资源,计算速度要求等。知识蒸馏就是为了满足这种需求而设计的一种模型压缩的方法。

知识蒸馏的概念最早是在2006年由Bulica提出的,在2014年Hinton对知识蒸馏做了归纳和发展。知识蒸馏的主要思想是训练一个小的网络模型来模仿一个预先训练好的大型网络或者集成的网络。这种训练模式又被称为 "teacher-student",大型的网络是“老师”,小型的网络是“学生”。

在知识蒸馏中,老师将知识传授给学生的方法是:在训练学生的过程中最小化一个以老师预测结果的概率分布为目标的损失函数。老师预测的概率分布就是老师模型的最后的softmax函数层的输出,然而,在很多情况下传统的softmax层的输出,正确的分类的概率值非常大,而其他分类的概率值几乎接近于0。因此,这样并不会比原始的数据集提供更多有用的信息,没有利用到老师强大的泛化性能,比如,训练MNIST任务中数字‘3’相对于数字‘5’与数字‘8’的关系更加紧密。为了解决这个问题,Hinton在2015年发表的论文中提出了‘softmax temperature’的概念,对softmax函数做了改进:

这里的 就是指 temperature 参数。当 等于1 时就是标准的softmax函数。当 增大时,softmax输出的概率分布就会变得更加 soft(平滑),这样就可以利用到老师模型的更多信息(老师觉得哪些类别更接近于要预测的类别)。Hinton将这样的蕴含在老师模型中的信息称之为 "dark knowledge",蒸馏的方法就是要将这些 "dark knowledge" 传给学生模型。在训练学生的时候,学生的softmax函数使用与老师的相同的 ,损失函数以老师输出的软标签为目标。这样的损失函数我们称为"distillation loss"。

在Hinton的论文中,还发现了在训练过程加上正确的数据标签(hard label)会使效果更好。具体方法是,在计算distillation loss的同时,我利用hard label 把标准的损失( )也计算出来,这个损失我们称之为 "student loss"。将两种 loss 整合的公式如下:

这里的 是输入, 是学生模型的参数, 是交叉熵损失函数, 是 hard label , 是参数有 的函数, 是系数, 分别是学生和老师的logits输出。模型的具体结构如下图所示:

在上述公式中, 是作为超参数人为设置的,Hinton的论文中使用的 的范围为1到20,他们通过实验发现,当学生模型相对于老师模型非常小的时候, 的值相对小一点效果更好。这样的结果直观的理解就是,如果增加 的值,软标签的分布蕴含的信息越多导致一个小的模型无法"捕捉"所有信息但是这也只是一种假设,还没有明确的方法来衡量一个网络“捕捉”信息的能力。关于 ,Hinton的论文中对两个loss用了加权平均: 。他们实验发现,在普通情况下 相对于 非常小的情况下能得到最好的效果。其他人也做了一些实验没用加权平均,将 设置为1,而对 进行调整。

Hinton的论文中做了三个实验,前两个是MNIST和语音识别,在这两个实验中通过知识蒸馏得到的学生模型都达到了与老师模型相近的效果,相对于直接在原始数据集上训练的相同的模型在准确率上都有很大的提高。下面主要讲述第三个比较创新的实验:将知识蒸馏应用在训练集成模型中。

训练集成模型(训练多个同样的模型然后集成得到更好的泛化效果)是利用并行计算的非常简单的方法,但是当数据集很大种类很多的时候就会产生巨大的计算量而且效果也不好。Hinton在论文中利用soft label的技巧设计了一种集成模型降低了计算量又取得了很好的效果。这个模型包含两种小模型:generalist model 和 specialist model(网络模型相同,分工不同)整个模型由很多个specialist model 和一个generalist model 集成。顾名思义generalist model 是负责将数据进行粗略的区分(将相似的图片归为一类),而specialist model(专家模型)则负责将相似的图片进行更细致的分类。这样的操作也非常符合人类的大脑的思维方式先进行大类的区分再进行具体分类,下面我们看这个实验的具体细节。
实验所用的数据集是谷歌内部的JFT数据集,JFT数据集非常大,有一亿张图片和15000个类别。实验中 generalist model 是用所有数据集进行训练的,有15000个输出,也就是每个类别都有一个输出概率。将数据集进行分类则是用Online k-means聚类的方法对每张图片输入generalist model后得到的软标签进行聚类,最终将3%的数据为一组分发给各个specialist,每个小数据集包含一些聚集的图片,也就是generalist认为相近的图片。
在specialist model的训练阶段,模型的参数在初始化的时候是完全复制的generalist中的数值(specialist和generalist的结构是一模一样的),这样可以保留generalist模型的所有知识,然后specialist对分配的数据集进行hard label训练。但是问题是,specialist如果只专注于分配的数据集(只对分配的数据集训练)整个网络很快就会过拟合于分配的数据集上,所以Hinton提出的方法是用一半的时间进行hard label训练,另一半的时间用知识蒸馏的方法学习generalist生成的soft label。这样specialist就是花一半的时间在进行小分类的学习,另一半的时间是在模仿generalist的行为。
整个模型的预测也与往常不同。在做top-1分类的时候分为以下两步:
第一步:将图片输入generalist model 得到输出的概率分布,取概率最大的类别k。
第二步:取出数据集包含类别k的所有specialists,为集合 (各个数据集之间是有类别重合的)。然后求解能使如下公式最小化的概率分布q作为预测分布。

这里的KL是指KL散度(用于刻画两个概率分布之间的差距) 和 分别是测试图片输入generalist 和specialists(m)之后输出的概率分布,累加就是考虑所有属于 集合的specialist的“意见”。

由于Specialist model的训练数据集很小,所以需要训练的时间很短,从传统方法需要的几周时间减少到几天。下图是在训练好generalist模型之后逐个增加specialist进行训练的测试结果:

从图中可以看出,specialist个数的增加使top1准确个数有明显的提高。

本文结合Hinton在2014年发表的论文对知识蒸馏和相关实验做了一个简单的介绍,如今很多模型都用到了知识蒸馏的方法,但知识蒸馏在深度学习中还是非常新的方向,还有非常多的应用场景等待研究。

项目地址: https://momodel.cn/explore/5dc3b1223752d662e35925a3?type=app

[1]Hinton G, Vinyals O, Dean J. Distilling the knowledge in a neural network[J]. arXiv preprint arXiv:1503.02531, 2015.
[2] https://nervanasystems.github.io/distiller/knowledge_distillation.html
[3] https://www.youtube.com/watch?v=EK61htlw8hY&t=3323s

Ⅷ 蒸馏操作中有哪些需要注意的事项

高中化学中蒸馏应注意事项:1、 控制好加热温度。2、选用短颈蒸馏瓶或版者采取其它保温权措施等,保证蒸馏顺利进行。3、蒸馏之前,必须了解被蒸馏的物质及其杂质的沸点和饱和蒸气压,以决定何时收集馏分。4、 蒸馏烧瓶应当采用圆底烧瓶。5、在蒸馏烧瓶中放少量碎瓷片,防止液体暴沸。6、温度计水银球的位置应与支管口下端位于同一水平线上。7、蒸馏烧瓶中所盛放液体不能超过其容积的2/3,也不能少于1/3。8、冷凝管中冷却水从下口进,上口出。9、加热温度不能超过混合物中沸点最高物质的沸点。蒸馏是指利用液体混合物中各组分挥发性的差异而将组分分离的传质过程。一、特点1.通过蒸馏操作,可以直接获得所需要的产品,而吸收和萃取还需要如其它组分。2.蒸馏分离应用较广泛,历史悠久。3.能耗大,在生产过程中产生大量的气相或液相。二、分类1.按方式分:简单蒸馏、平衡蒸馏 、精馏、特殊精馏。2.按操作压强分:常压、加压、减压。3.按混合物中组分:双组分蒸馏、多组分蒸馏。4.按操作方式分:间歇蒸馏、连续蒸馏。三、主要仪器蒸馏烧瓶(带支管的),温度计,冷凝管,牛角管,酒精灯,石棉网,铁架台,支口锥形瓶,橡胶塞

阅读全文

与知识蒸馏的坑相关的资料

热点内容
空气净化器增值税多少 浏览:190
地下室装污水提升器 浏览:241
英诺格林反渗透 浏览:115
污水处理厂厌氧池计算 浏览:849
工业超声波管道除垢 浏览:870
污水怎么去除小窍门 浏览:977
柠檬酸洗超滤ph多少好 浏览:776
污水处理站建设有哪些规定 浏览:125
怎样提高离子交换树脂的体积交换量 浏览:852
WP102型净水机如何清洗 浏览:822
a4空调滤芯什么品牌 浏览:504
蒸馏水对痘什么作用 浏览:369
邯郸水垢清 浏览:451
处理完的污水排放哪里 浏览:317
废水厂爆炸 浏览:813
手机路由器网速提升 浏览:301
回收废水余热 浏览:677
焦化污水厂安装资料执行什么标准 浏览:163
浅层砂过滤器反冲洗原理 浏览:399
乐宜空气净化器怎么用 浏览:230