1. 概述
导读:论文中研究了在资源限制环境下实现较少资源消耗网络推理的两种不同模型压缩方法(结构化剪枝压缩:small-dense与非结构化剪枝压缩:large-sparse),并且提出了一种在多种模型与数据上可以直接使用的新逐渐剪枝方法,并且可以集成到训练过程中去。文中比较了剪裁之后大且稀疏(large-sparse)与小与稠密模型的精度(small-dense),这些模型涵盖了深度CNN网络、多层LSTM与seq2seq LSTM模型,这两种模型的内存占用是相同的,发现大且稀疏的模型在精度上是好于后者的,且在精度损失最小的情况下,使非零参数的数量减少10倍。
从设备上神经网络推理的角度来看,给定模型内存占用限制条件下,如何才能得到最准确的模型?为了回答上面的问题论文给出了两个等价的解决方案:
- 1)非结构化剪枝压缩(large-sparse):训练一个大模型,最后通过剪裁得到只有很小一部分非零参数的大稀疏模型;
- 2)结构化剪枝压缩(small-dense):训练一个小而稠密的模型,参数的数量与大而稀疏的模型一致;
论文还提出了一个简单的渐进修剪方法,它需要最小的调整,就可以无缝地集成到网络训练过程中,并且展现出了它在各种神经网络架构上的适用性和性能表现。而且文章的方法也比较通用,文章提出的方法不用考虑网络的结构以及网络层的连接关系。
2. 剪裁方法
2.1 方法
这篇文章的方法是在TensorFlow环境下开发的,对于每个需要裁剪的层的权重使用一个与权重维度大小的二值mask变量表示是否剪裁掉。在每次裁剪的时候将权值取绝对值,然后按照由小到大排列,在迭代过程中通过mask置0来逐渐达到期望的权值稀疏度。这里mask被置为0的权值在网络进行反向传播的时候是不会被更新的。这里设置初始的裁剪稀疏度为(),最后期望的稀疏度为,期间经过了经过了次剪裁,剪裁开始的训练步数为,裁剪的频率为(相对训练步数),则每次裁剪次数中的稀疏度就可以通过下面公式的形式进行表达:
上面说到的二值权重裁剪掩膜在每次步数的时候更新,这个值从文章的经验指出,设置为之间,在达到最后的稀疏度目标之后掩膜矩阵就不再更新。之所以这样设计稀疏度的变化曲线,是为了让稀疏度在开始的时候迅速增加,之后随着迭代的进行缓慢增加,其曲线如下图1所示:
3. 实验结果
下面图2(a)展示了裁剪的稀疏率与学习率的关系,文章指出将剪裁稀疏率的大小与学习率相适应是很重要的,比如(a)中学习率与稀疏度之间的关系。(b)图是top5的准确率度与不同稀疏度之间的关系,通过继续训练来恢复精度。
下表是使用文章的方法对Inception V3的模型进行压缩得到的结果:
下面是在语言模型下使用文章提出的两种剪裁压缩方法进行压缩得到的结果,可以看出非结构剪枝压缩的结果是好于结构性压缩的。