当前位置: 首页 > 科技观察

大模型精准反哺小模型,知识蒸馏助力提高 AI 算法性能

时间:2023-03-21 00:07:45 科技观察

大模型精准反馈小模型,知识蒸馏有助于提升AI算法性能。深度学习的成功很大程度上归功于其可扩展的架构,用于对具有数十亿参数的数据进行编码。它的训练目标是在现有的训练数据集上模拟输入和输出之间的关系。它的性能在很大程度上取决于网络的复杂性和标记训练数据的数量和质量。与计算机视觉领域的传统算法相比,大多数基于DNN的模型由于过参数化而具有很强的泛化能力。这种泛化能力体现在针对某个问题的所有数据输入上。模型可以给出更好的预测结果,无论是训练数据、测试数据,还是属于问题的未知数据。在当前深度学习的背景下,为了提高业务算法的预测效果,算法工程师往往有两种解决方案:使用参数化且更复杂的网络,其学习能力非常强,但需要大量的计算资源。训练和推理速度较慢。集成模型集成了很多效果较弱的模型,通常包括参数的集成和结果的集成。这两种方案可以显着提升现有算法的效果,但都增加了模型的规模,导致计算负担大,需要大量的计算和存储资源。在工作中,各种算法模型的最终目的都是为一个应用服务。就像买卖一样,我们需要控制收入和支出。在工业应用中,除了要求模型有良好的预测能力外,还必须严格控制计算资源的使用,不能只考虑结果而不考虑效率。在输入数据编码量大的计算机视觉领域,计算资源更为有限,控制算法的资源占用更为重要。一般来说,较大的模型具有更好的预测性能,但训练时间长和推理速度慢使得模型难以实时部署。尤其是在视频监控、自动驾驶汽车、高吞吐量云环境等计算资源有限的设备上,响应速度明显不够。虽然较小模型的推理速度更快,但由于参数数量不足,推理效果和泛化性能可能不会那么好。如何平衡大尺度模型和小尺度模型一直是一个热门话题。目前的解决方案大多是根据终端设备在部署环境中的性能选择合适规模的DNN模型。如果我们希望有一个更小的模型可以达到与大模型相同或接近的效果,同时保持快速的推理速度,我们应该怎么做呢?在机器学习中,我们经常假设输入和输出之间存在潜在的映射函数关系。从头开始学习新模型是输入数据和相应标签之间近似未知的映射函数。在输入数据不变的前提下,从头开始训练一个小模型,从经验的角度很难接近大模型的效果。为了提高小模型算法的性能,一般来说,最有效的方法是标记更多的输入数据,即提供更多的监督信息,这可以使学习到的映射函数更鲁棒,性能更好。举两个例子,在计算机视觉领域,实例分割任务可以通过提供额外的掩码信息来提高目标边界框检测的效果;迁移学习任务可以通过在更大的数据集上提供预训练模型来显着改进新任务。预测效果。因此,提供更多的监督信息可能是缩短小尺度模型与大尺度模型之间差距的关键。按照前面的说法,想要获得更多的监督信息,就意味着要标注更多的训练数据,而这往往需要付出巨大的代价。那么有没有一种低成本、高效的监管信息获取方式呢?2006年的文献[1]指出新模型可以近似(approximate)原模型(模型就是函数)。因为原模型的功能是已知的,新模型的训练相当于自然而然地加入了更多的监督信息,显然更具有可行性。进一步思考,原模型带来的监督信息可能包含不同维度的知识,而这些有特色的信息未必是新模型本身捕捉不到的。domain”学习。2015年,Hinton沿袭论文《Distilling the Knowledge in a Neural Network》[2]中近似的思想,率先提出了“知识蒸馏(KD)”的概念:可以先训练一个大而强大的模型,然后可以将其中包含的知识迁移到小模型上,达到“在保持小模型较快的推理速度的同时,达到与大模型相当或接近的效果”的目标。其中,先训练的大模型可以称为教师模型,后训练的小模型称为学生模型。整个训练过程可以形象地比喻为“师生学习”。在随后的几年中,大量的knowledgedistillation和teacher-studentlearningwork的出现,为业界提供了更多新的解决方案。目前,KD被广泛应用于两个不同的领域:模型压缩和知识迁移[3]。02KnowledgeDistillation简介KnowledgeDistillationi是一种基于“师生网络”思想的模型压缩方法。由于其简单性和有效性,它在行业中被广泛使用。它的目的是将训练好的大模型——Distill——中包含的知识提取到另一个小模型中。那么如何将大模型的知识,或者泛化能力迁移到小模型呢?KD论文提供了大模型到样本输出的概率向量作为软目标(softtargets)到小模型,这样小模型的输出应该尽可能往这个软目标(原来是为了依靠单热编码)来近似学习模型的行为。在传统的hardlabel训练过程中,所有的negativelabels都被统一对待,但是这种方法分离了类别之间的关系。例如,要识别手写数字,标签为“3”的同一张图片可能更像“8”,有些更像“2”。硬标签无法区分这些信息,但训练有素的大型模型可以给出。大模型softmax层的输出,除了正例之外,还包含了很多信息,比如一些负标签对应的概率比其他负标签大很多。近似学习的行为使得每个样本给学生网络带来比传统训练方法更多的信息。因此,作者在训练学生网络时修改了损失函数,让小模型在拟合训练数据的groundtruth标签的同时,拟合大模型输出的概率分布。这种方法称为知识蒸馏训练(KDTraining)。知识蒸馏过程中使用的训练样本可以和训练大模型的训练样本一样,也可以找一个独立的Transferset。方法详解具体来说,知识蒸馏采用的是Teacher-Student模型,教师是“知识”的输出者,学生是“知识”的接受者。知识蒸馏的过程分为两个阶段:teachermodeltraining:训练“teachermodel”,简称Net-T,其特点是模型相对复杂,也可以由多个单独训练的模型进行集成。对于“Teachermodel”,模型架构、参数量、是否集成没有限制,因为模型不需要部署。唯一的要求就是对于输入X,它可以输出Y,其中Y是通过softmax映射的,输出值对应对应类的概率值。Studentmodeltraining:训练“Studentmodel”,简称Net-S,是一个单一的模型,参数数量少,模型结构相对简单。同理,对于输入X,它可以输出Y,Y也可以输出经过softmax映射后的对应类别对应的概率值。由于网络使用softmax的结果很容易走极端,即某个类的置信度极高,而其他类的置信度很低。这时候student模型关注的正面班级信息可能仍然只属于某个班级。此外,由于不同类别的负类信息也具有相对重要性,所有负类分数几乎相同也不好,达不到知识蒸馏的目的。为了解决这个问题,引入了温度(Temperature)的概念,利用高温蒸馏出小概率值所携带的信息。具体来说,logits在通过softmax函数之前除以温度T。在训练过程中,教师模型学到的知识首先被提炼到小模型中。具体来说,对于样本X,大模型的倒数第二层先除以一个温度T,然后通过softmax预测一个软目标,小模型同理,倒数第二层除以相同的温度T,然后通过softmax预测一个结果,然后用这个结果和软目标的交叉熵作为训练总损失的一部分。然后使用小模型的正常输出和真实标签(硬目标)的交叉熵作为训练总损失的另一部分。总损失将这两个损失加权在一起作为训练小模型的最终损失。当训练小模型需要预测时,不需要有温度T,输出直接跟常规的softmax即可。03FitNet简介FitNet论文在蒸馏过程中引入了中级提示来指导学生模型的训练。使用宽而浅的教师模型来训练窄而深的学生模型。在进行hintguidance时,建议使用一个层来匹配hintlayer和guidedlayer的输出形状,在后面的工作中常被称为adaptationlayer。总的来说,相当于在做知识蒸馏时,不仅使用了teacher模型的logit输出,还使用了teacher模型的中间层featuremap作为监督信息。可以想象,小模型在输出端直接模仿大模型太难了(模型越深越难训练,把最后一层的监督信号传到front),最好在中间加入一些supervisorysignals,让模型在训练时可以逐层接受和学习更难的映射函数,而不是直接学习最难的映射函数;此外,提示指导加速了学生模型的收敛。在非凸问题上找到更好的局部最小值可以让学生网络更深,同时训练更快。感觉,我们的目的是让学生做高考题,所以先教他初中题(让小模型用前半部分模型学习提取图像底层特征),然后回归本源,进入高考题(使用KD调整小模型的所有参数)。这篇文章是蒸馏中间特征图的始祖。提出的算法非常简单,但想法是开创性的。FitNets的详细方法如下:确定teachernetwork,训练成熟,提取teachernetwork中间特征层的hint。设置学生网络,一般比教师网络更窄更深。训练学生网络,使学生网络的中间特征层与教师模型的提示匹配。由于学生网络的中间特征层与教师的提示大小不同,因此需要在学生网络的中间特征层之后添加一个回归器进行特征维数增强以匹配提示层的大小。匹配teachernetworkhintlayer和studentnetwork中间特征层经过regressor转换后的损失函数就是均方误差损失函数。在实际训练中,往往与上一节的KDTraining结合使用,采用两阶段的方式进行训练:先用hinttraining预训练小模型前半部分的参数,再用KDTraining训练所有参数。由于在蒸馏过程中使用了更多的监督信息,因此基于中间特征图的蒸馏方法比基于结果logits的蒸馏方法表现更好,但训练时间更长。04总结知识蒸馏对于将知识从集成或从大型、高度正则化的模型转移到较小的模型非常有效。即使在用于训练蒸馏模型的传输数据集中缺少任何一个或多个类的数据,蒸馏也能非常有效地工作。经典的KD和FitNet提出后,各种蒸馏方法如雨后春笋般涌现。未来,我们也希望在模型压缩和知识迁移等领域做进一步的探索。作者简介马嘉良,网易易盾高级计算机视觉算法工程师,主要负责内容安全领域计算机视觉算法的研发、优化和创新。