http://cn.arxiv.org/abs/1607.03250
文章介绍了一种新的评价参数是否需要被裁剪的标准:AP0Z
公式1给出了AP0Z的定义。代表第i层的第c个通道的输出,M是
的维度数。算了,解释起来太麻烦,直接看下图。输入一张图,经过一层卷积,得到右边的feature map,我们计算
,也就是输出的第一个通道的APOZ,也就是右边红色。假设红色的部分一半是0,那么这张图计算
就等于50%。我们需要输入多张图,假如输入了1W张图,最后计算红色部分都是50%,那么
就等于50%。下面那张table1,计算每一层的mean APOZ的时候,就是把所有通道的都计算出来取平均值
表1给出了VGG16各层的AP0Z。数值越高代表更大的冗余和更多的裁剪空间,可以看出,卷积层中随着层数的增加,数值越大。代表层数越大,冗余越大
图1和2是两个层的APOZ的具体分布,很明显APOZ大的比例大
图3、4、5就是常见的操作循环,训练、裁剪、微调。需要注意的是,与之前的一些裁剪“连接”不同的是,这里裁剪的是整个神经元,也就是某个神经元的所有连接。2点注意事项,不要对好几层同时裁剪,也不要一下子对一层进行裁剪很多
表2很简单易懂,不作说明
表3对比了裁剪后剩下的变量是否初始化成裁剪前的。如果使用裁剪前的变量初始化的话,准确率会高一点。更重要的是,使用的话,APOZ会逐渐变少,证明冗余的节点变少了,而右边则不然。所以,使用裁剪前的变量作为初始化值微调网络很重要。
图6显示,在VGG16的FC6上,裁剪后的分布整体左移了,代表APOZ变小了,冗余的被正确的裁剪了
表4在VGG16上对CON5-3和FC6上裁剪实验,有2个发现。1.在不微调的情况下,即使裁剪了很多,模型也效果也没有明显下降,这证明了模型确实存在冗余现象。同时,微调的时间不会很长,几千次迭代就可以达到之前的效果甚至更高。2.裁剪后的模型可以达到更好的效果,因为更少的参数可以避免一些过拟合的效果
表5显示作者尝试了同时裁剪多个网络,有几个发现。1.裁剪后效果下降的很多 2.需要更多迭代来恢复到原本的效果 3.裁剪之后模型可能可以获得更好的效果 4.裁剪模型的后面几层包括conv45,fc67效果比较好
相比于裁剪“连接”的方法,有个比较重要的事情,在GPU进行卷积的时候,首先是先矢量化,然后再矩阵相乘,所以如果只裁剪“连接”而不是整个神经元节点,不会降低计算量,全连接层也一样。所以相比于别的裁剪“连接”的裁剪方式(Han, S., Pool, J., Tran, J., Dally, W.J.: Learning both weights and connections for efficient neural networks. CoRR abs/1506.02626 (2015)),他们在计算量上没有改善。而本论文在FC6上可以有降低2倍的FLOPs。
本文在VGG16上只裁剪了最后一个卷积层和全连接层,所以基本只有模型大小2到3倍的压缩效果,没有提到速度。但是由于APOZ可以用来裁剪卷积滤波器的个数,所以应该是可以提升速度的。