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

转载 2017年06月13日 20:51:23

转载自: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.

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

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

2. Aim of Sparse

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

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

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

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

3. Methods

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

a.) Redundancy

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

这样的话可以很方便地实现模型的压缩,简单粗暴,其实深度学习在每层之间的卷积算子,可以看成对于输入数据的加权,也就是说如果权值越少,就认为经过激活之后所产生的影响几乎可以忽略不计,而且权重在空间内基本上是处于一个正态分布的,也就是说一般有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的作用

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

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上的加速效果

2.ImageNet上的加速效果

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

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

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

三、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

XNOR-Net算法详解

论文:XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks 链接:https://arxiv.or...
  • u014380165
  • u014380165
  • 2017-08-31 08:27:51
  • 3722

theano-xnor-net代码注释8 xnornet_layers.py

""" Class and method definition for the layers in XNOR-Net """ import theano import theano.tensor.nn...
  • l297969586
  • l297969586
  • 2017-06-20 10:43:05
  • 384

CNN网络二值化--XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks

XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks本文主要是简化CNN网络,使得CNN网络能够在C...
  • cv_family_z
  • cv_family_z
  • 2016-07-15 13:55:07
  • 7685

BWN-XNOR-caffe安装注意项

github地址https://github.com/loswensiana/BWN-XNOR-caffe XNOR是用于权值与输入二值化的解决方案,以损失一部分精度为代价,来达到提高计算速度和减小...
  • l297969586
  • l297969586
  • 2017-03-16 17:13:44
  • 1628

Learning Structured Sparsity in Deep Neural Networks

如果弄过机器学习或者数据挖掘等,相信大家对l1,l2正则化一定不会陌生,l1正则的特点是可以在一定程度上使学习出来的参数趋向于0,l2正则在一定程度上可以防止过拟合。所以很多人使用l1正则使学习出来的...
  • wangqingbaidu
  • wangqingbaidu
  • 2017-02-23 15:56:25
  • 2195

【用Python学习Caffe】8. 网络结构的权重共享量化

8. 网络结构的权重共享量化网络权重共享量化也是一类重要的网络压缩方法,其本质在于先通过聚类方法得到该层权重的聚类中心,然后通过聚类中心值来表示原权重值。因此权重值并不是由32位的浮点数来表示,而是由...
  • tostq
  • tostq
  • 2017-06-22 22:28:01
  • 1675

Neural Networks and Deep Learning 学习笔记(三)

1. 怎么理解C(w,b)≡12n∑x∥y(x)−a∥2 C(w,b) \equiv \frac{1}{2n} \sum_x \| y(x) - a\|^2首先,∥v∥\|v\|是指范数 范函是一...
  • lmw21848
  • lmw21848
  • 2016-06-16 19:41:57
  • 283

神经网络压缩(8)Incremental Network Quantization: Towards Lossless CNNs with Low-precision Weights

Incremental Network Quantization: Towards Lossless CNNs with Low-precision WeightsIntro英特尔中国研究院:INQ神...
  • cookie_234
  • cookie_234
  • 2017-07-19 15:05:58
  • 1999

深度神经网络压缩

本篇论文主要讲述关于深度学习网络参数的压缩工作。论文主要从下三点出发: pruning:对网络进行剪枝,只保留重要的连接 train quantization:通过参数共享量化权重矩阵 huffman...
  • zchang81
  • zchang81
  • 2017-09-04 14:31:31
  • 423

XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks随手记

Concurrent to the recent progress in recognition, interesting advancements have been happening in v...
  • u013657981
  • u013657981
  • 2016-03-24 22:36:49
  • 1005
收藏助手
不良信息举报
您举报文章:神经网络压缩(4) Learning Structured Sparsity in Deep Neural Networks
举报原因:
原因补充:

(最多只允许输入30个字)