目录

一、Network Pruning(网络剪枝)

1.Network Pruning

2.Practical Issue

2.1 weight pruning

2.2 neuron pruning

3.Why Pruning?

二、Knowledge Distillation(知识蒸馏)

1.Knowledge Distillation

2.Temperature for softmax

三、Parameter Quantization(参数量化)

1.Parameter Quantization

2.Binary Weights 

四、Architecture Design(Network架构设计)

1.Review:Standard CNN

2.Depthwise Separable Convolution

2.1Depthwise Convolution

2.2Pointwise Convolution

3.Low rank approximation

五、Dynamic Computation(动态计算)

1.Dynamic Computation

2.Dynamic Depth

3.Dynamic Width

4.Computation based on Sample Difficulty


一、Network Pruning(网络剪枝)

1.Network Pruning

神经网络的参数有很多,但其中有些参数对最终的输出结果贡献并不大,相反就显得冗余,将这些冗余的参数剪掉的技术称为剪枝。剪枝可以减小模型大小、提升运行速度,同时还可以防止过拟合。简单来说,network有多余的参数,将这些多余的参数减掉,实现network的compression。

神经网络快速剪枝 神经网络剪枝衡量标准_神经网络快速剪枝

 

那怎么评估weight或者neuron是冗余或者不重要的呢?

对权重而言,我们可以通过计算它的绝对值来判断重要程度。

对神经元而言,我们可以给出一定的数据集,然后查看在计算这些数据集的过程中neuron参数为0的次数,如果次数过多,则说明该neuron对数据的预测结果并没有起到什么作用,因此可以去除。

神经网络快速剪枝 神经网络剪枝衡量标准_Network_02

 

2.Practical Issue

之前的模型pruning剪枝可以从weight和neuron两个角度进行,下面就分别介绍实际可操作性。

2.1 weight pruning

如果我们现在进行weight pruning,进行weight pruning之后的network会变得不规则,这样的network是不好implement出来的。还有一个问题是,并没有把Network缩小。


神经网络快速剪枝 神经网络剪枝衡量标准_Network_03

 

2.2 neuron pruning

如图所示,删减neuron之后网络结构能够保持一定的规则,实现起来方便,而且也能起到一定的加速作用。通过上述可知,实际上做weight pruning是很麻烦的,通常我们都进行neuron pruning,可以更好地进行implement,也很容易进行speed up。

神经网络快速剪枝 神经网络剪枝衡量标准_聚类_04

 

3.Why Pruning?

既然最后要得到一个小的network,那为什么不直接在数据集上训练小的模型,而是先训练大模型 

一个比较普遍接受的解释是因为模型越大,越容易在数据集上找到一个局部最优解,而小模型比较难训练,有时甚至无法收敛。

另外一个说法是大乐透假设(Lottery Ticket Hypothesis)

首先我们对一个大模型随机初始化它权重参数(红色)。然后我们训练这个大模型得到训练后的模型以及权重参数(紫色)。最后我们对训练好的大模型做pruning得到小模型。

如果我们使用pruned network的结构,再进行随机初始化random init(绿色),会发现这个network不能train下去。

如果我们使用pruned network的结构,再使用原始随机初始化original random init(红色),会发现network可以得到很好的结果。
 

神经网络快速剪枝 神经网络剪枝衡量标准_Network_05

 

二、Knowledge Distillation(知识蒸馏)

1.Knowledge Distillation

整个知识蒸馏过程中会用到两个模型:大模型 Teacher Net 模型和小模型Student Net模型。

用小的network去模拟大的network:

训练一个大网络,用小网络学习大网络。并计算两者之间的cross-entropy,使其最小化,从而可以使两者的输出分布相近。

神经网络快速剪枝 神经网络剪枝衡量标准_聚类_06

 

2.Temperature for softmax

一个小技巧:同除一个参数T

神经网络快速剪枝 神经网络剪枝衡量标准_神经网络快速剪枝_07

 

三、Parameter Quantization(参数量化)

1.Parameter Quantization

less bits:使用更少bit来存储数据,例如一般默认是64位或者32位,那我们可以用16或者8位来存数据。

weight clustering:如图所示,最左边表示网络中正常权重矩阵,之后我们对这个权重参数做聚类,比如将16个参数做聚类,最后得到了4个聚类,那么为了表示这4个聚类我们只需要2个bit,即用00,01,10,11来表示不同聚类。之后每个聚类的值就用均值来表示。这样的一个缺点就是误差可能会比较大。

huffman encding:对于常出现的聚类用少一点的bit来表示,而那些很少出现的聚类就用多一点的bit来表示。

神经网络快速剪枝 神经网络剪枝衡量标准_聚类_08

 

2.Binary Weights 

Binary Weights是以一种更加极致的思路来对模型进行压缩,即每个节点只用1或-1来表示,即只用+1,-1表示一个Weight。

下面简单介绍一下Binary Connect的思路,如下图示,灰色节点表示使用binary weight的神经元,蓝色节点可以是随机初始化的参数,也可以是真实的权重参数。

第一步我们先计算出和蓝色节点最接近的二元节点,并计算出其梯度方向

第二步,蓝色节点的更新方向则是按照红色箭头方向更新,而不是按照他自身的梯度方向更新。

最后在满足一定条件后,用离得最近的Binary Weight作为结果即可。 

神经网络快速剪枝 神经网络剪枝衡量标准_Network_09

 

四、Architecture Design(Network架构设计)

1.Review:Standard CNN

每个filter要处理所有的channel。从标准卷积CNN中看所需要的参数量。如上图示,输入数据由两个6*6的feature map组成,之后用4个大小为3*3的卷积核做卷积,最后的输出特征图大小为4个4*4的矩阵。每个卷积核参数数量为233=18,所以总共用到的参数数量为4*18=72个

神经网络快速剪枝 神经网络剪枝衡量标准_深度学习_10

 

2.Depthwise Separable Convolution

2.1Depthwise Convolution

将立体的,深度为2的filter分成两个平面的,不考虑之间的联系,然后分别对一个feature map进行卷积,得到下图结果。由于第一步得到的输出特征图是用不同卷积核计算得到的,所以不同通道之间是独立的,因此我们还需要对不同通道之间进行关联。

神经网络快速剪枝 神经网络剪枝衡量标准_聚类_11

 

2.2Pointwise Convolution

为了实现关联,在第二步中使用了1*1大小的卷积核,并且通道数量等于输入数据的通道数量,然后按照正常的CNN做法,得到结果4个4*4的矩阵,并且做深度可分离卷积的过程参数数量比标准的CNN更少。

神经网络快速剪枝 神经网络剪枝衡量标准_机器学习_12

 

3.Low rank approximation

中间插入一个linear层,大小为K,那么也可以减少需要训练的参数。

神经网络快速剪枝 神经网络剪枝衡量标准_Network_13

 

五、Dynamic Computation(动态计算)

1.Dynamic Computation

该方法的主要思路是如果目前的资源充足,那么算法就尽量做到最好,比如训练更久,或者训练更多模型等;反之,如果当前资源不够,那么就先算出一个过得去的结果。

一个Network可以自由的调整它的运算量。

神经网络快速剪枝 神经网络剪枝衡量标准_机器学习_14

 

2.Dynamic Depth

让Network自由调整它的深度。训练一个很深的Network,在layer和layer中间添加一个额外的layer。如果运算资源比较充足,就跑过所有的layer;如果资源不充足,就选择部分的layer做输出。

神经网络快速剪枝 神经网络剪枝衡量标准_深度学习_15

 

3.Dynamic Width

让Network自由设定它的宽度。先设定几个不同的宽度,把同一个图片input进去,不同的宽度的output都不同,但我们希望和我们想要的输出越接近越好。

神经网络快速剪枝 神经网络剪枝衡量标准_深度学习_16

 

4.Computation based on Sample Difficulty

对简单的问题,一个layer可能就可以解决;对困难的问题。可能要很多个layer才能解决。所以我们希望让Network可以依据情况自己决定深度和宽度。

神经网络快速剪枝 神经网络剪枝衡量标准_聚类_17