赞
踩
大规模机器学习和深度学习模型越来越普遍。例如,GPT-3 使用 570 GB 文本进行训练,包含 1750 亿个参数。然而,虽然训练大型模型有助于提高最先进的性能,但部署如此繁琐的模型(尤其是在边缘设备上)并不简单。
此外,大多数数据科学建模工作侧重于训练单个大型模型或不同模型的集合,以便在保留验证集上表现良好,而该验证集通常不能代表现实世界的数据。
训练和测试目标之间的这种不一致导致了机器学习模型的开发,这些模型在策划的验证数据集上产生了良好的准确性,但在对实际测试数据进行推理时通常无法满足性能、延迟和吞吐量基准。
知识蒸馏[1]通过捕获复杂机器学习模型或模型集合中的知识并将其“蒸馏”为更小的单一模型来帮助克服这些挑战,该模型更容易部署,而且不会显着降低性能。
本文简单描述知识蒸馏、其基本原理、训练方案和算法;更深入地研究知识蒸馏在图像、文本和音频深度学习中的应用。
知识蒸馏是指将知识从大型笨重模型或模型集转移到可以在现实世界约束下实际部署的单个较小模型的过程。本质上,它是一种模型压缩形式,由 Bucilua 及其合作者于 2006 年首次成功演示[2]。
知识蒸馏更常见于与复杂架构(包括多个层和模型参数)相关的神经网络模型。因此,随着过去十年深度学习的出现,及其在语音识别、图像识别和自然语言处理等多个领域的成功,知识蒸馏技术在实际应用中获得了突出的地位[3]。
部署大型深度神经网络模型的挑战对于内存和计算能力有限的边缘设备尤其重要。为了应对这一挑战,首先提出了一种模型压缩方法[2],将大型模型中的知识转移到训练较小的模型中,而不会造成任何显着的性能损失。Hinton 等人将这种从较大模型中学习小模型的过程形式化为“知识蒸馏”框架 [1]。
如图 1 所示,在知识蒸馏中,小型“学生”模型学习模仿大型“教师”模型,并利用教师的知识来获得相似或更高的准确性。在下一节中,我将更深入地研究知识蒸馏框架及其底层架构和机制。
图1.知识蒸馏框架
知识蒸馏系统由三个主要组成部分组成:知识、蒸馏算法和师生架构[3]。
在神经网络中,知识通常是指学习到的权重和偏差。同时,大型深度神经网络的知识来源具有丰富的多样性。典型的知识蒸馏使用逻辑作为专家知识的来源,而其他的则关注中间层的权重或激活。其他类型的相关知识包括不同类型的激活和神经元之间的关系或模型本身的参数。
不同形式的知识分为三种不同类型:基于响应的知识、基于特征的知识和基于关系的知识。图 2 说明了大模型中的这三种不同类型的知识。
图 2. 大模型知识
如图 2 所示,基于响应的知识侧重于教师模型的最终输出层。假设学生模型将学习模仿教师模型的预测。如图 3 所示,这可以通过使用称为蒸馏损失的损失函数来实现,该函数分别捕获学生模型和教师模型的 logits 之间的差异。由于这种损失在训练过程中被最小化,学生模型将能够更好地做出与教师相同的预测。
在图像分类等计算机视觉任务的背景下,软目标包含基于响应的知识。软目标表示输出类的概率分布,通常使用 softmax 函数进行估计。每个软目标对知识的贡献是使用temperature参数来调节的。基于软目标的基于响应的知识蒸馏通常用于监督学习的背景下。
图 3. 基于响应的知识蒸馏
经过训练的教师模型还会捕获中间层中的数据知识,这对于深度神经网络尤其相关。中间层学习区分特定特征,这些知识可用于训练学生模型。如图 4 所示,目标是训练学生模型学习与教师模型相同的特征激活。蒸馏损失函数通过最小化教师模型和学生模型的特征激活之间的差异来实现这一点。
图 4. 基于特征的知识蒸馏
除了神经网络输出层和中间层中表示的知识之外,捕获特征图之间关系的知识也可以用于训练学生模型。这种形式的知识,称为基于关系的知识,如图 5 所示。这种关系可以建模为特征图、图、相似度矩阵、特征嵌入或基于特征表示的概率分布之间的相关性。
图 5. 基于关系的知识蒸馏
训练学生和教师模型的方法主要有三种,即离线、在线和自蒸馏。蒸馏训练方法的分类取决于教师模型是否与学生模型同时修改,如图6所示。
图6.知识蒸馏培训方案的类型
1. 离线蒸馏
离线蒸馏是最常见的方法,其中使用预先训练的教师模型来指导学生模型。在该方案中,首先在训练数据集上对教师模型进行预训练,然后从教师模型中提取知识来训练学生模型。鉴于深度学习的最新进展,各种预训练的神经网络模型已经公开可用,可以根据用例充当老师。离线蒸馏是深度学习中的一项成熟技术,并且更容易实现。
2、在线蒸馏
在离线蒸馏中,预训练的教师模型通常是大容量深度神经网络。对于某些用例,预训练的模型可能无法用于离线蒸馏。为了解决这一限制,可以使用在线蒸馏,其中教师和学生模型在单个端到端训练过程中同时更新。在线蒸馏可以使用并行计算来操作,从而使其成为一种高效的方法。
3、自蒸馏
如图 6 所示,在自蒸馏中,教师模型和学生模型使用相同的模型。例如,来自深层神经网络更深层的知识可用于训练浅层。它可以被认为是在线蒸馏的一个特例,并以多种方式实例化。教师模型早期时期的知识可以转移到后期时期来训练学生模型。
学生-教师网络架构的设计对于有效的知识获取和提炼至关重要。通常,更复杂的教师模型和更简单的学生模型之间存在模型能力差距。通过高效的师生架构优化知识转移,可以缩小这种结构性差距。
由于深度神经网络的深度和广度,从深度神经网络转移知识并不简单。最常见的包括学生模型的知识转移架构:
除了上述方法之外,神经架构搜索等最新进展也可用于在给定特定教师模型的情况下设计最佳学生模型架构。
在本节中,我将重点讨论训练学生模型从教师模型中获取知识的算法。
对抗性学习最近在生成对抗网络的背景下概念化,用于训练一个生成器模型,该模型学习生成尽可能接近真实数据分布的合成数据样本,以及一个鉴别器模型,该模型学习区分真实数据和合成数据样品。这个概念已应用于知识蒸馏,使学生和教师模型能够更好地表示真实数据分布。
为了满足学习真实数据分布的目标,可以使用对抗性学习来训练生成器模型以获得合成训练数据以供使用或增强原始训练数据集。第二种基于对抗性学习的蒸馏方法侧重于鉴别器模型,以基于逻辑或特征图区分学生模型和教师模型的样本。这种方法可以帮助学生很好地模仿老师。第三种基于对抗性学习的蒸馏技术侧重于在线蒸馏,其中学生和教师模型共同优化。
在多教师蒸馏中,学生模型从多个不同教师模型获取知识,如图 7 所示。使用教师模型集合可以为学生模型提供不同类型的知识,这比从单个教师获取的知识更有益模型。
来自多个教师的知识可以合并为所有模型的平均响应。通常从教师传授的知识类型基于逻辑和特征表示。多名教师可以传授不同类型的知识,如第 2.1 节所述。
图7.多师蒸馏
图8展示了跨模式蒸馏训练方案。在这里,教师接受一种模式的培训,其知识被提炼给需要不同模式知识的学生。当在训练或测试期间无法获得特定模式的数据或标签时,就会出现这种情况,因此需要跨模式转移知识。
跨模式蒸馏最常用于视觉领域。例如,接受过标记图像数据训练的教师的知识可用于蒸馏具有未标记输入域(如光流、文本或音频)的学生模型。在这种情况下,从教师模型的图像中学习到的特征用于学生模型的监督训练。跨模式蒸馏对于视觉问答、图像字幕等应用非常有用。
图 8. 跨模式蒸馏
除了上面讨论的蒸馏算法之外,还有其他几种算法已应用于知识蒸馏。
知识蒸馏已成功应用于图像识别、NLP 和语音识别等多种机器学习和深度学习用例。在本节中,我将重点介绍知识蒸馏技术的现有应用和未来潜力。
知识蒸馏在计算机视觉领域的应用非常多。最先进的计算机视觉模型越来越多地基于深度神经网络,该网络可以从部署的模型压缩中受益。知识蒸馏已成功应用于以下用例:图像分类, 人脸识别, 图像分割, 动作识别, 物体检测, 车道检测, 行人检测, 面部标志检测, 姿态估计, 视频字幕, 图像检索,阴影检测, 文本到图像的合成, 视频分类, 视觉问答等[3]。
知识蒸馏还可用于跨分辨率人脸识别等利基用例,其中基于高分辨率人脸教师模型和低分辨率人脸学生模型的架构可以提高模型性能和延迟。由于知识蒸馏可以利用不同类型的知识,包括跨模态数据、多领域、多任务和低分辨率数据,因此可以针对特定的视觉识别用例训练各种蒸馏学生模型。
鉴于语言模型或翻译模型等大容量深度神经网络的普遍存在,知识蒸馏在NLP应用中的应用尤其重要。最先进的语言模型包含数十亿个参数,例如,GPT-3 包含 1750 亿个参数。这比之前最先进的语言模型 BERT 高出几个数量级,BERT 的基础版本包含 1.1 亿个参数。
因此,知识蒸馏在 NLP 中非常流行,以获得快速、轻量级的模型,这些模型训练起来更容易且计算成本更低。除了语言建模之外,知识蒸馏也用于 NLP 用例,例如:神经机器翻译,文本生成,问答、文献检索,文本识别[3]。
使用知识蒸馏,可以获得高效、轻量级的 NLP 模型,并且可以以较低的内存和计算要求进行部署。学生-教师培训还可用于解决多语言 NLP 问题,其中多语言模型的知识可以相互转移和共享。
DistilBERT是Hugging Face 开发的更小、更快、更便宜、更轻的 BERT 模型 [4]。在这里,作者预训练了一个较小的 BERT 模型,该模型可以在各种 NLP 任务上进行微调,并且具有相当高的准确性。在预训练阶段应用知识蒸馏,以获得 BERT 模型的蒸馏版本,该模型缩小了 40%(6600 万个参数 vs. 1.1 亿个参数),速度提高了 60%(GLUE 情绪推理需要 410 秒 vs 668 秒)分析任务),同时保留相当于原始 BERT 模型准确率 97% 的模型性能。在 DistilBERT 中,该学生具有与 BERT 相同的架构,并使用一种新颖的三元组损失来获得,该三元组损失结合了与语言建模、蒸馏和余弦距离损失相关的损失。
最先进的语音识别模型也基于深度神经网络。现代 ASR 模型是端到端训练的,并且基于包括卷积层、具有注意力的序列到序列模型以及最近的转换器的架构。对于实时设备上语音识别,获得更小、更快的模型以获得有效的性能变得至关重要。
语音中的知识蒸馏有几个用例:语音识别, 口语识别,音频分类, 说话人识别,声学事件检测,语音合成,语音增强,抗噪声 ASR,多语言 ASR、口音检测[10]。
Parthasarathi 和 Strom (2019) 利用学生-教师训练为 100 万小时的未标记语音数据生成软目标,其中训练数据集仅包含 7000 小时的标记语音。教师模型产生了所有输出类别的概率分布。学生模型还生成了给定相同特征向量的输出类的概率分布,并且目标函数优化了这两个分布之间的交叉熵损失。在这里,知识蒸馏有助于简化大型语音数据语料库上目标标签的生成。
现代深度学习应用程序基于笨重的神经网络,具有大容量、内存占用和推理延迟慢的特点。将此类模型部署到生产中是一个巨大的挑战。知识蒸馏是一种优雅的机制,可以训练从大型、复杂的教师模型派生的更小、更轻、更快、更便宜的学生模型。在 Hinton 及其同事(2015)提出知识蒸馏的概念之后,为获得生产用例的高效、轻量级模型而采用知识蒸馏方案的情况大幅增加。知识蒸馏是一种基于不同类型的知识、训练方案、架构和算法的复杂技术。知识蒸馏已经在计算机视觉、自然语言处理、语音等多个领域取得了巨大的成功。
[1] Distilling the Knowledge in a Neural Network. Hinton G, Vinyals O, Dean J (2015) NIPS Deep Learning and Representation Learning Workshop. https://arxiv.org/abs/1503.02531
[2] Model Compression. Bucilua C, Caruana R, Niculescu-Mizil A (2006) https://dl.acm.org/doi/10.1145/1150402.1150464
[3] Knowledge distillation: a survey. You J, Yu B, Maybank SJ, Tao D (2021) https://arxiv.org/abs/2006.05525
[4] DistilBERT, a distilled version of BERT: smaller, faster, cheaper and lighter (2019) Sanh V, Debut L, Chammond J, Wolf T. https://arxiv.org/abs/1910.01108v4
[5] Lessons from building acoustic models with a million hours of speech (2019) Parthasarathi SHK, Strom N. https://arxiv.org/abs/1904.01624
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。