同的输入矩阵),对输入特征图与输出矩阵没有任何影响。
对第二个想法,我们可以进一步改进:如果将 3*3 的 kernel 删成某个固定的形状,例如
下图中,那么我们可以修改 im2col 操作,保证卷积的正确性,这就是 Group-level 的裁枝(图
4 中所示)
第三个想法:如果我们不急着删去参数,而是将那些没用的参数设为 0,当整个参数矩
阵中有很多的 0 时,稀疏矩阵闪亮登场,于是矩阵的乘法可以用稀疏矩阵的乘法来代替,从
而起到模型压缩和加速的效果。图 4 中,Fine-grained,vector-level,kernel-level 中一些裁剪
方法,需要使用到稀疏卷积的方法来实现。
上述是从矩阵方面,对裁枝方法进行了讲解,其实我们忽略了一个重要的问题:究竟什
么样的参数需要裁掉呢?一般有两种方法:损失函数对参数的二阶导,和参数的绝对值大小。
第一种方法,损失函数对参数的二阶导越小,说明这个参数的更新对损失函数的下降的贡献
越小,说明这个参数不重要,可以删去。第二种方法,参数绝对值越小,说明输出特征图与
该参数几乎无关,因此可以删去。相比较而言,第一种方法是尽可能保证损失函数不变,对
结果影响相对较小,但计算复杂;第二种方法是尽可能保证每层输出特征图不变,而不管损
失函数,计算方便,但对结果可能相对较大。但无论哪种方法都需要对裁剪后网络做参数调
优。
參. 低秩估计
低秩估计的方法其实就是运用了矩阵分解和矩阵乘法的结合律。此时我们仍需要回到图
1 左侧的示意图:对输入矩阵我们无法做分解,因为不同的前向传递中矩阵是变化的,但是
参数矩阵是固定的呀,那么何不分解参数矩阵呢?低秩估计就是这么个想法:
看上面的这个式子是不是感觉特别简单,只要我们可以用若干小矩阵对参数矩阵进行估
计,那么输出矩阵就可以通过上面的式子得到。
在当前的很多对低秩估计的研究中,笔者认为奇怪的一点是:对矩阵分解后,将分解后
的矩阵乘法又转回成卷积操作,例如上式中将原参数矩阵分解成 3 个小矩阵,那么在实现中
就是用 3 个卷积来实现分解后的矩阵乘法。笔者认为这种操作实际上是增加了计算量,因为