核心内容

公式中Y代表某一层的输出,W和X分别是filters和输入,β控制输入的某一个通道为0,因此beta向量中0的数目越多,也就代表被删掉的filters越多。由于0范数的优化是NP问题,因此作者把它松弛到了1阶并作为正则项加入到要最小化的函数中:

这个公式中要优化的是β和W,文中分两步来优化:
第一步:优化β
固定W,求beta的最优质值。用解普通LASSO回归的方式求解。
第二步:优化W
固定β,求W的最优值。优化完后把β融到W中,即W=W/β
,然后β就没了。用最小二乘法求解。
显然λ越大,剪枝的越多,文中采用一开始设置λ为0并逐步增大λ,对于每个λ,都迭代地执行两个步骤来优化公式,直到β和W都收敛,有点类似EM算法的那个味道。
但是由于迭代的执行两个步骤速度太慢了,因此作者选择一次性执行第一步多洗直到剪枝的通道足够多然后在进入第二步,这样第二步只需要做一次。(这里没太理解,LASSO回归直接一次就求出β的最优解了,不知道论文中的multiple times是什么意思)
细枝末节
- 确定一个剪枝率,逐层剪枝。
- 公式中的Y代表的是网络原本的输出。即第一层剪枝完了,剪枝第二层的时候,要拟合的输出是剪枝前的第一层,而非剪枝后的第一层,这样做可以避免累积误差。
- 对于ResNet,作者在每个residual block的第一层前加了一个channel selection的操作选出需要的channel,这个操作和FPGM那篇文章的操作很像。
- shortcut没有参数,无法通过优化W来你和最初的输出,因此residual块的输出从拟合
Y2
变成了拟合Y2+Y1-Y1'
,这样可以保证最终的residual block的输出拟合的还是Y1+Y2。如下图:

网友评论