2022.7.10第十四次周报

目录

一、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对数据的预测结果并没有起到什么作用,因此可以去除。

 

2.Practical Issue

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

2.1 weight pruning

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

 

2.2 neuron pruning

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

 

3.Why Pruning?

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

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

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

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

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

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

 

二、Knowledge Distillation(知识蒸馏)

1.Knowledge Distillation

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

用小的network去模拟大的network:

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

 

2.Temperature for softmax

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

 

三、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来表示。

 

2.Binary Weights 

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

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

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

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

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

 

四、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个

 

2.Depthwise Separable Convolution

2.1Depthwise Convolution

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

 

2.2Pointwise Convolution

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

 

3.Low rank approximation

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

 

五、Dynamic Computation(动态计算)

1.Dynamic Computation

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

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

 

2.Dynamic Depth

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

 

3.Dynamic Width

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

 

4.Computation based on Sample Difficulty

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

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值