关于如何实现加filter惩罚的网络剪裁

关于如何实现加filter惩罚的网络剪裁

通过剪裁网络中Conv的Filter,能够实现对网络结构的压缩。使用Yolov2和SSD两个网络实测,效果显著。
但是剪裁的时候Finetuning的时间较长,说明剪裁的时候减掉了一些不重要但有些用的filter,也就是说,filter的权重不是虽然都很小,但是不够接近0。
为实现上一步,就必须在模型中加入对filter权重的惩罚,就必须知道网络如何实现对权重惩罚的。

解决这个问题学习的顺序如下:
1.加Filter惩罚跟加L2是很一致的,先要搞懂L2是如何反向传播的;
2.首先搞清楚反向传播的基本原理,主要是差分与求导;参考ufldl的 讲解
3.学习了ufldl的BP基本思路,仍有一个疑问,在中间隐藏层的各个W是如何求导的?因为L2只加在Loss中,只是最后一层的权重有Loss求导过程。这个内容在这个课程中没理解透。这里我自己尝试了里面“For each node i in layer l, set”一句的倒数直接从"For each output unit i in layer nl (the output layer), set"继续求解过来,发现隐藏层对W的求导实际上是由Loss从后向前(从输出层,倒数1隐藏,倒数2隐藏,…)追层求导过来的。这才明白其他博客中写的直接从每层倒数后面加alpha*W的意义。
关于如何实现加filter惩罚的网络剪裁_第1张图片
4.还有一个疑问,就是反向传播的矩阵形式为什么用了好多转置?这个从矩阵求导讲座中得到解答( 矩阵求导术1 矩阵求导术2)。
5.基于上述内容,把浅层替换成深层,把普通神经替换成CNN(paper: Notes on Convolutional Neural Networks),把L2-Norm替换成Filter惩罚,就得到了想要的结果。
在此记录。

你可能感兴趣的:(机器学习)