首发:AIWalker
作者:HappyAIWalker
大家好,我是Happy。
在过去了几年里,动态神经网络非常热,热到每周都能看到几篇不错的动态神经网络论文上传到arxiv。那么什么是动态神经网络呢?它有有哪些类型呢?它的研究现状如何呢?接下来,就由Happy带领大家简单回顾一下咯。
Abstract
Abstract 动态神经网络已成为深度学习新型研究课题。相比静态模型(固定计算图、固定参数),动态网络可以按照不同输入自适应调整自身结构或者参数量,导致了精度、计算效率、自适应等方面的显著优势。
本文对动态神经网络进行了系统性的综述并将其分为三大类:
- instance-wise 它采用数据依赖的结构或参数处理每个样例;
- spatial-wise 它采用与图像空域位置相关的方式进行自适应计算;
- temporal-wise 它验证序列数据(比如视频、文本)的时间维度进行自适应推理。
相比静态网络,动态神经网络有这样几个优势:
- Efficiency
- Representation power
- Adaptiveness
- Compatibility
- Generality
- Interpretability
本文对动态网络的几个重要组成部分(比如结构设计、决策机制、优化技术以及应用)进行了系统性研究,最后我们对该领域的开问题以及未来研究方向进行了讨论。
Instance-wise
实例级动态神经网络旨在通过数据依赖方式处理不同样例,它一般从以下两个角度出发进行设计:
- 基于不同样例分配适当计算量达到调整网络架构的目的,因此可以在
easy
样例上降低冗余计算,进而达到改善推理效率的目的; - 针对不同样例调整网络参数且保持计算图不变,通过小幅提升计算量达到提升模型表达能力的目的。
接下来,我们将从以上两个角度出发,对现有实例级动态神经网络进行介绍。
Dynamic Architectures
假设不同的输入具有不同的计算需求,一种自然的方式:根据输入动态调整推理时的架构。具体来说,我们可以调整网络的深度、宽度或者动态路径。具有动态架构的网络不仅可以节省对于简单样例冗余计算,而且保证对于困难样例的表达能力。相比静态模型的加速技术,该方案可以带来显著的效率优势。
Dynamic Depth
为识别“困难”样例,目前CNN的结构变得越来越深,一种直观的解决方案:在推理阶段采用动态网络深度减少冗余计算。关于动态深度有两种实现方式:
- Early exiting:对于“简单”样例提前退出。常见“早退”方案有以下三种形式:
- Cascading DNNs,见下图a。
- Intermediate Classifier,见下图b;
- Multi-scale architecture with early exits,见Fig2-a。
- Layer skipping:进行自适应的中间特征跳过。常见的“层跳过”有以下几种形式:
- The halting score 见下图a;
- Gating Function,见下图b;
- Policy Network,见下图c。
Dynamic Width
动态宽度是动态深度之外的另一种选择:尽管每个层都需要执行,但它的多个成分(比如神经元、分支或者通道)将根据输入自适应选择。
上图给出了几个常见动态宽度方案:
- Dynamic width of FC Layers
- Mixture of Experts(MoE),见上图a和b;
- Dynamic channel pruning in CNNs,
Dynamic Routing
除了动态深度、动态宽度外,还有一种动态路径的方案(见上面图c):SuperNet中的计算路径根据输入自适应调整。关于SuperNet及其路径决策主要有以下几种方案:
- Path selection in multi-branch structures
- Neural trees and tree-structured networks
- Others,主要见诸于NAS。
Dynamic Parameters
尽管前面提到的动态架构可以按照不同样例自适应调整推理图并取得有效计算量分配,但它们通常需要特定的架构设计、特定的训练策略或者精心的超参数调整。
一般来说,参数自适应可以通过以下三种方式(可参见上图)得到:
- 基于输入调整训练参数;
- 根据输入直接生成网络参数;
- 采用软注意力调整特征。
Parameter Adjustment
参数自适应的一种典型方法:在推理阶段,根据输入调整网络权值。通常来讲,该过程通过非常少的计算量生成这种调整,比如注意力权值、采样偏移。
该过程可以显著提升模型的容量(capacity)且保持高效性,因为多分枝卷积融合等价于多卷积核参数融合后的单次卷积,而后者仅需前者的计算量。
权值调整还可以通过在卷积核的_空域位置_上实施软注意力。比如,PAC(pixel-adaptive convolution)在每一层根据输入生成注意力掩码对卷积核进行调整。
Kernel shape adaptation 除了自适应调整权值外,参数调整还可以用于调整卷积核的形状达到动态感受野的作用。比如,Deformable Convolution、Deformable Kernel。下表从不同角度对比了该方向的几个方法。
Weight prediction
相比于在线修改模型参数,权值预测更为直接:在测试阶段采用子网络直接生成参数。
DFN(Dynamic Filter Network)与HyperNetwork是两个经典的实现运行时权值预测的CNN和RNN方案。具体来说,DFN采用滤波器生成网络为卷积生成滤波器。旷视科技提出的WeightNet则将CondConv与SENet纳入到同一框架中,它通过分组全连接层生成卷积核,在精度-Flops、精度-参数量方面取得了极具竞争力的结果。其他类似的方法有:CARAFE、VSR-DUF等。
Dynamic Features
Spatial-wise attention 特征还可以在从空域位置角度采用注意力进行动态调整以改进深度模型的表达能力。更进一步,通道与空域注意力还可以集成到一个框架中,比如BAM、CBAM。
Dynamic activation functions 前面两种在激活函数之前通过软注意力生成动态特征。近期一些工作开始尝试通过动态激活函数提升模型的表达能力。比如,DY-ReLU采用N个线性变换 的最大值替换ReLU;此外还有旷视科技提出的FReLU、ACON。动态激活函数能能与现有网络架构兼容,已在不同视觉任务中证实了其有效性。
总而言之,由于简单、有效性,软注意力已在多个领域得到探索,而且,软注意力能方便的与其他方法集成组合。
Spatial-wise attention 特征还可以在从空域位置角度采用注意力进行动态调整以改进深度模型的表达能力。更进一步,通道与空域注意力还可以集成到一个框架中,比如BAM、CBAM。
Dynamic activation functions 前面两种在激活函数之前通过软注意力生成动态特征。近期一些工作开始尝试通过动态激活函数提升模型的表达能力。比如,DY-ReLU采用N个线性变换 的最大值替换ReLU;此外还有旷视科技提出的FReLU、ACON。动态激活函数能能与现有网络架构兼容,已在不同视觉任务中证实了其有效性。
总而言之,由于简单、有效性,软注意力已在多个领域得到探索,而且,软注意力能方便的与其他方法集成组合。
Spatial-wise Dynamic Network
在视觉学习中,并非所有位置对于最终的预测起均等贡献,这意味着:空域动态计算有极大潜力降低计算冗余。换句话说,仅需通过自适应方式计算一定比例的像素或者区域即可做出一个正确的决策。已有研究表明:对于大部分输入而言,低分辨率表达已足以得到一个不错的性能,CNN采用相同分辨率的输入无疑会造成冗余计算。
为此,空域动态网络旨在采用图像的不同空域位置进行自适应推理。按照动态计算的粒度,我们将其分为:
- pixel level
- region level
- resolution level
Pixel-level Dynamic Networks
按照前述分类,像素级动态包含有以下两种类型:
- dynamic architectures:采用动态架构处理每个像素;
- dynamic parameters:采用动态参数处理每个像素。
Pixel-wise dynamic architectures
基于这样的认知:前景像素更具信息价值,其计算需求要比背景更高。一些网络尝试对每个像素调整其网络架构,现有方案可以划分为以下两种:
- Dynamic sparse convolution:仅在子集像素区域进行卷积计算,见下图。
- Dynamic additional refinement:不同于采样子集进行计算计算,另外一条线是:现在整个特征层面执行相对廉价的卷积,然后自适应激活额外的模块在特定像素上进行更进一步的提炼。
Pixel-wise dynamic parameters
不同于在像素子集上完整调整卷积计算,动态网络还可以对每个像素执行数据依赖的卷积以提升其表达能力或者感受野。现有方案主要有以下三种:
- Dynamic weights,包含动态卷积、动态区域卷积等。
- Dynamic reception fields,包含形变卷积、自适应链接网络等。
- Pixel-wise dynamic feature,包含空域注意力。
Region-level Dynamic Networks
像素级动态网络需要特定的计算库以适配稀疏计算,在实际硬件上加速极为有限。另一种可选方案:在区域或者块级进行自适应推理。主要包含两条线路:
- Dynamic transformations:常见于细粒度图像分类;
- Hard attention:比如GFNet、RA-CNN。
Resolution-level Dynamic Networks
上面的讨论是将特征分成不同的区域,然后采用自适应方式对不同区域进行处理。然而,所涉及的稀疏采样、裁剪奥做会导致实际效率的价格降低。另外,动态网络可以把不同分辨率的图像视作整体:低分辨率图像对于“简单”样例足够有效。现有的分辨率级动态网络可以分为以下两种:
- Adaptive scaling ratios:采用自适应缩放因子对特征进行上/下采样达到动态分辨率目的。
- Dynamic resolution in multi-scale architectures:采用并行/级联方式构建多个子网络以达到动态分辨率目的。
Inference and Training
从前面介绍可以看到:推理阶段的数据依赖决策对于获得高性能、高效率推理非常重要;此外,训练动态网络通常比静态网络更具挑战性。
由于参数的自适应性可以通过SGD直接优化训练得到,且无需特定技术。接下来我们主要针对离散决策、训练策略进行介绍。
Decision Making of Dynamic Networks
推理阶段的数据依赖决策主要有以下三种:
- Confidence-based Criteria
- Policy Networks
- Gating Functions
Training of Dynamic Networks
从目标与优化两个角度简单汇总了训练动态网络的策略:
- Training objectives for efficient inference:在这方面有分为以下几种:
- Trainng multi-exit networks,
- Encouraging sparsity,包含稀疏正则
- Other techniques,包含知识蒸馏等
- Optimization of non-differentiable functions:
- Gradient estimation,包含STE等;
- Reparameterization techniques,包含Gumbel Softmax等;
- Reinforcement learning,包含RL等。
Application of Dynamic Networks
接下来,我们将汇总以下动态神经网络的典型应用,见下表。
可以看到:
- 对于图像识别来说,动态CNN大多为instance-wise和spatial-wise形式;
- 对于文本数据来说,其推理框架大多为itemporal-wis形式;
- 对于视频相关任务,三种类型的动态推理可同时使用;
动态网络还可以用于解决深度学习中的基础问题,比如:
- 缓解
over-thinking
降低整体计算量; - 引入早退机制进行长尾分类;
- 提升模型鲁棒性
- 在多任务框架下降低训练耗时;
- 在迁移学习中寻找最优微调策略。
推荐阅读
本文章著作权归作者所有,任何形式的转载都请注明出处。更多动态滤波,图像质量,超分辨相关请关注我的专栏深度学习从入门到精通。