MindSpore首发:诺亚NeurIPS 2020多篇轻量化技术端侧模型
国际人工智能顶级会议NeurIPS 2020(Conference on Neural Information Processing Systems, 神经信息处理系统大会)在12月6日至12日举行。本届会议无论是论文投稿数量还是接受率都创下了历史记录。
随着卷积神经网络的广泛使用和在视觉类应用的巨大成功,如何克服计算和存储资源限制将卷积神经网络部署到智能手机和穿戴设备等端侧设备的模型轻量化技术越发重要。本文将对华为诺亚方舟实验室入选NeurIPS 2020的模型轻量化技术工作进行介绍,涵盖了剪枝、结构蒸馏以及量化等几个方向,并且放出对应MindSpore首发端侧模型获取链接↓
https://www.mindspore.cn/resources/hub
SCOP:Scientific Control for Reliable Neural Network Pruning
现有的剪枝方法基于各种假设条件近似估计神经网络节点对整体网络的重要性然后进行节点剪枝,往往存在结果不可靠而导致网络精度下降。
原理
对于剪枝方法,最重要的过程是评估卷积神经网络节点的重要性,在尽量不影响预训练网络性能的前提下删除不重要的网络节点。一种典型的节点重要性评估假设是权重Norms越小节点重要性低进而被剪掉[2][3]。
考虑到输入数据,有的剪枝方法评估网络节点和最终损失函数之间的关系并用泰勒展开进行近似,保留与最终损失函数关系更密切的节点[4]。但是这些方法都会不可避免的引入大量潜在影响因子,最终影响剪枝过程,例如不同信道之间的相互依赖可能误导基于权重Norms的方法,因为一些不含重要信息的节点权重Norms很大,基于输入数据的方法的权重重要性对数据很敏感,剪枝结果不稳定。
结果
将本文提出的SCOP在公开数据集ImageNet上进行实验,对ResNet系列网络预训练模型进行剪枝验证了SCOP的有效性,实验结果如下表1.1。
相比于现有SOTA剪枝方法GAL[5]和PFP[6],SCOP方法得到的剪枝后网络无论是网络精度还是模型大小即参数量减少比例都表现出很大的优势。
使用SCOP算法在Oxford-IIIT Pet数据集对ResNet50网络剪枝的网络resnet-0.65x_v1.0_oxford_pets已基于MindSpore首发,可分别从MindSpore modelzoo 和Hub获取训练代码和模型。
论文链接:
https://proceedings.neurips.cc/paper/2020/file/7bcdf75ad237b8e02e301f4091fb6bc8-Paper.pdf
https://gitee.com/mindspore/mindspore/tree/master/model_zoo/research/cv/resnet50_adv_pruning
https://www.mindspore.cn/resources/hub/details?noah-cvlab/gpu/1.0/resnet-0.65x_v1.0_oxford_pets
Residual Distillation: Towards Portable Deep Neural Networks without Shortcuts
比如当进行在线推理时,ResNet50中的残差占据了特征图整体内存消耗的大约40%,因为之前网络层的特征结果无法被释放,直到后续的残差计算结束。
华为诺亚方舟实验室提出了一种新的CNN模型训练方法—基于残差蒸馏的联合训练框架Joint-training framework based on Residual Distillation(JointRD),希望在训练的时候引入残差连接保证训练效果,但在部署时去掉残差提升推理速度。通过在ImageNet/CIFAR10/CIFAR100等数据上的实验表明,利用JointRD训练得到的没有残差连接的plainCNN能够达到和ResNet相同精度的同时,性能提升1.4倍,内存消耗降低1.25倍。预训练plain-CNN在MIT 67和Caltech 101的fine-tuning结果也证明了特征的迁移泛化性。
联合训练框架介绍
主要动机
CNN模型当中引入残差连接的主要动机是避免梯度消失及降低优化难度,在最近的多篇研究中已经证明了残差连接在训练过程中对梯度的影响。因此我们认为没有残差的plain-CNN模型表现差是因为优化方法差而非模型本身的表达能力的限制。
通过在mobile NPU上对比去掉残差的plain-CNN 50和保留残差的ResNet50内存消耗和时延,我们发现去掉残差后内存消耗降低19%,时延降低30%。
基于以上结论,我们提出了一种可能的解决方案,利用ResNet为plain CNN的训练过程提供更好的梯度。因此我们提出了JointRD (Joint-training framework based on Residual Distillation),在这个框架中我们通过将plain CNN中的一个stage同时连接到它之后的stage和ResNet之后的stage达成上述训练目标。
具体方案
联合训练框架保证了残差连接使梯度更易反传的效果,但残差连接还有另外一个功能就是保护从前一层提取到的特征。为了达成相同的效果,我们采用Dirac delta初始化方法[8]来初始化student网络的权重。对于teacher网络的权重,我们使用预训练好的ResNet模型来进行初始化,并在整个训练过程中停止对这部分权重的更新。
如图2.1所示,训练过程的loss分为三部分,student网络的交叉熵loss ,Plain-CNN每个stage连接到ResNet的下一个stage后最终得到的交叉熵loss ,以及我们采用teacher模型最后一层特征和student模型最后一层特征的mean square error (MSE)作为KD loss:
(2-1) |
实验结果
通过三种规模的网络plain-CNN18, plain-CNN34, plain-CNN50在CIFAR-10和CIFAR-100上的实验证明了联合训练方法JointRD有效性。如表2.1所示,JointRD可以将Plain-CNN训练达到和对应的ResNet相同的精度。同时我们还对比了单纯训练plain-CNN(见"Naive"列)以及只使用KD (MSE) loss和plain-CNN的交叉熵loss(见"KD (MSE) +Dirac"列)。
表2.2. 对比基于ImageNet剪枝和plain-CNN的轻量网络[7]
目前由JointRD训练得到的plain-CNN18/ plain-CNN34/plain-CNN50 MindSpore端侧模型均已上线MindSpore Hub,感兴趣的可以下载体验。
论文链接:
https://proceedings.neurips.cc/paper/2020/file/657b96f0592803e25a4f07166fff289a-Paper.pdf
https://www.mindspore.cn/resources/hub/details?noah-cvlab/gpu/1.0/plain-CNN-resnet18_v1.0_cifar_10
https://www.mindspore.cn/resources/hub/details?noah-cvlab/gpu/1.0/plain-CNN-resnet34_v1.0_cifar10
https://www.mindspore.cn/resources/hub/details?noah-cvlab/gpu/1.0/plain-CNN-resnet50_v1.0_cifar10
Searching for Low-Bit Weights in Quantized Neural Networks
传统的量化方法通常不是直接可导的,而是通过近似梯度进行训练,这增加了量化网络的优化难度以及量化网络和原始网络间的精度差距。相较于全精度(32-bit 浮点数)权值,低比特权值只有很小的数值空间,如4-bit量化只有2^4=16种可能的量化取值。
方法介绍
传统量化方法
以q-bit量化为例,坐标轴将会被划分到
在训练过程中,量化后权值
传统量化方法的解决方法是通过
Low-bit Weight Searching
对比传统方法,我们引入连续松弛策略来搜索离散的权重值。以优化一个
| (3-1) |
其中
在训练过程中W的量化结果可以表示为基于离散取值概率分布的加权结果:
| (3-2) |
而在推理阶段,选取概率最大的离散值作为最终的量化结果,即:
| (3-3) |
其中,
我们通过优化张量A来获取W的量化取值,而A的梯度是可以精确计算的,因此,整个优化过程是可导的,从而避免了近似梯度引入的误差。
虽然连续松弛策略可以解决训练过程中近似梯度所引入的误差问题,但
因此我们提出了逐步降低temperature的训练策略,在优化之初,
训练和推理过程中还存在的另外一个差别为batch normalization层的统计,因此我们提出了state batch normalization来建立sharp softmax分布和one-hot分布间的联系。具体来说,SBN在训练过程中分别统计两组BN,一组针对训练中连续权重
| (3-4) |
其中,
另外一组是针对量化后权重
| (3-5) |
同时,我们使两组BN共享一组仿射变换系数,即:
| (3-6) |
通过这种方式,SBN消除了BN层统计的量化偏差。
实验结果
表3.1和表3.2比较了我们的方法和其他SOTA量化方法BNN, XNORNet, DoReFa, DSQ, SQ, and LQ-Net在VGG-Small和ResNet20两个不同模型上的效果。如表中结果所示,W/A分别表示weight和activation的量化位宽,在不同量化位宽下,我们的方法都超越了其他SOTA方法。具体的实验细节请参考论文原文[12]。
VGG-Small在CIFAR10上基于2-bit weight和2-bit activation的量化端侧模型目前已在MindSpore Hub开源首发,感兴趣的可以下载体验。
https://proceedings.neurips.cc/paper/2020/file/2a084e55c87b1ebcdaad1f62fdbbac8e-Paper.pdf
https://www.mindspore.cn/resources/hub/details?noah-cvlab/gpu/1.0/VGG-Small-low%20bit_cifar10
参考文献
「MindCon极客周」
MindSpore官方资料
GitHub:https://github.com/mindspore-ai/mindspore
Gitee:https://gitee.com/mindspore/mindspore
官方QQ群: 871543426
长按下方二维码加入MindSpore项目↓