本文是一篇软件工程硕士论文,本文着眼于模型压缩中的知识蒸馏技术提出了一种基于自监督学习的多阶段相似度对比知识蒸馏方法以及针对性的知识蒸馏增强策略,提高了轻量级模型的性能,但仍旧存在着各种不足需要进行完善。
第一章绪论
1.1 研究工作的背景与意义
近年来,随着深度学习的不断发展,深度神经网络不仅在学术界受到持续关注,在工业界也已得到了广泛的应用,在图像识别、自然语言处理、物体检测、自动驾驶、医疗诊断和游戏等领域得以落地普及,开始进入到人们的日常生活之中,为人们带来了更多的便利。如今,深度神经网络(Deep Neural Network, DNN)在人工智能任务领域成为了学术界与工业界中的支柱,其在各种各样的人工智能任务中都达到了以往依赖传统手工方法的技术难以望其项背的成绩。而随着5G时代的来临,智慧城市已经不仅仅只是书本上的概念,智慧城市的建设旨在为生活在城市中的人们提供智能化的实时服务,这需要依赖于高性能高实时性的物联网设备来实现[1]。而对资源和能源有严格预算并期望实时处理的边缘设备(如手机,可穿戴设备、机器人、无人机等)在部署复杂的深度神经网络模型时受到了严峻的考验。深度神经网络在依赖强大的模型创新和各种各样不同领域的数据源之外,同样靠着当代处理器的性能提升实现了井喷式地发展,但高性能的处理器往往部署在笨重的机房,这导致很多神经网络模型在已经满足目标任务的情况下却难以在这些资源有限的硬件设备上进行部署,因此降低深度神经网络的存储和计算成本成为一个迫切而有前景的课题[2]。
能够胜任高精度任务的神经网络往往具有庞大的参数,而这随之带来的便是资源有限的硬件设备难以满足的高额的计算开销和内存占用,而甚至深度神经网络的层数已经能够达到10000[3]以上,其模型的参数以及中间状态从百万到数十亿乃至更多。而边缘设备的资源往往是宝贵且有限的,所以如何在保证神经网络模型能够完成任务的同时,尽可能地对模型进行轻量化成为了研究的焦点以及难点。当前学术界对模型轻量化的思路主要可以分为两种,一种是直接设计出轻量网络并满足任务需求,如MobileNet[4]、ShuffleNet[5]、NasNet[6]、GhosNet[7]等等,另一种就是对模型进行压缩,主要分为四种模型压缩方法:低秩分解、参数量化、模型剪枝以及知识蒸馏[8]。前三种方法都是在高性能大体量网络模型的基础上,对原始网络模型进行修改压缩,而这就不可避免地会减低网络模型的性能,同时在原始模型上的改进也会一定程度地限制使用的压缩方法。
1.2 国内外研究历史与现状
1.2.1 轻量化模型方法的研究现状
在模型压缩方法中,降低表示权重值所需的比特数是量化方法的核心思想。在深度神经网络中,一般用32位浮点数来对权重进行存储。所以,减少用于表示权值和激活的比特数可以显著减少所需MAC操作的数量,同时减少训练过的深度神经网络的大小。在量化[9]中,通过减少存储每个权重所需的比特数来表示权重。这一思想也可以进一步推广到以量子化的形式表示梯度和激活。在各种研究中权重已经可以成功地量化为16位、8位、4位以及1位。通过对模型进行量化,降低每一个参数所要占用的空间,但也不可避免地会对模型的性能造成损害,文献[10,11]的方法均采用这种思路。在NVIDIA的经典论文[12]中,采用的量化方法是先将聚类后的权重生成代码本,然后将存储代码本的权重进行共享以实现参数压缩。Han等人[13]基于统计近似方法提出了多点量化,使用了低位数据的多个向量的线性组合来进行近似。Banner等人[14]提出了除了将权重和激活函数量化为8位,也可以将梯度量化为8位的思想。上述文献都有一个的共同的思路,即找到更好进行量化的参数。而有研究人员提出了另一种思路,将需要进行压缩的网络变得更加容易量化。于是,Nagel[15]等人提出了一种8位的量化方法,它不需要进行微调和超参选取。该方法对网络中的权重进行跨层的均衡。对于引入的偏置通过偏差校正对其进行吸收,这样处理后会让模型更适合量化。但是,量化的缺点就在于与其他轻量化方法相比,其实现难度较大,需要在特定的硬件上操作,并且压缩率和性能如何做到权衡仍是如今难以解决的问题,因此,如何选择合适的参数进行压缩是量化进一步发展的关键所在。
第二章 相关理论基础
2.2 常见图像分类神经网络
本节将介绍几种经典的图像分类卷积神经网络,简要概括其模型框架以及实现原理,为第三章和第四章的实验部分做铺垫。
2.2.1 VGGNet
VGGNet(Visual Geometry Group)[56]是Karen Simonyan等人在2014年提出的一种深度卷积神经网络,该网络在2014年的ImageNet大规模视觉识别挑战赛中取得了优异的成绩。VGG的结构与AlexNet类似,区别是深度更深,但形式上更加简单。VGG的架构为5层卷积层、3层FC(Fully Connected Layer,全连接层)、以及最后将softmax层作为了输出层,使用了最大池化层将不同层级进行了隔离,同时选择了ReLU函数作为所有隐藏层的激活函数。VGGNet的成功证明了增加网络深度有利于分类精度,使错误率下降。常用的VGGNet结构有VGG-11,VGG-13,VGG-16,VGG-19。
与更早的卷积神经网络不同,在VGGNet的网络架构中,更小的卷积核以及更小的池化核不仅让网络获得了更深的层数,同时也解决了大的卷积核带来的参数爆炸问题,通过这些改进手段让VGGNet获得了更加优异的性能表现。但VGGNet在模型结构上仍有一定的缺陷,比如,其模型最后采用的3层全连接层在训练时会消耗大量的计算资源,而在存储时也会有一定的限制。所以,后续的很多卷积神经网络模型采用了全局池化的操作来替换或者减少全连接层的使用。
2.3 自监督学习
自监督学习[59]的提出是因为深度监督学习严重依赖昂贵的手动标签,所以研究人员们期望神经网络在较少的标签和样本的基础之上能够让神经网络学习更多,表现更加优异。而自监督表示学习可以在缺乏标签数据的情况下,通过利用输入数据本身作为监督来对网络模型进行训练,并几乎可以让所有类型的下游任务受益。自监督学习的核心思想是通过从训练的数据身上生成类似标签的监督信号,通过生成的数据标签来对其他的数据进行预测等操作。虽然都是没有涉及手动标签,但自监督学习和无监督学习还是有着一定的不同,自监督学习可以被视作无监督学习的一类分支,但无监督学习的研究重点在于对数据模式等的特定检测,而自监督学习更加关注于通过少量标签或者无标签的数据完成有监督学习的部分任务。如图2-5所示,主流的自监督学习可以分为三大类[60,61],一是生成性自监督学习,其核心思想是训练编码器将输入x编码为显式向量z,然后训练解码器从z重建x;二是对比性自监督学习,训练编码器将编码为显式向量z ,基于正负样本的差异以衡量相似性;三是生成-对抗性自监督学习,其思想是训练编码器生成假样本,最后训练鉴别器将其与真实样本区分开来。
第三章 基于自监督学习的多阶段相似度对比知识蒸馏算法 ··············· 22
3.1 引言······························ 22
3.2 多阶段相似度对比知识蒸馏 ····················· 22
第四章 自监督学习知识蒸馏增强策略 ···················· 37
4.1 引言····················· 37
4.2 显著性数据增强 ······················ 37
第五章 系统实现 ······························· 55
5.1 需求分析 ································· 55
5.1.1 系统功能性需求 ··························· 55
5.1.2 系统非功能性需求 ························· 58
第五章 系统实现
5.1 需求分析
在本小节中将对系统的功能性需求以及非功能性需求进行分析说明。
5.1.1 系统功能性需求
系统的主要需求如图5-1所示,系统的需求分别从两个方面进行分析,一是系统的使用者即用户,二是系统的管理者。在用户的角度中,系统主要提供了登录注册、图像分类、图像前景提取等功能。而在管理员角度,需要实现管理员对模型以及用户进行管理的角色功能,例如,用户管理、模型的添加更新与删除等等。
第六章 全文总结与展望
6.1 全文总结
现如今人工智能技术正在蓬勃发展的阶段,不仅在学术界收到持续的关注,而且在工业领域也得到了广泛的应用。然而如手机、无人机等边缘设备在面对高实时任务时,当前的深度神经网络面对了一个两难的问题,高性能的神经网络由于边缘设备的计算以及存储资源有限难以进行部署,而轻量级的神经网络模型由于性能不佳又难以满足需求。因此,在调研了各类模型轻量化的技术并权衡优劣后,本文以模型压缩中的知识蒸馏技术为核心,展开了深度神经网络的轻量化研究,在模型为轻量级的基础上,不增加模型体量而提高性能,为其在资源有限设备上的应用做铺垫。
首先,本文通过对知识蒸馏技术进行了深入的调研,并总结了现如今得到广泛认可的知识蒸馏技术,同时也阐述了当前这些方法需要解决的问题以及改进的方向。然后本文对常用卷积神经网络、自监督学习方法以及传统知识蒸馏方法进行了简要的介绍,为文章后续内容和实验打下基础。
本文基于传统知识蒸馏技术,为了让教师网络向学生网络传递更加丰富的知识,以让学生网络在保持轻量化的同时学习到更加优秀的表示,通过改进传统知识蒸馏技术得到了一种基于自监督学习的多阶段相似度对比知识蒸馏(MSCKD)方法