目录git
导语github
通道剪裁(Channel Pruning)做为一种神经网络压缩/加速方法,其有效性已深获承认,并普遍应用于工业界。算法
一个经典的剪裁方法包含三步:1)训练一个参数过多的大型网络;2)剪裁较不重要的权重或通道;3)微调或再训练已剪裁的网络。其中第二个阶段是关键,它一般借助迭代式逐层剪裁、快速微调或者权重重建以保持精度。数组
卷积通道剪裁方法主要依赖于数据驱动的稀疏约束(sparsity constraints)或者人工设计的策略。最近,一些基于反馈闭环或者强化学习的 AutoML 方法可自动剪裁一个迭代模型中的通道。网络
相较于传统剪裁方法, AutoML 方法不只能够节省人力,还能够帮助人们在不用知道硬件底层实现的状况下,直接为特定硬件定制化设计在知足该硬件上速度限制的最优网络结构。架构
MetaPruning 做为利用 AutoML 进行网络裁剪的算法之一,有着 AutoML 所共有的省时省力,硬件定制等诸多优点,同时也创新性地加入了先前 AutoML pruning 所不具有的功能,如轻松裁剪 shortcut 中的通道。app
过去的研究每每经过逐层裁剪一个已训练好模型中带有不重要权重的通道来达到裁剪的目的。而一项最新研究发现,无论继不继承原始网络的权重,已剪裁的网络均可得到相同精度。学习
这一发现代表,通道剪裁的本质是决定逐层的通道数量。基于这个,MetaPruning 跳过选择剪裁哪些通道,而直接决定每层剪裁多少通道——好的剪裁结构。优化
然而,可能的每层通道数组合数巨大,暴力寻找最优的剪裁结构是计算量所不支的。编码
受到近期的神经网络架构搜索(NAS)的启发,尤为是 One-Shot 模型,以及 HyperNetwork 中的权重预测机制,旷视研究院提出训练一个 PruningNet,它可生成全部候选的已剪裁网络结构的权重,从而仅仅评估其在验证集上的精度,便可搜索表现良好的结构。这极其有效。
PruningNet 的训练采用随机采样网络结构策略,如图 1 所示,它为带有相应网络编码向量(其数量等于每一层的通道数量)的已剪裁网络生成权重。经过在网络编码向量中的随机输入,PruningNet 逐渐学习为不一样的已剪裁结构生成权重。
图 1:MetaPruning 分为两步,1)训练一个 PruningNet,2)搜索最佳的 Pruned Network
训练结束以后,研究员会借助进化算法来搜索表现较好的 Pruned Networks,进化算法中能够灵活加入不一样的硬约束(hard constraints),好比浮点数运算次数(FLOPs)或者硬件运行时长(latency)。因为 PruningNet 已学会为各类不一样的 Pruned Networks 提供可靠的参数,从而可轻松使用 PruningNet 为 Pruned Networks 结构填入对应参数。
这只需几秒,即可获知 Pruned Network 的精度表现,孰优孰劣,高下立现。这让通道裁剪变的极其省心省力,也是通道剪裁领域的一个新突破,称之为 MetaPruning,其贡献能够归为四个方面:
MetaPruning 能够自动剪裁深度神经网络中的通道,已剪裁的网络能够知足不一样的硬约束。
这一通道剪裁问题可表示为:
本文想要找到在权重训练结束以后,知足约束条件的损失最小的剪裁网络通道宽度组合。
为此,研究员构建了 PruningNet,为不一样的剪裁网络结构生成权重,从而只须要在验证集上评估,便可快速获知剪裁网络结构的精度,排序不一样剪裁网络结构的表现。接着,配合任意搜索方法即可搜索最优的剪裁网络。
具体的 PruningNet 构建及训练算法和本文采用的进化搜索算法以下:
图 2:PruningNet 的随机训练方法图示
PruningNet 包含两个全链接层。在前向传播中,它的输入是网络的编码向量(即每一层的输出通道宽度),输出则是网络的权重矩阵;同时,根据每一层的输出通道宽度构建对应的 Pruned Network。
已生成的权重矩阵被切割以匹配 Pruned Network 输入/输出通道的数量。给定一批输入图像,则可计算带有生成权重的 Pruned Network 的损失。
在反向传播中,不用更新 Pruned Networks 的权重, 而是计算 PruningNet 权重的梯度,因为 PruningNet 全链接层的输出与 Pruned Network 的前一个卷积层的输出之间 reshape 操做和卷积操做也是可微分的, PruningNet 权重的梯度可轻松经过链式法则计算。
PruningNet 是端到端可训练的,其与 Pruned Network 相连的详细结构可参见图 3。
图 3:PruningNet 架构图示
在 MetaPruning 使用的进化算法中,每一个 Pruned Network 被对应网络向量(表明了每层通道数)编码,即 Pruned Network 的基因(Genes)。
在硬约束下,本文首先随机选择大量基因,并经过进化得到相应 Pruned Network 的精度。接着,带有最高精度的 top k 基因被选中以生成带有突变和交叉的新基因。
研究员可经过消除不合格的基因轻松施加硬约束。经过进一步重复 top k 的选择过程和新基因的生成过程,并作若干次迭代,便可得到知足硬约束,同时精度最高的基因。详细算法以下所示。
算法 1:进化搜索算法
本节意在证实 MetaPruning 方法的有效性。第一,说明一下实验设置并介绍如何把 MetaPruning 应用于 MobileNet V1/V2,并可轻松泛化至其余网络结构;第二,把本文方法与通常的 pruning baselines 和当前最优的基于 AutoML 的通道剪裁方法进行对比;第三,可视化由 MetaPruning 生成的 Pruned Network;最后,借助消融实验阐明权重预测在本文方法中的有效性。本文只介绍第二部分,其余部分请参见原论文。
本文把 MetaPruning 与 uniform pruning baselines 以及当前最优的 AutoML 方法作了对比,其结果以下:
表 1:把 MetaPruning top-1 精度与 MobileNet V1 的通常基线作对比
表 2:把 MetaPruning top-1 精度与 MobileNet V2 的通常基线作对比
表 3:把 MetaPruning top-1 精度与当前最优的 AutoML 方法作对比
本文给出了用于模型压缩的新方法——MetaPruning,这一元学习方法有如下优点:1)它比通常的 pruning baselines 精度高不少,比其余基于 AutoML 的通道剪裁方法精度更高或更好;2)它可根据不一样的约束作灵活的优化而无需额外的超参数;3)它可高效裁剪相似于 ResNet 同样带有 short-cut 的网络结构;4)整个 pipeline 极其高效。