大家好,我是Happy。
在过去了几年里,动态神经网络非常热,热到每周都能看到几篇不错的动态神经网络论文上传到arxiv。那么什么是动态神经网络呢?它有有哪些类型呢?它的研究现状如何呢?接下来,就由Happy带领大家简单回顾一下咯。
Abstract 动态神经网络已成为深度学习新型研究课题。相比静态模型(固定计算图、固定参数),动态网络可以按照不同输入自适应调整自身结构或者参数量,导致了精度、计算效率、自适应等方面的显著优势。
本文对动态神经网络进行了系统性的综述并将其分为三大类:
相比静态网络,动态神经网络有这样几个优势:
本文对动态网络的几个重要组成部分(比如结构设计、决策机制、优化技术以及应用)进行了系统性研究,最后我们对该领域的开问题以及未来研究方向进行了讨论。
实例级动态神经网络旨在通过数据依赖方式处理不同样例,它一般从以下两个角度出发进行设计:
easy
样例上降低冗余计算,进而达到改善推理效率的目的;接下来,我们将从以上两个角度出发,对现有实例级动态神经网络进行介绍。
假设不同的输入具有不同的计算需求,一种自然的方式:根据输入动态调整推理时的架构。具体来说,我们可以调整网络的深度、宽度或者动态路径。具有动态架构的网络不仅可以节省对于简单样例冗余计算,而且保证对于困难样例的表达能力。相比静态模型的加速技术,该方案可以带来显著的效率优势。
为识别“困难”样例,目前CNN的结构变得越来越深,一种直观的解决方案:在推理阶段采用动态网络深度减少冗余计算。关于动态深度有两种实现方式:
动态宽度是动态深度之外的另一种选择:尽管每个层都需要执行,但它的多个成分(比如神经元、分支或者通道)将根据输入自适应选择。
上图给出了几个常见动态宽度方案:
除了动态深度、动态宽度外,还有一种动态路径的方案(见上面图c):SuperNet中的计算路径根据输入自适应调整。关于SuperNet及其路径决策主要有以下几种方案:
尽管前面提到的动态架构可以按照不同样例自适应调整推理图并取得有效计算量分配,但它们通常需要特定的架构设计、特定的训练策略或者精心的超参数调整。
那么另一条线来了:保持推理架构不变,但网络参数自适应调整。已有研究已证实其有效性:通过小幅提升计算量改进网络的表达能力。给定输入
,静态参数网络(模块)的输出可以描述为:
;与之对立的,动态参数网络的输出描述如下:
其中,
用于生成动态参数,
的不同选择已得到了充分的探索。
一般来说,参数自适应可以通过以下三种方式(可参见上图)得到:
参数自适应的一种典型方法:在推理阶段,根据输入调整网络权值。通常来讲,该过程通过非常少的计算量生成这种调整,比如注意力权值、采样偏移。
Attention on weights 可训练参数量时影响表达能力的重要因素。动态网络(比如谷歌的CondConv、微软DY-CNN)在多个卷积核上执行软注意力生成自适应集成参数,它不会导致明显的计算量提升。假设有N个核
,该动态卷积定义如下:
该过程可以显著提升模型的容量(capacity)且保持高效性,因为多分枝卷积融合等价于多卷积核参数融合后的单次卷积,而后者仅需前者
的计算量。
权值调整还可以通过在卷积核的空域位置上实施软注意力。比如,PAC(pixel-adaptive convolution)在每一层根据输入生成注意力掩码对卷积核进行调整。
Kernel shape adaptation 除了自适应调整权值外,参数调整还可以用于调整卷积核的形状达到动态感受野的作用。比如,Deformable Convolution、Deformable Kernel。下表从不同角度对比了该方向的几个方法。
相比于在线修改模型参数,权值预测更为直接:在测试阶段采用子网络直接生成参数。
DFN(Dynamic Filter Network)与HyperNetwork是两个经典的实现运行时权值预测的CNN和RNN方案。具体来说,DFN采用滤波器生成网络为卷积生成滤波器。旷视科技提出的WeightNet则将CondConv与SENet纳入到同一框架中,它通过分组全连接层生成卷积核,在精度-Flops、精度-参数量方面取得了极具竞争力的结果。其他类似的方法有:CARAFE、VSR-DUF等。
在推理阶段通过调整或生成参数的主要影响在于生成更动态的、信息丰富的特征,进而增强了深度模型的表达能力。一种更直接的方式:采用输入相关的软注意力调整特征,见前面Figure6-c。这种类型的动态特征更易于得到,仅需要在计算图上作微小调整。对于线性变换
,在输入特征执行注意力
等价于调整参数:
Channel-wise attention 一种常用软注意力机制:动态缩放不同通道的特征,比如SENet:
当把卷积纳入考虑时,上述过程空域成如下形式:
也就是说:特征上的注意力等价于动态权值的卷积。
不同形式的注意力得到了了探索,比如采用标准差提供更多统计信息,采用更高效的1D卷积替换全连接层。总而言之,通道注意力可以概括为以下三种形式:
Spatial-wise attention 特征还可以在从空域位置角度采用注意力进行动态调整以改进深度模型的表达能力。更进一步,通道与空域注意力还可以集成到一个框架中,比如BAM、CBAM。
Dynamic activation functions 前面两种在激活函数之前通过软注意力生成动态特征。近期一些工作开始尝试通过动态激活函数提升模型的表达能力。比如,DY-ReLU采用N个线性变换
的最大值替换ReLU
;此外还有旷视科技提出的FReLU、ACON。动态激活函数能能与现有网络架构兼容,已在不同视觉任务中证实了其有效性。
总而言之,由于简单、有效性,软注意力已在多个领域得到探索,而且,软注意力能方便的与其他方法集成组合。
在视觉学习中,并非所有位置对于最终的预测起均等贡献,这意味着:空域动态计算有极大潜力降低计算冗余。换句话说,仅需通过自适应方式计算一定比例的像素或者区域即可做出一个正确的决策。已有研究表明:对于大部分输入而言,低分辨率表达已足以得到一个不错的性能,CNN采用相同分辨率的输入无疑会造成冗余计算。
为此,空域动态网络旨在采用图像的不同空域位置进行自适应推理。按照动态计算的粒度,我们将其分为:
按照前述分类,像素级动态包含有以下两种类型:
基于这样的认知:前景像素更具信息价值,其计算需求要比背景更高。一些网络尝试对每个像素调整其网络架构,现有方案可以划分为以下两种:
不同于在像素子集上完整调整卷积计算,动态网络还可以对每个像素执行数据依赖的卷积以提升其表达能力或者感受野。现有方案主要有以下三种:
像素级动态网络需要特定的计算库以适配稀疏计算,在实际硬件上加速极为有限。另一种可选方案:在区域或者块级进行自适应推理。主要包含两条线路:
上面的讨论是将特征分成不同的区域,然后采用自适应方式对不同区域进行处理。然而,所涉及的稀疏采样、裁剪奥做会导致实际效率的价格降低。另外,动态网络可以把不同分辨率的图像视作整体:低分辨率图像对于“简单”样例足够有效。现有的分辨率级动态网络可以分为以下两种:
从前面介绍可以看到:推理阶段的数据依赖决策对于获得高性能、高效率推理非常重要;此外,训练动态网络通常比静态网络更具挑战性。
由于参数的自适应性可以通过SGD直接优化训练得到,且无需特定技术。接下来我们主要针对离散决策、训练策略进行介绍。
推理阶段的数据依赖决策主要有以下三种:
从目标与优化两个角度简单汇总了训练动态网络的策略:
接下来,我们将汇总以下动态神经网络的典型应用,见下表。
可以看到:
动态网络还可以用于解决深度学习中的基础问题,比如:
over-thinking
降低整体计算量;