阅读笔记:一种用于深度神经网络压缩的滤波器级别的剪枝算法ThiNet

原文:《ThiNet: 一种用于深度神经网络压缩的滤波器级别剪枝算法》
作者:吴建鑫

目的:利用上一层的统计信息指导当前层的剪枝,能够在不改变原网络结构的前提下,让卷积神经网络模型在训练与预测阶段同时实现加速与压缩

特点:ThiNet 框架具普适性,可无缝适配于现有的深度学习框架,有助于减少网络的参数与 FLOPs,同时保留原网络的精度级别

压缩网络模型通常有两种思路:

  1. 利用稀疏性对模型进行剪裁,从而达到减少模型参数数目的效果;
  2. 由卷积神经网络的通道(channel)入手进行选择性取舍,去掉通道中的噪声或是可以被其他通道代替的部分,进而降低计算代价。

ThiNet框架设计思路:从通道选择的角度展开,提出一种滤波器级别的简直剪枝算法

基础:2014 年对基于熵的特征选择算法进行研究,发现相较模型压缩方法,在同压缩比的情况下具有更高的准确率,发表于 CVPR2015。在这个熵算法的基础上,最终设计出了效果更优的 ThiNet 框架

在下图的 ThiNet 剪枝框架图中,先根据图中的虚线框部分判断哪些通道及其相对应的滤波器性能较弱(第一行中用黄色高亮的部分)或可以被其他通道代替。然后丢弃对网络的性能影响较小的通道及其对应的滤波器从而得到一个剪枝模型。之后再对剪枝后的模型进行微调以恢复其精度。
阅读笔记:一种用于深度神经网络压缩的滤波器级别的剪枝算法ThiNet_第1张图片

ThiNet 框架的核心是通过上一层的统计信息来指导当前层的剪枝
以模型的第五层为例,在针对网络模型的第五层进行压缩时,为了尽可能不影响网络模型的效果,要尽量保持第五层的输出通道不变或改变较小。由于卷积层是一种线性算子,所以可以看成是用第五层的输入(即第四层的输出)模拟其输出的线性过程。在这里,第五层的输入是可以缩减的,如果可以通过优化方法找到第五层的输入中线性组合等于零的部分并将相应的第四层输出的卷积核舍弃掉,就可以利用较少的输入得到相似的输出,换言之,在不牺牲模型效果的前提下实现压缩模型。探索线性组合的值接近于零的具体过程涉及采样训练样本、贪心算法、最小化重构误差等优化方法。
阅读笔记:一种用于深度神经网络压缩的滤波器级别的剪枝算法ThiNet_第2张图片
在 CUB-200 数据集上,微调前后的精度变化情况

阅读笔记:一种用于深度神经网络压缩的滤波器级别的剪枝算法ThiNet_第3张图片
不同选择算法的性能比较:VGG-16-GAP 模型以不同的压缩率在 CUB-200 数据集上的剪枝效果

使用 ThiNet 对 VGG-16 在 ImageNet 进行剪枝,从实验数据可以发现,ThiNet 不仅能够降低 FLOPs 以及网络参数,对于 top-1 和 top-5 准确率的影响也非常小

阅读笔记:一种用于深度神经网络压缩的滤波器级别的剪枝算法ThiNet_第4张图片
M/B 表示百万/十亿 (10^6/10^9);f./b. 是前向/反向的缩写,速度由 batch size=32 在一张 M40 GPU 上测试所得

阅读笔记:一种用于深度神经网络压缩的滤波器级别的剪枝算法ThiNet_第5张图片
与其他方法在 VGG-16 上的比较

在 ResNet-50 上的类似实验证明,即便是对于紧凑的网络,ThiNet 也能减少超过一半的的参数与 FLOPs,而 top-5 准确度仅降低 1%。
阅读笔记:一种用于深度神经网络压缩的滤波器级别的剪枝算法ThiNet_第6张图片
M/B 表示百万/十亿 (10^6/10^9);f./b. 是前向/反向的缩写,速度由 batch size=32 在一张 M40 GPU 上测试所得

ThiNet 能将 VGG16 网络模型剪枝到 5.05MB 的大小,保留 AlexNet 级别的精度,却拥有更强的泛化性能。

你可能感兴趣的:(网络压缩)