《Learning Structured Sparsity in Deep Neural Networks》论文笔记

1. 概述

这篇文章提出了结构系数学习(Structured Sparsity Learning,SSL)的方法去正则网络的结构(filter,channel,filter shape,网络的深度),SSL的特点是:

  • 1)从大的DNN网络去学习一个的紧密结构,减少计算花销;
  • 2)获得一个硬件友好的DNN稀疏结构去加速网络。在实验中使用SSL方法对AlexNet在CPU与GPU上分别加速了5.1与3.1倍。精度降低大约为1%;
  • 3)使用SSL方法之后给网络带来了正则的作用,提升了网络的性能。实验中将20层的ResNet裁剪成为了18层的,同时还提升了网络的精度。

论文地址:Learning Structured Sparsity in Deep Neural Networks
论文代码:Caffe for Sparse and Low-rank Deep Neural Networks
下面这幅图中展示的是AlexNet前面5个卷积层使用L1范数进行non-structurally剪裁的结果,可以看到网络已经很稀疏了(大于95%),但是加速的幅度确实很小的。
《Learning Structured Sparsity in Deep Neural Networks》论文笔记_第1张图片
在最近提出的低秩近似方法中,首先对DNN进行训练,然后对每个训练的权值张量进行分解,并用较小因子的乘积进行近似。最后,通过finetune来恢复模型的精度。低秩逼近在稠密矩阵中协调模型参数,避免了非结构化稀疏正则化的局部性问题,能够实现实际的加速。然而,低秩近似只能得到各层内部的紧凑结构,并且在微调过程中,各层的结构是固定的,需要花费大量的时间进行分解和微调,才能找到最优的权值近似,从而提高性能和保持精度。

在文章中基于这样的事实:

  • 1)在filter与channel上存在冗余;
  • 2)过滤器的形状通常固定为长方体,但启用任意形状可以潜在地消除这种固定带来的不必要的计算;
  • 3)一般来讲网络越深分类效果越好,但是会存在梯度问题。

对此,这篇文章提出了SSL方法通过在训练中使用group Lasso回归来压缩网络的结构,这里包括了filter、channel、filter的形状与网络的深度。SSL方法将结构正则化(网络的分类精度)与本地最优化(内存访问的计算效率),最后结果并不只是正则化之后提升精度的原始网络,而且还加速了计算过程。

2. Structured Sparsity Learning Method for DNNs

2.1 Structured Sparsity Learning的通用结构

在CNN网络中对于第 l , l ∈ 1 ≤ l ≤ L l, l\in1\le l \le L l,l1lL层的卷积参数为 W ( l ) ∈ R N l ∗ C l ∗ M l ∗ K l W^{(l)}\in R^{N_l*C_l*M_l*K_l} W(l)RNlClMlKl,这写权重的不同维度就可以代表filter、channel和spatial上了,因而得到了网络的空间结构正则化通用优化目标,可以将其表示为:
E ( W ) = E D ( W ) + λ R ( W ) + λ g ∑ l = 1 L R g ( W ( l ) ) E(W)=E_D(W)+\lambda R(W)+\lambda_g \sum_{l=1}^LR_g(W^{(l)}) E(W)=ED(W)+λR(W)+λgl=1LRg(W(l))
其中, W W W代表DNN网络中的权重集合; E D ( W ) E_D(W) ED(W)代表对应数据产生的损失; R ( ⋅ ) R(\cdot) R()代表在每个权重上使用非结构正则,例如L2范数; R g ( ⋅ ) R_g(\cdot) Rg()代表每层上的稀疏正则化。对于权重集合 w w w使用group Lasso正则可以表示为 R g ( w ) = ∑ g = 1 G ∣ ∣ w ( g ) ∣ ∣ g R_g(w)=\sum_{g=1}^G||w^{(g)}||_g Rg(w)=g=1Gw(g)g w ( g ) w^{(g)} w(g)代表一个group的部分权重, G G G代表group的总数。不同的group之间可能会存在重叠的。 ∣ ∣ ⋅ ∣ ∣ ||\cdot|| 是group Lasso, ∣ ∣ w ( g ) ∣ ∣ g = ∑ i = 1 ∣ w ( g ) ∣ ( w i ( g ) ) 2 ||w^{(g)}||_g=\sqrt{\sum_{i=1}^{|w^{(g)}|}(w_i^{(g)})^2} w(g)g=i=1w(g)(wi(g))2 ∣ w ( g ) ∣ |w^{(g)}| w(g) w ( g ) w^{(g)} w(g)中权重的个数。

2.2 filters, channels, filter shapes and depth上的稀疏学习

论文中说到的三个层面的wise其图形描述如下所示:
《Learning Structured Sparsity in Deep Neural Networks》论文笔记_第2张图片
惩罚不重要的filter和channel 这个对应上面图中的第一个部分,在filter层面与channel层面的结构稀疏可以使用下面的目标函数进行优化:
在这里插入图片描述
学习任意形状的filter 这个对应上面图中的第二个部分,在优化的过程中一些filter会被置为0,那么就可以使得一些非0的filter变为非方形,那么其优化的目标函数可以表述为:
在这里插入图片描述
网络深度正则化 也就是上面的第三个部分了,当一个卷积层中所有的filter都被置为0之后那么这个卷积层就可以被剪除掉了,但是全部置为0就会使得网络无法继续传递下去,在文章中使用了ResNet的结构,使得网络可以跨过一些卷积层,最后再判定那些层是否是需要的,文章中对这一部分的目标函数为:
在这里插入图片描述

2.3 Structured sparsity learning for computationally efficient structures

在上面一节中的说到的策略可以用来得到压缩之后的模型,论文在此基础上提出了两种计算规则:

  • 1)2D-filter-wise sparsity for convolution 卷积层中的3D卷积可以看做是2D卷积的组合(做卷积的时候spatial和channel是不相交的)。这种结构化稀疏是将该卷积层中的每个2D的filter, W n l , c l , : , : ( l ) W_{n_l,c_l,:,:}^{(l)} Wnl,cl,:,:(l),看做一个group,做group LASSO。这相当于是上述filter-wise和channel-wise的组合。
  • 2)Combination of filter-wise and shape-wise sparsity for GEMM 在Caffe中,3D的权重tensor是reshape成了一个行向量,然后 N N N个filter的行向量堆叠在一起,就成了一个2D的矩阵。这个矩阵的每一列对应的是 W : , c l , m l , k l ( l ) W_{:,c_l,m_l,k_l}^{(l)} W:,cl,ml,kl(l),称为shape sparsity。两者组合,矩阵的零行和零列可以被抽去,相当于GEMM的矩阵行列数少了,起到了加速的效果。

3. 实验结果

论文分别在MNIST,CIFAR10和ImageNet上做了实验,使用现有的网络作为baseline,以此来使用SSL来压缩网络。论文在LeNet上使用文章中的方法进行压缩得到的结果:
《Learning Structured Sparsity in Deep Neural Networks》论文笔记_第3张图片
将网络conv1的filter可视化如下。可以看到,对于LeNet2来说,大多数filter都被稀疏掉了。
《Learning Structured Sparsity in Deep Neural Networks》论文笔记_第4张图片

你可能感兴趣的:([9],模型压缩&加速)