神经网络压缩(4) Learning Structured Sparsity in Deep Neural Networks

转载自:http://blog.csdn.net/wangqingbaidu/article/details/56674076

Learning Structured Sparsity in Deep Neural Networks

组会PPT

这篇论文使用Group Lasso(一种类似于L1的正则化方式,可以看成是把weights当成组来对待,以此将成组的weights规约到0附近,实现学习出来的参数的尽可能地结构化稀疏),依次实现网络预测的加速。

论文的解读分三个部分,

第一部分:为什么网络学习出来的参数是稠密的,但是对于模型来说这么多的参数其实是冗余的,其次看看学术圈弄矩阵稀疏化的人主要的目标是什么,然后再介绍一下他们经常用到的方法,

第二部分:针对他们的不足,SSL提出的一些改进方法

第三部分:实验结果,最后回归到哒溜君的老本行就是模型加速的工作,简单地介绍一下模型加速的方法。

一、Introduction

1. 为什么矩阵是稠密的,我们需要稠密的矩阵吗?

这个问题在Gong Y.[1]的论文中有了一个定性的解释:For a typical network described in (Zeiler & Fergus, 2013), about 90% of the storage is taken up by the dense connected layers; more than 90% of the running time is taken by the convolutional layers.

神经网络压缩(4) Learning Structured Sparsity in Deep Neural Networks

这个model 90%的参数量集中在FC层,可以说FC的参数存在一定的冗余。

神经网络压缩(4) Learning Structured Sparsity in Deep Neural Networks

从表格可[2]以看出,VGG-16与Darknet19的准确率是相差不多,他们的输入数据的大小相同,但是模型的大小确实有着很大的差别,随着模型的参数越多,拟合能力越强,但是在同等准确率的情况下,可见VGG-16模型中的参数有很大程度上是存在冗余的,所以需要一种方法将这些冗余的参数去掉,减小模型的体积。

2. Aim of Sparse

进行模型压缩,或者稀疏化权重矩阵的目标不外乎这几个目标

a.)证明模型的参数存在冗余,减少冗余之后准确率没有明显下降。

b.)减少模型的参数,对模型进行压缩,像一些移动应用不可能放一个vgg模型上去,肯定是要进行压缩才能使用的。

c.)模型压缩或者稀疏化之后就有了减少模型乘加操作的基础,在这个基础上可以进一步实现模型预测的加速。

3. Methods

再看看针对不同的目标,大家常用的伎俩或者方法。

a.) Redundancy

卡一个阈值,然后小于这个阈值的weights全部归0[3]

神经网络压缩(4) Learning Structured Sparsity in Deep Neural Networks

这样的话可以很方便地实现模型的压缩,简单粗暴,其实深度学习在每层之间的卷积算子,可以看成对于输入数据的加权,也就是说如果权值越少,就认为经过**之后所产生的影响几乎可以忽略不计,而且权重在空间内基本上是处于一个正态分布的,也就是说一般有100个正的weights,就有100个负的weights,PVANet前面几层就是基于这个特点实现的加速(前几层最耗时)。

b.) Storage

要达到这个目标是比较简单的,主要是看大家的压缩率,常用的方法包括矩阵分解,像SVD,UV分解之类;模型量化,权重从floatshort或者若干bits[4],这样存储空间就由32bits -> 若干(一般小于8)bits;对weights做聚类,也就是然后再进行索引。

i. 矩阵分解

这个方法其实很好理解,CNN其实就是矩阵乘法,A × B,这里假设B是100×100的矩阵,如果采用UV分解对B进行逼近,分解成两个矩阵分别是 100×25 和 25×100,这样存储空间就从原来的10000降到了5000,相当于起到了一倍的压缩比。

ii. 参数量化

这个量化是很明显的,float是32bits, 就算量化到short(8bits)都有4倍的压缩比,哒溜君曾经做过实验,就是给定的一张图片,在经过CNN所有网络,统计feature map的值分布在(-3, 61),所以通常我们可以压缩的更狠一点可以压缩到3bits左右[4], 但是这个压缩所带来性能损失就比较大了,想XNORNet就是把feature map 以及weights全都量化到了-1, 1,这虽然速度上提升了,但是准确率下降确实十分明显,而且模型很容易不收敛。

iii. kmeans参数聚类[1]

这个也是很容易理解的,参数聚类,假如现在有100个参数,聚类成10类,用这10个聚类中心表示这些参数是再用一个索引表去索引,也是可以实现模型压缩的,但是这样做要付出一个索引表的带价,所以一般是聚类中心个数和索引表体积的一个trade off。 在这个聚类上,还有group kmeans,对于4维的filter可以从不同维度开始聚类等,residual kmeans聚类肯定会带来损失,可以使用第一次聚类之后原矩阵与聚类矩阵的残差继续聚类,以此类推得到一个残差链。

c.) MAC(Multiplication Add Computation)

提高模型预测的速度可能是做工程人的终极目标了,但是这个目标并不是很容易实现,前面介绍的矩阵分解可以减少乘加操作,像更明显的降低模型深度,使用更小的filter,当然使用Binary的方式,总是实现方式不一而足。

但是现在存在一个学术界与工业界的gap就是,学术理论是一套,工业实现又是另外一套,学术实现想Binary Connect以及其他的量化方式就是使用的Mask的方式,这个在实际应用的时候并不会降低运算量反而会有所上升。

二、SSL Structured Sparsity Learning

在介绍具体算法之前,有两点需要大家明白,就是l1和Group Lasso的作用

神经网络压缩(4) Learning Structured Sparsity in Deep Neural Networks

l1产生稀疏化,Group Lasso产生结构稀疏化。具体算法大家可以参考各种博客

1. Algorithm

这篇论文主要的工作就是集中在了loss function上面。 所有稀疏化的操作都是基于下面的loss func进行的

E(W)=ED(W)+λR(W)+λgi=1LRg(w(l))

ED(W): Loss function

R(W): Non-structured regularization, l2-norm

Rg(W(l)): Group lasso

2. 三种结构化稀疏loss

总体来说就是想结构化稀疏那一块的内容,那么就去按照那个部分的进行分组,然后进行Group Lasso

神经网络压缩(4) Learning Structured Sparsity in Deep Neural Networks

a.) Channel Wise
>

E(W)=ED(W)+λni=1L(nl=1NlW(l)nl,:,:,:g)+λci=1L(cl=1ClW(l)cl,:,:,:g)

b.) Shape Wise

E(W)=ED(W)+λsi=1L(cl=1Clml=1Mlkl=1KlW(l):cl,:ml,:klg)

c.) Deepth Wise

E(W)=ED(W)+λdi=1W(l)g

三、Experiment

1.在minist上的加速效果

神经网络压缩(4) Learning Structured Sparsity in Deep Neural Networks

2.ImageNet上的加速效果

神经网络压缩(4) Learning Structured Sparsity in Deep Neural Networks

可以看到上面你的加速效果在mnist数据集上加速效果明显,但是在ImageNet就没有这么高的加速比,所以具体的效果还是需要依赖于数据集的。

最后还是回到加速这个事情,其实并不是很easy的,在论文的slide中也有说明就是理论的加速比≠实际加速比,这里面有很多programing的东西在里面,就拿简单的float到short的量化来说,哒溜君做实验发现麻蛋,根本没效果,原因很简单就是现在的CPU都是32或者64bits的机器,也就是SIMD,一次能够取到所有的float bits,而short也会,所以没有太大性能上的差别。

神经网络压缩(4) Learning Structured Sparsity in Deep Neural Networks

后面哒溜君会继续在指令集的角度研究加速这个事情,到时候会跟大家继续分享。

三、Reference

[1] Gong Y, Liu L, Yang M, et al. Compressing Deep Convolutional Networks using Vector Quantization[J]. Computer Science, 2014.

[2] https://pjreddie.com/darknet/imagenet/

[3] Han S, Pool J, Narang S, et al. DSD: Regularizing Deep Neural Networks with Dense-Sparse-Dense Training Flow[J].

[4] Anwar S, Hwang K, Sung W. Fixed point optimization of deep convolutional neural networks for object recognition[J]. 2015:1131-1135