CNN模型压缩与加速算法综述
XNOR-Net中一个典型的卷积单元如图6所示,与传统单元不同,各模块的顺序有了调整。为了减少二值化带来的精度损失,对输入数据首先进行BN归一化处理,BinActiv层用于对输入做二值化,接着进行二值化的卷积操作,最后进行pooling。
本文引用地址:https://www.eepw.com.cn/article/201807/383798.htm
图5 BWN训练过程

图6 传统卷积单元与XNOR-Net卷积单元对比
3.3 实验结果
表5 ImageNet上二值网络与AlexNet结果对比

与ALexNet相比,BWN网络能够达到精度基本不变甚至略好,XNOR-Net由于对输入也做了二值化,性能稍降。
四、Distilling
Distilling算法是Hinton等人在论文Distilling the Knowledge in a Neural Network中提出的一种类似网络迁移的学习算法。
4.1 基本思想
Distilling直译过来即蒸馏,其基本思想是通过一个性能好的大网络来教小网络学习,从而使得小网络能够具备跟大网络一样的性能,但蒸馏后的小网络参数规模远远小于原始大网络,从而达到压缩网络的目的。
其中,训练小模型(distilled model)的目标函数由两部分组成
1) 与大模型(cumbersome model)的softmax输出的交叉熵(cross entropy),称为软目标(soft target)。其中,softmax的计算加入了超参数温度T,用以控制输出,计算公式变为

温度T越大,输出的分布越缓和,概率zi/T越小,熵越大,但若T过大,会导致较大熵引起的不确定性增加,增加了不可区分性。
至于为何要以soft target来计算损失,作者认为,在分类问题中,真值(groundtruth)是一个确定性的,即one-hot vector。以手写数字分类来说,对于一个数字3,它的label是3的概率是1,而是其他数值的概率是0,而对于soft target,它能表征label是3的概率,假如这个数字写的像5,还可以给出label是5的一定概率,从而提供更多信息,如
数字 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|---|---|
真值 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
软目标 | 0 | 0 | 0 | 0.95 | 0 | 0.048 | 0.002 | 0 | 0 | 0 |
2)与真值(groundtruth)的交叉熵(T=1)
训练的损失为上述两项损失的加权和,通常第二项要小很多。
4.2 实验结果
作者给出了在语音识别上的实验结果对比,如下表
表6 蒸馏模型与原始模型精度对比[8]

上表显示,蒸馏后的模型的精确度和单字错误率和用于产生软目标的10个模型的性能相当,小模型成功地学到了大模型的识别能力。
4.3 速度考量
Distilling的提出原先并非针对网络加速,而最终计算的效率仍然取决于蒸馏模型的计算规模,但理论上蒸馏后的小模型相对原始大模型的计算速度在一定程度上会有提升,但速度提升的比例和性能维持的权衡是一个值得研究的方向。
五、MobileNet
MobileNet是由Google提出的针对移动端部署的轻量级网络架构。考虑到移动端计算资源受限以及速度要求严苛,MobileNet引入了传统网络中原先采用的group思想,即限制滤波器的卷积计算只针对特定的group中的输入,从而大大降低了卷积计算量,提升了移动端前向计算的速度。
5.1 卷积分解
MobileNet借鉴factorized convolution的思想,将普通卷积操作分成两部分:
Depthwise Convolution
每个卷积核滤波器只针对特定的输入通道进行卷积操作,如下图所示,其中M是输入通道数,DK是卷积核尺寸:

图7 Depthwise Convolution
Depthwise convolution的计算复杂度为 DKDKMDFDF,其中DF是卷积层输出的特征图的大小。
Pointwise Convolution
采用1x1大小的卷积核将depthwise convolution层的多通道输出进行结合,如下图,其中N是输出通道数:

图8 Pointwise Convolution[
Pointwise Convolution的计算复杂度为 MNDFDF
上面两步合称depthwise separable convolution
标准卷积操作的计算复杂度为DKDKMNDFDF
因此,通过将标准卷积分解成两层卷积操作,可以计算出理论上的计算效率提升比例:

对于3x3尺寸的卷积核来说,depthwise separable convolution在理论上能带来约8~9倍的效率提升。
5.2 模型架构

图9 普通卷积单元与MobileNet 卷积单元对比
MobileNet的卷积单元如上图所示,每个卷积操作后都接着一个BN操作和ReLU操作。在MobileNet中,由于3x3卷积核只应用在depthwise convolution中,因此95%的计算量都集中在pointwise convolution 中的1x1卷积中。而对于caffe等采用矩阵运算GEMM实现卷积的深度学习框架,1x1卷积无需进行im2col操作,因此可以直接利用矩阵运算加速库进行快速计算,从而提升了计算效率。
5.3 实验结果
表7 MobileNet与主流大模型在ImageNet上精度对比

上表显示,MobileNet在保证精度不变的同时,能够有效地减少计算操作次数和参数量,使得在移动端实时前向计算成为可能。
六、ShuffleNet
ShuffleNet是Face++今年提出了一篇用于移动端前向部署的网络架构。ShuffleNet基于MobileNet的group思想,将卷积操作限制到特定的输入通道。而与之不同的是,ShuffleNet将输入的group进行打散,从而保证每个卷积核的感受野能够分散到不同group的输入中,增加了模型的学习能力。
6.1 设计思想
我们知道,卷积中的group操作能够大大减少卷积操作的计算次数,而这一改动带来了速度增益和性能维持在MobileNet等文章中也得到了验证。然而group操作所带来的另一个问题是:特定的滤波器仅对特定通道的输入进行作用,这就阻碍了通道之间的信息流传递,group数量越多,可以编码的信息就越丰富,但每个group的输入通道数量减少,因此可能造成单个卷积滤波器的退化,在一定程度上削弱了网络了表达能力。
6.2 网络架构
在此篇工作中,网络架构的设计主要有以下几个创新点:
提出了一个类似于ResNet的BottleNeck单元
借鉴ResNet的旁路分支思想,ShuffleNet也引入了类似的网络单元。不同的是,在stride=2的单元中,用concat操作代替了add操作,用average pooling代替了1x1stride=2的卷积操作,有效地减少了计算量和参数。单元结构如图10所示。
提出将1x1卷积采用group操作会得到更好的分类性能
在MobileNet中提过,1x1卷积的操作占据了约95%的计算量,所以作者将1x1也更改为group卷积,使得相比MobileNet的计算量大大减少。
提出了核心的shuffle操作将不同group中的通道进行打散,从而保证不同输入通道之间的信息传递。
ShuffleNet的shuffle操作如图11所示。

图10 ShuffleNet网络单元

图11 不同group间的shuffle操作
6.3 实验结果
表8 ShuffleNet与MobileNet在ImageNet上精度对比

上表显示,相对于MobileNet,ShuffleNet的前向计算量不仅有效地得到了减少,而且分类错误率也有明显提升,验证了网络的可行性。
6.4 速度考量
作者在ARM平台上对网络效率进行了验证,鉴于内存读取和线程调度等因素,作者发现理论上4x的速度提升对应实际部署中约2.6x。作者给出了与原始AlexNet的速度对比,如下表。
表9 ShuffleNet与AlexNet在ARM平台上速度对比 [10]

结束语
近几年来,除了学术界涌现的诸多CNN模型加速工作,工业界各大公司也推出了自己的移动端前向计算框架,如Google的Tensorflow、Facebook的caffe2以及苹果今年刚推出的CoreML。相信结合不断迭代优化的网络架构和不断发展的硬件计算加速技术,未来深度学习在移动端的部署将不会是一个难题。
评论