蒸馏:把比较不纯净的水,通过加热,凝聚成水蒸气,然后再凝聚成纯净的蒸馏水。
知识蒸馏,也是把一个非常大的东西,蒸馏成一个小的,纯净的东西。
就是用大的教师网络,把知识传递给小的网络,去训练小的学生网络模型。最后学生取代教师。
把大模型,部署到小的电脑,电视,手机中。
总结:
我们用大模型时,它的计算量很大,需要很多的算力,我们没办法直接部署到手机上,在使用小模型时,它是由大模型来提取出来的信息,它并不准确,它的性能不如大模型。知识蒸馏就是把大模型的内容转移到小的模型中。
1.知识的表示与迁移
假设我们把马的照片喂给神经网络,他会有很多类别,比如猫的概率,马的概率, 汽车的概率。我们在训练时告诉模型这是一个马,那么马的概率为1,驴子和汽车的概率为0.这种我们称为硬目标,但是这并不科学,这样就是告诉神经网络,这就是一匹马,它等于汽车等于驴的概率都是零,是相等的,我们的模型只能区分马和汽车,驴子的差异,但是并不能去找到汽车和驴子的差异。我们现在需要让模型知道,它是一匹马,但是他和驴子有一点相似,和汽车完全不相似。于是就引入了软目标。
就是这个soft targets可以传递更多信息。
就是soft target,可以让我们的模型学习到更多的信息。
就是soft target,可以让我们的模型学习到更多的信息。就是那种有多像,多不像,像谁,不像谁,特别是非正确概率类别的相对大小。(驴和车)
现在我们觉得这个Soft Target,它还不够Soft,我们想让他的相对概率变得更大,更下Soft。
这个时候要去引入一个蒸馏温度T。引入这个公式。
如果T=1,就是原生SoftMax。这个公式可以让,高的地方更低,低的地方更高,但是他们的大小仍然保持不变。
按照新的公式之后,他变得更强大。
2.知识蒸馏的过程
我们先有一个训练好的教师模型,然后他会给每一个数据一个温度为t的时候的softmax。
然后我们再把数据喂给学生网络,然后用它用温度为t去做一个softmax,我们去对比学生网络温度为t时的softmax和教师的softmax去做一个对比,我们希望学生和教师的softmax越接近越好。
同时学生自己也做一个t=1的softmax,我们把结果和我们的样本硬标签去做一个对比,我们希望他俩也越接近越好。
.
公式如下:
最后我们把两个损失函数乘以一个权重,并且把两个权重相加得到总权重,我们希望总权重越小越好。
再去做一个简化的模型:
教师网络是比较大的,比较臃肿的,学生网络是比较轻巧的,两个网络综合训练,得到的就是一个特别轻巧的学生网络。
作者用手写数字题识别,预训练时做出了一个很好的效果,就是教师网络学了关于3的知识,然后让学生网络去学习一个手写数字体识别数据集(我们把所有的3扣掉),然后再测试集上加入3,学生网络仍然可以分辨3.(因为教师网络已经把关于3的知识传递给学生网络了)
最后结果对比,徒弟和老师其实他们的性能差不多,但是徒弟更轻量化,(教会徒弟 饿死师傅),这个东西以后也被用作了一些少样本和零样本学习。
知识蒸馏和迁移学习的区别:
迁移学习:举个例子,他把训练猫狗的数据集,然后去训练出一个猫狗的模型,然后我们把这个猫狗的模型去训练X胸片的数据集,然后达到一个领域前一段额效果。迁移学习更加倾向的是领域之间的迁移。
只是蒸馏:是把一个模型的知识迁移到另一个小的模型,通常把一个大模型的内容传递给小模型。模型蒸馏更加注重模型之间的迁移。
我们可以用知识蒸馏实现迁移学习,也可以两种没啥关系。
3.知识蒸馏背后的原理
假设,我们的教师模型的领域是绿色区域,我们的学生模型是蓝色区域,学生的知识是黄圈,教师的是红色圈,我们的知识蒸馏就是通过我们的红圈,慢慢引导我们的学生的黄泉去靠近红圈,收敛到橙色圈圈。
论文部分
知识蒸馏可以实现从大模型浓缩到小模型。
比如豆包,gpt这些大模型,他们无法直接部署到小模型中。知识整理就是大模型非常重要的压缩到小模型的方法。
针对大模型,它的数据量足够大,他无法直接部署到移动设备中,针对小模型,他被部署之后,他需要保证一个实时性,以及轻量原则。所以就有了知识蒸馏。
知识蒸馏的核心思想就是把一个已经训练好的大模型,压缩成一个小模型。
摘要
在相同数据上训练不同的模型,然后对他们的预测结果取平均值可以显著提高任何机器学习算法的性能。
但是当我们使用一整套模型时就会导致模型的计算成本高,无法部署给本地。现在已经有研究证明可以将一个集成模型的知识压缩到单一模型中,这样可以实现轻量的部署。并且证明,这也部署效果非常好。作者做了一个新的模型集成,他由非常大的模型组成,然后再部署到一个小的模型中,这样可以保持很好的性能,并且足够轻量。
1.引言
昆虫幼年时注重从环境中获取营养,成年时注重繁殖和移动。他在不同时期需要做的事是不一样的,模型也是这样,在大规模机器学习中,在训练时我们需要非常庞大的计算资源,我们需要从銮舆的数据中提取结构,但是在部署阶段,我们需要它轻量,并且达到很好的性能。为了解决这个问题,目前已经有人先训练出一个非常大型的模型,里面包含各种知识,然后再用大模型把复杂的知识转移到轻量的小的模型中。这个过程我们称为知识蒸馏。
在大模型训练小模型时,我们的惯性思维就是直接把大模型中的参数直接转移到小模型中,但其实这样是不好的,机器无法理解大模型在浓缩成小模型时应该如何保留知识。对于那些大模型来说,他们就是这种硬目标,他们希望同一类相似度尽可能高,不同类相似度非常非常低。但是在实际情况中,只有这种软目标才能够学习更多的知识。(只有软目标才能够更好地帮助模型学习)
人们普遍认为,用于训练的目标函数应尽可能贴近用户的真实目标。尽管如此,模型训练通常是为了优化在训练数据上的表现,而真正的目标却是对新数据有良好的泛化能力。(我们目前认为的泛化,他是一个伪泛化),为了提高这个真正的泛化能力,我们需要正确的泛化信息,但是这类信息很难获取。我们的大模型取多个模型的平均值效果很好,然后让小模型按照同样的方式去进行泛化,也能达到一个很好的效果。(知识蒸馏就是把大模型的训练方式转移到小模型中)
(通俗一点:比如在图像识别任务中,大型模型集合平均后对不同类别的图像特征把握更全面。小型模型按常规训练,可能只记住了训练集中图像的部分表面特征;而按大型模型泛化方式训练的小型模型,能学到大型模型那种综合各类特征判断的能力,在面对新的测试图像时,就能更准确地识别。)
将复杂模型的泛化能力转移到小型模型的一种直观方法,是把复杂模型生成的类别概率当作训练小型模型的 “软目标”。我们的训练小模型的数据集可以使用相同的数据集也可以使用“子集”。当复杂模型是由大量较简单的模型组成的集合时,我们可以将这些简单模型各自预测分布的算术平均数或几何平均数作为软目标。软目标可以让小模型获得更多的信息。
我们小模型的训练集可以小样本甚至零样本。事实证明学习学习一些错误的样本是非常有用的。
2.蒸馏
在知识蒸馏中,知识被蒸馏的方式为:在迁移集上对其进行训练,并对迁移集中的每个样本使用软目标分布,该软目标分布是通过让复杂模型在其 softmax 函数中采用较高温度参数来生成的。在训练蒸馏模型时,也使用相同的高温参数,但训练完成后,蒸馏模型使用的温度参数为 1。
当迁移集中全部或部分样本的正确标签已知时,通过同时训练蒸馏模型以输出正确标签,这种方法可以得到显著改进。一种实现方式是使用正确标签来修改软目标,但我们发现更好的方法是简单地采用两个不同目标函数的加权平均值。第一个目标函数是与软目标之间的交叉熵,在计算该交叉熵时,蒸馏模型的 softmax 函数中使用的温度参数,与从复杂模型生成软目标时所用的温度参数相同。第二个目标函数是与正确标签之间的交叉熵。计算该交叉熵时,在蒸馏模型的 softmax 函数中使用完全相同的对数几率,但温度参数设为 1。
文章大概说的就是这个模型:
2.1 匹配对数几率是知识蒸馏的一种特殊情况
3.关于 MNIST的初步实验
为探究知识蒸馏效果,用 6 万样本训练大型双隐层神经网络(每层 1200 个 ReLU 单元),以 dropout 和权重约束正则化,输入图像可抖动。该网络测试错 67 个,无正则化的小网络(每层 800 个 ReLU 单元)错 146 个,小网络匹配大网络温度 20 时生成的软目标后,错 74 个,说明软目标能有效转移知识。
小网络隐层单元数不同,合适的温度参数不同:每层超 300 单元时,温度超 8 效果相似;每层 30 单元时,2.5 - 4 效果最佳。
此外,迁移集去掉数字 3 样本,蒸馏模型虽未见过 3 ,但调偏差后能高准确率识别;迁移集只有 7 和 8 样本时,调偏差也能降低测试错误率 。(它能够实现零样本学习)
4.语音识别方面的实验
本节研究用于自动语音识别(ASR)的深度神经网络(DNN)声学模型集成效果。提出的知识蒸馏策略能将模型集合知识提炼到单个模型,其性能优于同等规模直接从相同数据训练的模型。
当前先进 ASR 系统用 DNN 把波形特征的短时上下文,映射到隐马尔可夫模型(HMM)离散状态的概率分布。具体是 DNN 生成三音素状态簇概率分布,解码器找 HMM 状态路径,平衡高概率状态与语言模型下的转录结果。常见做法是,训练 DNN 通过最小化预测与强制对齐标签的交叉熵,做逐帧分类,而非考虑解码器和语言模型。