自从AlexNet一举夺得ILSVRC 2012 ImageNet图画分类比赛的冠军后,卷积神经网络(CNN)的热潮便席卷了整个核算机视觉范畴。CNN模型火速代替了传统人工规划(hand-crafted)特征和分类器,不只供给了一种端到端的处理办法,还大起伏地改写了各个图画比赛使命的精度,更甚者逾越了人眼的精度(LFW人脸辨认使命)。CNN模型在不断迫临核算机视觉使命的精度极限的一起,其深度和标准也在成倍增长。
表1 几种经典模型的标准,核算量和参数数量比照
Model | Model Size(MB) | Million Mult-Adds |
Million Parameters |
---|---|---|---|
AlexNet[1] | >200 | 720 | 60 |
VGG16[2] | >500 | 15300 | 138 |
GoogleNet[3] | ~50 | 1550 | 6.8 |
Inception-v3[4] | 90-100 | 5000 | 23.2 |
随之而来的是一个很为难的场景:如此巨大的模型只能在有限的平台下运用,底子无法移植到移动端和嵌入式芯片傍边。就算想经过网络传输,但较高的带宽占用也让许多用户望而生畏。另一方面,大标准的模型也对设备功耗和运转速度带来了巨大的应战。因而这样的模型间隔有用还有一段间隔。
在这样的景象下,模型小型化与加快成了亟待解决的问题。其实前期就有学者提出了一系列CNN模型紧缩办法,包括权值剪值(prunning)和矩阵SVD分化等,但紧缩率和功率还远不能令人满意。
近年来,关于模型小型化的算法从紧缩视点上能够大致分为两类:从模型权重数值视点紧缩和从网络架构视点紧缩。另一方面,从统筹核算速度方面,又能够划分为:仅紧缩标准和紧缩标准的一起提高速度。
本文首要评论如下几篇代表性的文章和办法,包括SqueezeNet[5]、Deep Compression[6]、XNorNet[7]、Distilling[8]、MobileNet[9]和ShuffleNet[10],也可按照上述办法进行大致分类:
表2 几种经典紧缩办法及比照
Method | Compression Approach | Speed Consideration |
---|---|---|
SqueezeNet | architecture | No |
Deep Compression | weights | No |
XNorNet | weights | Yes |
Distilling | architecture | No |
MobileNet | architecture | Yes |
ShuffleNet | architecture | Yes |
一、SqueezeNet
1.1 规划思维
SqueezeNet是F. N. Iandola,S.Han等人于2016年的论文《SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and 0.5MB model size》中提出的一个小型化的网络模型结构,该网络能在确保不丢失精度的一起,将原始AlexNet紧缩至本来的510倍左右( 0.5MB)。
SqueezeNet的中心指导思维是——在确保精度的一起运用最少的参数。
而这也是一切模型紧缩办法的一个终极方针。
根据这个思维,SqueezeNet提出了3点网络结构规划战略:
战略 1.将3×3卷积核替换为1×1卷积核。
这一战略很好了解,由于1个1×1卷积核的参数是3×3卷积核参数的1/9,这一改动理论上能够将模型标准紧缩9倍。
战略 2.减小输入到3×3卷积核的输入通道数。
咱们知道,关于一个选用3×3卷积核的卷积层,该层一切卷积参数的数量(不考虑偏置)为:
式中,N是卷积核的数量,也即输出通道数,C是输入通道数。
因而,为了确保减小网络参数,不只仅需求削减3×3卷积核的数量,还需削减输入到3×3卷积核的输入通道数量,即式中C的数量。
战略 3.尽可能的将降采样放在网络后边的层中。
在卷积神经网络中,每层输出的特征图(feature map)是否下采样是由卷积层的步长或许池化层决议的。而一个重要的观念是:分辨率越大的特征图(推迟降采样)能够带来更高的分类精度,而这一观念从直觉上也能够很好了解,由于分辨率越大的输入能够供给的信息就越多。
上述三个战略中,前两个战略都是针对怎么下降参数数量而规划的,终究一个旨在最大化网络精度。
1.2 网络架构
根据以上三个战略,作者提出了一个相似inception的网络单元结构,取名为fire module。一个fire module 包括一个squeeze 卷积层(只包括1×1卷积核)和一个expand卷积层(包括1×1和3×3卷积核)。其间,squeeze层学习了inception的思维,运用1×1卷积核来下降输入到expand层中3×3卷积核的输入通道数。如图1所示。
图1 Fire module结构示意图
其间,界说squeeze层中1×1卷积核的数量是s1x1,相似的,expand层中1×1卷积核的数量是e1x1, 3×3卷积核的数量是e3x3。令s1x1 e1x1+ e3x3然后确保输入到3×3的输入通道数减小。SqueezeNet的网络结构由若干个 fire module 组成,别的文章还给出了一些架构规划上的细节:
为了确保1×1卷积核和3×3卷积核具有相同巨细的输出,3×3卷积核选用1像素的zero-padding和步长
squeeze层和expand层均选用RELU作为激活函数
在fire9后选用50%的dropout
由于全衔接层的参数数量巨大,因而学习NIN[11]的思维,去除了全衔接层而改用global average pooling。
1.3 试验成果
表3 不同紧缩办法在ImageNet上的比照试验成果[5]
上表显现,比较传统的紧缩办法,SqueezeNet能在确保精度不损(乃至略有提高)的情况下,到达最大的紧缩率,将原始AlexNet从240MB紧缩至4.8MB,而结合Deep Compression后更能到达0.47MB,彻底满意了移动端的布置和低带宽网络的传输。
此外,作者还学习ResNet思维,对原始网络结构做了修正,增加了旁路分支,将分类精度提高了约3%。
1.4 速度考量
虽然文章首要以紧缩模型标准为方针,但毋庸置疑的一点是,SqueezeNet在网络结构中很多选用1×1和3×3卷积核是有利于速度的提高的,关于相似caffe这样的深度学习结构,在卷积层的前向核算中,选用1×1卷积核可防止额定的im2col操作,而直接运用gemm进行矩阵加快运算,因而对速度的优化是有必定的作用的。但是,这种提速的作用仍然是有限的,别的,SqueezeNet选用了9个fire module和两个卷积层,因而仍需求进行很多惯例卷积操作,这也是影响速度进一步提高的瓶颈。
二、Deep Compression
Deep Compression出自S.Han 2016 ICLR的一篇论文《Deep Compression: Compressing Deep Neural Networks with Pruning, Trained Quantization and Huffman Coding》。该文章获得了%&&&&&%LR 2016的最佳论文奖,一起也具有里程碑式的含义,引领了CNN模型小型化与加快研讨方向的新狂潮,使得这一范畴近两年来出现出了很多的优异作业与文章。
2.1 算法流程
与前面的“架构紧缩派”的SqueezeNet不同,Deep Compression是归于“权值紧缩派”的。而两篇文章均出自S.Han团队,因而两种办法结合,双剑合璧,更是能到达空前绝后的紧缩作用。这一试验成果也在上表中得到验证。
Deep Compression的算法流程包括三步,如图2所示:
图2 Deep Compression Pipeline
1、Pruning(权值剪枝)
剪枝的思维其实早已在前期论文中能够窥见,LeCun等人从前就运用剪枝来稀少网络,减小过拟合的危险,提高网络泛化性。
图3是MNIST上练习得到的LeNet conv1卷积层中的参数散布,能够看出,大部分权值会集在0处邻近,对网络的奉献较小,在剪值中,将0值邻近的较小的权值置0,使这些权值不被激活,然后侧重练习剩余的非零权值,终究在确保网络精度不变的情况下到达紧缩标准的意图。
试验发现模型对剪枝更灵敏,因而在剪值时主张逐层迭代修剪,别的每层的剪枝份额怎么主动选取仍然是一个值得深入研讨的课题。
图3 LeNet conv1层权值散布图
2、Quantization (权值量化)
此处的权值量化根据权值聚类,将接连散布的权值离散化,然后减小需求存储的权值数量。
初始化聚类中心,试验证明线性初始化作用最好;
运用k-means算法进行聚类,将权值划分到不同的cluster中;
在前向核算时,每个权值由其聚类中心表明;
在后向核算时,核算每个cluster中的梯度和将其反传。
图4 权值量化前向和后向核算进程
3、Huffman encoding(霍夫曼编码)
霍夫曼编码选用变长编码将均匀编码长度减小,进一步紧缩模型标准。
2.2 模型存储
前述的剪枝和量化都是为了完成模型的更紧致的紧缩,以完成减小模型标准的意图。
关于剪枝后的模型,由于每层很多参数为0,后续只需将非零值及其下标进行存储,文章中选用CSR(Compressed Sparse Row)来进行存储,这一步能够完成9x~13x的紧缩率。
关于量化后的模型,每个权值都由其聚类中心表明(关于卷积层,聚类中心设为256个,关于全衔接层,聚类中心设为32个),因而能够结构对应的码书和下标,大大削减了需求存储的数据量,此步能完成约3x的紧缩率。
终究对上述紧缩后的模型进一步选用变长霍夫曼编码,完成约1x的紧缩率。
2.3 试验成果
表4 不同网络选用Deep Compression后的紧缩率
经过SqueezeNet+Deep Compression,能够将原始240M的AlexNet紧缩至0.47M,完成约510x的紧缩率。
2.4 速度考量
能够看出,Deep Compression的首要规划是针对网络存储标准的紧缩,但在前向时,假如将存储模型读入打开后,并没有带来更大的速度提高。因而Song H.等人专门针对紧缩后的模型规划了一套根据FPGA的硬件前向加快结构EIE[12],有爱好的能够研讨一下。
三、XNorNet
二值网络一直是模型紧缩和加快范畴经久不衰的研讨课题之一。将原始32位浮点型的权值紧缩到1比特,怎么最大程度地减小功能丢失就成为了研讨的要害。
此篇论文首要有以下几个奉献:
提出了一个BWN(Binary-Weight-Network)和XNOR-Network,前者只对网络参数做二值化,带来约32x的存储紧缩和2x的速度提高,而后者对网络输入和参数都做了二值化,在完成32x存储紧缩的一起带了58x的速度提高;
提出了一个新式二值化权值的算法;
第一个在大规模数据集如ImageNet上提交二值化网络成果的作业;
无需预练习,可完成training from scratch。
3.1 BWN
即最优的二值化滤波器张量B即为原始参数的符号函数,最优的标准因子为每个滤波器权值的绝对值的均值。
练习算法如图5所示,值得注意的是,只要在前向核算和后向传达时运用二值化后的权值,在更新参数时仍然运用原始参数,这是由于假如运用二值化后的参数会导致很小的梯度下降,然后使得练习无法收敛。
3.2 XNOR-Net
在XNOR网络中,优化的方针是将两个实数向量的点乘近似到两个二值向量的点乘,即
在卷积核算中,输入和权值均量化成了二值,因而传统的乘法核算变成了异或操作,而非二值化数据的核算只占了很小一部分。