0%

《Data-free Parameter Pruning for Deep Neural Networks》

译:《深度神经网络无数据参数剪枝》

论文地址:Data-free Parameter Pruning for Deep Neural Networks

Motivation

具有数百万参数的深度神经网络(NN)是当今许多最先进的计算机视觉系统的核心。而最近研究表明,很多小的模型也可以实现类似水平的表现。

相关工作

一个方向是通过删除不必要的权重进行剪枝。其中最简单的方法就是移除那些接近0的权重,但这一直观的想法似乎在理论上没有充分的依据。之后提出更好的且理论合理的Optimal Brain Damage (OBD) 以及表现比OBD更好的但计算量要大得多的 Optimal Brain Surgeon (OBS)

另一个方向是训练一个较小的网络来模拟一个大得多的网络,即知识蒸馏(Knowledge Distillation, KD)等。

已经提出了许多方法来训练较深的模型,但与传统网络相比,其参数化程度较低。如有人提出的用于反向传播的稀疏性诱导正则化函数,它将许多权重提升到零量级,与传统训练的模型相比,减少了内存消耗。还有人证明了在给定少数几个参数的情况下,模型的大部分参数是可以预测的。还有人训练具有随机连通性的网络,并表明它们比密集连接的网络在计算上更有效。

还有一些集中在使用权重矩阵的近似来执行压缩的工作。如使用基于SVD分解的低阶近似的权重矩阵;使用基于聚类的乘积量化方法来构建索引方案,以减少矩阵在磁盘上占用的空间。与前面那些工作不同的是,这些方法不需要任何训练数据来执行压缩。但他们在压缩后也更难微调。

方法简介

作者提出的剪枝方法不需要任何训练/验证数据来执行压缩,此外,这种方法只是修剪参数,这确保了网络的整体结构保持不变,从而实现了动态微调等操作。

流程:

  1. 对所有可能的\((i,j)\)值计算显著程度(saliency)\(s_{i,j}\),计算的值可以以矩阵\(M\)的形式保存,对应的维度等于对应层的神经元数量
  2. 选择矩阵中最小的条目,设为\((i',j')\),删除第\(j'\)个神经元,然后更新\(a_{i'}\leftarrow a_{i'}+a_{j'}\)
  3. 通过移除第\(j'\)列和行更新矩阵M,并且更新第\(i\)列(来说明更新\(a_{i'}\))

原理

假设网络只有一个隐藏层和一个输出单元,则输出为: \[ z=a_1h(W_1^TX)+a_2h(W_2^TX)+a_3h(W_3^TX)+\cdots+a_nh(W_n^TX) \] 假设\(W_1^T=W_2^T\)\[ h(W_1^TX)=h(W_2^TX) \] 对应的: \[ z=(a_1+a_2)h(W_1^TX)+a_3h(W_3^TX)+\cdots+a_nh(W_n^TX) \] 作者称这种剪枝方式为"surgery",需要注意的是这里每个\(h()\)函数都是一样的,如ReLU函数。

定义相似

由于\(W_i^T=W_j^T\)的可能性并不是太大,更多的是二者非常接近而不等,因此使用新的该来确定是否剪枝: \[ ||W_i-W_j||=||\epsilon_{i,j}||\ge0 \]\(z_n\)表示n个神经元的输出结果,则对于两个相似权重集\(W_i\)\(W_j\),就可以选择移除\(W_j\)得到\(z_{n-1}\),则有: \[ (z_n-z_{n-1})^2=a_j^2(h(W_j^TX)-h(W_i^TX))^2 \]

如果\(a,b \in R\)\(h(a)\)是单调递增函数,则\((h(a)-h(b))^2 \le (a-b)^2\)

所以: \[ (z_n-z_{n-1})^2\le a_j^2(\epsilon_{i,j}^TX)^2 \] 再使用柯西-施瓦兹不等式简化: \[ (z_n-z_{n-1})^2\le a_j^2||\epsilon_{i,j}||_2^2||X||^2_2 \] 对随机变量\(X\)(服从输出数据的分布)求期望: \[ E(z_n-z_{n-1})^2 \le a_j^2||\epsilon_{i,j}||_2^2E||X||_2^2 \] 再求最小值: \[ \min (E(z_n-z_{n-1})^2) \le \min (a_j^2||\epsilon_{i,j}||_2^2)E||X||_2^2 \] 因此 ,为了最小化平方差的期望值的上界,需要找到指数\((i,j)\),使得\(a_j^2||\epsilon_{i,j}||_2^2\)是最小,这里的\(E||X||_2^2\)是不需要计算的,因为它是独立的。

而上述分析是针对单个神经元的,它可以简单地扩展到多神经元: \[ \min (E<(z_n-z_{n-1})^2>) \le \min (<a_j^2>||\epsilon_{i,j}||_2^2)E||X||_2^2 \] 其中\(<·>\)表示所有输出神经元的数量的平均值。这里为方便起见,作者定义\((i,j)\)中的两个权重集的显著程度(saliency)定义为: \[ s_{i,j}=<a_j^2>||\epsilon_{i,j}||_2^2 \]

解释:如果两列权值的差异较少,且\(a_j\)作为下一层的输入权值不大,那么就可以将\(i,j\)合并。