更多深度文章,请关注:https://yq.aliyun.com/cloud
研究背景
近几年来,卷积神经网络(Convolutional Neutral Network, CNN)在计算机视觉、自然语言处理以及语音识别等众多领域得到了广泛的应用。然而CNN强大的性能依赖于海量的存储与计算资源。一般来说,CNN通常在离线环境下,使用高性能CPU/GPU集群进行模型训练。然而,出于隐私性、网络延迟以及资源消耗等方面的考虑,我们更倾向于在本地而非远程完成CNN模型的训练。为此,减少CNN网络结构中的参数数量,避免巨大的存储与计算开销就显得尤为重要。
本篇论文对文献《Deep convolutional neural network on ios mobile devices》中提出的卷积核冗余消除思想提出了进一步的优化。深层卷积网络通常使用过参数化的卷积核来提取特征,而这种方式使得不同卷积核间存在不同的稀疏度(Sparsity),部分卷积核的权重参数可能过于稀疏,对模型性能提升的效果有限。我们可以根据一定的阈值来过滤稀疏度较高的卷积核,进而精简CNN网络结构,提高模型运行效率。
研究内容
在CNN的前向传播过程中,卷积核(4维张量,\(Win R^{Ntimes Ctimes Htimes W}\))对输入数据(3维张量,\(Xin R^{Ctimes Ytimes X}\))进行卷积运算,以提取不同的数据特征,输出结果为一个3维张量(\(Yin R^{Ntimes Y'times X'}\)),其中\(N\)表示卷积核的数量,\(C\)、\(H\)和\(W\)分别表示卷积核的通道数、高度与宽度,\(Y\)、\(X\)与\(Y'\)、\(X'\)分别表示模型输入数据与输出数据的尺度。
稀疏度定义
卷积核的稀疏度根据所处卷积层的权重参数来定义。对于卷积层\(l\),\(M_{l}\)表示\(l\)层中所有卷积核权重参数绝对值的均值,如式(1)所示:
$$ M_{l}=\frac{\sum_{n,c,w,h}\mid k_{l,ncwh}\mid}{N\times C\times W\times H}\tag{1} $$
其中,\(n,c,w,h\)分别表示卷积核在各个维度的下标,\(l\)表示卷积核权重\(k\)所在的卷积层。
进而,卷积层\(l\)中第\(n\)个卷积核的稀疏度\(S_{l}(n)\)定义如下:
$$ S_{l}(n)=\frac{\sum_{c,w,h}\sigma(k_{l,ncwh})}{C\times W\times H}\tag{2} $$
$$ \sigma(x) = \begin{cases} 1, & \text{if $|x|
如果卷积核\(n\)的一些权重小于\(l\)层中权重的均值,那么\(S_{l}(n)\)会接近于1,这也意味着当前卷积核相比其他卷积核更加冗余。针对这种情况,本篇论文提出了以下两种方法,利用稀疏度对冗余的卷积核进行剪枝。
逐层优化算法
对同一卷积层中的所有卷积核按照稀疏度降序排列,可得有序列表\([S_{l}(1),S_{l}(2),dots,S_{l}(N)]\)。此时,待删除的卷积核数量由约减因子\(rin[0,1)^{L}\)决定,其中\(L\)表示CNN网络结构中卷积层的数量,\(r_{i}\)表示第\(i\)层中待删除卷积核的数量比例。
以卷积层\(l\)为例,冗余卷积核的精简过程如下图所示。令\(N=10\),\(r_{l}=0.3\),此时卷积层\(l\)中待删除的卷积核数量为\(r_{l}N=3\),因此,删除\(l\)中稀疏度最高的3个卷积核\(k_{1}\)、\(k_{2}\)与\(k_{3}\),并使用剩余卷积核生成卷积层\(l\)的输出。随后,使用精简后的卷积层训练模型,强化卷积层中剩余的冗余度较低的卷积核,以保证模型能够取得更好的效果。
通过对卷积层中剩余权重参数数量的估计,逐层优化算法能够在满足指定计算开销的前提下,灵活地确定约减因子\(r\)。
模型的计算开销可通过卷积层中权重参数的数量来粗略估计,经过精简后的卷积层的权重参数可通过如下方式计算:
$$ weights\ remained(r')=\left[1,\left(r_{1:(L-1)}'\right)^T\right]Dr'\tag{4} $$
其中,向量\(r'=1-r\)表示每个卷积层中剩余卷积核的比例,\(Din R^{Ltimes L}\)为对角矩阵,\(D_{ii}=W_{i}H_{i}C_{i}N_{i}\)表示卷积层\(i\)中所有卷积核的权重数量,向量\(left[1,left(r_{1:(L-1)}'right)^Tright]in R^{1times L}\),其具体形式为\([1,1-r_{1},1-r_{2},dots,1-r_{L-1}]^T\)。
灵活确定约减因子\(r\)的过程可拆分为两步:首先,在满足指定计算开销的前提下,使用不同的约减因子\(r\)精简CNN网络结构,例如\(rin[0.1,0.6]\),训练模型并评估模型性能,从结果中挑选出性能最优模型所对应的约减因子\(r_{fix}\)。
随后,将模型划分为前、中、后三个部分,并针对模型的不同部分各自调整\(r_{fix}\),\(r_{fix}\)的调整需确保模型整体的计算开销保持不变,评估方式如式(4)所示。通过提高模型某一部分的约减因子并降低其他部分的约减比例,我们可以探究CNN模型中不同部分对模型最终效果的影响。
实验表明,在模型计算开销保持不变的前提下,步骤二相较于步骤一能够带来进一步的性能提升。
梯度优化算法
此外,作者还提出了一种梯度优化算法,基于神经网络构建了一个回归模型,学习约减因子\(r\)与CNN网络性能\(P\)之间的关系。对于初始值\(r^0\),回归模型计算使用\(r^0\)精简CNN结构后的模型性能,并以此计算模型残差与梯度,以一定的步长\(alpha\)更新\(r^0\),得到\(r^1\),反复迭代这一过程,最终即可获得符合性能要求的最优约减因子\(r_{optimized}\)。此时,\(r_{optimized}\)能够确保CNN在保持一定性能的前提下,尽可能多地精简其网络结构中冗余的卷积核,提高运行效率。
梯度优化算法的工作流程如下图所示。
其中,\(r^i\)表示第\(i\)次迭代时约减因子的取值,\(P\)表示需满足的性能指标,\(R(r^i)\)表示约减因子\(r^i\)对应的CNN网络性能,约减因子\(r\)根据式(5)更新:
$$ r^{i+1}=r^i-\alpha\frac{\partial D(R(r^i),P)}{\partial r^i}\tag{5} $$
实验结果
在实验环节,作者将文献《Accurate image super-resolution using very deep convolutional networks》中使用的残差卷积网络作为测试网络,并以卷积网络输出在峰值信噪比(Peak Signal to Noise Ratio, PSNR)上的损耗作为模型性能的评估标准。测试数据集使用SR Set5\(times\)2与Set14\(times\)2两种数据集。测试网络结构如下图所示。
表1展示了逐层优化算法在所有卷积层使用相同约减因子情况下的实验结果,可以发现当\(r\)取值为0.25时,CNN输出结果的PSNR损耗最低,仅为0.24/0.27,此时CNN网络仅保留了完整结构中56.3%的参数。
将测试网络以6、7、7层的方式划分为前、中、后三个部分,逐部分地调整对应的约减因子,实验结果如表2所示。可以看出,在CNN模型剩余参数数量几乎相同的情况下,若将当前6层卷积层对应的约减因子\(r_{front}\)调整为0.44,CNN模型的性能能够进一步提升,PSNR损耗从0.24降至0.20。此时,模型三部分的约减比例分别为0.44、0.06、0.25,这也表明在测试网络中,前几层卷积层相对比较冗余,模型后半部分的卷积层在预测过程中发挥着更加关键的作用。
将PSNR损耗限制在0.25,梯度优化算法的优化过程与结果如表3所示。
总结
在本篇论文中,作者就深层卷积网络的卷积核冗余消除策略展开了讨论,提出了两种能够有效约减CNN模型参数的算法:逐层优化算法以及梯度优化算法。前者在移除50%CNN模型参数的同时,仅带来了不足1%的性能损耗;而后者能够根据具体的模型性能指标,自动获得冗余消除策略对应的约减因子。相比于其他卷积核精简领域的研究工作,本篇论文采取的做法更为灵活,更适合应用于结构复杂的卷积网络模型之中。
本文由北邮@爱可可-爱生活老师推荐,阿里云云栖社区组织翻译。
文章原标题《A Kernel Redundancy Removing Policy for Convolutional Neural Network》,作者:Chih-Ting Liu,Yi-Heng Wu,Yu-Sheng Lin与Shao-Yi Chien,译者:6816816151,审阅:爱小乖
文章为简译,更为详细的内容,请查看原文,附件为原文pdf