AutoSlim: Towards One-Shot Architecture Search for Channel Numbers阅读笔记
作者:互联网
AutoSlim阅读笔记
(一) Title
论文地址:https://arxiv.org/abs/1903.11728
代码地址:https://github.com/JiahuiYu/slimmable_networks
前言:这个是应用到分类任务中的方法,如果说应用到目标检测任务中会有什么不同呢?
(二) Summary
本文目标
在资源受限(FLOPS,latency,memory footprint以及model size)的前提条件下,本文的研究内容是如何set channel numbers in a neural network?
本文工作
训练一个single可瘦身的网络来近似不同通道配置下的网络accuracy,然后迭代评估可训练的瘦身模型,并且以最小精度下降来贪婪地瘦层,通过single pass,我们能够获得在不同资源限制下的最优的channel配置。这里的问题是能不能在目标检测任务中应用这个剪枝方法呢?
实验结果
通过setting optimized channel numbers,AutoSlim-MobileNet-v2(305M FLOPs)取得了74.2%的top-1,比默认MobileNet-v2高2.4%,AutoSlim-ResNet-50(570M FLOPs)结果要比MobileNet-v1(569M FLOPs)高1.3%
本文贡献
- 提出了一个one-shot approach用于网络架构channel numbers的搜索
- 本文方法高效并且是有效可行的
- 取得了state-of-the-art speed-accuracy trade-offs通过设置最优的通道配置。
(三) Research Object
目前,网络中通道的数量往往是启发式的选择,在VGG中引入的一种启发式思路就是"一半大小,两倍通道",总体来说,就是通过启发方式来设计网络结构.
近期的一些工作中深入研究了微观building blocks的通道配置情况,这里的微观building blocks指的是(1x1,3x3卷积),这里更多的是高效卷积结构的设计
- 首先第一种就是bottleneck residual结构,包括1x1卷积和3x3卷积,这里的1x1卷积用来降低和增加卷积通道数,
- MobileNet v2中指出bottleneck设计并不高效,并提出了inverted residual block,其中1x1卷积用于expanding feature(6x expand),然后通过3x3的depthwise convolution之后projecting back
自动化通道配置方面的工作也在进行中,
- 文献[27]中表示相比于fine-tuning剪枝后的模型,从头开始训练这些pruned架构导致similar或者更好性能的模型,
- MNasNet中提出使用强化学习直接搜索网络结构以及filter sizes,优化的网络结构需要大量的网络samples以及computational cost.
关于如何在资源有限的情况下更好地设置neural network的通道数,首先想到的方法就是:
- 将所有可能的通道配置情况都训练full epoches,然后直接选择符合约束条件的最佳的模型,然而这种方式很明显是不可行的,计算量太大.
- 文献[35,36]中引入了slimmable网络can run at arbitrary width with equally or even better performance than same architecture trained individually.
为了应对上述的问题,本文提出的方法是训练一个slimmable network来近似不同通道配置下的network accuracy,本文采用slimmable models的原因:
- Training slimmable models要比brute-force方法(尝试所有的方案,在符合约束条件下挑选最佳方案)快得多.
- traind slimmable model 能够在任意宽度下执行,能够用来近似不同channel 设置下的性能。
- 相同trained slimmable model能够在不同的约束条件下使用,从而获得optimal channels
AutoSlim的训练阶段
- 首先,先训练slimmable model较少的epochs(所有训练epoch的10%或者20%)得到一个benchmark performance estimator
- 接着,迭代的evaluate the trained slimmable model然后greedily slim the layer with在验证集上最小的acc drop,
- 通过single pass之后,可以得到不同资源约束下的优化通道配置,最后单独或者联合训练这些优化的架构到full epoches,通过默认网络以及其他的剪枝方法来对AutoSlim方法进行验证。
(四) Problem Statement
为了帮助模型在存在约束的条件下更好地选取通道数,需要解决brute-force方法计算量过大的问题,本文通过引入slimmable network用于channel numbers的选择。
(五) Method
首先概述本文提出的搜索通道数的方法,接着讨论和分析同其他方法的不同指出,最后在我们提出的解决方案中介绍每一个单独的模块。
5.1 搜索通道数整体方案
搜索目标是优化每一层的channel数量,使得在约束条件下,具有optimized channel 配置的网络结构能够取得更好的accuracy,方法在概念上比较简单,包括两个基本步骤:
- STEP1:给定一个网络架构,首先训练一个slimmable模型 for a few epochs,在训练过程中对于不同channel 配置的多个子网络进行了采样和训练,因此在训练完成后可以使用相同的训练权重以及对应的计算图直接对其子网络结构进行即使推理。
- STEP2:接着在验证集上迭代评估训练好的slimmable模型,每一次迭代过程中,通过比较验证机上的feed-forward evaluation accuracy来决定对哪个层进行slim,通过贪婪方式以最小精度下降来slim layer,直到到达efficiency限制。这个过程中不需要任何的训练
从上面的步骤中来看,本文提出的方法对于不同的资源约束是可以适应的,这里的精度可以使用相对值作为性能estimator.
将本文提出的AutoSlim同其他的baseline方法(网络剪枝以及网络架构搜索方法)进行比较,大部分的通道剪枝方法通常follow a typical training-pruning-finetuning方法,如下图所示
文献[1]中采用的就是这种方案,首先将 l 1 l_1 l1正则化加到BN的scaling factors上进行训练,在训练完成后将scaling factor接近0的通道进行剪枝,剪枝会导致性能损失,因此引入fine-tune过程以及a repetitive multi-pass procedure 用来增强最终的accuracy,和本文方法比较的主要区别是,图3中的方法往往是基于训练权重的重要性,这样会导致由于BN的sclar值比较小,对应的通道取值会被删除掉,而删除掉的通道往往是离散的某个通道,比如删除之后剩余通道为4th,7th,9th。而本文方法总是保留lower-index的channel(需要保留3个通道的话,就保留1th-3th,将4-10thchannel在步骤2中删除掉)
网络架构搜索方法通常由3个主要部分组成:
- 搜索空间(search space)
- 搜索策略(search strategy)
- 性能估计策略(performance estimation strategy)
主要流程如下图所示:
首先定义了搜索空间,在此基础上search agent采样网络结构,这个网络结构被传递到performance estimator,并返回rewards(训练后的预测精度或者网络运行的时间延迟)到search agent,在这个过程中,search agent从不断地循环中学习,设计出更好的网络结构。这种方式存在的问题是高计算成本以及时间成本。尽管最近提出了differentiable architecture search methods,然而并不能直接应用到channel数量的搜索上,往往通过人为启发式的设置channels,这样会导致introduce human bias。
5.2 Slimmable Networks的训练
Warmup 注:这里的warms不是学习策略中的warmup
- slimmable networks首次引入是通过switchable BN用于训练过程中,在训练过程中,features是通过mini batch的均值和方差来normalized,
- 在文献[36]中引入了对于switchable BN的调整:recalibrating BN统计量after training,通过这个简单的调整,能够训练通用的slimmable networks
- 此外引入了三明治规则以及inplace distillation来enhance 训练过程以及提升测试accuracy,默认情况下是使用了这两个策略的。
Assumption
- 本文方法的假设是:在给定相同channel configuration条件下,slimmable model是一个很好的accuracy estimator,也就是说我们真正感兴趣的是不同channel configuration之间accuracy的相对排名,
- 通过使用instant inference accuracy of a slimmable model作为性能estimator.
- 然后扯了一大堆东西,感觉主要意思说的是: 通过few epoches的相对状况来反映最终的真实情况是比较合理的,也就是本文假设是比较合理的
Search Space
- 在一个slimmable 模型的sub-networks中,给定一个网络结构,channel configurations构成搜索空间,本文中通过两个width multipliers作为channels数量的上界和下界,例如对于所有的mobile networks,本文训练的slimmable network可以训练一个0.15x到1.5x之间的slimmable model,
- 在每一个训练迭代中,我们随机独立地对每一层的通道数量进行采样,在残差网络中,首先对residual identity pathway的channel number进行采样,然后随机地独立地对每一个residual block中的channel number
- 本文将神经网络中所有的layers都设置成slimmable,包括第一个卷积层以及最后一个全连接层,在每一层中将通道平均分成若干组(10组),用于减少搜索空间。也就是说在训练或者slim的过程中是对正额组进行采样或者移除的,而不是单个通道,并且即使采用分组的方式,搜索空间依旧很大。
- 本文实现了在pytorch上的一个带有同步SGD的分布式训练框架,在不同的训练过程中设置不同的随机数种子,使得each GPU samples diverse channel configurations in each SGD 训练step。
5.3 Greedy Slimming
在训练完slimmable 模型之后,需要在验证集上对slimmable model进行评估,从最大的模型1.5x开始,然后比较不同网络架构(每一层的slim是对于a channel group而言的)下的accuracy,以最小精度下降贪婪地slim layer,在迭代瘦身的过程中,可以得到不同资源约束下的optimized channel configuration,直到达到最严格的约束限制。
Large Batch Size
在slim的过程中,不需要任何训练,因此,可以将模型设置成evaluation mode,然后采用大的batch size.这里使用大的batch size带来的优势有两个:
- 之前的工作表明,如果batch size大小超过2K,BN统计量将是准确的。因此,在贪婪瘦身中BN的post statistics能够在线计算而不需要额外的开销。
- 在large batch size的情况下,可以利用single feed-forward prediction accuracy作为performance estimator。
并且在实际使用过程中大的batch size能够在不影响最终性能的情况下加快greedy slim并且简化实现。
如果说测试过程必须按照顺序进行,无法使用大的batch size,这样会造成什么问题呢?
Training Optimized Networks
在搜索完成后,我们训练这些optimized network architectures from scratch,默认情况下,我们搜索网络的FLOPS在200M,300M和500M,这里应该是针对不同参数量大小的模型进行搜索测试
(六) Experiments
ImageNet分类实验结果
- 这里采用了不同的网络结构MobileNetv1,MobileNetv2,MNasNet以及ResNet-50,通过对比网络默认channel配置、近期的剪枝方法对比说明本文方法
- 将网络架构按照FLOPS分成4组:200M FLOPs, 300M FLOPs, 500M FLOPs 以及heavy model。
- 在表1结果中,存在的疑问是为什么使用剪枝方法FLOPs会增加呢?
可视化实验
可视化优化后的channel配置,和优化前的channel配置有什么区别呢?
- 右图是AutoSlim同默认channel配置在不同layer上的百分比
- 从图中可以看到AutoSlim在浅层具有更少的通道,在深层由更多的通道
配置Width Multiplier Heuristic
应用width multiplier在模型精度和效率之间进行权衡,使用不同的乘法因子0.75,1.0,1.3搜索出来的参数量是不同的,并且每一层的channel数量也会存在差异。如下图所示:
同不同模型剪枝方法比较
这里我们将优化后的channel configuration同模型剪枝方法AMC进行了比较。
从图中可以看出,相比于AMC的剪枝方法,AutoSlim在深层有更多的卷积通道,而浅层通道较少,不过由于浅层的特征图空间大小较大,往往会占用大量的计算开销。
CIFAR10上实验结果
默认通道情况下的表现情况,以及以相同FLOPS使用AutoSlim得到的通道配置,对比结果如下所示:
然后,我们将在ImageNet上搜索出来的架构,用来训练CIFAR10发现得到的效果比默认的channel configuration还要差,实验结果如下所示:
分析原因一方面可能是CIFAR10优化后的架构在深层具有更少的通道,导致其在小数据上的测试泛化效果更好,另一方面可能是ImageNet(224x224)和CIFAR10(32x32)之间分辨率的差异造成。
(七) Conclusion
本文提出了one-shot approach用于模型channels数量的搜索,在ImageNet上进行了大量的实验,能够在给定约束条件下,较好地对channel数量进行剪枝实现高效网络架构的设计。
(八) Notes
8.1 得到最优的Channel Numbers的方法
自动架构搜索用于查找channel numbers的方法
- Channel Pruning,用于减少大网络中的通道,提高inference speed,文献[30]中提到一个inference-time approach,基于一个迭代的两部算法:the LASSO based channel selection以及the lease square feature reconstruction。文献[1]中通过一个 l 1 l_1 l1的正则项约束加到BN的scaling factors,来将不重要的channels识别出来并去掉。文献[27]中提出训练一个大型的、过度参数化的模型并不是获得最终模型的必要条件。
- NAS RL-based searching algorithms用来剪枝通道[37]或者直接搜索滤波器的数量[25],文献[37]中提出AutoML用于模型压缩,利用强化学习来提供模型压缩策略。文献[26]中提出了基于DARTS直接学习大规模目标任务以及目标平台的体系结构,
Slimmable Networks
在文献[35]中首次引入了slimmable model,一个通用的slimmable training algorithm以及the switchable BN被用来训练一个在不同widths上执行的网络,允许在运行过程中实时地调整准确率和效率之间的平衡,不过switchable BN的问题是只能从预定义的宽度集中选择宽度,
在文献[36]中指出了这个存在的问题,并将slimmable model扩展到任意宽度,并将其推广到具有和不具有BN的网络中,并且提出了两种改进的训练方法:三明治法以及原地蒸馏法,每一层都能够独立的调整通道数。本文中将slimmable network用于搜索通道配置
标签:slimmable,Search,Towards,Shot,训练,剪枝,搜索,channel,通道 来源: https://blog.csdn.net/A_A666/article/details/122200425