论文链接:https://arxiv.org/pdf/1608.03665.pdf
代码链接:https://github.com/wenwei202/caffe/tree/scnn
摘要
计算资源的高需求严重阻碍了大规模深度神经网络在资源受限设备上的部署。在这篇工作中,我们提出了一种结构稀疏化学习方法(SSL method)来规范DNNs的结构(filters,channels,filter shapes,layer depth等)。SSL可以:
- 从一个大的卷积神经网络中学习出一个紧凑的结构来减少计算成本;
- 获得硬件友好的结构稀疏化DNN来高效加速DNN的评估,实验结果展示了在CPU和GPU现有库上,使用SSL可以使得AlexNet的卷积层计算速度加速 5.1 和 3.1 倍,这几乎达到了非结构稀疏化速度的二倍;
- 规范化DNN的结构可以提高分类准确率,结果显示了对于CIFAR-10,在层深度上的规范化可以将ResNet的深度减少20层到18层,同时准确率从91.25%到92.60%,这相对于32层的原始ResNet还高了一点。
1. 介绍
DNN,尤其是CNN,已经通过从大量数据中的大规模学习在计算机视觉领域取得了巨大的成功,但是这样的大模型部署是有问题的。为了减少计算成本,许多研究方法被用来压缩DNN的大小,包括稀疏正则化、连接剪枝和低秩近似,稀疏正则化和连接剪枝通常会得到一个非结构化的随机连接关系,因此不规则的内存访问不利于硬件加速,Figure 1展示了通过L1正则化对AlexNet每一层的非结构稀疏化。与原始模型相比,稀疏化模型的准确率损失被控制在2%以内,由于稀疏权重分布的不规则,获得的加速效果是十分有限的,即使实际的稀疏程度很高(达到95%)。在最近提出的低秩近似方法中,DNN先被训练,然后将训练得到的权重张量分解为一系列小因子的乘积,最后再通过微调来恢复准确率。低秩近似能够获得加速,是因为它减少了参数量和计算量的同时效果和大的密集张量一样,有效避免了非结构稀疏化的局限性问题,然而低秩近似方法仅在层内获得紧凑的结构,在微调期间层间的结构是固定的,这使得需要多次反复分解和微调来获得最佳的权重近似。
受到以下事实启发:
- 在卷积核和通道上存在冗余;
- 卷积核的形状通常被固定为长方形,但是任意形状可能会消除这种固定带来的不必要的计算;
- 网络的深度对分类准确率至关重要,但是不总是越深的模型准确率就一定越高,这里面牵扯到了梯度爆炸和退化问题;
我们提出了SSL方法在训练期间通过group Lasso 正则化直接学习一个紧凑的结构,SSL是一个通用的正则化方法自适应多种DNN结构,包括filters、channels、filter shape的结构和网络的深度。SSL将结构正则化和本地优化(内存访问、高效计算)集合,不仅提供了提高准确率的规范化大模型,而且加速了计算。
2. 相关工作
连接剪枝和权重稀疏:韩松通过使用连接剪枝将AlexNet的参数量减少了9倍、VGG-16的参数量减少了13倍,因为参数量的减少主要是在全连接层,作者获得了 3-4倍的加速。然而,由于Figure 1中存在的问题,卷积层几乎没有大的加速,然而卷积才是CNN网络的计算瓶颈,所以在卷积层的压缩和加速变得至关重要,Liu等人在AlexNet卷积层实现了 >90%的稀疏度,同时准确率损失控制在2%以内,并且通过对稀疏权重硬件编码到程序中在CPU上获得了4.59倍的加速。这本文的工作中,我们也是聚焦于卷积层,与上面的方法相比,我们的SSL方法协调在相邻内存空间中的稀疏权重,在同样的准确率下获得了更高的加速。当然了硬件和程序优化可以进一步提高系统性能,但这并不在我们的讨论范围内。
低秩近似:低秩近似(Low rank approximation)的优点和问题上面已经做过描述,同时低秩近似还存在另一个问题,就是LRA的超参数量伴随深度线性增加,搜索空间线性增加甚至多项式式增加。与LRA相比,我们的贡献在于:
- SSL可以动态优化DNN的紧凑结构,只需要一个超参数,没有反复;
- 除了层内冗余,SSL可以减少层的深度;
- 通过SSL正则化后的DNN卷积核也可以使用低秩近似,所以它可以同LRA一起来获得更加高效的压缩模型;
模型结构学习:group Lasso对于学习稀疏结构是一种高效的正则化技术,Kim等人将group Lasso用到多任务回归中规范关联树的结构,较少了预测的错误;Liu等人使用group Lasso来约束LRA结构的尺度;为了使DNN适应不同的数据库,Feng等人在DNN中学习卷积核的数量。不同于之前的工作,我们将group Lasso应用于规范DNN的多种结构(filters、channels、filter shapes、layer depth)。
3. 结构稀疏化学习方法
我们主要关注卷积层上的结构化稀疏学习(SSL)来规范化DNN的结构。 我们首先在3.1节中提出了一种通用方法来规范DNN的结构;然后在3.2节中指定对卷积核、通道、卷积核形状、和深度的方法;在3.3节从计算效率的观点讨论了公式的变体。
3.1 对通用结构提出了结构稀疏化学习
假定在DNN中卷积层的权重形成了一个四维张量
W
l
∈
R
N
l
×
C
l
×
M
l
×
K
l
W^{^{l}}\in R^{N_{l}\times C_{l}\times M_{l}\times K_{l}}
Wl∈RNl×Cl×Ml×Kl,其中
N
l
N_{l}
Nl、
C
l
C_{l}
Cl、
M
l
M_{l}
Ml、
K
l
K_{l}
Kl分别是第l层的权重张量的维度,具体含义为卷积核个数、通道数、高和宽。那么一个DNN做结构稀疏化规范时,通用的目标公式为:
3.2 对于卷积核、通道、卷积核形状和深度结构做结构稀疏化学习
在SSL中,学习的“结构化”是由将划分
W
(
g
)
W^{^{(g)}}
W(g)的方式决定,我们调查了在Figure 2中的filter-wise、channel-wise、shape-wise、depth-wise结构稀疏化。为了简单起见,等式(1)中的R(W)在下面的公式中先省略。
惩罚不重要的卷积核和通道:假定
W
n
l
,
:
,
:
,
:
(
l
)
W_{n_{l},:,:,:}^{(l)}
Wnl,:,:,:(l)是第l个卷积层的第
n
l
n_{l}
nl个卷积核,
W
:
,
c
l
,
:
,
:
(
l
)
W_{:,c_{l},:,:}^{(l)}
W:,cl,:,:(l)是第l层所有卷积核的第
c
l
c_{l}
cl个通道的集合。学习filter-wise和channel-wise结构化稀疏的优化目标为:
学习任意形状的卷积核:正如Figure 2中展示的,
W
:
,
c
l
,
m
l
,
k
l
(
l
)
W_{:,c_{l},m_{l},k_{l}}^{(l)}
W:,cl,ml,kl(l)是第l层所有卷积核中第
c
l
c_{l}
cl通道的(
m
l
m_{l}
ml,
k
l
k_{l}
kl)位置上权重的集合构成的向量。
正则化层深:我们也探索了depth-wise稀疏化来规范DNNs的深度提高准确率和减少计算成本,对于移除掉的层,我们将会通过shortcut短接其相邻层,使得前向传播可以正常进行。
3.3 对于计算高效结构的结构稀疏化学习
在3.2节提出的所有方案都可以学习到一个紧凑的DNN结构来减少计算成本,而且,这些方案中公式的一些变种也可以学习到高效计算的结构。
2D-filter-wise sparsity for convolution:在DNN中3D卷积核是由2D的kernels组成,为了高效地做卷积,我们探索了filter-wise稀疏化的细粒度的变种,称之为2D-filter-wise稀疏化,空间上将group Lasso用在2D的filter W n l , c l , : , : ( l ) W_{n_{l},c_{l},:,:}^{(l)} Wnl,cl,:,:(l)上。节省的卷积核移除的2D filters成比例。filter-wise稀疏化的细粒度版本可以更高效的减少与计算有关的卷积:因为组的大小更小,因此权重更新梯度成型,它帮助group Lasso快速获得“0”组的高比例。
将filter-wise核shpe-wise稀疏化结合做GEMM:在DNN中的卷积计算通常被转换为矩阵然后做GEMM。比如,在Caffe中,一个3D的卷积核
W
n
l
,
:
,
:
,
:
(
l
)
W_{n_{l},:,:,:}^{(l)}
Wnl,:,:,:(l)被reshape为一个矩阵,其每一列为与shape-wise稀疏相关的权重
W
:
,
c
l
,
m
l
,
k
l
(
l
)
W_{:,c_{l},m_{l},k_{l}}^{(l)}
W:,cl,ml,kl(l)的集合。将filter-wise和shape-wise稀疏化集合可以直接减少GEMM中权重矩阵的维度(通过移除全零列和行)。
4. 实验
4.1 LeNet and multilayer perceptron on MNIST
LeNet:当将SSL应用到LeNet时,我们使用上面的(2)式来惩罚卷积层中不重要的filters和channels。table 1总结了剩下的filters和channels、FLOP和加速。在表中,LeNet 1是基线,其他的都是将SSL以不同强度应用到LeNet中得到的结果。
为了展示SSL对卷积核结构的影响,我们展示了Figure 3中学习的所有conv1层的卷积核,可以看出来LeNet 2中除了5个stroke模式下的重要的检测器剩下的都归零了,但这足以提取特征。LeNet 3进一步去除了最弱和最冗余的stroke模式的检测器,但相比与LeNet 2精度只掉了0.2%。与LeNet 1中随机且模糊的卷积核模式相比,LeNet 2和3中的卷积核通过正则化可以收敛到更平滑和更自然的模式。这也解释了为什么SSL方法在相同的精度下却只需要更少的卷积核。卷积核的平滑性可以在更深层观察到。
table 2中展示了shape-wise稀疏化的效率,LeNet 1是基准,conv1层卷积核尺寸为 5x5(size=25),LeNet 5减少了维度尺寸限制到了 2x4(size=7),通道也从20变为1,这表明conv 1层只有一个通道是必须的,极大地节省了FLOP和计算时间。
MLP:除了卷积层,我们提出的SSL也被扩展到学习全连接层的稀疏结构,我们强制将group Lasso正则化应用到每个神经元的输入或者输出连接关系中。一个神经元的输入连接关系全是零那么它就退化成了下一层的一个偏置神经元,同样地,如果一个神经元的的输出连接关系全为零,那么它就退化成了一个可移除的冗余神经元。Figure 4(a)总结了学习到的结构和不同的MLP网络的FLOP,结果显示了SSL不仅可以移除隐藏的神经元,而且可以发现图像的稀疏,举个例子,Figure 4(b)展示了在MLP 2中每个输入神经元的连接关系的数量,40.18%的输入神经元是0连接的,它们集中在图像的边界,这也和我们的直觉相符合:手写数字经常也在中心位置,靠近边界的像素点包含很少的决定分类的信息。