深度神经网络的压缩学习笔记
特点:训练好一个网络 ===>> 去除多余的部分 ===>> 重训练调整 ===> 在精度可接受的范围内,反复进行 ==> 压缩完成
说明
- 20190325,完成初步编写
研究背景
-
问题:
神经网络均取得了出类拔萃的效果,是以如此巨大的存储代价与计算开销的,严重制约了深度网络在移动端等小型设备上的应用。 -
解决方式:
第一种,针对现有的高效深度模型进行压缩优化,使之在不明显降低性能的情况下减少参数量和存储空间。
第二种,是设计较为简单的网络模型,同时达到与传统深度模型相当的性能。
本文只针对第一种方式,即神经网络压缩,又称模型压缩 -
神经网络压缩方法
网络剪枝、低秩分解,知识蒸馏。
网络剪枝
-
主要思想
去掉神经网络中对输出结果贡献不大的冗余参数,进而提高网络效率。 -
剪枝步骤
剪枝一般分为三个步骤
1、首先正常训练一个初始神经网络模型
2、接下来去掉初始模型中冗余的连接和参数,即“剪枝”操作
3、然后重新训练这个模型来微调其余神经元的连接,从而保证模型性能。
模型的剪枝通常是一个剪枝和训练交替进行的迭代过程。见上图 -
剪枝方法
偏差权重衰减(Biased Weight Decay)方法
基于损失函数的Hessian矩阵来减少神经元连接的数量,典型的两种方法是最优脑损伤(Optimal Brain Damage)和最优脑手术(Optimal Brain Surgeon)
剪枝贡献度较低的神经元
对模型的神经元进行贡献度排序。贡献度排序依据可以是神经元的权重参数L1或者L2正则化平均值或者激活函数输出平均值等指标,剪枝贡献度较低的神经元也会损失模型的准确率,因此剪枝后需要对模型进行重新训练以保证其性能。 -
发展历程
2015,一套完整的深度网络压缩流程
Han S在2015年发表的论文中将修剪、权值共享和量化、霍夫曼编码等方式运用到模型压缩中,取得了非常好的效果
流程
1、将不重要的连接进行裁剪
2、重新训练裁剪后稀疏连接的网络
3、然后使用权值共享来对连接的权值进行量化
4、最后再对量化的权值进行霍夫曼编码。
裁剪减少了连接的权重数量,量化和霍夫曼编码减少了对权重编码的比特数。使用稀疏表示大部分元素为0的矩阵,降低了空间冗余,并且这样的压缩机制不会对准确率造成损失。
-
网络剪枝潜在的问题
1、若使用了 L1或者L2 正则化,则需要更多的迭代次数才能收敛。
2、所有的剪枝方法都需要手动设置层的超参数,在某些应用中会显得很复杂。
低秩分解
-
思想
将网络模型的权重矩阵看作满秩矩阵,然后用多个低秩矩阵来逼近原有的矩阵,从而达到简化网络的目的。 -
原因
神经网络中大部分的计算量都是由卷积层带来的,所以可以用低秩分解的方法来加快卷积层的运算。原本稠密的满秩矩阵可以分解为若干个低秩矩阵的组合,低秩矩阵又可以分解为小规模矩阵的乘积,这样就减少了网络的计算量。 -
低秩分解方法
交叉通道(cross-channel),卷积核 -
交叉通道(cross-channel)
在通道域进行低秩分解。 -
卷积核维度
将一个 f * f 的卷积核用 f * 1+ 1 * f的卷积核的线性组合来进行低秩近似,基底卷积核组合用来产生基础特征图并且进行线性组合,这样就对特征图计算过程起到了加速作用。 -
缺点
涉及计算成果较高的分解操作
大多是逐层执行,无法进行全局参数压缩,并且分解之后同样需要大量的重新训练来使模型收敛。
知识蒸馏
-
思想
源于迁移学习,通过采用预先训练好的教师模型(teacher model)的输出作为监督信息来训练另外一个学生网络(student model)。
教师网络往往是一个性能较好、较复杂且具有很好泛化能力的网络,用这个网络来指导另外一个参数较少、较简单的学习网络,使得学生网络具有和教师网络相当的性能。 -
知识蒸馏压缩框架
说明:
Hinton在2015年发表的论文中引入了知识蒸馏压缩框架,如下图所示。
cumbersome model:为复杂的大模型,即 教师网络,
distilled model:为经过知识蒸馏之后学习到的小模型,即学生网络。
- 学生网络目标
硬目标(hard target): 原始的目标函数,又叫硬目标(hard target),为学生模型的类别概率输出与真实标签的交叉熵;
软目标(soft target):学生模型的类别概率输出与教师模型类别概率输出的交叉熵。软目标由原始模型的软最大(softmax)输出调整得到,加入一个温度常数T来控制预测概率的平滑程度,调整后的softmax函数输出为:
-
实现过程
首先,采用一个较大的T值和硬目标训练教师网络,较大的T值会生成更加软化(softer)的概率分布,通过这种方法生成软标签,
再使用软目标训练一个简单的学生网络。学生网络的目标函数由硬目标和软目标加权平均组成,其中软目标所占的权重应该大一些,这样即使在数据很少的情况下,训练得到的学生模型也能具有与教师模型相当的性能,但是复杂度和计算量却大大降低了。 -
基于这个框架的改进
fitNets网络
方式:
设计了窄且深的学生网络,监督信息中加入了中间特征层,达到了更好的压缩效果和更好的模型性能,
缺点:
具有难以收敛的缺点。
多个教师学习的方法
方式:
。Bharat等人在2016年,提出学生像多个教师学习的方法,并通过向教师模型添加扰动,实现了基于噪声的正则。 -
总结:
优点:
知识蒸馏方法能令复杂模型变得更浅并显著降低计算成本
缺点:
只适用于具有softmax目标函数分类任务
模型的假设过于严格,相比其他方法性能会有所损失。
总结
网络剪枝关注于去掉模型中影响较小的卷积结构;
低秩分解则强调从数据存储方式和结构,以及运算优化的角度来降低开销.
知识蒸馏侧重于训练一个较小的学生网络结构去模拟较大的教师网络的性能;