《Learning both Weights and Connections for Efficient Neural Networks》论文笔记

1. 论文思想

深度神经网络在计算与存储上都是密集的,这就妨碍了其在嵌入式设备上的运用。为了解决该问题,便需要对模型进行剪枝。在本文中按照网络量级的排序,使得通过只学习重要的网络连接在不影响精度的情况下减少存储与计算量。论文中的方法分为三步:首先,使用常规方法训练模型;使用剪枝策略进行模型修剪;在修剪模型的基础上进行finetune。经过试验证明改文章提出的方法使得AlexNet的大小减小了9倍,参数量从61百万降到了6.7百万,同时不会带来精度上的损失。

大型的网络会带来更多电能的损失,关系如下图
《Learning both Weights and Connections for Efficient Neural Networks》论文笔记_第1张图片
在本文中该文章中使用如下图中左边的三步操作进行模型剪枝,最后得到的结果如下图右图所示
《Learning both Weights and Connections for Efficient Neural Networks》论文笔记_第2张图片
在之前的GoogleNet中后面的使用Average Pooling替换全连接层,从而使得网络的参数量下降。剪枝在之前被用作是模型复杂度降低与防止网络过拟合。

2. 学习除权重之外的联系

2.1 正则化

正则化对剪枝与重新练具有重要的影响。L1正则化会使得权重趋近于零,这个在重新训练之前与剪枝之后会获得较好的精度。然而,剩下的连接没有L2正则化那么好,导致再训练后准确率下降。总的来说,L2正则化回来带更好的剪枝结果。

2.2 Dropout

Dropout被用来防止网络过拟合,但是随着剪枝的进行网络变得稀疏,使用原有的drop_rate便变得不合适。由于Dropout是随机使得一部分神经元失活,而pruning是永久删除链接。因而,drop_rate需要根据根据剪枝之后网络的情况进行改变。
剪枝之前的网络链接为 C i C_{i} Ci,剪枝之后的为 C i r C_{ir} Cir。其中 C i C_{i} Ci的定义为
C i = N i N i − 1 C_{i}=N_{i}N_{i-1} Ci=NiNi1
其中, N N N是层神经元的个数,对应的drop_rate变化应该遵循如下规则
D r = D 0 C i r C i D_{r}=D_{0}\sqrt{\frac{C_{ir}}{C_{i}}} Dr=D0CiCir

2.3 局部剪枝与参数协同适应

论文中指出模型的retrain是在剪枝之后的模型上做的,其实叫finetune,也就是保留剪枝之前的网络中的部分参数,并在此基础上继续进行训练。
《Learning both Weights and Connections for Efficient Neural Networks》论文笔记_第3张图片
但是随着网络的加深,网络中会存在梯度消失的问题,论文中指出,在retrain的时候固定前面卷积层的参数,只是训练全连接层的参数。

2.4 迭代剪枝

使用训练的模型进行剪枝,在进行retrain,之后又回到pruning,这称之为一次迭代。整个剪枝是迭代进行的,需要通过几次迭代才能达到最小的网络结构。

3. 结果

《Learning both Weights and Connections for Efficient Neural Networks》论文笔记_第4张图片
《Learning both Weights and Connections for Efficient Neural Networks》论文笔记_第5张图片

你可能感兴趣的:(模型压缩&加速,model,compression)