首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Channel pruning for Accelerating Very Deep Neural Networks

论文解读抢先看

视频讲解主题

《Channel pruning for Accelerating Very Deep Neural Networks论文解读》

内容概要

本文提出了一种新的裁枝方法,用于加速深层卷积神经网络。对于一个训练好的模型,本文方法通过一个2步迭代的算法逐层裁枝,优化函数是LASSO回归和最小二乘法重建误差。进一步,本文将算法推广到多层的裁枝,和多分枝网络的裁枝。结果上,本文的方法减少了累积误差,且适用于各种网络结构。针对于VGG16网络,本文方法可以在加速5倍的条件下,准确率仅下降0.3%;针对ResNet,Xception网络加速2倍,准确率分别下降1.4%,1.0%

一.简介

加速卷积神经网络的方法主要可以分三个方面:1. 针对卷积操作优化,例如使用FFT实现卷积操作;2. 量化操作,例如网络的二值化(BinaryNet);3. 在结构上简化,使模型变小。本工作属于第三种。在结构上简化模型也可以分三类:张量分解、连接稀疏化,基于通道的裁枝。首先张量分解是将张量分解成多个小张量,但是输出的通道数并没有变化,因此对于1*1的卷积层很难通过张量分解的方法做压缩,而当前很多模型结构都用到了大量的1*1卷积(例如ResNet,GoogleNet,Xception等)。其次连接稀疏化是将两层之间的连接变稀疏,但是这种稀疏化处理通常是没有固定模式规律的,所以尽管理论上有很高的加速效果,但是实际实现很复杂,因为通过稀疏化处理,数据无法再通过原来的张量存储,需要使用稀疏矩阵/稀疏张量来存储,那么卷积操作也变成稀疏卷积。最后相比于前两种方法,基于通道的裁枝既可以减少通道数,又不会改变数据的存储方式,因此其对于CPU和GPU都有很好的加速效果,同时也不需要实现特殊的卷积操作。

虽然基于通道的裁枝有以上的好处,但是也存在相应的难点。首先,改变一层的通道数,对下一层卷积的输入也是有影响的(输入的特征图通道数变少了)。其次,如何选取删掉的通道也是一个问题。【1,49】工作提出在从头训练的时候,就强制参数稀疏化,在训练过程中即确定哪些参数是不重要的,但是问题在于从头训练十分耗时,而且这种加入参数稀疏化的损失函数也不容易优化。【31,3】工作则是直接对训练好的模型做裁枝,着眼于分析单个权重的重要性,但是为了保证很好的准确率,加速效果就有很大的限制。

本文同样也是针对训练好的模型做裁枝,参考张量分解中重建特征图的优化方法,本文不去考虑单个参数的重要性,而是直接最小化输出特征图的重建误差,逐层地做裁枝,如图1所示。我们想要裁掉B层到C层之间卷积的若干通道,但由于通道被裁掉,相应B层的输入对应通道的特征图也需要被裁掉,而产生这些特征图的是A层到B层的对应的filter(图中虚线的filter),一次裁掉B层到C层的若干通道,同样也可以删去A层到B层的若干filter。裁枝后如何保证裁掉的参数是正确的呢?设原本C层特征图为Mc,裁枝后,到C层的特征图为Mc’,则要使Mc’尽可能与Mc相同

最小化重建误差的过程可以分为2个步骤:通道选择,特征图重建。第一步是需要找出最具代表性的通道,然后将其他的通道删掉,这一步是基于LASSO回归做的;第二部是利用选取的通道重建C层的特征图,这一步是使用最小均方误差来表示重建误差。本文进一步逐层地做裁枝,并计算积累误差,最后本文也讨论了多分枝网络结构的裁枝方法。

通过本文的方法,可以对VGG16实现4倍的加速效果,top-5错误率增加1.0%,若进一步结合张量分解的方法,可以实现5倍的加速效果,二错误率仅增加0.3%。针对ResNet-50和Xception-50网络,实现2倍的加速,错误率分别增加1.4%,1.0%

二.相关工作

大多加速卷积神经网络的方法可以归为3类:1. 针对卷积操作优化【36,48,27,4】;2. 量化操作【8,41】;3. 在结构上简化,使模型变小。第3类方法又可以分3种方法:张量分解【22,28,13,24】、连接稀疏化【17,33,29,15,14,52】、基于通道的裁枝。其中张量分解将整个参数张量由若干小张量表示,针对全连接层,则利用SVD分解;连接稀疏化则通过单个参数的绝对值来衡量参数的重要性,理论上可以达到很好的加速效果,但是实际的加速效果却依赖于实现细节,因为参数的存储和卷积操作都需要额外实现。

基于通道的裁枝方法则是以通道为单位,裁剪掉不重要的参数。【1,49,54】工作通过在训练中加入使参数稀疏化的正则项,来简化后续裁枝步骤的难度,但是训练成本很高,而且不容易拟合。【45,35,19】等工作则直接针对训练好的模型做裁枝,但往往效果并不理想。

三.方法介绍

单层裁枝

继续看图1,我们在简介中大致描述了本文单层的裁枝方法:我们想要裁掉B层到C层之间卷积的若干通道,设原本C层特征图为Mc,裁枝后,到C层的特征图为Mc’,则要使Mc’尽可能与Mc相同

第一步是选择通道,第二步是特征图重建,目的是最小化重建误差,本文提出两步迭代的算法:首先选取最具代表性的通道,即裁剪B层到C层的卷积;其次重建特征图,调整B层到C层的参数W,使C层特征图重建误差最小。迭代交替进行以上两步。

假设B层到C层的卷积核参数为W,其尺寸为n*c*kh*kw,其中n为输出层C层特征图的通道数,c为输入层B层特征图的通道数,kh*kw为卷积核尺寸,假设输入特征图为X,输出特征图为Y,设batch_size为N,则X尺寸为n*hin*win*c,Y尺寸为N*Hout*Wout*n。我们将通道数从c,裁剪到c

...

完全版文字内容请移步

知识库

技术文章

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181212A0ZYYH00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券