今年开始养成了定期看论文的习惯,一开始是用思维导图记录学习内容。但是发现这样的效果其实并不是特别好,只是相当于速记的效果,但是未经咀嚼消化。导致现在存在的问题是:论文看完了,但是理解没有很深刻,没有建立起整体框架。为了达到🐻哥和小🌧️的学习效果,所以以博客的形式进行学习的总结和记录。可能现在依然不能做到很好的吸收,但是相信量变引起质变。同时其他的学习也以此方式锻炼总结能力。
一、文章概要
改善深度神经网络中的信息流可以帮助减少训练难度,提高参数的利用效率。本文提出了一种可以交替更新集团的卷积神经网络结构。和之前的网络不同,在同一个block中的任意两层间,同时存在前向和后向两种连接。这些层被构造成一个循环,并交替更新。
CliqueNet拥有一些独特的特性。对某一个层来说,它既是同一个块内任意其他层的输入,也是它们的输出,这样层之间的信息流达到了最大化。在传播时,新更新的层连接起来以重新更新之前更新过的层,参数会被重复使用很多次。这种循环反馈结构能够将更高级别的视觉信息带回去,改进低级别的过滤器,得到【空间上的关注】【?】。
本文分析了来自不同stage的特征,观察到使用改进的特征会得到一个更好的结果。本文采用多尺度特征策略以有效避免参数的逐步增长。本文在CIFAR-10, CIFAR-100, SVHN and ImageNet 上做了实验,证明本文提出的模型能够使用很少的参数达到理想的表现。
二、核心思想
最近几年,自从以CNN为基础的模型在大量计算机视觉任务里取得了巨大的成功后,卷积神经网络的结构和拓扑吸引了很多的注意力和研究。一个重要的趋势是网络走的更深了:从AlexNet的5层卷积层,到VGG的19层,GoogleNet的22层,再到最深的网络超过一千层的ResNet。但是,不合理的网络设计会导致后面的卷积层很难从之前的卷积层获取梯度信息,可能会导致梯度小时或者参数冗余等问题。像ResNet和Highway Network里被成功采用的跳层连接,有效使顶层的卷积层获取底层的信息,同时避免梯度消失问题,减轻了训练的困难度。ResNet中的残差块结构也激发了一些ResNet网络的变种,如ResNext, WRN, PolyNet。
为了更好的激活网络中的梯度和信息流,DenseNet作为一种新的结构被提出了,块中的任何一层都是所有先前层的输出,以及所有后续层的输入。
近期的研究表明,当权重在不同的层间分享时,跳层连接可以被看成RNN或LSTM,(S. Jastrzebski, D. Arpit, N. Ballas, V. Verma, T. Che, and Y. Bengio. Residual connections encourage iterative inference. In ICLR, 2018 / Q. Liao and T. Poggio. Bridging the gaps between residual learning, recurrent neural networks and visual cortex. arXiv preprint arXiv:1604.03640, 2016.)从这个角度来看,深度残差网络可以被看作一个长序列,隐藏单元通过跳层连接连起来。尽管这种循环结构对特征的循环使用和迭代学习有益,但是残差信息只能在相邻两层传播,无法穿过多层卷积层,因为这种复用每层只发生一次。
注意机制是近期对网络研究的另一个重点,当人们看一张图或一个场景时,如果带着额外的注意力重复看或重复思考目标,会更好的抓住目标的信息。
受循环结构和注意力机制的启发,本文提出了一种交替更新集团的新的卷积神经网络结构,CliqueNet,一种同一个块之间任意两层都有前向和后向连接的网络。像下图所示,在一个Clique Bloack中的layers被看作一个集团,会被交替更新。具体而言,将前几个层连接起来以更新下一层,然后,将新更新的层连接起来以重新更新先前的层,从而可以使信息流和反馈机制最大化。 块中的每一层都是另一层的输入和输出,这意味着它们比DenseNets 更紧密地连接。 我们采用多比例尺要素策略,以不同地图尺寸的块要素组成最终表示。
具体来看这个图,虚线平行四边形内部就是一个Clique Block整体,其中包含4个layers,分别是1,2,3,4,0是输出;四边形里连接了很多关系,有点复杂,把它拍平了分两步看,就是左边的垂直结构。Stage-I是前向传播,Stage-II是反向传播。
先看前向传播阶段,1的输入有(0),2的输入有(0,1),3的输入有(0,1,2),4的输入有(0,1,2,3)
反向传播阶段,1的输入有(2,3,4),2的输入有(3,4,1),3的输入有(4,1,2),4的输入有(1,2,3)
前向传播部分即:将前几个层连接起来以更新下一层,然后在后向传播里:最早更新的层是用未更新的层作为输入进行更新,后面的层就开始使用新更新的层连接起来以重新更新,比如1更新的时候就是正常反向传播的过程,用到了(4,3,2),1更新完后,再对2进行更新,除了常规的3,4层,还加上了加上更新后的1的信息,3用的就是尾端的4和更新后的1,2,3,再把4用前面更新后的信息做输入在更新一次。
作者列举了一些CliqueNet的特性:
比如,1.参数使用高效。作者表示,Clique在参数上使用是比较有效率的,虽然CliqueNet在一block中需要的参数是DenseNet的2倍(双向连接),但是,随着深度的增加,DenseNet的过滤器数量也在线性增长,导致参数的激烈增加。但是在CliqueNet中,只有第二阶段每个block中的特征会喂给下一个block。所以,CliqueNet在参数上更有效率。(虽然没有看懂但是看完论文再回顾一遍吧) 并且,传统的神经网络有新对应的参数时会为它们单独新增一层。但是在CliqueNet里,一个层可以反复被更新,这样通过固定数量的参数达到更深的表达空间的效果。
2.有很强的表达能力,因为循环结构的组合和反馈机制。在每一个block中,前向传播和反向传播都有密集的连接。信息留被最大化利用,特征图通过注意力机制反复提炼。本文证明了该网络体系结构可以抑制背景和噪声的激活,并在不依靠数据扩充的情况下获得有竞争力的结果。
总结,本文的贡献为:
1.提出了一种新的CliqueNet,(结构特点,优势,结果证明)
2.采用了一种多尺度特征策略,在有额外反馈连接的情况下,有效避免了参数的逐步增加
3.在一些数据集上做了实验证明了本文提出的网络的优越性
【相关工作】
一些有大容量的深度网络已经被提出了,为了拓宽网络,GoogleNet中的Inception模块融合了不同尺寸的特征,构建了多尺度表达。Multi-column [6] nets 和 Deeply-Fused Nets 使用了融合策略,WRN增加了网络的宽度减少了深度。但是,单纯扩展网络很容易耗费更多的运行时间和内存。为了拓展网络,跳层连接和短连接被广泛采用减少训练难度。另一篇论文指出,ResNet中的很多层并没有被用到,导致参数存在冗余。所以他们随机丢掉一些层来降低训练难度,并且得到了更好的表现。为了进一步增加信息流,DenseNet通过级联操作代替残差块中的恒等映射,以便可以保持旧特征复用的同时加强新特征学习,根据这种观点,提出了(DPN)来结合残差路径和密集连接路径的优点。
残差路径和密集连接路径思路都是与可循环的传播有关,他们的成功也归因于循环结构和迭代提炼。CliqueNet和这些网络的不同在于,迭代机制存在与传播的每一步,块中的所有层都参与循环,以使滤波器更有效率的通信,并且块同时充当信息载体和精简器的角色。
近期很多在注意力机制上的研究也取得了很好的效果,通常,可以通过创建优化问题[1],在空间或通道上加权激活次数[3、16]并引入反馈连接[39、35、42]来获得视觉关注。在feedback Network论文中,模型通过反馈连接作出更精确的预测,下一个决策的输入取决于上一个决策的输出,实验证明这样自上而下的传播可以更好的提炼低层次的特征,提高分类表现,尤其对于有噪声的数据集。但是,如何建立适当的关注机制,加强各层之间的监督,仍有待探索。
还有一些研究关注于在递归神经网络上设计注意力机制,但是它们都不包含反馈链接。cliqueNet通过交替更新做到了真正的循环。交替更新已经在优化理论里被证明是一个重要的方法,但是还没有在深度学习领域被使用。本文首次使用交替更新来再更新之前的卷积层,通过多次更新形成了循环。
【网路核心】
cliqueNet主要由两部分组成:1.Clique Block,这部分也就是交替更新提炼特征的部分 2.多尺寸特征策略,这部分用来使参数应用更有效率。
【Clique Block】
前面已经简单讲过了,为什么每一层都是当前block其他所有层的输入和输出。对于一个拥有5层的block,刚才描述的过程可以用以下表格来概括。
可用公式表达:
这个公式意思就是,除了第一次loop是从上直接更新到下一层的,第k次loop(k>=2),第i层是由i后面的m层(m>i)的上一次loop的输出,和i前面的l层(l<i)本次loop的输出共同计算得到。相邻两层之间计算时的权重(Wij)是更新后复用的。每一层都接受来自最近更新的层的反馈信息。
由于每次传播带来的自上而下的细化,它实现了空间注意力机制。(?)
Clique Block的部分就是这么简单,很好理解~下面进入第二部分,multi-scale feature strategy , 通过这个策略避免的参数的急剧增加。
【multi-scale feature strategy】
stage-I用来初始化各层的参数,stage-II用来重复提炼;stage-II通过注意力提炼后吸收了更多高级视觉信息,把它和当前block的输入一起作为作为当前block的特征,通过全局池化后再送到loss function里。只有stage-II的特征会作为输入送到下一个block,如图所示。
通过这种方式,最终表达可以包含多尺寸的特征图的信息,每一个block里的纬度也不会增加。因为更多的stage会带来更高的计算量,增加模型的复杂度,所以这边只选取前两个statge。
【一些技巧】
trainsition layers: 可以看到上图Input先送入一层Transition,输出再送入Clique Block。这边的transition主要用了在 [Squeeze-and-excitation networks]中提出的channelwise attention mechanism。
通过右边的分支对channel做一个attention,得到一个权重。
Bottleneck and compression:每个block里neck结构为:1x1 + middle layer + 3x3;输出在全局池化之间会经历一层1x1的卷积 进行压缩。
【实操】
有两个结构超参数需要调整,block的数量T,每层卷积层过滤器的数量k。
block之间用transition连接,其中包括1x1的卷积,再接一层2x2的全局池化,所有卷积由一组运算组成:BN,Relu,conv。所有block的特征输出在全局池化后串联起来,接一层softmax的FC。例如CIFAR和SVHN上,一共3个block,每个输出feature map size为32x32, 16x16, 8x8。 其他不展开讲了,上图模型结构为在ImageNet上做实验的结构。
【训练细节】
本文使用具有0.9 Nesterov动量和10−4权重衰减的随机梯度下降(SGD)训练模型。
全卷积层的参数初始化参考了【Understanding the difficulty of training deep feedforward neural networks】的Xavier initialization。
CIFAR和SVHN上训练了340个epochs, batchsize为64,lr初始值为0.1,在训练50% 和 75%时分别*0.1。每层卷积后面加了一层rate为0.2的dropout。
ImageNet上训练了100个eopch,lr初始值为0.1,30,60,90步时降低10倍,因为GPU受限,batchsize为160。
实验结果对比略过。
【扩展讨论】
为了更好的分析循环反馈机制和多尺寸特征策略,本文将基于预训练模型的特征图和参数视觉化,以得到更好的理解。
我们从ImageNet验证集中选择了三张具有复杂背景的输入图像,并分别在Stage-I和Stage-II中可视化其具有最高平均激活幅度的特征图。可以观察到,与阶段I相比,阶段II中的特征图减少了周围物体的激活,并将更多注意力集中在目标区域上。
这个主要解释是:stage-II阶段的feature map总是会接受最近更新的更高级别的视觉信息的更新,空间注意机制让卷积层重复的提炼,能够有抑制北京和噪声,集中注意在识别目标上。
三、总结
总结就是,这片论文提出了一种新的网络,这种网络在每个block里交替更新每个集团,使每一层都是当前block里其他层的输入输出,信息流得到了最大化利用;参数在传播过程中进行循环,并产生了多级特征,通过视觉化发现stage-II的特征有效抑制了噪声和背景;同时,通过多尺寸特征策略,增加了参数的使用效率。通过不停更新固定数量的参数来表示空间更深的信息,结合反馈连接实现注意力机制。
以总结博客的方式阅读论文,比光看还是花了很多时间在细节上,接下来继续吧~