【Dynamic Network Surgery for Efficient DNNs】论文笔记

[NIPS’16]论文链接:https://arxiv.org/pdf/1608.04493.pdf
代码链接:https://github.com/yiwenguo/Dynamic-Network-Surgery
这篇文章也是关于参数的修剪,但是多了一个拼接的步骤,可以大幅度恢复修剪造成的精度损失,并且能有效的提升压缩率。

效果:

可以将LeNet-5和AlexNet中的参数数量分别压缩108倍和17.7倍,而且不损失精度。
【Dynamic Network Surgery for Efficient DNNs】论文笔记
【Dynamic Network Surgery for Efficient DNNs】论文笔记
(a)代表的是文章提出的动态网络手术,(b)代表的是Song Han等人提出的网络压缩的方法。以AlexNet为例,(b)需要4800K以上的迭代才能获得一个合理的压缩率(9×),而(a)只需要700K次迭代就可以得到一个明显更好的结果(17.7×)。

主要思想:

文章中提出了一种新的网络压缩方法,称为动态网络手术,通过动态连接修剪降低网络复杂度。 与以前贪心修剪的方法不同,该方法将连接拼接整合到整个过程中,以避免不正确的修剪并对网络进行维护。
涉及两个关键操作:修剪和拼接。
修剪操作是为了压缩网络模型,但是修剪或修剪不正确应该是造成精度损失的原因。为了弥补操作不当造成的损失,将拼接操作纳入网络手术中,并且一旦发现被修剪的连接在任何时候都很重要,就实现连接恢复。
这种方法不仅有利于更好地接近压缩极限,而且有利于提高学习效率。
【Dynamic Network Surgery for Efficient DNNs】论文笔记
我们的目标是网络修剪,关键是放弃不重要的参数并保留重要的参数。然而,由于相互连接的神经元之间的相互影响和相互**,某个网络中的参数重要性(即连接重要性)是非常难以测量的。也就是说,由于其他一些网络的存在,网络连接可能是多余的,但一旦其他网络被删除,它很快就会变得至关重要。因此,在进行学习过程中不断进行网络结构的维护应该会更合适。
文章提出以下优化问题:
【Dynamic Network Surgery for Efficient DNNs】论文笔记
以第k层为例,其中L()是网络损失函数。hk()是参数w在当前层的判别函数,重要为1,否则为0。简言之:Wk是原始矩阵,Tk就是这一层的掩码矩阵,两者相乘得到修剪后的参数矩阵。
Wk更新方案:
【Dynamic Network Surgery for Efficient DNNs】论文笔记
这种方法不仅更新了重要的参数,而且还更新了与Tk中0相对应的参数(0,1之间变换代表着修剪的参数位置也一直在变换),这样就可以拼接回修剪不正确的连接。

算法步骤:

修剪和拼接不断循环进而重复更新Wk和Tk。
【Dynamic Network Surgery for Efficient DNNs】论文笔记

参数重要性判断:

hk()函数:
【Dynamic Network Surgery for Efficient DNNs】论文笔记
参数重要性还是以权值绝对值为基础,设置了ak和bk2个阈值,bk=ak+t。

训练收敛速度优化:

为了加快训练速度,文章中提供了两个策略:
1)降低修剪和拼接频率,因为这些操作会导致网络结构的变化。通过随机地触发Tk的更新来完成,其概率为p,一段之间过后,概率p甚至可以设定为零,即不再进行修剪或拼接。
2)将卷积层和全连接层分开裁剪连接。由于很大比例的连接被修剪掉,所以网络结构应该变得更简单并且可能甚至更“薄”。因此,损失函数的导数可能非常小,特别是当参考模型非常深时。