本文对近年来引起较大研究热情的动态神经网络(DynamicNeuralNetworks)做了一个比较全面和系统的综述。
机器之心邀请到论文共同一作韩益增于3月29日为大家解读此论文,欢迎报名学习(直播信息见文末)。
开始正文之前,首先简要介绍下动态网络的概念。传统(静态)神经网络的使用流程为:1)固定网络架构,初始化网络参数;2)训练阶段:在训练集上优化网络参数;3)推理阶段:固定网络架构与参数,输入测试样本进行前向传播,得到预测结果。
可以看出,静态网络在测试阶段,对所有的输入样本,均采用相同的网络架构与参数进行推理。与静态网络不同的是,动态网络可以在处理不同测试样本时,动态地调节自身的结构/参数,从而在推理效率、表达能力、自适应性等方面展现出卓越的优势。
图1:综述整体框架。
Introduction(动态网络简介与综述动机)
深度神经网络已经在计算机视觉、自然语言处理等领域取得了较大的成功。这些年来我们不断见证越来越强大、高效的神经网络模型设计(如AlexNet[1],VGG[2],GoogleNet[3],ResNet[4],DenseNet[5]以及最近很火的Transformer[6]等),而近几年发展起来的网络架构搜索技术(NAS)[7],[8]也帮助人们建立更加强大的结构。
然而,大多数当前流行的深度网络都具有相同的静态推理范式:一旦完成训练,网络的结构与参数在测试阶段都保持不变,这在一定程度上限制了模型的表征能力、推理效率和可解释性[9],[10],[11],[12]。
如前所述,动态网络则可以在推理阶段根据输入样本自适应地调节自身的结构/参数,从而拥有诸多静态网络无法享有的良好特性。总体来说,深度学习中的动态计算在以下方面具有优势:
3.自适应性。相较于一个静态网络拥有固定的计算量,动态网络可以在面对变化的环境(如不同的硬件平台)时实现模型精度vs效率的动态平衡;
4.兼容性。动态网络并非「另起炉灶」,而是与深度学习领域其他的先进技术相兼容,从而可以利用这些先进技术达到SOTA性能。例如,动态网络可以直接基于轻量化模型构建[19],也可以利用NAS技术设计[7],[8]。另外,动态网络也可以利用针对传统静态模型设计的加速技术(剪枝[20]、量化[21]等)进一步提升运算效率;
5.通用性。许多动态网络可以被用于多任务中,包括图像分类[10],[22]、目标检测[23]、语义分割[24]等。另外,许多视觉任务中发展起来的技术可以被拓展至NLP领域[25],[26],反之亦然;
6.可解释性。最后,鉴于有研究指出生物大脑脑处理信息的动态机制[27],[28],关于动态网络的研究可能会帮助人们在深度模型和大脑的内在运行机制之间架起一座桥梁。利用动态网络,人们可以分析:1)处理一个样本时,网络的哪些模块被激活[22];2)输入中的哪些部分对最终的预测起决定性作用[29]。
在深度学习中,基于先进深度模型的自适应推理带来了很多新的研究问题。尽管已经各种各样的动态网络被设计出来并取得一定成功,该领域仍然缺少一个系统而全面的综述。因此,研究者写作本篇综述的动机主要为:
为对此主题感兴趣的研究人员提供领域概述和新的视角;
指出不同子领域之间的紧密关系,并减少重复造轮子的风险;
总结了主要挑战和未来可能的研究方向。
接下来,本文对综述的各个章节进行主要内容的概述。
Instance-wiseDynamicNetworks(样本自适应动态网络)
样本自适应动态网络对每个输入样本进行自适应计算。根据网络动态变化的主体,其主要可以分为两大类:动态结构与动态参数。前者主要是为了在处理“简单”样本时分配更少的计算资源从而提升运算效率,而后者主要是为了在增加尽可能少计算量的情况下,提升模型表达能力。
DynamicArchitectures(动态结构)
流行的深度网络结构往往包括深度(网络层数)和宽度(通道数、并列的子网络个数等)这两个维度。因此,具有动态结构的网络又包括动态深度、动态宽度两个类型。另外,还有一类工作则是首先建立具有多条前向通道的超网络(SuperNet),然后采用一定的策略,对不同的输入样本进行动态路由。因此,本节内容包括了上述三种类型的工作,即动态深度、动态宽度和超网络中的动态路由。
动态深度
由于几乎所有的网络都由多个网络层堆叠而成,一个比较自然的实现动态结构的思路就是针对不同样本,选择性地执行不同的网络层。具体地,实现动态深度又主要包含两类思路:
1.「早退」机制。顾名思义,「早退」机制的核心思想是:在模型中间层设置出口,并根据每个样本在这些中间出口处的输出,自适应地决定该样本是否「早退」。不同的工作设计了不同的网络结构来实现这样的「早退」,包括将多个模型串联[34]、在单个backbone中间层添加分类器[35]等(如下图2所示)。
图2:「早退」机制的两种基本实现思路。
值得一提的是,有研究表明如果在链式结构的CNN中添加中间出口,则这些出口会干扰彼此的性能[10]。为了解决这一问题,多尺度密集连接网络(MSDNet,见下图3)采用了多尺度特征以及密集连接(denseconnections),有效地提升了多个分类器的协同训练效果。
图3:MSDNet基本结构。
2.「跳层」机制。「早退」机制相当于跳过了某一分类器之后所有层的运算。第二类具有动态深度的网络则更加灵活:针对每个输入样本,自适应地决定网络的每个中间层是否执行。根据决策方式,动态「跳层」主要有三种实现(如下图4所示):基于haltingscore[9]、基于门函数[36]和基于策略网络[37]。
图4:动态跳层的几种实现方式。
其中最常用的是第二类:基于门函数。对于具有skipconnection的网络层,其基本操作可以概括为
其中,
动态宽度
图5:MoE结构。
这样的MoE结构可以被运用于多种网络中,包括CNN、LSTM和Transformer。
类似于动态跳层机制,由于门函数的「即插即用」特性,其在CNN的动态剪枝中也是当前较为流行的主要方法。不同的工作采用了不同的门函数设计,以及训练方法等。更多细节的讨论这里不再赘述。
值得一提的是,已经有工作利用门函数同时控制网络的深度和宽度[43],[44]。这些方法通常先决定某个网络层是否执行,若执行,则进一步对该层的不同通道进行更细粒度的挑选。
动态路由
区别于之前工作中基于已有链式结构或多尺度架构进行网络层的动态执行,有一部分工作建立更加通用的超网络,并在超网络内部的(部分)节点,采用一定的路由机制来对到达该网络的样本特征进行动态路由。对于第
DynamicParameters(动态参数)
前面介绍的具有动态结构的网络往往需要特别的结构设计、训练策略或超参数调整等。另一类工作则保持网络结构在推理过程中不变,根据输入样本自适应地调节模型的(部分)参数,从而提升模型的表达能力。静态网络的推理过程可表示为
其中是产生动态参数的操作。
总体来说,动态参数类的研究可以分为三大类(如下图6所示):参数的动态调节、参数预测以及基于注意力的动态特征。
图6:动态参数的三种形式。
参数的动态调节
这类工作的核心思路包括两种:1)对主干网络的参数在测试阶段使用注意力进行重新加权,从而提升网络的表达能力;2)自适应调节卷积核的形状,从而让网络拥有动态感受野。
1.权重注意力机制。最具代表性的工作包括CondConv[11]和DY-CNN[15],核心操作是设立多组卷积核,并基于输入特征学习一组权重,将这些卷积核进行加权求和后进行卷积:
这样的操作与将输入与各组权重进行卷积的输出进行加权求和效果相同,但只需执行一次卷积操作,从而大大节约了计算开销。
2.卷积核形状的自适应调节。著名的可形变卷积(DeformableConvolution)系列[45],[46]对于每个像素点,在整张特征图中进行采样作为其卷积操作的临域。可形变卷积核(Deformablekernels)则在核空间而非特征像素空间进行动态采样,从而对网络的有效感受野进行自适应调节。这三种操作的具体形式如下表所示:
参数预测
参数预测比前面介绍的动态调节方式更为直接,其直接由输入预测生成网络的(部分)参数。早期的代表性工作有分别针对CNN和RNN的dynamicfilternetwork[48]以及HyperNetwork[49]。近期的WeightNet[50]则统一了CondConv和通道注意力网络SENet[16]的自适应范式,通过参数预测的方式实现了更好的网络性能与效率平衡。
基于注意力的动态特征
前面描述的动态参数方法的主要效果是生成更加动态与多样的特征,从而提升模型的表达能力。为实现这一目的,一个等效的解决方案是直接针对特征进行动态加权。对于一个线性变换,对其输出进行加权,得到的结果等效于先对参数加权,再执行该变换,即
最常用的方法是以SENet为代表的对卷积层的输出特征中不同通道进行自适应加权。其基本形式为
不同的工作设计了各种各样的注意力模块,这里不再展开介绍。
除了通道以外,注意力也可以被用来对特征的不同空间位置进行自适应加权[51],且这两种注意力范式(通道、空间)可以被以多种形式组合起来进一步提升模型表达能力[52](见图6(c))。
上述动态特征方法通常在非线性激活函数(如ReLU)前对特征进行重新加权。近期的一些工作(如DynamicReLU[53])直接设计动态激活函数,并替换传统网络中的静态激活函数,同样能够大幅提高模型的表达能力。
Spatial-wiseDynamicNetworks(空间自适应动态网络)
在视觉任务中,已有研究表明输入中不同的空间位置对CNN的最终预测起着不同的作用[54]。也就是说,做一个精确的预测,可能只需要自适应的处理输入中一部分空间位置,而无需对整张输入图像的不同位置进行相同计算量的运算。
另有研究表明,对输入图像仅使用较低的分辨率,已经可以使网络取得不错的准确率[55]。因此,传统CNN中对所有输入图像采用相同分辨率表征的做法会带来无可避免的冗余计算。
为此,空间自适应动态网络被设计以对图像输入从空间的角度进行自适应推理。根据动态运算的粒度,研究者进一步将空间自适应网络分为三个级别:像素级、区域级以及分辨率级。
Pixel-levelDynamicNetworks(像素级动态网络)
作为空间自适应网络中最常见的类型,像素级动态网络对输入特征图的每个空间位置进行自适应计算。类似于第2章中样本自适应动态网络中的分类方法,研究者将本方向的工作也分为动态结构和动态参数两大类。
动态结构
顾名思义,像素级动态结构网络对不同的像素点调用不同的网络模块,从而避免在背景区域等与任务无关的区域上进行冗余计算。具体实现又可以细分为两种类型:
1.稀疏卷积。第一种类型的工作整体操作过程大体如图7所示,即生成一个空间掩码,进而对选中的像素进行稀疏卷积运算。值得一提的是,大多数方法对于未选中的区域不分配任何计算,从而可能对网络性能带来一定影响。近期工作[56]通过插值的方式,对未选中的区域通过较少的计算进行了填充,从而在一定程度上解决了该问题的影响;
2.额外修正。第二种类型的工作则是先对整张图(采用相对较少的计算)进行处理,再根据处理结果选中某些位置的像素进行额外修正,从而得到更加精细的特征表达。代表性的工作有额外激活卷积通道的channelgatingnetwork[41],以及激活线性层的PointRend[57]等。
图7:对选中空间位置的稀疏卷积。
动态参数
在第2章中介绍的几类动态参数方法(参数调整、预测以及基于注意力的动态特征)都可以被运用于像素级动态网络。
以参数预测方法为例,设为卷积核大小,分别为特征图的高和宽,通过生成一个大小的kernelmap,便得到了输出特征图每个位置需要采用的卷积核。考虑到属于同一物体的不同像素可以共享卷积核参数,近期工作[58]将输入特征图自动划分为多个区域,并对每个区域采用一套生成的权重进行卷积运算。
另外,前面章节(2.2.1)提到的可形变卷积,也属于像素级动态参数网络。
Region-levelDynamicNetworks(区域级动态网络)
像素级动态网络中的稀疏采样操作往往导致模型在实际运行中难以取得理论上的加速效果。区域级动态网络则从原输入中选择一块整体区域进行自适应计算(整体流程如下图8所示):
图8:区域级动态网络的自适应推理。
具体地,区域级动态网络可以分为两种类型:
Resolution-levelDynamicNetworks(分辨率级动态网络)
上述工作通常需要将一张输入图像划分为不同区域,并对每个区域进行自适应计算。其中的稀疏采样/裁剪操作往往会影响模型实际运行时的效率。另一类动态网络则依然将每个输入样本作为整体处理,为了减少「简单」样本的高分辨率表征带来的冗余计算,对不同的输入图像采用动态分辨率进行数据表示。
现有工作中,动态分辨率主要有两种实现思路:
第一种是动态的放缩比例。以ResNet结构为例,传统的ResNet将网络分为多个阶段,并在每个阶段的第一个残差块(residualblock)采用步长stride=2的卷积,将图像分辨率降为上个阶段的1/4。动态步长网络(dynamicstridenetwork)[61]则在每个阶段开始处根据不同输入样本,自适应地选择第一个残差块的卷积步长,从而实现动态特征分辨率;
第二种是采用多尺度架构。分辨率自适应网络(resolutionadaptivenetwork)[22]建立多尺度架构(如下图9所示),用不同的子网络处理不同分辨率的特征,并将这些子网络从小到大顺序执行。通过允许「早退」,「简单」的图像样本能够以较低的分辨率被处理,从而避免调用处理更大分辨率特征的子网络。
图9:分辨率自适应网络。
RNN-basedDynamicTextProcessing(基于RNN的动态文本处理)
常规的静态RNN对于长度为T的时序数据处理流程为迭代式地更新其隐状态,即
然而,由于不同时刻的输入对于任务的贡献程度(重要性)不同,对每个时刻的输入均采用相同复杂度的操作会导致无法避免的冗余计算。因此,不同形式的动态RNN被设计以根据不同时刻的输入自适应地决定是否分配计算,或者采用何等复杂度的计算。
隐状态的动态更新
1.跳过隐状态的更新[62]。具体而言,动态网络可以直接忽略不重要的输入,直接将上一时刻的隐状态复制至下一时刻(如图10(a)所示),即
不同工作采用了不同的具体设计来判断是否进行隐状态的更新,这里不再赘述。
2.粗略的更新[63]。相较于直接跳过状态更新,另一类动态网络采用自适应的网络结构来更新每一时刻的隐状态,即
对于动态网络结构,如前面章节所述,可以通过变化网络的深度或宽度来实现。例如,模型可以选择隐状态的部分维度来更新(见图10(b))。
3.用多尺度架构进行选择性更新[64]。另一类网络则采用多尺度架构以捕获长序列中的层次化结构信息。如图10(c)所示,底层的RNN模型可以用来处理字符序列,而当输入满足一定条件(如接收到标点符号),更高层的RNN(处理单词序列)将底层模型的状态作为输入,更新其状态。
「早退」机制
动态「跳跃」机制
在上一节中的「早退」机制中,网络只能决定是否终止运算,而不能决定去「看」输入中哪些位置的数据。本文中介绍的第三类动态RNN则通过动态「跳跃」机制解决这一问题,即在每一时刻,模型可以自适应地决定下一时刻输入模型的数据从何位置读取(如图10(d)所示)。值得一提的是,这样的机制与「早退」可以同时实现。例如,工作[66]中的模型在更新完一步隐状态后,先决定是否早退,如否,则决定是否跳过一定数量的输入。
InferenceandTraining(推理与训练)
DecisionMakingofDynamicNetworks(动态网络的决策方式)
1.基于置信度的准则:常用于具有「早退」机制的分类网络中,无需分配额外的计算量,但往往需要在验证集上对阈值进行调参数;
2.基于策略网络:建立独立于主干网络的策略网络,常用于第2章的动态结构方法中用以变换网络的深度、宽度或进行动态路由;
3.基于门函数(gatingfunctions):在主干网络中插入轻量级模块进行离散决策,由于门函数的即插即用特性,其相对于策略网络方法具有更好的通用性。但由于离散决策函数没有梯度信息,往往需要特别的训练方法,在下节中进行介绍。
TrainingofDynamicNetworks(动态网络训练)
本节从训练目标与优化方法两个角度总结动态网络的训练策略。
训练目标
1.训练多出口网络。多出口网络的训练方式往往较为简单:将各个出口的损失函数加权相加。前面章节中提到,链式结构中,这样的方法往往导致出口之间相互干扰。MSDNet通过特别的结构设计来解决这一问题。基于MSDNet的结构,一篇后续的工作[67]从训练的角度出发,提出梯度平衡算法来稳定训练过程,并利用双向信息传递来改善多个分类器的协同训练;
3.其他。另有工作引入额外的损失函数项(如采用知识蒸馏技术)不是为了提升模型的效率,而是为了提升多个子模型的协同训练效果[41]。
不可导函数的优化方法
1.梯度估计:早期的一些工作使用straight-throughestimation(STE)来估计离散门函数的梯度[68],[69];
2.重参数化技术:近年最常用的技术是GumbelSoftMax[70],通过引入具有Gumbel分布的噪声来拟合类别分布。同样常用于离散门函数的训练[71];
3.强化学习:用强化学习算法来训练需要进行离散决策的策略网络。训练的回报中往往包含一项对于计算量的惩罚项,用以提升模型的推理效率。
ApplicationofDynamicNetworks(动态网络的应用)
根据输入模态,研究者总结了动态网络在领域中的应用情况以及相对应的自适应推理类型,如下表所示:
另外,动态网络还被用来解决一些深度学习中的基础性问题,例如,多出口网络被用来解决具有长尾分布的图像分类[72],动态路由思想可以被用来减少多任务设定下的训练开销[73]等。
Discussion(讨论)
本章对动态网络领域内的开放性问题和未来研究方向进行了讨论,包括以下方面:
1.动态网络理论。包括1)最优决策问题:决策是大多数动态网络推理过程中一个本质性的操作。现有方法(基于置信度、策略网络或门函数)均缺乏一定的理论保障,且并不一定是最优的决策方式。因此,设计具有理论保障的决策函数是未来很有价值的研究方向。2)泛化性能。在动态模型中,不同的子网络被不同的测试样本激活,导致这些子网络在训练和测试阶段所面临数据分布存在一定偏差。因此,对于动态网络泛化性能的新理论将是一个有趣的课题;
2.动态网络的结构设计。目前大多数网络结构方面的工作致力于设计静态网络,而多数动态网络设计方法基于已有的经典静态模型架构,选择性地执行其中的不同单元。这对于动态网络的结构设计可能只是一个次优解,例如MSDNet[10]中的多尺度架构与密集连接可以较好的解决之前链式多出口网络分类器之间相互干扰的问题。因此,针对于自适应计算的动态网络结构设计可以进一步提升其性能和运算效率;
3.更多样任务下的适用性。目前大多数动态网络仍只是针对分类任务设计,难以直接运用于其他视觉任务,如目标检测和语义分割。其难点在于这些任务中没有一个简单的准则来判断样本的难易程度,而一个样本中又包含多个不同复杂度的目标/像素点。现有一些方法,如空间自适应网络[56]和软注意力机制[16],已经可以用于分类之外的更多任务。然而,设计一个统一而简洁优雅,并可以直接作为其他任务主干网络的动态网络结构仍然具有一定的挑战性;
4.实际效率与理论的差距。现有的深度学习计算硬件和软件库大多针对静态模型开发,对于动态模型的加速尚不够友好,从而导致动态模型的实际加速可能落后于理论效果。因此,设计硬件友好的动态网络是一个有价值和挑战性的课题。另一个有趣的方向则是进一步优化计算硬件和软件平台,从而更好的收获动态网络带来的理论效率提升;
5.鲁棒性。近期工作[74]已经显示,动态模型可以为深度网络的鲁棒性带来新的研究角度。另外,通常的对抗攻击致力于降低模型准确率,而对于动态网络,可以同时攻击模型的准确率和效率[75]。因此,动态网络的鲁棒性是一个有趣而尚未被充分研究的课题;
嘉宾简介:韩益增,2018年本科毕业于清华大学自动化系,现为清华大学自动化系博士生,导师为宋士吉教授、黄高助理教授。当前研究方向为深度学习与计算机视觉,其中重点为动态神经网络以及高效模型架构设计与搜索。