本文是我对18年Information Sciences上一篇讲网络跨层文章CLNN的理解:
Convolutional networks with cross-layer neurons for image recognition
文献链接:https://www.sciencedirect.com/science/article/pii/S0020025517311659
这篇文章是18年的sci一区文章,引用量似乎惨淡…这篇文章在DenseNet,等文章之后。文章的一个操作是认为自己首先提出了cross-layer的思想,而之前的只能叫做cross-line,这个概念先码在这里。
Why 跨层?——CLNN背景
本文的标题很明确,是针对图像分类识别问题去的,文章的思想来源也和该问题有关,且idea很简单,只是后面操作联想到了不同的知识。
背景之一是深层CNN确实表现可以,在18年那个时候能良好完成各种图像任务,包括ImageNet等;背景之二是深层CNN的训练比较难,确实,堆叠卷积层太多了会出点问题也是正常的吧(我现在不知道除了参数多,训练可能有梯度上的问题之外还有啥显著缺点)。
针对图像任务的话,本文的idea顺着深层CNN出来了,以文中图2为例非常好理解,CNN的底层提取的多是图像上的直观纹理特征,比较基础,高层提取的是抽象的高级特征,但是很抽象。这些与人的视觉感官类似,但是人一眼看到一张图片,需要放大图像中的细节,还是依据图像中的纹理等特征来判断图像中到底是什么。因此深层CNN应当要好好利用这些底层的基础特征。但是显然不行,CNN过深之后,前面浅层的特征(信息)很多其实被浪费或者说逐渐消散了。
这就是文章要考虑跨层的一个原因。
How 跨层?——CLNN实现方法
那么它提出的是什么样的网络结构呢?这个感觉真的很难写出来,所以下面还是要放文章的图。
首先,文章中提到了4个重要的概念:cross-line,cross-layer neuron(=cross-line neuron),cross-layer block和connection layer。由于我不知道怎么在Hexo平台上并排插入图片,所以只好分开介绍了。
cross-line
据本文阐述,之前的跨层文章都是cross-line的思想,即网络层层之间连接一下,只是指这么个连接的操作来传递信息,一般通过一个卷积就行。
注意不是相邻层的连接(本来就有的),而是至少中间隔两层的跨连接。具体的定义在文章的定义1,不过文章的定义稍有些晦涩,其实没那么复杂,只是定义起来要晦涩一点。
cross-layer neuron & cross-layer block
上图其实不是是cross-layer neuron的结构图,而是cross-layer block的结构图啊,后者作为一个模块,是这个跨连接一堆的整体,目的是把底层的信息传到高层去,实现的手段是在普通的卷积层之间添加了cross-line,并把输入给merge一下。前者在图中只表现为一个小小的neuron,其实没啥,是指这个cross-layer的操作存在就可以了。具体的定义在文章的定义2。
这个merge的对象是cross-layer neuron的主(原)输入和各层跨连接得到的需要传递给顶(高)层的输入。方式有三种,保持维度后直接相加、保持维度后加权相加、跨连接的所有输出相加后再保持维度并与cross-layer neuron的主(原)输入直接合起来做维度扩充。文中为方便采用了第一种。
我的一个疑惑,直接相加有用么,能保持底层信息么?举个例子,一堆底层的纹理加在一块是个啥?
connection-layer
上图是connection-layer,它的作用是连接两个cross-layer block,中间有两条向高层传递信息的通道,表示两条flow,这也是为什么我在tags中加了流模型的原因,文章还有有这么个流模型的考虑的。
ps:我觉得这个connection只是表现在两条flow的连接,分开的话可以看成是两个block
其中每一条flow都有两层卷积,包括一次stride操作来下采样。这样就导致了上图的三种结构。
而这个connection-layer其实你看啊,边上有个恒等映射作为cross-line,中间为两层,所以也是个cross-layer neuron,最后有个merge的操作,采用的是第一种。
cross-layer block和connection-layer的连接
这个就是整体的网络模型了,把多个block和多个connection-layer组合起来,形成文章的最终模型CLNN!
连接的方式有两种,左边是直接顺序连接,先一堆(图中只有一个我觉得一堆也行)block再最后来个连接层;右边是调整了连接顺序,并不是直接一条路走到头了,把block中的neurons分别都连到最后的连接层上。
说实话我不明白为什么就可以这样做,道理只是这个信息merge传递的idea和实验验证么?
Pros & Cons
写到这里总觉得文章哪里不太对劲,先这样吧,说不定用到的时候就明白了。
Pros | Cons |
---|---|
idea还是不错的,跨层的花样+++(模型名字CLNN也不错) | 我个人觉得除了实验验证少了什么 |
把底层信息多次传到高层,缓解了底层特征的浪费(消散)问题✔ | 跨层操作还是不少的,这样的多次利用可不可以精简? |
分类任务的收敛速度加快(如何通过梯度加速还没明白),通过实验验证 | merge特征(信息)的方式有用么?见上文我的疑惑 |
某种程度上CLNN也是训练深度CNN的方法 | TBD |
首次提出cross-layer?不清楚,不过确实连接方式丰富了 | |
文章说梯度消失也缓和了,暂时我没啥头绪… |
参考链接
[1] Zeng Yu, Tianrui Li, Guangchun Luo, Hamido Fujita, Ning Yu, and Yi Pan. Convolutional networks with cross-layer neurons for image recognition. Information Sciences, 433-434:241 – 254, 2018.