论文地址:https://arxiv.org/abs/2102.04906v2
项目地址:https://github.com/StevenTu01/Coursera
动态神经网络是深度学习领域的一个新兴研究课题。与在推理阶段具有固定计算图和参数的静态模型相比,动态网络可以使其结构或参数适应不同的输入,从而在准确性、计算效率、适应性等方面具有显著优势。在本次调查中,我们通过将动态网络分为三大类来全面回顾这一快速发展的领域:1)以数据相关的架构或参数处理每个样本的样本动态模型;2) 空间动态网络,其针对图像数据的不同空间位置进行自适应计算;以及3)时间动态模型,其对诸如视频和文本的顺序数据执行沿着时间维度的自适应推断。系统综述了动态网络的重要研究问题,如体系结构设计、决策方案、优化技术和应用。最后,我们讨论了该领域的开放问题以及未来有趣的研究方向。
深度神经网络在包括计算机视觉(CV)[1]、[2]、[3]、[4]、[5]和自然语言处理(NLP)[6]、[7]、[8]在内的各个领域发挥着重要作用。近年来,出现了许多成功的深度模型,如AlexNet[1]、VGG[2]、GoogleNet[3]、ResNet[4]、DenseNet[5]和Transformer[6]。这些架构创新使得能够训练更深入、更准确、更高效的模型。最近对神经结构搜索(NAS)的研究[9],[10]进一步加快了设计更强大结构的过程。然而,大多数流行的深度学习模型都是以静态方式进行推理的,即计算图和网络参数在训练后都是固定的,这可能会限制它们的表示能力、效率和可解释性[11]、[12]、[13]、[14]。
与静态网络相比,动态网络可以使其结构或参数适应推理过程中的输入,因此具有静态模型所没有的良好特性。一般来说,深度学习背景下的动态计算具有以下优势:
1) 推理效率。动态网络最显著的优点之一是,通过选择性地激活以输入为条件的模型组件(例如层[12]、信道[15]或子网络[16]),它们能够在测试时按需分配计算。因此,较少的计算花费在相对容易识别的规范样本上,或者花费在输入的信息较少的空间/时间位置上。除了计算效率外,动态模型还显示出在少镜头学习的情况下提高数据效率的有希望的结果[17],[18]。
2)表达能力。通过动态调节网络的结构/参数,动态模型可以拥有更大的参数空间以及更强的表达能力。例如,通过对多组卷积权重进行基于特征的动态集成[11],[15] ,模型容量可以在增加极小计算开销的前提下得到显著提升。值得一提的是,常用的注意力机制也可以被统一到动态网络的框架中,因为特征的不同通道[16] 、空间区域[17] 和时间位置[18] 都在测试阶段被动态地重新加权。
3)自适应性。相较于一个静态网络拥有固定的计算量,动态网络可以在面对变化的环境(如不同的硬件平台)时实现模型精度vs效率的动态平衡。
4) 兼容性。动态网络与深度学习中的最先进技术兼容,包括架构设计[4]、[5]、优化算法[23]、[24]和数据预处理[25]、[26],这确保了它们可以从该领域的最新进展中受益,以实现最先进的性能。例如,动态网络可以继承轻量级模型中的体系结构创新[27],也可以通过NAS方法[9]、[10]进行设计。通过为静态模型开发的加速方法,如网络修剪[28]、权重量化[29]、知识提取[30]和低秩近似[31],也可以进一步提高它们的效率。
5)通用性。作为静态深度学习技术的替代品,许多动态模型是可以无缝应用于广泛应用的通用方法,如图像分类[12]、[32]、对象检测[33]和语义分割[34]。此外,CV任务中开发的技术被证明可以很好地转移到NLP任务中的语言模型[35]、[36],反之亦然。
6) 可解释性。我们最后注意到,对动态网络的研究可能会弥合深度模型的潜在机制和大脑之间的差距,因为人们认为大脑以动态的方式处理信息[37],[38]。在处理输入样本时,可以分析动态模型的哪些组件被激活[32],并观察输入的某些预测[39]的哪些部分被激活。输入中的哪些部分对最终的预测起决定性作用。
事实上,自适应推理是动态网络的关键思想,在现代DNN流行之前就已经进行了研究。最经典的方法是通过级联[40]或并行[41]结构构建模型集合,并根据输入选择性地激活模型。脉冲神经网络(SNN)[42]、[43]也通过传播脉冲信号来执行数据相关推理。然而,SNN的训练策略与流行的卷积神经网络(CNN)的训练策略截然不同,它们在视觉任务中的使用较少。因此,我们在本次调查中省略了与SNN相关的工作。
在深度学习的背景下,具有现代深度架构的动态推理提出了许多新的研究问题,并吸引了过去三年的极大研究兴趣。尽管在设计各种类型的动态网络方面做了大量工作,但仍然缺乏对这一主题的系统和全面的综述。这促使我们撰写这项调查,回顾这一快速发展领域的最新进展,目的是1)为对这一主题感兴趣的研究人员提供概述和新的视角;2) 指出不同分区之间的密切关系,降低改造车轮的风险;以及3)总结了关键挑战和未来可能的研究方向。
本次调查组织如下(概览见图1)。
在第2节中,我们介绍了最常见的样本自适应动态网络,这些网络根据每个输入样本调整其架构或参数。第3节和第4节分别回顾了在更细粒度上工作的动态模型,即空间自适应模型和时间自适应模型。然后我们在第5节中研究了动态网络的决策策略和训练技术。第6节进一步总结了动态模型的应用。最后,我们在第7节中讨论了一些悬而未决的问题和未来的研究方向,从而结束了这项调查。为了更好的可读性,我们在表1中列出了将在本次调查中使用的符号。
为了以数据相关的方式处理不同的输入,通常从两个角度设计样本自适应动态网络:1)调整模型架构,以基于每个样本分配适当的计算,从而减少冗余计算以提高效率(第2.1节);2) 将网络参数调整为具有固定计算图的每个输入样本,目的是在计算成本增加最小的情况下提高表示能力(第2.2节)。
考虑到不同的输入可能具有不同的计算需求,使用以每个样本为条件的动态架构进行推理是很自然的。具体而言,可以调整网络深度(第2.1.1节)、宽度(第2.1.2节),或在包括多个可能路径的超级网络(SuperNet)内执行动态路由(第2.1.3节).具有动态架构的网络不仅为规范(“简单”)样本节省了冗余计算,而且在识别非规范(“硬”)样本时保留了其表示能力。与静态模型[28]、[29]、[44]的加速技术相比,这种特性在效率上具有显著优势,静态模型[27]、[29]和[44]处理具有相同计算的“简单”和“硬”输入,并且无法减少固有的计算冗余。
随着现代DNN越来越深入地识别更多的“硬”样本,减少冗余计算的一个简单解决方案是使用动态深度进行推理,这可以通过1)早退机制来实现,即允许在浅退出时输出“简单”样本,而不执行更深的层[12]、[45]、[46];或2)跳层机制,即选择性地跳过以每个采样[11]、[47]、[48]为条件的中间层。
1)“早退”机制。在大多数现实世界场景中,输入样本的复杂性(或“难度”)各不相同,浅层网络能够正确识别许多规范输入。理想情况下,这些样本应该”早退“输出,而不执行更深的层。对于输入样本 x x x, L L L层深度网络 F \mathcal{F} F的前向传播可以表示为:
y = F L ∘ F L − 1 ∘ ⋯ ∘ F 1 ( x ) (1) \mathbf{y}=\mathcal{F}^L \circ \mathcal{F}^{L-1} \circ \cdots \circ \mathcal{F}^1(\mathbf{x}) \tag{1} y=FL∘FL−1∘⋯∘F1(x)(1)
其中 F ℓ \mathcal{F}^{\ell} Fℓ表示层 ℓ \ell ℓ的运算函数, 1 ≤ ℓ ≤ 1 \leq \ell \leq 1≤ℓ≤ L L L。相反,早退机制允许终止中间层的推理过程。对于第 i i i个输入样本 x i \mathbf{x}_i xi,正向传播可以写为
y i = F ℓ i ∘ F ℓ i − 1 ∘ ⋯ ∘ F 1 ( x i ) , 1 ≤ ℓ i ≤ L . (2) \mathbf{y}_i=\mathcal{F}^{\ell_i} \circ \mathcal{F}^{\ell_i-1} \circ \cdots \circ \mathcal{F}^1\left(\mathbf{x}_i\right), 1 \leq \ell_i \leq L . \tag{2} yi=Fℓi∘Fℓi−1∘⋯∘F1(xi),1≤ℓi≤L.(2)
注意, ℓ i \ell_i ℓi是根据 x i \mathbf{x}_i xi自适应确定的。已经对广泛的体系结构进行了研究,以赋予DNN这种早期存在的行为,如下所述。
a) DNN的级联。实现早期退出的最直观方法是级联多个模型(见图2(a)),并在不激活后一个模型的情况下自适应地检索早期网络的预测。例如,Big/littleNet[49]级联了两个深度不同的CNN。在获得第一个模型的SoftMax输出后,当两个最大元素之间的得分差距超过阈值时,进行早退机制。此外,许多经典的CNN[1]、[3]、[4]级联在[46]和[50]中。在每个模型之后,训练决策函数以确定所获得的特征是否应该被馈送到线性分类器以进行即时预测,或者被发送到后续模型。
b) 中间分类器。上述级联结构中的模型是相互独立的。因此,一旦决定将“困难”的样本馈送到后一个网络,就需要从头开始执行整个推理过程,而不需要重用已经学习到的特征。一种更紧凑的设计是在一个骨干网络中包含中间分类器(见图2(b)),以便在需要时将早期特征传播到深层。基于这样的多退出架构,自适应早退机制通常是根据基于置信度的准则[45]、[51]或学习函数[46]、[52]、[53]来实现的。
c) 具有早退机制的多尺度体系结构。研究人员[12]观察到,在链式结构网络中,多个分类器可能会相互干扰,从而降低整体性能。一种合理的解释可能是,在常规CNN中,高分辨率特征缺乏对分类至关重要的粗略水平信息,导致早退机制的结果不令人满意。此外,早期分类器会迫使浅层生成任务专用特征,而部分一般信息会丢失,导致深度输出的性能下降。为了解决这个问题,多尺度密集网络(MSDNet)[12]采用了1)多尺度架构,该架构由多个子网络组成,用于处理不同分辨率(尺度)的特征图,以快速生成适合分类的粗略级别特征;2) 密集连接,以重用早期特征并提高深度分类器的性能(见图第3(a)段)。这种专门设计的架构有效地增强了网络中所有分类器的总体准确性。
基于多尺度架构设计,研究人员还研究了早退机制动态模型的退出策略[54]、[55](见图3(b))和训练方案[56]。关于动态模型的推理和训练方案的更多讨论将在第5节中介绍。
自适应早退机制也扩展到语言模型(例如BERT[7]),以提高它们在NLP任务[57]、[58]、[59]、[60]上的效率。此外,它可以在递归神经网络(RNN)中实现,用于在处理视频[61]、[62]和文本[63]、[64]、[65]等顺序数据时进行时间动态推理(见第4节)。
2) “跳层”机制。上述早退机制范式的总体思想是跳过特定分类器之后所有深层的执行。更灵活的是,还可以通过战略性地跳过中间层的计算来动态调整网络深度,而无需放置额外的分类器。给定第 i i i个输入样本 x i x_i xi,动态层跳过通常可以写成
y i = ( 1 L ∘ F L ) ∘ ( 1 L − 1 ∘ F L − 1 ) ∘ ⋯ ∘ ( 1 1 ∘ F 1 ) ( x i ) , (2) \mathbf{y}_i=(\mathbf{1}^L\circ\mathcal{F}^L)\circ(1^{L-1}\circ\mathcal{F}^{L-1})\circ\cdots\circ(\mathbf{1}^1\circ\mathcal{F^1})(\mathbf{x}_i), \tag{2} yi=(1L∘FL)∘(1L−1∘FL−1)∘⋯∘(11∘F1)(xi),(2)
其中 1 ℓ \mathbf{1}^\ell 1ℓ表示确定层 F ℓ \mathcal{F}^\ell Fℓ的执行的指示符函数, 1 ≤ ℓ ≤ 1 \leq \ell \leq 1≤ℓ≤ L L L。该方案通常在具有跳跃连接的结构(例如ResNet[4])上实现,以保证前向传播的连续性,这里我们总结了三种常见的方法。
a) 截止值首先在[11]中提出,其中一个命名为截止值的累积标量自适应地决定RNN的隐藏状态是否将直接馈送到下一个时间步长。通过将ResNet阶段2中的残差块视为RNN[33]步骤中的线性层,将截止值方法扩展到视觉任务(见图第4(a)段)。与其跳过具有独立参数的层的执行,不如用一个权重共享块替换每个ResNet阶段中的多个块,从而显著减少参数[66]。在每个阶段中,根据截止值执行自适应步数的块。
除了RNN和CNN之外,[35]和[36]还在Transformer[6]上进一步实现了截止值方案,以实现NLP任务的动态网络深度。
b) 由于其即插即用特性,基于门函数也是动态层跳过的常用选项。以ResNet为例(见图4(b)),设 x ℓ x^\ell xℓ表示第 ℓ \ell ℓ个残差块的输入特征,门控函数 G ℓ \mathcal{G}^\ell Gℓ生成一个二进制值来决定剩余块 F ℓ \mathcal{F}^\ell Fℓ的执行。此过程可以用如下公式表示
x ℓ + 1 = G ℓ ( x ℓ ) F ℓ ( x ℓ ) + x ℓ , G ℓ ( x ℓ ) ∈ { 0 , 1 } . (4) \mathbf{x}^{\ell+1}=\mathcal{G}^{\ell}(\mathbf{x}^{\ell})\mathcal{F}^{\ell}(\mathbf{x}^{\ell})+\mathbf{x}^{\ell},\mathcal{G}^{\ell}(\mathbf{x}^{\ell})\in\{0,1\}. \tag{4} xℓ+1=Gℓ(xℓ)Fℓ(xℓ)+xℓ,Gℓ(xℓ)∈{0,1}.(4)
SkipNet[47]和具有自适应推理图的卷积网络(Conv-AIG)[48]是实现动态层跳过的两种典型方法。这两种方法都引入了轻量级的计算开销,以有效地产生关于是否跳过残差块的计算的二进制决策。具体而言,Conv-AIG在每个残差块中使用两个FC层,而SkipNet中的门控功能被实现为用于参数共享的RNN。
动态递归网络[67]不是在经典的ResNets中跳过层,而是在每个阶段迭代执行一个具有共享参数的块。尽管权重共享方案似乎与上述IamNN[66]相似,但[67]的跳过策略有很大不同:利用门控模块来决定递归深度。
一系列工作[68],[69]研究了不同层的自适应位宽,而不是跳过一个层,或者以完全的数字精度彻底执行它,这取决于资源预算。此外,分数跳过(fractional skipping)[70]通过基于输入特征的基于门函数自适应地为每个残差块选择比特宽度。
c) 可以构建策略网络来获取输入样本,并直接为骨干网络中的所有层生成跳过决策[71](见图4(c))。
除了动态网络深度(第2.1.1节)外,条件计算的一种精细形式是以动态宽度进行推理:尽管每个层都被执行,但其多个单元(如神经元、通道或分支)会根据输入被选择性激活。
1) 跳过完全连接(FC)层中的神经元。FC层的计算成本由其输入和输出维度决定。人们普遍认为,不同的神经元单元负责表示不同的特征,因此并非每个样本都需要激活所有的神经元单元。早期研究学习通过辅助分支[72]、[73]、[74]或其他技术(如低秩近似[75])自适应控制神经元激活。
2) 在多专家混合系统中跳过分支(MoE)。第2.1.1节通过级联方式实现自适应模型集成,并基于早期预测有条件地执行后期网络。提高模型容量的另一种方法是MoE[41],[76]结构,这意味着多个网络分支作为专家并行构建。这些专家可以被选择性地执行,并且他们的输出与数据相关的权重相融合。
传统的软MoE[41]、[76]、[77]采用实值权重来动态地重新缩放来自不同专家所获得的表示(图5(a))。这样,仍然需要执行所有分支,因此在测试时不能减少计算。开发了仅具有一小部分非零元素的硬门,以提高MoE结构的推理效率(见图5(b))[78],[79],[80]:设 G \mathcal{G} G表示门控模块,其输出为 N N N维向量 α \alpha α,控制 N N N个专家 F 1 \mathcal{F}_1 F1、 F 2 \mathcal{F}_2 F2、···、 F N \mathcal{F}_N FN的执行,最终输出可写为
y = ∑ n = 1 N [ G ( x ) ] n F n ( x ) = ∑ n = 1 N α n F n ( x ) , (5) \mathbf{y}=\sum_{n=1}^N[\mathcal{G}(\mathbf{x})]_n\mathcal{F}_n(\mathbf{x})=\sum_{n=1}^N\alpha_n\mathcal{F}_n(\mathbf{x}), \tag{5} y=n=1∑N[G(x)]nFn(x)=n=1∑NαnFn(x),(5)
并且如果 α n = 0 \alpha_n=0 αn=0,则第 n n n个专家将不会被执行。
硬MoE已经在不同的网络结构中实现。例如,HydraNet[78]用多个分支替换CNN中的卷积块,并根据输入选择性地执行它们。例如,动态路由网络(DRNet)[80]在NAS[10]中常用的每个小区结构中执行分支选择。在NLP任务中,稀疏门控MoE[16]和开关Transformer[81]分别将硬MoE嵌入长短期存储器(LSTM)[82]网络和 Transformer[6]中。在[16]、[78]、[81]中,只有与实值门的前K个元素相对应的分支被激活,而不是像在[80]中那样对二进制门进行选择。
3) CNN中的动态通道剪枝。现代CNN通常具有相当大的通道冗余。基于同一特征通道对不同样本可能具有不同重要性的普遍信念,可以通过动态激活卷积通道来实现CNN的自适应宽度。与永久删除“不重要”过滤器的静态剪枝方法[28]、[44]相比,这种依赖于数据的剪枝方法在不降低模型容量的情况下提高了推理效率。
a) 通道维度的多阶段结构。回想一下,第2.1.1节中讨论的早退机制网络[12]、[32]可以被视为沿深度维度的多阶段模型,其中后期阶段基于早期预测有条件地执行。还可以沿着宽度(通道)维度构建多级架构,并根据需要逐步执行这些阶段。
沿着这个方向,在具有不同宽度的多个结构中搜索最优架构,并且当获得置信预测时,可以在早期阶段输出任何样本[83]。通道门控网络(CGNet)[84]首先在每一层中执行卷积滤波器的子集,并且剩余的滤波器仅在策略选择的区域上激活。
b) 基于门函数的动态剪枝。在前面提到的渐进激活范例中,后面阶段的执行是基于先前的输出来决定的。因此,每个阶段都需要完整的前向传播,这对于减少实际推理延迟来说可能是次优的。另一个普遍的解决方案是通过选通功能来决定每一层信道的执行。例如,运行时动态神经剪枝(RNP)[15]将逐层剪枝建模为马尔可夫决策过程,并使用RNN在每一层选择特定的通道组。此外,FC层之后的池化操作被用来为每个样本[85]、[86]、[87]、[88]生成通道式的硬注意力(即对是否激活每个通道做出离散决策)。最近的工作[89]使用门模块来决定ResNet的整个阶段的宽度。训练这些基于门函数需要不同的重新参数化和优化技术,将在第5.2节中进行回顾。
GaterNet[90]没有在CNN中放置插入式门控模块,而是构建了一个额外的网络,该网络接收输入样本并直接为骨干CNN网络生成所有通道选择决策。该实现类似于BlockDrop[71],它利用额外的策略网络进行动态层跳过(第2.1.1节)。
c) 直接基于特征激活的动态剪枝也已在没有辅助分支和计算开销的情况下实现[91],其中在训练中引入正则化项以鼓励特征的稀疏性。
在现有关于动态跳跃网络层[47]、[48]或卷积滤波器[15]、[85]、[86]、[87]的文献的基础上,最近的工作[92]、[93]、[94]同时实现了关于网络深度和宽度的动态推理:只有确定执行一个层,它的通道才会被选择性地激活,导致计算图的更灵活的适应性。
上述方法主要调整深度(第2.1.1节)或宽度(第2.1.2节),通过激活以输入为条件的计算单元(例如层[47]、[48]或通道[15]、[87])。另一项工作开发了具有各种可能推理路径的不同形式的SuperNets,并在SuperNets内部执行动态路由,以使计算图适应每个样本。
为了实现动态路由,通常存在负责将特征分配到不同路径的路由节点。对于层 ℓ \ell ℓ处的节点 s s s,设 α s → j ℓ {\alpha}^{\ell}_{s→j} αs→jℓ表示将到达的特征 x s ℓ x^{\ell}_s xsℓ分配给层 ℓ + 1 \ell+1 ℓ+1处的节点 j j j的概率,路径 F s → j ℓ \mathcal{F}^{\ell}_{s→j} Fs→jℓ只有当 α s → j ℓ > 0 \alpha^{\ell}_{s→j}>0 αs→jℓ>0时才会被激活。到达节点 j j j的结果特征由公式(6)表示。
x j ℓ + 1 = ∑ s ∈ { s : α s → j ℓ > 0 } α s → j ℓ F s → j ℓ ( x s ℓ ) . (6) \mathbf{x}_{j}^{\ell+1}=\sum_{s\in\{s:\alpha_{s\to j}^{\ell}>0\}}\alpha_{s\to j}^{\ell}\mathcal{F}_{s\to j}^{\ell}(\mathbf{x}_{s}^{\ell}). \tag{6} xjℓ+1=s∈{s:αs→jℓ>0}∑αs→jℓFs→jℓ(xsℓ).(6)
概率 α s → j ℓ \alpha^{\ell}_{s→j} αs→jℓ可以以不同的方式获得。请注意,动态早退网络[12]、[32]是超级网络的一种特殊形式,其中路由决策仅在中间分类器处做出。CapsuleNets[14] ,[95]还执行胶囊网络(即神经元组)之间的动态路由,以表征对象(部分)之间的关系。在这里,我们主要关注超网的具体架构设计及其路由策略。
1) 多分支结构中的路径选择。最简单的动态路由可以通过在每一层选择性地执行多个候选模块中的一个来实现[96],[97],这相当于产生一个热概率分布 α s → j ℓ \alpha^{\ell}_{s→j} αs→jℓ在等式6中。这种方法与硬MoE的主要区别(图5(b))在于,在没有任何融合操作的情况下,只有一个分支被激活。
2) 神经树和树状结构网络。由于决策树总是沿着一条依赖于输入属性的前向路径进行推理,因此将树状结构与神经网络相结合可以自然地同时享受自适应推理范式和DNN的表示能力。注意,在树状结构中,不同节点的输出被路由到独立的路径,而不是像MoE结构中那样被融合(比较图5(b),(c))。
a) 软决策树(SDT)[98]、[99]、[100]采用神经单元作为路由节点(图5(c)中的蓝色节点),它决定将输入分配给其左/右子树的部分。每个叶节点在输出空间上生成概率分布,并且最终预测是对来自所有叶节点的结果的期望。尽管样本到达SDT中每个叶节点的概率是数据相关的,但所有路径仍然被执行,这限制了推理效率。
b) 具有确定性路由策略[101]、[102]的神经树设计用于在推理过程中做出硬路由决策,避免在那些未选择的路径上进行计算。
c) 树形DNN。一系列工作不是开发包含神经单元的决策树,而是构建特殊的网络架构,赋予它们决策树的路由行为。例如,首先执行小型CNN,将每个样本分类为粗略类别,并基于粗略预测有条件地激活特定的子网络[103]。随后的工作[104]不仅将样本划分到不同的子网络,还划分和路由特征通道。
与仅在路由节点[101]、[102]中使用神经单元或将每个样本路由到预先设计的子网络[103]、[104]的网络不同,自适应神经树(ANT)[105]采用CNN模块作为硬神经树中的特征Transformer(见图5(c)中的箭头线),并在训练阶段同时学习树状结构和网络参数。
3) 其他。在更通用的超网架构中执行动态路由也是最近的研究趋势。代表性地,从包含1025个子网络的超网中搜索具有部分共享参数的体系结构分布[106]。在推理过程中,每个样本都由控制器网络分配给一个子网络,并具有适当的计算成本。不是训练独立的控制器网络,而是将门控模块插入手工设计的超网(见图3(d))中,以基于中间特征来决定路由路径[107]。
尽管在2.1节可以根据每个样本调整其推理图,并且为了实现高效的计算分配,它们通常具有特殊的架构设计,需要特定的训练策略或仔细的超参数调整(第7节)。
另一项工作是使网络参数适应不同的输入,同时保持架构固定,这已被证明在提高网络的表示能力方面是有效的,而计算成本略有增加。给定输入样本 x x x,具有静态参数的传统网络模块的输出可以写成 y = F ( x , Θ ) \mathbf{y}=\mathcal{F}(\mathbf{x},\mathbf{{\Theta}}) y=F(x,Θ)。相反,具有动态参数的模型的输出可以表示为
y = F ( x , Θ ^ ∣ x ) = F ( x , W ( x , Θ ) ) , (7) \quad\quad\quad\quad\mathbf{y}=\mathcal{F}(\mathbf{x},\mathbf{\hat{\Theta}}|\mathbf{x})=\mathcal{F}(\mathbf{x},\mathcal{W}(\mathbf{x},\mathbf{\Theta})), \tag{7} y=F(x,Θ^∣x)=F(x,W(x,Θ)),(7)
其中 W ( x , Θ ) \mathcal{W}(\mathbf{x},\mathbf{\Theta}) W(x,Θ)是产生输入相关参数的运算,其设计已被广泛探索。
通常,参数自适应可以从三个方面实现(见图6):1)根据输入调整训练后的参数(第2.2.1节);2) 根据输入直接生成网络参数(第2.2.2节);以及3)以柔和的注意力重新缩放特征(第2.2.3节)。
参数自适应的一种典型方法是在推理过程中根据权重的输入调整权重,如图6(A)所示。这种实现通常引起很少的计算来获得调整,例如,注意力权重[13]、[19]、[108]、[109]或采样偏移[110]、[111]、[112]。
1) 注意力权重。为了在不显著增加计算的情况下提高表示能力,可以对多个卷积核进行软关注,产生参数的自适应集合[13],[19]。假设有 N N N个核 W n W_n Wn, N = 1 , 2 , ⋅ ⋅ ⋅ , N N=1,2,···,N N=1,2,⋅⋅⋅,N,这样的动态卷积可以公式化为
y = x ⋆ W ~ = x ⋆ ( ∑ n = 1 N α n W n ) . (8) \mathbf{y}=\mathbf{x}\star\mathbf{\tilde{W}}=\mathbf{x}\star(\sum_{n=1}^N\alpha_n\mathbf{W}_n). \tag{8} y=x⋆W~=x⋆(n=1∑NαnWn).(8)
该过程增加了模型容量,但仍保持高效,因为通过融合 N N N个卷积分支的输出所获得的结果(如MoE结构中,见图5(a))相当于通过与 W ~ \tilde{W} W~执行一次卷积所产生的结果。然而,在后一种方法中只消耗约 1 / N 1/N 1/N次的计算。
权重调整也可以通过对卷积权重[108]、[109]的空间位置进行软注意力来实现。例如,分段感知卷积网络[108]应用局部掩蔽卷积来聚合来自相似像素的具有较大权重的信息,这些像素更有可能属于同一对象。与[108]需要子网络进行特征嵌入不同,像素自适应卷积(PAC)[109]基于从每层的输入特征生成的注意力掩码来调整卷积权重。
元邻域[113]不是调整以每个样本本身为条件的权重,而是基于其与存储在字典中的邻域的相似性,将网络参数适配到每个输入样本。
2) 核形状自适应。除了自适应地缩放权重值之外,还可以实现参数调整,以重塑卷积核并实现场的动态接收。朝着这个方向,当对每个像素执行卷积时,可变形卷积[110]、[111]从自适应位置对特征像素进行采样。可变核[112]对核空间中的权重进行采样以调整有效感受野),同时保持感受野不变。表2总结了上述三种方法的配方。由于其不规则的内存访问和计算模式,这些内核形状自适应方法通常需要定制的CUDA内核来在GPU上实现。然而,最近的文献表明,通过基于FPGA等嵌入式设备共同设计算法和硬件,可以有效提高可变形卷积的实用效率[114]。
与动态修改模型参数相比(第2.2.1节),权重预测[115]更简单:它在测试时使用独立模型直接生成(一个子集)输入自适应参数(见图第6(b)段)。这一想法最早在[116]中提出,其中权重预测模型和骨干模型都是前馈网络。最近的工作已经将该范式进一步扩展到现代网络架构和任务。
1) 通用架构。动态滤波网络(DFN)[117]和超网络[118]分别是实现CNN和RNN运行时权重预测的两种经典方法。具体而言,在DFN[117]中构建滤波器生成网络,以生成卷积层的滤波器。至于处理顺序数据(例如,句子),主RNN的权重矩阵在以输入(例如,单词)为条件的每个时间步长由较小的权重矩阵预测[118]。WeightNet[119]通过简单的分组FC层预测卷积权重,统一了[13]和[20]的动态方案,在精度FLOPs和精度参数权衡方面实现了有竞争力的结果。
LambdaNetworks[120]不是生成标准卷积权重,而是学习基于每个像素的上下文以及相对位置嵌入来预测线性投影的权重,显示出在计算成本和内存占用方面的优势。
2) 特定任务信息也被用来动态预测模型参数,使动态网络能够生成感知任务的特征嵌入。例如,在[121]中使用边缘属性来生成用于图形卷积的滤波器,在[122]中结合相机视角来生成用于图像卷积的权重。这种任务感知权重预测已被证明在提高许多任务的数据效率方面是有效的,包括视觉问答[123]、[124]和少镜头学习[17]、[18]。
调整(第2.2.1节)或预测(第2.2.2节)模型参数的主要目标是产生更多动态以及信息特征,从而增强深度网络的表示能力。一个更简单的解决方案是用依赖于输入的软注意力重新缩放特征(见图6(c)),这需要对计算图进行微小的修改。注意,对于线性变换 F \mathcal{F} F,将注意力 α \alpha α应用于输出相当于使用重新加权的参数执行计算,即
F ( x , Θ ) ⊗ α = F ( x , Θ ⊗ α ) . (9) \mathcal{F}(\mathbf{x},\mathbf{\Theta})\otimes\mathbf{\alpha}=\mathcal{F}(\mathbf{x},\mathbf{\Theta}\otimes\mathbf{\alpha}). \tag{9} F(x,Θ)⊗α=F(x,Θ⊗α).(9)
1) 通道注意力机制是最常见的软注意力机制之一。现有工作通常遵循挤压和激励网络(SENet)[20]中的形式:
y ~ = y ⊗ α = y ⊗ A ( y ) , α ∈ [ 0 , 1 ] C . (10) \mathbf{\tilde{y}}=\mathbf{y}\otimes\alpha=\mathbf{y}\otimes\mathcal{A}(\mathbf{y}),\alpha\in[0,1]^C\:. \tag{10} y~=y⊗α=y⊗A(y),α∈[0,1]C.(10)
在方程10中, y = x ∗ W y=x*W y=x∗W是具有C个通道的卷积层的输出特征, A ( ⋅ ) \mathcal{A}(·) A(⋅)是由池化层和线性层组成的轻量级函数,用于产生 α \alpha α。考虑到卷积,该过程也可以写成 y ~ = ( x ∗ W ) ⊗ α = x ∗ ( W ⊗ α ) \mathbf{\tilde{y}}=(\mathbf{x}*\mathbf{W})\otimes\alpha=\mathbf{x}*(\mathbf{W}\otimes\mathbf{{\alpha}}) y~=(x∗W)⊗α=x∗(W⊗α),从中我们可以观察到,将注意力应用于特征相当于使用动态权重进行卷积。
还开发了注意力模块的其他实现方式,包括使用标准偏差提供更多统计[125],或用有效的1D卷积取代FC层[126]。[127]研究了三个计算图对软注意力的经验性能:1) y ~ = y ⊗ A ( y ) . \tilde{\mathbf{y}}\:=\:\mathbf{y}\:\otimes\:\mathcal{A}(\mathbf{y}). y~=y⊗A(y). 2) y ~ = y ⊗ A ( x ) . \tilde{\mathbf{y}}\:=\:\mathbf{y}\:\otimes\:\mathcal{A}(\mathbf{x}). y~=y⊗A(x). 3) y ~ = y ⊗ A ( C o n v ( x ) ) . \tilde{\mathbf{y}}\:=\:\mathbf{y}\:\otimes\:\mathcal{A}(\mathbf{Conv(x)}). y~=y⊗A(Conv(x)). 研究发现,这三种形式在不同的骨干网络中产生了不同的性能。
2)空间注意力机制。特征中的空间位置也可以动态重新缩放,以提高深度模型的表示能力[128]。卷积在空间注意力中经常被用来编码局部信息,而不是像在通道注意力中那样使用池化操作来有效地收集全局信息。此外,这两种类型的注意力模块可以集成在一个框架[21]、[129]、[130]、[131]中(见图第6(c)段)。
3) 动态激活函数。上述生成动态特征的方法通常在静态激活函数之前应用软注意力。最近的一项工作试图增加具有动态激活函数[132]、[133]的模型的表示能力。例如,DY-ReLU[132]用N个线性变换中的最大值 y c = max n { a c n x c + b c n } y_c=\max_{n}\{a_{c}^{n}\mathbf{x}_{c}+b_{c}^{n}\} yc=maxn{acnxc+bcn}替换ReLU( y c = m a x ( x c , 0 ) y_c=max(x_c,0) yc=max(xc,0)),其中 c c c是通道索引, a c n a^ n_ c acn, b c n b^n_c bcn是从 x x x计算的线性系数。在许多视觉任务中,这些动态激活函数可以有效地提高不同网络架构的性能,而计算开销可以忽略不计。
总之,软注意力由于其简单有效而在许多领域得到了利用。此外,它可以方便地与其他方法结合。例如,通过用通道[134]或空间[135]注意力替换公式5中的加权标量 α n \alpha_n αn,自适应地融合具有独立核大小[134]或功能分辨率的多个分支[135]的输出。
请注意,我们省略了对自注意机制的详细讨论,该机制在NLP[6]、[7]和CV领域[136]、[137]、[138]中都被广泛研究,以基于不同位置(时间或空间)的query和key之间的相似性来重新加权特征。对本主题感兴趣的读者可以参考综述研究[139]、[140]、[141]。在这项调查中,我们主要关注动态推理框架下的特征重新加权方案。
在视觉学习中,人们发现并非所有位置都对CNN的最终预测有同等的贡献[142],这表明空间动态计算在减少计算冗余方面具有巨大的潜力。换句话说,做出正确的预测可能只需要用自适应的计算量处理一小部分像素或区域。此外,基于低分辨率表示足以为大多数输入产生良好性能的观察结果[27],以相同分辨率接收所有输入的静态CNN也可能导致相当大的冗余。
为此,建立了空间动态网络,以针对图像的不同空间位置执行自适应推理。根据动态运算的粒度,我们进一步将相关方法分为三个级别:像素级别(第3.1节)、区域级别(第3.2节)和分辨率级别(第3.3节)。
常见的空间动态网络在像素级执行自适应计算。与第2节中的分类类似,像素级动态网络分为两种类型:具有像素特定动态架构的模型(第3.1.1节)和动态参数的模型(见第3.1.2节)。
顾名思义,前景像素比背景像素更具信息性和计算要求,一些动态网络学会为每个像素调整其架构。现有文献通常通过1)动态稀疏卷积来实现这一点,该动态稀疏卷积仅对采样像素的子集执行卷积;2) 额外修正,在特定的空间位置上战略性地分配额外的计算(例如层或通道)。
1) 动态稀疏卷积。为了减少信息量较小的位置上不必要的计算,只能对策略采样的像素执行卷积。现有的采样策略包括1)利用输入的固有稀疏性[143];2) 预测输出[144]、[145]上的零元素的位置;以及3)估计像素[146]、[147]、[148]的显著性。一种典型的方法是使用一个额外的分支来生成一个空间掩码,确定在每个像素上执行卷积(见图7)。
像素动态深度也可以基于早退机制方案[33]来实现(见第2.1.1节)。这些动态卷积通常忽略未选择的位置,这可能会降低网络性能。[148]中使用插值来有效填充这些位置,从而缓解了上述缺点。
2)动态额外修正。另一项工作不是只对某些像素进行采样以执行卷积,而是首先对整个特征图进行相对便宜的计算,并在选定的像素上自适应地激活额外的模块以进行进一步的细化。代表性地,动态容量网络[149]使用浅层模型生成粗略特征,并基于梯度信息对显著像素进行采样。对于这些显著的像素,应用额外的层来提取更精细的特征。类似地,[84]中的一部分卷积滤波器对特定位置进行额外处理。这些方法在像素级的深度或宽度方面调整其网络架构,实现计算的空间自适应分配。
上述动态额外修正方法[84]、[149]主要用于图像分类。在语义分割任务中,[34]中提出了按像素早退机制(另见第2.1.1节),其中具有高预测置信度的像素被输出,而不经过更深的层处理。PointRend[150]也有类似的想法,并在预测置信度较低的选定像素上应用额外的FC层,这些像素更有可能位于对象的边界上。所有这些研究都表明,通过利用图像数据中的空间冗余,在样本级别之外的像素级别的动态计算显著提高了模型的效率。
与完全跳过对像素子集的卷积操作相反,动态网络还可以对不同像素应用数据相关参数,以提高表示功率或自适应感受野。
1) 动态权重。类似于样本动态参数方法(第2.2节),像素级动态权重通过测试时间调整[108]、[109]、预测[151]、[152]、[153]、[154]或动态特征[21]、[129]、[130]、[135]来实现。以权重预测为例,典型的方法生成H×W×k2核映射来产生空间动态权重(H,W是输出特征的空间大小,k是核大小)。考虑到属于同一对象的像素可能共享相同的权重,动态区域感知卷积(DRConv)[155]为输入图像生成分割掩码,将其划分为m个区域,权重生成网络负责为每个区域生成数据相关内核。
2) 动态感受野。传统的卷积运算通常具有固定的核形状和大小(例如常用的3×3 2D卷积)。在所有层上产生的均匀感受野对于识别具有不同形状和尺寸的物体可能具有限制。为了解决这一问题,一系列工作学习为不同的特征像素[110]、[111]、[112]调整感受野,如第2.2.1节所述。自适应连接网络[156]实现了自变换(例如1×1卷积)、局部推理(例如3×3卷积)和全局推理(例如FC层)之间的动态权衡,而不是调整特征或核的采样位置。输出的三个分支与数据相关的加权求和相融合。除了图像之外,非欧几里得数据(如图)中的局部和全局信息也可以自适应地聚合。
第3.1节中提到的像素级动态网络通常需要特定的稀疏计算实现,因此在硬件上实现真正的加速方面可能面临挑战[148]。一种替代方法是对输入图像的区域/块执行自适应推断。沿着这个方向主要有两条工作线(见图8):一条对特征图区域进行参数化转换,以实现更准确的预测(第3.2.1节),另一条学习补丁级别的硬注意力,以提高模型的有效性和/或效率(第3.2.2节)。
可以对图像执行动态变换(例如,仿射/投影/薄板样条变换),以消除某些变化[157]以获得更好的泛化能力,或者放大显著区域[158]以获得判别特征表示。例如,空间transformer[157]采用定位网络来生成变换参数,然后应用参数化变换来从相应的变化中恢复输入。此外,在模型性能对一小部分区域敏感的一些任务中,学习变换以自适应地放大显著区域。
受信息特征可能仅包含在图像的某些区域这一事实的启发,探索了具有硬空间注意力的动态网络,以从输入中战略性地选择补丁,从而提高效率。
1) 基于RNN的硬注意力机制。最典型的方法是将分类任务公式化为顺序决策过程,并采用RNN基于选定的补丁进行迭代预测[159],[160]。例如,图像被分类在固定数量的步骤内,在每一步,分类器RNN只看到一个裁剪的补丁,决定下一个注意力位置,直到到达最后一步[159]。通过在动作空间中包括提前停止来进一步实现自适应步长[160]。Glanceand focus network(GFNet)[39]通过顺序关注一系列选定的补丁,构建了区域级自适应推理的通用框架,并与大多数现有的CNN架构兼容。反复注意机制与早退机制范式一起实现了空间和时间上的自适应推理[39],[160]。
2) 其他实现方式的硬注意力机制。在[161]中,类激活映射(CAM)[142]被用来迭代地关注显著的补丁,而不是使用RNN来预测模型应该注意的区域位置。在每次迭代中,对先前裁剪的输入执行选择,从而导致渐进的细化过程。[162]中构建了多尺度CNN,其中每个尺度中的子网络从先前尺度中获取裁剪的补丁,并负责同时生成1)用于分类的特征表示和2)用于下一尺度的注意力图。在没有迭代方式的情况下,最近的可微补丁选择[163]采用可微top-K模块在一步中选择固定数量的补丁。
上述研究通常将特征图划分为不同的区域(像素级或区域级)用于自适应推理。在较粗的粒度上,一些动态网络可以通过处理具有自适应分辨率的特征表示来将每个图像作为一个整体来处理。尽管已经观察到低分辨率可能足以识别大多数“简单”样本[27],但传统的CNN大多以相同的分辨率处理所有输入,从而导致相当大的冗余。因此,分辨率级别的动态网络从特征分辨率的角度而不是从不同位置的显著性的角度来利用空间冗余。现有的方法主要包括1)用自适应比率缩放输入(第3.3.1节);2) 在多尺度架构中选择性地激活具有不同分辨率的子网络(第3.3.2节)。
动态分辨率可以通过缩放具有自适应比率的特征来实现。例如,首先执行一个小型子网络来预测人脸检测任务中人脸的比例分布,然后自适应地缩放输入图像,使所有人脸都处于适合识别的范围内[164]。[165]使用插件模块来预测每个ResNet阶段中第一个卷积块的步长,从而产生具有动态分辨率的特征。
实现动态分辨率的另一种方法是以并行[166]或级联[32]的方式构建多个子网络。这些具有不同特征分辨率的子网络在推理过程中的输入的条件下被选择性地激活。例如,Elastic[166]在每一层实现了从多个分支中的软选择,其中每个分支执行具有独立缩放比的下采样卷积采样过程。为了实际避免冗余计算,[32]实现了硬选择,这允许每个样本有条件地激活子网络,这些子网络处理分辨率从低到高的特征表示(见图第2.1.1节中的图3(c))。
除了空间维度(第3节)外,还可以沿着时序数据执行自适应计算,如文本(第4.1节)和视频(第4.2节)。通常,可以通过在不重要的时间位置动态分配较少/无计算来提高网络效率。
传统的RNN大多遵循静态推理范式,即按顺序读取输入令牌,以在每个时间步长更新隐藏状态,可以写成:
h t = F ( x t , h t − 1 ) , t = 1 , 2 , ⋯ , T . (11) \mathbf{h}_t=\mathcal{F}(\mathbf{x}_t,\mathbf{h}_{t-1}),t=1,2,\cdots,T. \tag{11} ht=F(xt,ht−1),t=1,2,⋯,T.(11)
这种静态推理范式导致了显著的冗余计算,因为不同的令牌通常对下游任务有不同的贡献。开发了一种动态RNN,用于在每个步骤分配适当的计算成本。一些人通过动态更新隐藏状态来学习“浏览”不重要的令牌(第4.1.1节),另一些人则进行自适应读取,以避免处理与任务无关的令牌。具体而言,这种自适应读取可以通过早退机制(第4.1.2节)或动态跳跃(第4.1.3节)来实现。
由于并非所有的令牌对于捕获序列中的任务相关信息都是必不可少的,因此可以构建动态RNN,以在每个时间步长自适应地更新其隐藏状态。信息量较小的代币将被粗略地略去,即用更便宜的计算来更新状态。
1) 跳过隐状态的更新。对于某些时间位置的不重要输入,动态模型可以学习完全跳过隐藏状态的更新(见图9(a)),即:
h t = α t F ( x t , h t − 1 ) + ( 1 − α t ) h t − 1 , α t ∈ { 0 , 1 } . (12) \mathbf{h}_t=\alpha_t\mathcal{F}(\mathbf{x}_t,\mathbf{h}_{t-1})+(1-\alpha_t)\mathbf{h}_{t-1},\alpha_t\in\{0,1\}. \tag{12} ht=αtF(xt,ht−1)+(1−αt)ht−1,αt∈{0,1}.(12)
例如,Skip-RNN[167]在每个步骤中更新控制信号,以确定是更新还是复制前一步骤的隐藏状态。结构跳跃LSTM[168]采用了一个额外的处理,以使跳过决策以先前状态和当前输入为条件。在没有像[167]和[168]中那样联合训练RNN和控制器的情况下,在[169]中训练预测器,以估计每个输入是否会对隐藏状态做出“重大改变”。只有当预测的变化大于阈值时,更新才被识别为值得执行。
2) 粗略的更新。由于直接跳过更新可能过于激进,动态模型也可以通过自适应分配的操作来更新隐藏状态。具体来说,网络可以在每一步调整其架构,即:
h t = F t ( x t , h t − 1 ) , t = 1 , 2 , ⋯ , T , (13) \mathbf{h}_t=\mathcal{F}_t(\mathbf{x}_t,\mathbf{h}_{t-1}),t=1,2,\cdots,T, \tag{13} ht=Ft(xt,ht−1),t=1,2,⋯,T,(13)
其中 F t \mathcal{F}_t Ft是基于输入的 x t x_t xt来确定的。一种实现是选择隐藏状态的维度子集进行计算,并复制从之前的步骤[170],[171]剩余的,如图9(b)所示。为了实现部分更新,在[170]中动态激活RNN的权重矩阵中的行的子集,而Skim- RNN[171]在两个独立的RNN之间进行选择。
当隐藏状态由多层网络生成时,更新可能会基于累积的截止值在中间层中断[11]。
总之,粗略更新可以通过数据相关的网络深度[11]或宽度[170]、[171]来实现。
3) 分层RNN中的选择性更新。考虑到文本的内在层次结构(例如句子单词字符),研究人员开发了层次RNN,使用动态更新机制[172],[173]对不同时间尺度的时间依赖性进行编码。在推理过程中,较高级别的RNN将根据低级别RNN的输出选择性地更新其状态(见图第9(c)段)。例如,当[172]中的字符级模型检测到输入满足某些条件时,它将“刷新”(重置)其状态,并将其提供给单词级网络。问答任务的门控模块也实现了类似的操作[173]。
尽管第4.1.1节中的动态RNN能够在每一步以数据相关的计算成本更新其状态,但仍然必须读取所有令牌,这导致在读取整个序列之前可以获得任务相关结果的情况下效率低下。理想情况下,有效的模型应该在达到公式11中的最后一个步骤T之前自适应地停止读取。一旦捕获的信息对于解决任务是令人满意的。例如,推理网络(ReasoNet)[63]在找到足够的证据进行问答时终止其阅读程序。类似地,早退机制分别用于句子级别[174]和段落级别[65]的文本分类。请注意,这里讨论的方法侧重于对顺序输入的时间维度进行早期预测,而不是像第2.1.1节中那样沿着网络的深度维度进行预测。
尽管在第4.1.2节中早退机制可以在很大程度上减少冗余计算,但所有令牌仍必须逐个馈送到模型中。更积极的是,动态RNN可以通过战略性地跳过一些令牌而不读取它们,并直接跳到任意的时间位置来进一步学习决定“在哪里读取”(见图第9(d)段)。
[175]和[64]中实现了这种动态跳跃以及早退机制。具体而言,LSTM-Jump[175]实现了一个辅助单元来预测定义范围内的跳跃步幅,并且当该单元输出零时,读取过程结束。[64]中的模型首先决定是否在每个步骤停止。如果没有,它将进一步选择重读当前输入,或者跳过灵活的字数。此外,结构跳跃LSTM[168]利用结构信息,它利用代理来决定是否跳到下一个标点符号。除了向前看,LSTM-Shuttle[176]还允许向后跳跃,以补充错过的历史信息。
对于视频识别,视频可以被视为帧的顺序输入,时间动态网络被设计用于为不同的帧分配自适应计算资源。这通常可以通过两种方法来实现:1)动态更新递归模型的每个时间步长中的隐藏状态(第4.2.1节),以及2)对关键帧执行自适应预采样(第4.2.2节)。
视频识别通常通过递归过程进行,其中视频帧首先由2D CNN编码,并且所获得的帧特征被顺序馈送到RNN以更新其隐藏状态。与第4.1节中介绍的方法类似,基于RNN的自适应视频识别通常通过1)用相对便宜的计算(“一瞥”)[177],[178]处理不重要的帧来实现;2) 早退机制[61],[62];以及3)执行动态跳跃以决定“去哪里看”[61]、[179]、[180]、[181]。
1) 隐藏状态的动态更新。为了减少每个时间步长的冗余计算,LiteEval[177]在具有不同计算成本的两个LSTM之间进行选择。ActionSpotter[178]根据每个输入帧来决定是否更新隐藏状态。AdaFuse[182]选择性地重复使用前一步骤中的某些特征通道,以有效地利用历史信息。最近的工作还提出,在处理顺序输入帧时,自适应地决定数值精度[183]或模态[184]、[185]。这样的一瞥程序(即将廉价操作分配给不重要的帧)类似于前述的文本略读[167]、[168]。
2) 临时早退机制。在观看整个视频之前,人类能够很容易地理解其中的内容。这种早期停止也在动态网络中实现,以仅基于视频帧[61]、[62]、[186]的一部分进行预测。与时间维度一起,[62]中的模型进一步实现了从网络深度方面的早期退出,如第2.1.1节所述。
3) 视频中的跳跃机制。考虑到用CNN编码那些不重要的帧仍然需要大量的计算,一个更有效的解决方案可以是动态跳过一些帧而不观看它们。现有技术[179]、[180]、[187]通常学习预测网络在每个时间步长应该跳到的位置。此外,[61]中允许提前停止和动态跳跃,其中跳跃步幅被限制在离散范围内。自适应帧(AdaFrame)[181]生成[0,1]范围内的连续标量作为相对位置。
而不是像第4.2.1节那样重复处理视频帧,另一条工作线首先执行自适应预采样程序,然后通过处理关键帧或剪辑的选定子集进行预测。
1) 时间注意力机制是网络关注显著框架的常用技术。对于人脸识别,神经融合网络[22]使用软注意力来自适应地融合帧特征。为了提高推理效率,实现了硬注意力,用RL迭代去除不重要的帧,以实现高效的视频人脸验证[188]。
2) 子图采样也是动态选择视频中关键帧/剪辑的常用选项。例如,首先在[189]、[190]中对帧进行均匀采样,并对每个选定的帧进行离散决策,以逐步前进或后退。关于片段级采样,SCSample[191]是基于训练的分类器设计的,用于找到信息量最大的片段进行预测。此外,动态采样网络(DSN)[192]将每个视频分段为多个片段,并利用跨片段共享权重的采样模块对每个片段中的一个片段进行采样。
同时调整深度模型的多个因素吸引了静态[193]、[194]和动态网络[195]、[196]、[197]、[198]的研究。例如,与时间帧采样一起,可以通过空间[196]/时间[199]分辨率自适应和补丁选择[197],[200]来实现空间自适应计算。利用输入数据和网络结构中的冗余来进一步提高深度网络的效率是有希望的。
在前几节中,我们回顾了三种不同类型的动态网络(样本型(第2节)、空间型(第3节)和时间型(第4节))。可以观察到,在推理阶段做出依赖数据的决策对于实现高效率和有效性至关重要。此外,训练动态模型通常比优化静态网络更具挑战性。
注意,由于参数自适应(第2.2节)可以通过可微操作方便地实现,因此具有动态参数[13]、[20]、[119]的模型可以通过随机梯度下降(SGD)直接训练,而无需特定技术。因此,在本节中,我们主要关注离散决策(第5.1节)及其训练策略(第5.2节),这在大多数静态模型中是不存在的。
如上所述,动态网络能够在推理期间做出数据相关决策,以变换其架构、参数或选择输入中的显著空间/时间位置。在这里,我们将三种常见的决策方案总结如下。
如果满足某种基于置信度的准则,许多动态网络[12]、[32]、[45]能够在早退机制时输出“简单”样本。这些方法与用于决策的预定义阈值相比通常需要估计中间预测的置信度。在分类任务中,置信度通常由SoftMax输出[12]、[32]的最大元素表示。备选标准包括熵[45]、[58]和分数间隔[49]。在NLP任务中,[60]中提出了一个model patience :当一个样本的预测在多个分类器之后保持不变时,推理过程停止。
此外,[11]、[33]、[35]、[36]中的截止值也可以被视为当前特征是否可以输出到下一个时间步长或计算阶段的置信度。
从经验上讲,基于置信度的标准很容易实现,并且通常不需要特定的训练技术。准确性和效率之间的权衡是通过操纵阈值来控制的,阈值通常在验证数据集上进行调整。请注意,当错误分类的样本在早退机制时可以获得高置信度时,深度模型[201]、[202]中的过度自信问题可能会影响这种决策范式的有效性。
建立一个额外的策略网络学习来适应基于不同样本的网络拓扑是一种常见的选择。具体来说,每个输入样本首先由策略网络处理,策略网络的输出直接决定主网络的哪些部分应该被激活。例如,BlockDrop[71]和GaterNet[90]使用策略网络来自适应地决定骨干网络的深度和宽度。更一般地说,超级网络中的动态路由也可以由策略网络控制[106]。
该方案的一个可能限制是,一些策略网络的架构和训练过程是为特定的骨干网[71]、[90]开发的,可能不容易适应不同的架构。
基于门函数是动态网络中一种通用且灵活的决策方法。它可以方便地用作任何骨干网络中任意位置的插件模块。在推理过程中,每个模块负责控制一个层或块的局部推理图。选通函数采用中间特征,并有效地产生二进制值的选通向量,以决定:1)哪些通道需要激活[15]、[85]、[86]、[87]、[88]宽度,2)哪些层需要跳过[47]、[48]、[92]、[93],3)应在SuperNet中选择哪些路径[107],或4)应为输入的哪些位置分配计算[146]、[147]、[148]、[182]。
与上述决策策略相比,门控函数具有显著的通用性和适用性。然而,由于它们缺乏可微性,这些门控函数通常需要特定的训练技术,这将在下面的第5.2节中介绍。
除了架构设计之外,训练对于动态网络也是必不可少的。在这里,我们从目标和优化的角度总结了现有的动态模型训练策略。
1) 训练多出口网络。我们首先注意到,早期存在的动态网络[12],[32]通常是通过最小化中间分类器的加权累积损失训练的。训练这样的模型的一个挑战是多个分类器的联合优化,这可能会相互干扰。MSDNet[12]通过其特殊的体系结构设计缓解了这一问题。针对多出口网络,提出了几种改进的训练技术[56],包括用于稳定训练过程的梯度平衡算法,以及用于促进分类器协作的双向知识转移方法。对于时间上的早退机制,FrameExit[186]中策略网络的训练由伪标签监督。
2) 鼓励稀疏度。许多动态网络通过有条件地激活其计算单元[47]、[87]或从输入中战略性地采样位置[148]来调整其推理过程。在没有额外约束的情况下训练这些模型将导致多余的计算冗余,因为网络可能倾向于激活所有候选单元以最小化特定任务的损失。
抑制这种冗余的总体目标函数通常写为 L = L t a s k + γ L s p a r s e \mathfrak{L}=\mathfrak{L}_{\mathrm{task}}+\gamma\mathfrak{L}_{\mathrm{sparse}} L=Ltask+γLsparse,其中 γ \gamma γ是为了在精度和效率之间进行权衡而平衡这两个损失的超参数。在现实世界的应用中,可以基于候选单元(例如,通道[86]、[87]、层[47]、[48]或空间位置[148])的门/掩模值来设计第二项。具体地,可以设置目标激活率[48]、[86]或最小化栅极/掩模的 L 1 \mathcal{L}_1 L1范数[148]。直接优化资源敏感损失(例如FLOP)[92]、[107]、[147]也是可行的,可以根据每个候选单元的输入和输出特征维度来估计。
3) 其他。请注意,额外损失项目主要是为了提高效率而设计的,但不限于此。以[162]为例,该模型逐渐关注选定的区域,并使用额外的尺度间成对排序损失进行训练,以提出更具歧视性的区域。此外,在[84]和[56]中,知识蒸馏被用来促进多个子网络的联合训练。
各种动态网络包含不可微分函数,这些函数做出离散决策来修改其架构或从输入中采样空间/时间位置。这些功能不能通过反向传播直接训练。因此,对特定技术进行了研究,以实现如下端到端训练。
1) 提出了梯度估计来近似那些不可微函数的梯度,并实现反向传播。在[72]、[172]中,利用直通估计器(STE)直接启发式地复制关于随机输出的梯度,作为关于Sigmoid自变量的梯度的估计器。
2) 重参数化技术也是一种常用的优化离散决策函数的技术。例如,控制网络宽度[86]或深度[48]的选通函数都可以使用Gumbel SoftMax[259]、[260]进行训练,该函数也用于像素级动态卷积[147]、[148]。一种替代技术是[88]和[90]中采用的改进SemHash[261],用于训练其离散门函数。
注意,尽管这些重新参数化技术能够以端到端的方式与门控模块一起联合优化动态模型,但它们通常会导致决策函数收敛到稳定状态的较长训练过程[144]。此外,模型性能可能对一些额外的超参数(例如Gumbel SoftMax中的temperature)敏感,这也可能增加这些动态网络的训练成本。
3) 强化学习RL被广泛用于训练不可微的决策函数。具体而言,骨干由标准SGD训练,而代理(第5.1.2节中的策略网络或第5.1.3节中的基于门函数)则用RL训练,以对动态推理图[15]、[47]、[71]或空间/时间采样策略[39]、[190]采取离散动作。
基于RL的训练的一个挑战是强化函数的设计,这对动态模型的准确性和效率权衡很重要。常见的强化信号通常被构造为最小化计算成本的惩罚项目[15],[47]。此外,由于多阶段程序,训练可能成本高昂:在优化决策[71]或采样[39]模块之前,骨干网络可能需要预训练过程,最终联合微调可能是必不可少的。
在本节中,我们将总结动态网络的应用。表3中列出了基于输入数据模态的代表性方法。
对于图像识别,大多数动态神经网络被设计用于对分类任务进行样本或空间自适应推理,并且许多推理范式可以推广到其他应用。请注意,如第3.2节所述,对象识别可以公式化为顺序决策问题[39],[160]。通过允许在这些方法中进行早退机制,还可以启用时间自适应推理过程。
对于文本数据,减少其内在的时间冗余引起了极大的研究兴趣,并且时间动态RNN的推理范式(见第4.1节)也足够通用,可以处理音频[262]。基于Transformer[6]和BERT[7]等大型语言模型,对自适应深度[57]、[58]、[59]、[60]进行了广泛研究,以减少网络架构中的冗余计算。
对于视频相关任务,可以同时实现[160]、[197]、[234]、[235]这三种类型的动态推理。然而,对于不重复处理视频的网络,例如3DCNN[263]、[264]、[265],它们中的大多数仍然遵循静态推理方案。很少有研究致力于构建动态3DCNN[195],这可能是一个有趣的未来研究方向。
此外,在一些多模态学习任务中,动态网络(尤其是注意力机制)也被应用于动态融合来自不同模态的特征,例如RGB-D图像分割[212]和图像/视频字幕[130]、[242]、[243]、[244]。
最后,动态网络也被用来解决深度学习中的一些基本问题。例如,多出口模型可用于:1)缓解过度思考问题,同时减少总体计算[50],[266];2) 通过在训练阶段诱导早退机制来执行长尾分类[267];以及3)提高模型鲁棒性[268]。另一个例子是,实现动态路由的想法是为了:1)在多任务设置下降低训练成本[269],2)在迁移学习中为每个例子找到最佳微调策略[270]。
尽管近年来动态神经网络的研究取得了重大进展,但仍存在许多值得探索的开放性问题。在本节中,我们总结了该领域的一些挑战以及未来可能的方向。
尽管动态神经网络取得了成功,但从理论角度对其进行分析的研究相对较少。事实上,深入理解当前动态学习模型并以原则性的方式进一步改进这些模型的理论是非常有价值的。值得注意的是,已经证明具有自适应宽度的动态网络可以保持未简化模型的表示能力[79]。然而,还有更多的理论问题是动态网络的基础。在这里,我们列出了其中的几个,如下所示。
1) 动态网络中的最优决策问题。在大多数动态网络(尤其是那些为提高计算效率而设计的网络)中,一个重要的操作是做出与数据相关的决策,例如,确定是否应该评估或跳过模块。现有解决方案要么使用基于置信度的准则,或者引入策略网络和基于门函数。尽管在实践中是有效的(如第5节所述),但它们可能不是最佳的,并且缺乏理论依据。以早退机制为例,目前的启发式方法[12]、[32]可能面临过度自信、对阈值设置的敏感性高和可转移性差的问题。对于策略网络或门控模块,可以基于学习的函数来做出运行时决策。然而,它们经常引入额外的计算,并且通常需要长时间且不稳定的训练过程。因此,为动态网络中的决策函数设计提供有理论保证的原则性方法是一个有价值的研究课题。
2) 泛化性能。在动态模型中,可能会为一组测试样本激活子网络,这些样本不是从数据分布中均匀采样的,例如,较小的子网络倾向于处理“简单”样本,而较大的子网络用于“硬”输入[12]。这导致了训练数据分布和推理阶段的训练数据分布之间的差异,从而违反了经典机器学习中常见的i.i.d.假设。因此,发展新的理论来分析动态网络在这种分布失配下的泛化性能将是一件有趣的事情。请注意,迁移学习还旨在解决测试时的分布变化问题,但假设目标领域的样本可以提前访问。相反,对于动态模型,直到训练过程完成,网络架构和参数最终确定,测试分布才可用。这比分析迁移学习中的泛化问题带来了更大的挑战。
架构设计已被证明对深度网络至关重要。现有的架构创新研究主要针对静态模型[4]、[5]、[27],而专门针对动态网络开发架构的研究相对较少。预计专门为动态网络开发的体系结构可以进一步提高其有效性和效率。例如,早期存在的网络中多个分类器之间的干扰可以通过精心设计的具有密集连接的多尺度架构来减轻[12]。
可能的研究方向包括手动设计动态网络结构(如[12]、[32]、[35]、[67]),或利用NAS技术(如[83]、[106])。此外,考虑到Transformers[138]的流行,最近的工作提出了具有自适应早退机制[271]或令牌稀疏性[272],[273]的动态视觉Transformers。开发这一系列模型的动态版本也可能是一个有趣的方向。
请注意,对动态网络的研究不同于一个看似密切的主题,即模型压缩[28],[29],[31]。它们的一个共同目标是以最小的精度下降来提高网络效率。然而,模型压缩可能侧重于减少深度网络的大小,而动态网络更关注计算,即使代价是略微增加模型大小[15],[47]。此外,模型压缩通常采用剪枝[28]或量化[29]技术来生成紧凑的静态模型,以相同的方式处理所有输入。相比之下,动态网络对不同的输入执行数据相关的计算,这可以有效地减少静态模型中的固有冗余。
许多现有的动态网络(例如,大多数样本自适应网络)是专门为分类任务设计的,不能应用于其他视觉任务,如对象检测和语义分割。困难在于,对于这些任务,没有简单的标准来断言输入图像是容易的还是难的,因为它通常包含具有不同难度的多个对象和像素。尽管已经做出了许多努力来解决这个问题,例如空间自适应模型[33]、[39]、[148]和基于软注意力的模型[13]、[20]、[21],但开发一个统一而优雅的动态网络仍然是一个具有挑战性的问题,该网络可以作为各种任务的现成骨干网络。
目前的深度学习硬件和库大多是针对静态模型进行优化的,它们可能对动态网络不友好。因此,我们通常观察到动态模型的实际运行时间滞后于理论效率。例如,一些空间自适应网络涉及稀疏计算,众所周知,由于内存访问瓶颈,稀疏计算在现代计算设备上效率低下[148]。最近的一项工作集中在算法和硬件的代码设计上,用于在具有更大灵活性的平台(如FPGA)上加速深度模型[274]。许多依赖于输入的操作,包括像素级动态计算[114]、[275]、[276]、自适应通道剪枝[277]、[278]和早退机制[279],也与硬件一起进行了定制,以进一步提高其实际效率。同时优化算法、硬件和深度学习库,以获取动态网络的理论效率收益,是一个有趣的研究方向。
此外,依赖数据的推理过程,特别是对于动态体系结构,通常需要一个模型来顺序处理输入样本,这也对并行计算提出了挑战。尽管已经为早期退出的网络启用了批量推理[271],但对于其他类型的动态架构,自适应计算图和并行计算之间的冲突仍然存在。在移动/边缘计算的场景中,这个问题得到了缓解,其中输入信号本身是连续的,并且计算硬件的功能不如高端平台。然而,设计与现有硬件和软件更兼容的动态网络仍然是一个有价值和具有挑战性的课题。
动态模型可能为深度神经网络对抗鲁棒性的研究提供新的视角。例如,最近的工作[268]利用了多出口结构来提高对抗攻击的鲁棒性。此外,传统的攻击通常旨在造成错误分类。对于动态网络,有可能对效率发起攻击[280],[281]。具体而言,通过通过调整对抗攻击的目标函数,输入自适应模型可能会被愚弄,从而激活其所有中间层[280],或者在早退机制时产生令人困惑的预测[281],即使对于“简单”的样本也是如此。还观察到,常用的对抗训练对防御此类攻击无效。动态网络的鲁棒性是一个有趣但研究不足的话题。
动态网络继承了深度学习模型的黑箱性质,因此也带来了解释其工作机制的研究方向。这里的特殊之处在于,自适应推理范式,例如空间/时间自适应,与人类视觉系统的范式非常一致,并可能为使模型对人类更透明提供新的可能性。在动态网络中,通常可以方便地分析给定输入激活了模型的哪个部分,或者定位模型在进行预测时主要依赖于输入的哪个部分。预计对动态网络的研究将为深度学习的可解释性带来新的工作。