Learning both Weights and Connections for Efficient Nenural Networks阅读笔记

最近,开始学习模型压缩方面的内容,写下阅读笔记来记录自己的学习过程

问题的提出

现在的神经网络模型在许多领域都展现了强大的功能(如:物体分类,目标识别等),随着模型性能的提高,网络结构变得越来越深,参数变得越来越多,这就使得保存模型所需要的内存变多,模型进行推理所需要的计算资源与计算时间也变多。但是,在嵌入式设备中,内存与计算资源都比较匮乏,这就需要对训练好的网络模型进行参数压缩,降低保存模型所需要的内存。所以,就需要一些方法,在不损失性能(或者损失很少的性能)的前提下,减少网络模型的参数,对模型进行压缩。

论文中所使用的方法

这篇论文主要是对全连接层的参数进行修剪,不涉及卷积层。
修剪全连接层的思路就是:找到不重要或者说是冗余的网络连接,将这条连接去掉。
这篇论文以网络权值代表网络连接的重要性,权值越高,说明连接越重要,对预测结果的影响越大。
论文中使用的方法主要分为三部分:

  1. 搭建一个神经网络模型,并对神经网络进行训练。但在这里网络的权重代表,网络连接的重要性。如果权重值较低,说明这条网络连接不重要,可以被剪掉;如果权重值较高,说明这条网络连接比较重要,剪掉后对预测结果的影响较大。
  2. 设置一个阈值,将权重低于阈值的连接删除,修剪后,网络会由密集连接转化为稀疏连接。
  3. 对修剪后的网络进行重新训练,补偿网络修剪带来的进度损失。

为什么这里只对全连接层进行修剪?
这里以AlexNet为例,训练数据集为Cifar10。由于Cifar数据集的图片分辨率为32*32,这里我们对原始的AlexNet网络进行修改,以更好地适应Cifar。网络结构如下表所示:

网络结构 卷积核
Conv1 (24,3,3,3)
Conv2 (96,3,3,24)
MaxPool (3,3),stride = 2
Conv3 (192,3,3,96)
Conv4 (256,3,3,192)
Conv5 (256,3,3,256)
MaxPool (3,3),stride = 2
Fc1 (256 * 5 * 5,1024)
Fc2 (1024,256)
Fc3 (256,10)

由表格可以得到,卷积层的参数量为:M = 1919464
全连接层的参数量为:N = 6820304
N M \frac{N}{M} MN = 3.5
在这个网络模型中,全连接层的参数量大约是卷积层参数量的3.5倍,所以对全连接层进行修剪会极大的缩小总体的参数量。

阈值该如何设置?
每一个全连接层设置一个阈值,每一个阈值只控制相对应全连接层的网络修剪。阈值的设置可以是随机的,可以是根据每一层想要的修剪率设置的,也可以该层权重的平均数、方差等。

论文中的一些细节

1 . 关于正则化
正则化是用来将权重趋向于0,防止训练过拟合的。在这里使用正则化可以是全连接层的权重趋向0,进行剪枝。
论文里对正则化进行了讨论,分别采用了L1正则化与L2正则化。
在进行修剪后,重训练之前,使用L1正则化的准确率大于L2正则化;在进行重训练后,L2正则化的准确率大于L1正则化。因为在修剪网络后都要进行重训练来弥补修剪带来的精度损失,故L2正则化优于L1正则化。

2.关于Dropout
Dropout也是用于防止神经网络过拟合的,但是一般用在全连接层,很少用在卷积层之后。在进行网络裁剪后,在进行重训练时,Dropout的比率也要发生变化。
假设,裁剪前全连接层i的输入为a,输出为b,Dropout比率为 D o D_o Do,裁剪后全连接层i的输入为m,输出为n,Dropout比率为 D r D_r Dr,则 D r = D o m n a b D_r =D_o \sqrt \frac{mn}{ab} Dr=Doabmn

3.重训练阶段
在网络进行修剪后,进行重训练的时候,我们应该保留预训练的结构,而不是对权重进行重新初始化(虽然后面的研究工作证实,重新初始化并不会对降低网络的性能,甚至对预测精度有所提高)。
在重训练的过程中,为了防止出现梯度消失的情况,也可以固定某些层的参数进行训练。
在进行一次修剪操作后,紧跟的重训练阶段可以迭代一次,也可以迭代多次。同时,为了使修剪的效果更好,我们可以对修剪过程进行迭代,以获取更高的修剪率。

总结

在网络进行修剪后,全连接层会出现大量权值为0的连接,网络权值由密集矩阵转向了系数矩阵。通过稀疏矩阵的压缩方法,可以大大减少保存网络模型所需要的内存。

没有解决的问题:
1.虽然对模型大小进行了压缩,但是大量的计算(约90%)是在卷积层进行的,论文中提出的方法并不能对网络模型推理所需要的时间。
2.只是针对全连接层提出了网络剪枝的方法,对于卷积层并没有很好的方法来消除通道间的冗余。
3.没有提出很好的权值量化方法,来对保存的权值模型进行进一步压缩。

实验代码等进一步整理后,会上传。

你可能感兴趣的:(Learning both Weights and Connections for Efficient Nenural Networks阅读笔记)