从聚合-转移框架浅谈卷积神经网络的架构设计人工智能行业面临百万量级的人才缺口,正值春招求职季,雷锋网 AI 慕课学院与雷锋网旗下学术频道 AI 科技评论联合腾讯课堂共同开启一场关于AI 求职的经验分享盛宴——「AI 求职季·AI 工程师 offer 直通车系列直播」栏目。
4 月 10 日的第一场分享嘉宾——Momenta 高级视觉算法研究员李翔带来了《打造自动驾驶大脑——看 Paper Reading 直播,拿 Momenta 顶级 offer》的直播分享。
李翔,南京理工大学 PCALab 博士在读,阿里巴巴天池首届大数据竞赛冠军,滴滴 Di-Tech 首届大数据竞赛冠军。知乎专栏 DeepInsight 作者。早期负责 Momenta 车道线检测相关模块,现专注于神经网络基础算法研发。
以下是李翔在雷锋网「AI 求职季·AI 工程师 offer 直通车系列直播」栏目的分享内容精选。
本次 Paper Reading 我们并没有关注某些特定的 paper,而是用一个视角对现有的代表性的卷积神经网络设计进行总结。
卷积神经网络通常都是由许多不同的层级结构组成的。上图的蓝框部分是被定义的 L 层网络单元,它总体包含聚合(Aggregation)和转移(Transformer)两个部分。具体来说,聚合可用图示的函数表示,聚合函数 A 代表通过选择 L 以前层的 X 的一个子集作为输入,得到聚合特征 S;转移的部分比较简单,将聚合特征 S 通过转移函数 T 得到 L 层的 X。
为了更加形象的理解,我们举一个具体的且耳熟能详的例子——DenseNet。DenseNet 是 CVPR 2017 的最佳论文。从聚合-转移框架的视角(以上两个表达式)来看,subset 子集收敛到所有的 L 层之前的 X 上;聚合函数 A 具体化为 channel 维度的拼接(concatenation),拼接可用两条竖线的符号标记;这是聚合部分的情况。
第二种情况是子集(subset)选择 L 层之前所有层的 X,这是较为常见的。主要代表作有 ResNet 系列、DenseNet 系列以及基于 ResNet 或者 DenseNet 提出改进的一些网络结构。
首先分析图中(a)的拓扑结构,这个拓扑结构基本上是 DenseNet 的结构,符号和聚合-转移框架是保持一致的开云网址·(中国)官方网站,于是可以写出它数学上的表达式,具体化为 channel 维度的拼接,进行一步的转移后得到 DenseNet 标准的表达式,也是其论文中的原始定义。
再看图中(b)ResNet 的结构,是一个标准的 skip connection 结构。根据 ResNet 的定义可写出表达式(1),从表达式中也体现了 skip connection;同时表达式(2)即是中间 feature X 的表达。在得到表达式(1)和表达式(2)后,可将表达式(1)不断地循环地带入表达式(2)中,最后可以得到一个非常有意思的表达式。
最后,将(a)和(b)两个网络的表达式平行地写在一起,发现两者唯一的区别就在于聚合函数 A,(a)DenseNet 结构表现为 channel 维度的拼接,(b)ResNet 结构表现为逐元素的相加。二者遵循的都是一个相同的 Dense 的拓扑连接结构。这部分的具体细节可以查看 Mixed Link Network 的论文。
提到这里,不得不回顾一个小往事。众所周知,ResNet 前后其实提了两个版本。第一个版本是图(a),也是 CVPR 的最佳论文《Deep Residual Learning for Image Recognition》,第二个版本是图(b),是第一篇论文发表后的第二年发表的论文,名为《Identity Mappings in Deep Residual Networks》。这两个版本的最大区别就是 skip connection 之后是否接 relu。第一个版本接了 relu,如果按照第一个版本,我们之前的推导是无法完成的。从实验上来讲,第一个版本的确也是存在一些问题的,图中是当时的实验结果,第一个版本的 ResNet 随着网络层数从一百层上升到一千多层,性能反而在下降。等到第二个版本,就完全符合了 Dense 的拓扑结构,随着网络变得很深,性能也能够稳定下降。这也充分地告诉我们,Dense 的拓扑结构的确是具有一些非常优秀的性质,使得 RenseNet 和 DenseNet 在现有网络基础上都有着重要的影响力。
RNN 的输出基本分为两大类,一个是 layer id,也就是选择之前的哪一层;另一个类是基础运算操作。图中红色框部分就是每次 sample 出的两个层的 X。具体细节可以参考论文原文。
接下来介绍聚合函数 A 的几个代表形式。首先是恒等变换,也就是 Identity 函数,在通常的 feed-forward 网络中,聚合的特征是使用了上一层的 feature X,在聚合过程中不会对 feature 进行任何操作,仅是转移至下一层。
第三是通道(channel)上的拼接,代表作是 DenseNet。这类形式是将所有 feature 在通道维度上进行一个扩增。通常,DenseNet 的 feature X 的维度都比较小,保持量级不会过大,控制最终的 feature 维度在一定范围内。
最后再介绍下混合了 addition 和 concatenation 的两种操作,混合的意思是在聚合的过程中既包括按位置的逐元素的相加,也包括 channel 维度的拼接,其主要代表作是 DPN、MixNex 和 ShuffleNet。DPN 可被视为拥有两条通路的网络,左边的通路为 ResNet,右边的通路为 DenseNet,进行 feature 上的拼接后,在转移过程中包含了逐元素的相加和 channel 维度的拼接。MixNet 也是相似的原理,但去掉了严格意义上的 ResNet 的通路,把逐元素相加平均分摊到不断扩增的所有 feature 上。ShuffleNet 则是在降采样的时候和非降采样的时候使用不同的两种操作,从而最终将其混合起来。
转移如果更加细致的划分可能可以有很多种分类方式,但由于篇幅限制本次只从两个方向简单地介绍转移的部分,分别是单路的转移和多路的转移(Single Path 和 Multiple Path)。通过顺序的卷积、组卷积等基元操作完成特征转移的网络都可被归纳为单路的转移(SinglePath)。在拥有聚合的 feature 之后,可以通过 feed-forward(单向流)的方式,将基础的操作如 concatenation、BN、pooling、激活函数等进行单向的组合,经过这一单路的组合,可以得到转移后的 feature。单路的网络包括 LeNet、AlexNet、VGG、PreResNet、ResNeXT、DenseNet、DPN、MixNet、ShuffleNet、MobileNetV1 V2 等目前主流的网络开云网址·(中国)官方网站,目前小型设备上使用的网络 ShuffleNet、MobileNetV1 V2 都是单路转移的设计,不涉及多路的转移。
除了通过顺序的卷积、组卷积等基元操作完成特征转移的网络之外,其他的网络可被归纳为多路的转移(MultiplePath)。首要的代表作是 GoogLeNet 的 Inception 系列,Inception 系列最早就是沿着多路的思路设计的,同一个 feature 会经过不同的深度、感受野的组织路径,进而设计出从 V1 到 V4 的系列版本。在迭代过程中,内部结构的变化越来越多,比如说把大的卷积替换成小的卷积的组合,然后卷积再进行分解,3 乘 3 的分解成 3 乘 1 和 1 乘 3 等等。这一系列中唯一不变的便是其多路转移的设计思路。
值得一提的是,Momenta 在 ImageNet 2017 的夺冠架构 SENet 便可以看作在特征转移的步骤中增加了一个 multiple path,一路是 identity,另一路是 channel 上的 global attention。其实,转移部分还可以从更多更深入的角度在做分类和整理,我们今天仅从单路和多路的角度做了一些梳理,希望能给大家带来启发。
上图是本次分享的回顾,梳理了目前主流的架构。从子集选取的角度出发,可分为三种设计;从聚合函数的角度出发,可分为四种设计;从转移函数的角度出发,可简单分为两种设计。
希望这个表格能在子集选择、设计聚合函数和转移函数时给予大家启发。例如,现在借助网络架构搜索是一个很好的方向,比如 NASNet 和 ENASNet开云网址·(中国)官方网站,但其本身具有一定的局限性。首先搜索空间是被定义好的。当基础单元的研究没有到位时,搜索空间可能不会被定义得非常好,甚至有些很多结构在搜索空间里搜不到的,比如说 Google 的 Inception 结构,比如说 DPN 和 MixNet 这类混合的结构。它们在性能上的提升甚至可能往往并不如人工设计的结构。所以,接下来的网络设计应该是基础单元结合架构搜索同时前进,相互补充相互启发,从而达到共同的提高。