Learning Structured Sparsity in Deep Neural Networks阅读(Group LASSO)

本文利用了Group LASSO来对网络进行剪枝,可以用于weight-wise,filter-wise,channel-wise,depth-wise的剪枝。而不同的剪枝是通过不同的分group的方法完成的,如下图所示(颜色相同的权重被视为同一group):

Learning Structured Sparsity in Deep Neural Networks阅读(Group LASSO)_第1张图片
  1. channel-wise:把不同filter的同一个channel看成一组,如图中红色部分,这样一旦某一组都为0,则input channel就可以少1,即减少一个输入的feature map。
  2. filter-wise:把同一个filter内的所有权重看做一组,即图中最左边蓝色部分,这样一旦某一组为0,则output channel就可以少1,即减少一个输出的feature map。
  3. shape-wise:把不同filter同一个位置的权重看做一组。可能是做稀疏化吧,但是没看出来对于加速有什么帮助。
  4. depth-wise把同一层的内的所有权重看做一组,这样一旦某一组的权重全部为0,就相当于删了一整层。

作者在文中Section 3.3还单独提到本文的两个变种:

  1. 把一个filter中的某一个channel作为一组,即图中一个红色的正方形,这样某个组内的权重就不多了(相比于filter-wise和channel-wise),可以稀疏化的更快。
  2. 把filter-wise和shape-wise相结合。卷积运算可以被转换为等价的矩阵乘法操作(GEneral Matrix Multiplication)。而把filter-wise和shape-wise结合就是把矩阵中的一行或者某一列置0,可以减小矩阵乘法中矩阵的维度,从而减小计算量。

关于上述第一点,这样的剪枝有没有效果有待商榷,因为filter内部的运算都是并行的、规律的,只把某一个channel置0虽然意味着这个channel不需要再进行计算,但是计算时需要做首先做channel selection,而这样的操作需要特别的库的支持。

关于上述第二点,如果我没有理解错作者的意思,那么这里的描述有些冗余,虽然文中的loss函数中Group LASSO只有一项,但是很显然,各个-wise的剪枝都是可以结合的,只要在loss函数中多增加一项就OK了。例如depth-wise和filter-wise也是可以结合的。而第二点特地提到的结合方式,看起来也需要特别的库支持才行,否则加速效果可能会非常有限。

你可能感兴趣的:(Learning Structured Sparsity in Deep Neural Networks阅读(Group LASSO))