知识蒸馏的背景
知识蒸馏的概念由Hinton在Distilling the Knowledge in a Neural Network中提出,目的是把 一个大模型或者多个模型集成 学到的知识迁移到另一个轻量级模型上。
做模型压缩的原因:一般情况下,我们在训练模型的时候使用了大量训练数据和计算资源来提取知识,但是大模型不方便部署到服务中去,一是因为大模型的推理速度慢,二是对设备的资源要求高,因此我们希望对训练好的模型进行压缩,在保证推理效果的前提下减小模型的体量。
常用的模型压缩方法有4种:知识蒸馏(Knowledge Distillation,KD)、 轻量化模型架构、 剪枝(Pruning)、 量化(Quantization)。
Knowledge Distillation,简称KD,是模型压缩的一种方法,是一种基于“教师-学生网络思想”的训练方法。
这种方法被广泛应用于降低模型复杂性和减少计算资源需求。知识蒸馏是通过将教师模型的输出概率分布传递给学生模型,并使用软标签作为学生模型的训练目标来实现的。蒸馏可以通过最小化软标签和学生模型输出之间的交叉熵损失来优化。这种方法已经在各种任务和数据集上取得了显著的成功,包括图像分类、自然语言处理和语音识别。
知识蒸馏面临的挑战主要可以分为:模型问题包括教师模型和学生模型不匹配、深层模型和浅层模型之间的容量差距等;成本问题包括模型训练过程对超参数较为敏感以及对损失函数依赖较大等;可解释性不足则是指知识蒸馏的原理解释主要是基于黑盒模型,难以解释模型的决策过程和内部机制。
根据知识在教师-学生模型之间传递的形式可以将知识蒸馏方法归类为标签知识、中间层知识、参数知识、结构化知识和图表示知识。不同知识传递形式下的蒸馏方法的形式化表示及其相关解释整理为表1所示:
标签知识是指通过训练好的模型对数据集进行预测得到的标签信息,通常也被称为“暗知识”。标签知识方法简单通用,易于实现,适合分类、识别、分割等几乎所有任务。但是,标签知识也存在知识单一、依赖于损失函数的设计且对参数敏感等缺点。此外,标签知识中也包含了很多不确定信息,这些信息通常反映了样本间的相似度或干扰性、样本预测的难度。因此,标签知识通常提供的信息十分有限且有相对的不确定性,但它仍然是基础蒸馏方法研究的重点和热点之一,因为其与传统的伪标签学习或者自训练方法有着密切的联系,这实际上为半监督学习开辟了新的道路。标签知识是各种任务中知识蒸馏的基础之一,适用于安全隐私要求相对不高的场景。
中间层知识是指教师模型中间层的特征作为学生模型的目标,相比标签知识蒸馏更加丰富,大大提高了传输知识的表征能力和信息量,有效提升了蒸馏训练效果。中间层知识所表达的是深度神经网络的中间层部件所提取出的高维特征,具有更具表征能力的特征知识。中间层知识可以提高传输知识的表征能力和信息量,有效提升蒸馏训练效果。但是不同架构的教师学生模型的中间层知识表征空间通常难以直接匹配基于中间层知识的蒸馏方法在实践中通常需要考虑教师和学生模型的网络结构,可以将其分为同构蒸馏和异构蒸馏两种情况,如图4所示,同构知识蒸馏(a)中教师和学习模型具有相同的架构,层与层,块与块之间对应,可直接蒸馏;异构知识蒸馏(b)中教师模型和学生模型各个层或块不能完全对应需要通过桥接模块来实现蒸馏。
参数知识是指直接利用教师模型的部分训练好的参数或网络模块参与蒸馏训练,它通常无法作为一个独立的方法,而是与其他蒸馏方法结合使用。目前存在两种形式的参数知识蒸馏方法:教师平均法作为一种稳定训练过程,可以通过对教师模型的多次训练得到多个教师模型,然后将这些教师模型的参数进行平均得到一个更加稳定的教师模型;模块注入法则是将教师模型的某些模块直接注入到学生模型中,以提高学生模型的性能。
结构化知识的传递可以通过两种方式实现:一是直接将教师模型的结构信息复制到学生模型中,二是通过一些规则或算法将教师模型的结构信息转化为学生模型的结构信息。结构化知识的传递可以提高学生模型的泛化能力和可解释性,但也存在一些挑战,如教师模型和学生模型的结构不匹配、结构信息的复杂性等。结构化知识在深度学习中的应用非常广泛,可以用于图像分类、目标检测、自然语言处理等领域。例如,在图像分类任务中,教师模型可以学习到不同类别之间的关系,将这些关系传递给学生模型可以帮助学生模型更好地理解不同类别之间的区别和联系。
传统的知识蒸馏(a)主要是在特征上直接蒸馏;结构化知识蒸馏(b)在特征之上构建特征之间的结构关系(如距离和角度)),两者的对比如图6所示:
图表示知识是指将特征向量映射至图结构来表示其中的关系,以满足非结构化数据表示的学习需求。图表示知识的传递可以通过两种方式实现:一是直接将教师模型中的图表示知识复制到学生模型中,二是通过一些规则或算法将教师模型中的特征向量转化为学生模型中的图表示知识。图表示知识的传递可以提高学生模型的泛化能力和可解释性,但也存在一些挑战,如图表示知识的复杂性、图结构的匹配问题等。
使用图表示知识的蒸馏方法主要集中于两类场景:一是从经典深度神经网络中提取特征的图结构化关系表示知识,二是图神经网络(Graph Neural Networks,GNN)上的知识蒸馏。
图6展示了图表示知识与图表示知识蒸馏示意图,其中,图表示知识(a)通常构建成节点和边的连接形式,而图表示知识蒸馏(b)需要建立在边表示的节点关系或局部图结构上。
类似于人类教师和学生间的学习模式,神经网络的知识蒸馏学习方式也有着多种模式。如离线蒸馏、在线蒸馏、自蒸馏、无数据蒸馏、多模型蒸馏和特权蒸馏。
不同蒸馏方法的优缺点如表所示:
离线蒸馏是指教师模型和学生模型分别独立训练,学生模型只使用教师模型的输出作为标签进行训练。离线蒸馏的优点是灵活可控、易于操作、成本较低,但缺点是无法满足多任务、多领域任务。离线蒸馏主要适用于单任务学习,安全隐私要求相对不高,教师模型可访问的场景。
在线蒸馏是指教师模型和学生模型同时参与训练和参数更新。在线蒸馏的优点是能够满足多任务、多领域任务,能够实时调整教师模型的知识提炼过程,但缺点是计算量大、时间成本高。在线蒸馏主要适用于多任务学习、安全隐私要求较高、教师模型无法访问的场景。在线蒸馏学习模式有互学习、共享学习和协同学习。互学习。互学习的特点是将两个或多个学生模型一起训练并将他们的输出知识作为互相之间的学习目标。互学习的方法包括两个学生模型之间互相学习、多个学生模型互学习等,它们在不同的场景中都有着广泛的应用。互学习的优势在于模型之间可以相互促进实现互补。共享学习。共享学习在多个训练模型中需要通过构建教师模型来收集和汇总知识,并将知识反馈给各个模型,以达到知识共享的目的。与互学习不同,共享学习的模型之间没有直接的相互作用,而是通过教师模型来进行知识的传递和共享。共享学习的方法包括分层共享、分支共享等。协同学习。同学习类似于互学习,主要是在任务上训练多个独立的分支后实现知识集成与迁移并实现学生的同时更新。与互学习不同的是,协同学习的模型之间没有直接的相互作用,而是通过任务的分支来进行知识的传递和共享。协同学习的方法包括分支协同、任务协同等。
自蒸馏学习是指学生模型不依赖于外在模型而是利用自身信息进行蒸馏学习。自蒸馏的优点是不需要预先训练大型教师模型,能够在没有教师模型指导的条件下达到学生模型性能的自我提升,但缺点是需要较长的训练时间和更多的计算资源。自蒸馏主要适用于单任务学习、教师模型无法访问的场景。
无数据蒸馏是指在没有训练数据的情况下,通过对教师模型的分析和理解,直接将其知识传递给学生模型的一种蒸馏方法,也叫零样本蒸馏。这种方法可以在不需要额外标注数据的情况下,提高模型的泛化能力和鲁棒性。无数据蒸馏的优点在于不需要额外的标注数据,可以节省时间和成本。但是需要注意的是,无数据蒸馏的效果可能会受到已有模型的质量和输出的影响。
图无数据蒸馏需要通过噪声合成等效样本同时将知识传递给学生模型,传统知识蒸馏模型和无数据知识蒸馏的结构对比如图
多模型蒸馏是指在蒸馏过程中有多个模型参与,各自集成其他模型输出的知识后进行学习。这种方法可以提高模型的鲁棒性和泛化能力,同时也可以减少过拟合的风险。值得注意的是,多模型蒸馏需要更多的计算资源和时间,因此需要在实际应用中进行权衡。可分为多教师模型和集成学习的多模型蒸馏方式。多教师蒸馏。多教师蒸馏的研究重点在于设计合适的知识组合策略用于指导学生,学习多个教师的优点而摒弃不足。多教师蒸馏对于多任务、多模态学习等有很重要的指导意义,可以解决传统端到端训练方式面临的许多困难。集成学习。集成学习类似于多教师蒸馏,关键在于多个模型的知识集成策略的设计,使其达到优势互补的效果。不同的是,集成学习没有严格意义上的教师模型参与,所有学生模型都同时学习和更新参数。并且,它通常采用多个完全同构的模型,因此对中间层特征的利用度很高。
特权蒸馏主要用于一些隐私保护的场景,教师模型可以利用特权信息,而学生模型可以间接地通过蒸馏学习获得这些信息,从而提升学生的学习效果,降低训练难度。特权蒸馏的知识传递形式主要是以软标签信息为主,学习形式没有严格约束。特权蒸馏的结构是特殊的,特权数据只能教师模型访问,学生模型无法直接访问,学生模型需要通过教师模型来学习,如图9所示。特权蒸馏方法的实现需要考虑如何保护特权信息的安全性,同时也需要考虑如何提高知识的传递效率和学生模型的泛化能力。