导航:首页 > 网络营销 > 残差网络是加在哪里的

残差网络是加在哪里的

发布时间:2022-09-06 19:09:13

‘壹’ ResNet网络

ResNet (Resial Neural Network,残差网络)由微软研究院何凯明等人提出的,通过在深度神经网络中加入残差单元(Resial Unit)使得训练深度比以前更加高效。ResNet在2015年的ILSVRC比赛中夺得冠军,ResNet的结构可以极快的加速超深神经网络的训练,模型准确率也有非常大的提升。

在ResNet之前,瑞士教授Schimidhuber提出了Highway Network,其原理与ResNet非常相似。通常认为神经网络的深度对其性能非常重要,但是网络越深训练越困难,Highway Network的目标就是解决极深的神经网络难以训练的问题。

Highway Network相当于修改了每一层激活函数,此前激活函数只是对输入做一次非线性变换y=H(x, Wh), 而Highway Network则允许保留一部分比例的原始输入x,即y=H(x, Wh)* T(x , Wt)+x*C(x, Wc),其中T为变换系数,C为保留系数,论文中令C=1-T。这样前面一层的信息,有一定比例可以不经过矩阵乘法和非线性变换,直接传输到下一层,仿佛一条信息高速公路,因此得名Highway Network。

结果显示,B比A略好,这是因为A中的零填充确实没有残差学习。而C比B稍好,这是由于投影快捷连接引入了额外参数。但A、B、C之间的细微差异表明投影连接对于解决退化问题不是至关重要的,而不/少使用投影连接可以减少内存/时间复杂性和模型大小。而且无参数恒等快捷连接对于瓶颈架构(3层残差学习单元)尤为重要,因为瓶颈架构中层具有较小的输入输出,快捷连接是连接到两个高维端,此时恒等快捷连接无需参数,而使用投影的话则会显示时间和模型复杂度加倍。因此,恒等快捷连接可以为瓶颈设计得到更有效的模型。

最后,作者尝试了更深的1000层以上的神经网络,发现神经网络仍然能够较好的学习,但是其测试误差比100多层的残差网络要差,而训练误差则与100多层的残差网络相似,作者认为这可能是由于过拟合导致的,可通过加大正则化来解决这一问题。

在ResNet V1中,作者研究通过加入残差单元使得训练深度达到上百层的神经网络成为可能,解决了梯度消失/爆炸的问题。而在ResNet V2中作者进一步证明了恒等映射(Identity mapping)的重要性。同时作者还提出了一种新的残差单元(采用了预激活)使得训练变得更简单,同时还提高了模型的泛化能力。

在ResNet V2中,作者提出了不止在残差单元内部,而是在整个神经网络中都创建了‘直接’的计算传播路径。在ResNet V1中,残差学习单元的

上式同样表明了在一个mini-batch中不可能出现梯度消失的现象,因为上式求导的第二部分对于一个mini-batch来说,不可能所有样本其导数都为-1,因此,可能会出现权重很小的情况,但是不会出现梯度消失的情况。

通过研究这些不同的快捷连接,作者发现大部分快捷连接方式无法很好地收敛,其中很大部分是由于使用这些快捷连接后或多或少会出现梯度消失或者梯度爆炸的现象,最后结果显示恒等映射效果最好。

虽然恒等映射在这些方法中表写结果最好,仍需引起注意的是1×1的卷积捷径连接引入了更多的参数,本应该比恒等捷径连接具有更加强大的表达能力。事实上,shortcut-only gating 和1×1的卷积涵盖了恒等捷径连接的解空间(即,他们能够以恒等捷径连接的形式进行优化)。然而,它们的训练误差比恒等捷径连接的训练误差要高得多,这表明了这些模型退化问题的原因是优化问题,而不是表达能力的问题。

在上图b中,采用先加后BN再激活的方法,此时f(x)就包含了BN和ReLU。这样的结果比原始a要差。这主要是因为BN层改变了流经快捷连接的信号,阻碍了信息的传递。

在c中,ReLU在相加之前,此时f(x)=x,为恒等映射。此时残差单元中的F(x)输出经由ReLU后变为非负,然而一个“残差”函数的输出应该是(−∞,+∞) 的。造成的结果就是,前向传递的信号是单调递增的。这会影响表达能力,结果也变得更差了。

结果显示,只使用ReLU预激活(d)的结果与原始ResNet结果很接近,这个与ReLU层不与BN层连接使用,因此无法获得BN所带来的好处。而当BN和ReLU都使用在预激活上时(e),结果得到了可观的提升。

预激活的影响有两个方面:第一,由于f(x)也是恒等映射,相比于V1优化变得更加简单;第二,在预激活中使用BN能提高模型的正则化。

对于f(x)为恒等映射的好处:一方面若使用f= ReLU,如果信号是负的时候会造成一定的影响,无法传递有用的负信号,而当残差单元很多时,这个影响将会变得尤为突出;另一方面当f是一个恒等映射时,信号在两个单元间能够很直接的传递。

在ResNet V1中作者提出了残差学习单元,并从理论和实验上证明使用直连的shortcuts有助于解决深度达到上百层的神经网络的训练问题。而在ResNet V2中作者证明了在shortcuts中使用直接映射(即H(x) = h(x) + F(x)中h(x) = x)得到的效果最好。在ResNext中作者将bottleneck拆分成多个分支,提出了神经网络中的第三个维度(另外两个维度分别为depth,神经网络层数深度,width,宽度,channel数),命名为 Cardinality ,并在多个数据集中证明了将bottleneck拆分能够降低训练错误率和提高准确率。

ResNext的灵感来源于VGG/ResNet和Inception:(1)在VGG、ResNet中,作者使用了相同结构的卷积层进行了堆叠,构建了层数很深但是结构简单的神经网络;(2)而在Inception中,提出了一种叫做 split-transform-merge 的策略,将输入(采用1x1 卷积核)分裂为几个低维 embedding,再经过一系列特定卷积层的变换,最后连接在一起。

而在ResNet中,作者将原ResNet bottleneck中的一条path拆分为多个分支(multi branch),以此分支数量提出神经网络中的第三个重要维度——Cardinality。这一想法结合了VGG中的相同结构堆叠和Inception中的split-transform-merge策略,即如上图所示,每个bottleneck 拆分为多个分支进行堆叠,这些分支的结构相同(这里借鉴了VGG的思想),而具体到分支的结构时又采用了Inception的split-transform-merge策略。与Inception不同的是Inception的每个分支结构都是需要认为的设计,而在ResNext中每个分支结构都相同。最终每个bottleneck的输出就变成了:

这些所有的bottlenecks结构都遵循两个原则:

作者提出了 三种效果相同的ResNext的表示方法,如下图所示:

其中a,b 结构相似,只是在merge这一步的地方不同,而c则借鉴了AlexNet中分组卷积的思想,将输入和输出都分为多个组。

作者首先评估权衡了cardinality和width的关系。

接着,作者又评估了使用增加cardinality和depth/width来增加模型复杂度后的效果:

最后,作者还研究了shortcuts对于ResNext的重要性,在ResNet-50中,不使用shortcuts准确率下降了7%,而在ResNext-50中准确率也下降了4%,说明shortcuts对于残差网络来说确实是非常重要的。

简言之,增加cardinality比增加depth和width效果要好,同时,shortcuts对于模型的准确率也是至关重要的。

参考:
Deep Resial Learning for Image Recognition.
Aggregated Resial Transformations for Deep Neural Networks.
Identity Mappings in Deep Resial Networks.
ResNet论文翻译——中文版
Identity Mappings in Deep Resial Networks(译)
TensorFlow实现经典卷积网络. 黄文坚,唐源

‘贰’ 深度残差网络是卷积网络的一种吗

深度残差网络Resnet实际上就是卷积神经网络的一种,只不过其结构比较特殊,对于非常深的网络优化的比较好

‘叁’ 参差模块原理

残差模块的原理是将一个映射的学习转化为一个恒等映射和一个残差之和的学习。
残差网络,顾名思义,其精髓在于残差模块,整个网络则由多个残差模块构成。
残差模块的主要特点是把两层卷积结果与输入信号的和作为输出信号,这正是残差网络的主要特色。

‘肆’ 深度学习之卷积神经网络经典模型

LeNet-5模型 在CNN的应用中,文字识别系统所用的LeNet-5模型是非常经典的模型。LeNet-5模型是1998年,Yann LeCun教授提出的,它是第一个成功大规模应用在手写数字识别问题的卷积神经网络,在MNIST数据集中的正确率可以高达99.2%。

下面详细介绍一下LeNet-5模型工作的原理。
LeNet-5模型一共有7层,每层包含众多参数,也就是卷积神经网络中的参数。虽然层数只有7层,这在如今庞大的神经网络中可是说是非常少的了,但是包含了卷积层,池化层,全连接层,可谓麻雀虽小五脏俱全了。为了方便,我们把卷积层称为C层,下采样层叫做下采样层。
首先,输入层输入原始图像,原始图像被处理成32×32个像素点的值。然后,后面的隐层计在卷积和子抽样之间交替进行。C1层是卷积层,包含了六个特征图。每个映射也就是28x28个神经元。卷积核可以是5x5的十字形,这28×28个神经元共享卷积核权值参数,通过卷积运算,原始信号特征增强,同时也降低了噪声,当卷积核不同时,提取到图像中的特征不同;C2层是一个池化层,池化层的功能在上文已经介绍过了,它将局部像素值平均化来实现子抽样。
池化层包含了六个特征映射,每个映射的像素值为14x14,这样的池化层非常重要,可以在一定程度上保证网络的特征被提取,同时运算量也大大降低,减少了网络结构过拟合的风险。因为卷积层与池化层是交替出现的,所以隐藏层的第三层又是一个卷积层,第二个卷积层由16个特征映射构成,每个特征映射用于加权和计算的卷积核为10x10的。第四个隐藏层,也就是第二个池化层同样包含16个特征映射,每个特征映射中所用的卷积核是5x5的。第五个隐藏层是用5x5的卷积核进行运算,包含了120个神经元,也是这个网络中卷积运算的最后一层。
之后的第六层便是全连接层,包含了84个特征图。全连接层中对输入进行点积之后加入偏置,然后经过一个激活函数传输给输出层的神经元。最后一层,也就是第七层,为了得到输出向量,设置了十个神经元来进行分类,相当于输出一个包含十个元素的一维数组,向量中的十个元素即0到9。
AlexNet模型
AlexNet简介
2012年Imagenet图像识别大赛中,Alext提出的alexnet网络模型一鸣惊人,引爆了神经网络的应用热潮,并且赢得了2012届图像识别大赛的冠军,这也使得卷积神经网络真正意义上成为图像处理上的核心算法。上文介绍的LeNet-5出现在上个世纪,虽然是经典,但是迫于种种复杂的现实场景限制,只能在一些领域应用。不过,随着SVM等手工设计的特征的飞速发展,LeNet-5并没有形成很大的应用状况。随着ReLU与dropout的提出,以及GPU带来算力突破和互联网时代大数据的爆发,卷积神经网络带来历史的突破,AlexNet的提出让深度学习走上人工智能的最前端。
图像预处理
AlexNet的训练数据采用ImageNet的子集中的ILSVRC2010数据集,包含了1000类,共1.2百万的训练图像,50000张验证集,150000张测试集。在进行网络训练之前我们要对数据集图片进行预处理。首先我们要将不同分辨率的图片全部变成256x256规格的图像,变换方法是将图片的短边缩放到 256像素值,然后截取长边的中间位置的256个像素值,得到256x256大小的图像。除了对图片大小进行预处理,还需要对图片减均值,一般图像均是由RGB三原色构成,均值按RGB三分量分别求得,由此可以更加突出图片的特征,更方便后面的计算。
此外,对了保证训练的效果,我们仍需对训练数据进行更为严苛的处理。在256x256大小的图像中,截取227x227大小的图像,在此之后对图片取镜像,这样就使得原始数据增加了(256-224)x(256-224)x2= 2048倍。最后对RGB空间做PCA,然后对主成分做(0,0.1)的高斯扰动,结果使错误率下降1%。对测试数据而言,抽取以图像4个角落的大小为224224的图像,中心的224224大小的图像以及它们的镜像翻转图像,这样便可以获得10张图像,我们便可以利用softmax进行预测,对所有预测取平均作为最终的分类结果。
ReLU激活函数
之前我们提到常用的非线性的激活函数是sigmoid,它能够把输入的连续实值全部确定在0和1之间。但是这带来一个问题,当一个负数的绝对值很大时,那么输出就是0;如果是绝对值非常大的正数,输出就是1。这就会出现饱和的现象,饱和现象中神经元的梯度会变得特别小,这样必然会使得网络的学习更加困难。此外,sigmoid的output的值并不是0为均值,因为这会导致上一层输出的非0均值信号会直接输入到后一层的神经元上。所以AlexNet模型提出了ReLU函数,公式:f(x)=max(0,x)f(x)=max(0,x)。

用ReLU代替了Sigmoid,发现使用 ReLU 得到的SGD的收敛速度会比 sigmoid快很多,这成了AlexNet模型的优势之一。
Dropout
AlexNet模型提出了一个有效的模型组合方式,相比于单模型,只需要多花费一倍的时间,这种方式就做Dropout。在整个神经网络中,随机选取一半的神经元将它们的输出变成0。这种方式使得网络关闭了部分神经元,减少了过拟合现象。同时训练的迭代次数也得以增加。当时一个GTX580 GPU只有3GB内存,这使得大规模的运算成为不可能。但是,随着硬件水平的发展,当时的GPU已经可以实现并行计算了,并行计算之后两块GPU可以互相通信传输数据,这样的方式充分利用了GPU资源,所以模型设计利用两个GPU并行运算,大大提高了运算效率。
模型分析

AlexNet模型共有8层结构,其中前5层为卷积层,其中前两个卷积层和第五个卷积层有池化层,其他卷积层没有。后面3层为全连接层,神经元约有六十五万个,所需要训练的参数约六千万个。
图片预处理过后,进过第一个卷积层C1之后,原始的图像也就变成了55x55的像素大小,此时一共有96个通道。模型分为上下两块是为了方便GPU运算,48作为通道数目更加适合GPU的并行运算。上图的模型里把48层直接变成了一个面,这使得模型看上去更像一个立方体,大小为55x55x48。在后面的第二个卷积层C2中,卷积核的尺寸为5x5x48,由此再次进行卷积运算。在C1,C2卷积层的卷积运算之后,都会有一个池化层,使得提取特征之后的特征图像素值大大减小,方便了运算,也使得特征更加明显。而第三层的卷积层C3又是更加特殊了。第三层卷积层做了通道的合并,将之前两个通道的数据再次合并起来,这是一种串接操作。第三层后,由于串接,通道数变成256。全卷积的卷积核尺寸也就变成了13×13×25613×13×256。一个有4096个这样尺寸的卷积核分别对输入图像做4096次的全卷积操作,最后的结果就是一个列向量,一共有4096个数。这也就是最后的输出,但是AlexNet最终是要分1000个类,所以通过第八层,也就是全连接的第三层,由此得到1000个类输出。
Alexnet网络中各个层发挥了不同的作用,ReLU,多个CPU是为了提高训练速度,重叠pool池化是为了提高精度,且不容易产生过拟合,局部归一化响应是为了提高精度,而数据增益与dropout是为了减少过拟合。
VGG net
在ILSVRC-2014中,牛津大学的视觉几何组提出的VGGNet模型在定位任务第一名和分类任务第一名[[i]]。如今在计算机视觉领域,卷积神经网络的良好效果深得广大开发者的喜欢,并且上文提到的AlexNet模型拥有更好的效果,所以广大从业者学习者试图将其改进以获得更好地效果。而后来很多人经过验证认为,AlexNet模型中所谓的局部归一化响应浪费了计算资源,但是对性能却没有很大的提升。VGG的实质是AlexNet结构的增强版,它侧重强调卷积神经网络设计中的深度。将卷积层的深度提升到了19层,并且在当年的ImageNet大赛中的定位问题中获得了第一名的好成绩。整个网络向人们证明了我们是可以用很小的卷积核取得很好地效果,前提是我们要把网络的层数加深,这也论证了我们要想提高整个神经网络的模型效果,一个较为有效的方法便是将它的深度加深,虽然计算量会大大提高,但是整个复杂度也上升了,更能解决复杂的问题。虽然VGG网络已经诞生好几年了,但是很多其他网络上效果并不是很好地情况下,VGG有时候还能够发挥它的优势,让人有意想不到的收获。

与AlexNet网络非常类似,VGG共有五个卷积层,并且每个卷积层之后都有一个池化层。当时在ImageNet大赛中,作者分别尝试了六种网络结构。这六种结构大致相同,只是层数不同,少则11层,多达19层。网络结构的输入是大小为224*224的RGB图像,最终将分类结果输出。当然,在输入网络时,图片要进行预处理。
VGG网络相比AlexNet网络,在网络的深度以及宽度上做了一定的拓展,具体的卷积运算还是与AlexNet网络类似。我们主要说明一下VGG网络所做的改进。第一点,由于很多研究者发现归一化层的效果并不是很好,而且占用了大量的计算资源,所以在VGG网络中作者取消了归一化层;第二点,VGG网络用了更小的3x3的卷积核,而两个连续的3x3的卷积核相当于5x5的感受野,由此类推,三个3x3的连续的卷积核也就相当于7x7的感受野。这样的变化使得参数量更小,节省了计算资源,将资源留给后面的更深层次的网络。第三点是VGG网络中的池化层特征池化核改为了2x2,而在AlexNet网络中池化核为3x3。这三点改进无疑是使得整个参数运算量下降,这样我们在有限的计算平台上能够获得更多的资源留给更深层的网络。由于层数较多,卷积核比较小,这样使得整个网络的特征提取效果很好。其实由于VGG的层数较多,所以计算量还是相当大的,卷积层比较多成了它最显着的特点。另外,VGG网络的拓展性能比较突出,结构比较简洁,所以它的迁移性能比较好,迁移到其他数据集的时候泛化性能好。到现在为止,VGG网络还经常被用来提出特征。所以当现在很多较新的模型效果不好时,使用VGG可能会解决这些问题。
GoogleNet
谷歌于2014年Imagenet挑战赛(ILSVRC14)凭借GoogleNet再次斩获第一名。这个通过增加了神经网络的深度和宽度获得了更好地效果,在此过程中保证了计算资源的不变。这个网络论证了加大深度,宽度以及训练数据的增加是现有深度学习获得更好效果的主要方式。但是增加尺寸可能会带来过拟合的问题,因为深度与宽度的加深必然会带来过量的参数。此外,增加网络尺寸也带来了对计算资源侵占过多的缺点。为了保证计算资源充分利用的前提下去提高整个模型的性能,作者使用了Inception模型,这个模型在下图中有展示,可以看出这个有点像金字塔的模型在宽度上使用并联的不同大小的卷积核,增加了卷积核的输出宽度。因为使用了较大尺度的卷积核增加了参数。使用了1*1的卷积核就是为了使得参数的数量最少。

Inception模块
上图表格为网络分析图,第一行为卷积层,输入为224×224×3 ,卷积核为7x7,步长为2,padding为3,输出的维度为112×112×64,这里面的7x7卷积使用了 7×1 然后 1×7 的方式,这样便有(7+7)×64×3=2,688个参数。第二行为池化层,卷积核为3×33×3,滑动步长为2,padding为 1 ,输出维度:56×56×64,计算方式:1/2×(112+2×1?3+1)=56。第三行,第四行与第一行,第二行类似。第 5 行 Inception mole中分为4条支线,输入均为上层产生的 28×28×192 结果:第 1 部分,1×1 卷积层,输出大小为28×28×64;第 2 部分,先1×1卷积层,输出大小为28×28×96,作为输入进行3×3卷积层,输出大小为28×28×128;第 3部分,先1×1卷积层,输出大小为28×28×32,作为输入进行3×3卷积层,输出大小为28×28×32;而第3 部分3×3的池化层,输出大小为输出大小为28×28×32。第5行的Inception mole会对上面是个结果的输出结果并联,由此增加网络宽度。
ResNet
2015年ImageNet大赛中,MSRA何凯明团队的ResialNetworks力压群雄,在ImageNet的诸多领域的比赛中上均获得了第一名的好成绩,而且这篇关于ResNet的论文Deep Resial Learning for Image Recognition也获得了CVPR2016的最佳论文,实至而名归。
上文介绍了的VGG以及GoogleNet都是增加了卷积神经网络的深度来获得更好效果,也让人们明白了网络的深度与广度决定了训练的效果。但是,与此同时,宽度与深度加深的同时,效果实际会慢慢变差。也就是说模型的层次加深,错误率提高了。模型的深度加深,以一定的错误率来换取学习能力的增强。但是深层的神经网络模型牺牲了大量的计算资源,学习能力提高的同时不应当产生比浅层神经网络更高的错误率。这个现象的产生主要是因为随着神经网络的层数增加,梯度消失的现象就越来越明显。所以为了解决这个问题,作者提出了一个深度残差网络的结构Resial:

上图就是残差网络的基本结构,可以看出其实是增加了一个恒等映射,将原本的变换函数H(x)转换成了F(x)+x。示意图中可以很明显看出来整个网络的变化,这样网络不再是简单的堆叠结构,这样的话便很好地解决了由于网络层数增加而带来的梯度原来越不明显的问题。所以这时候网络可以做得很深,到目前为止,网络的层数都可以上千层,而能够保证很好地效果。并且,这样的简单叠加并没有给网络增加额外的参数跟计算量,同时也提高了网络训练的效果与效率。
在比赛中,为了证明自己观点是正确的,作者控制变量地设计几个实验。首先作者构建了两个plain网络,这两个网络分别为18层跟34层,随后作者又设计了两个残差网络,层数也是分别为18层和34层。然后对这四个模型进行控制变量的实验观察数据量的变化。下图便是实验结果。实验中,在plain网络上观测到明显的退化现象。实验结果也表明,在残差网络上,34层的效果明显要好于18层的效果,足以证明残差网络随着层数增加性能也是增加的。不仅如此,残差网络的在更深层的结构上收敛性能也有明显的提升,整个实验大为成功。

除此之外,作者还做了关于shortcut方式的实验,如果残差网络模块的输入输出维度不一致,我们如果要使维度统一,必须要对维数较少的进行増维。而增维的最好效果是用0来填充。不过实验数据显示三者差距很小,所以线性投影并不是特别需要。使用0来填充维度同时也保证了模型的复杂度控制在比较低的情况下。
随着实验的深入,作者又提出了更深的残差模块。这种模型减少了各个层的参数量,将资源留给更深层数的模型,在保证复杂度很低的情况下,模型也没有出现梯度消失很明显的情况,因此目前模型最高可达1202层,错误率仍然控制得很低。但是层数如此之多也带来了过拟合的现象,不过诸多研究者仍在改进之中,毕竟此时的ResNet已经相对于其他模型在性能上遥遥领先了。
残差网络的精髓便是shortcut。从一个角度来看,也可以解读为多种路径组合的一个网络。如下图:

ResNet可以做到很深,但是从上图中可以体会到,当网络很深,也就是层数很多时,数据传输的路径其实相对比较固定。我们似乎也可以将其理解为一个多人投票系统,大多数梯度都分布在论文中所谓的effective path上。
DenseNet
在Resnet模型之后,有人试图对ResNet模型进行改进,由此便诞生了ResNeXt模型。

这是对上面介绍的ResNet模型结合了GoogleNet中的inception模块思想,相比于Resnet来说更加有效。随后,诞生了DenseNet模型,它直接将所有的模块连接起来,整个模型更加简单粗暴。稠密相连成了它的主要特点。

我们将DenseNet与ResNet相比较:

从上图中可以看出,相比于ResNet,DenseNet参数量明显减少很多,效果也更加优越,只是DenseNet需要消耗更多的内存。
总结
上面介绍了卷积神经网络发展史上比较着名的一些模型,这些模型非常经典,也各有优势。在算力不断增强的现在,各种新的网络训练的效率以及效果也在逐渐提高。从收敛速度上看,VGG>Inception>DenseNet>ResNet,从泛化能力来看,Inception>DenseNet=ResNet>VGG,从运算量看来,Inception<DenseNet< ResNet<VGG,从内存开销来看,Inception<ResNet< DenseNet<VGG。在本次研究中,我们对各个模型均进行了分析,但从效果来看,ResNet效果是最好的,优于Inception,优于VGG,所以我们第四章实验中主要采用谷歌的Inception模型,也就是GoogleNet。

‘伍’ 十分钟一起学会ResNet残差网络

深度卷积网络自然的整合了低中高不同层次的特征,特征的层次可以靠加深网络的层次来丰富。从而,在构建卷积网络时,网络的深度越高,可抽取的特征层次就越丰富。所以一般我们会倾向于使用更深层次的网络结构,以便取得更高层次的特征。但是在使用深层次的网络结构时我们会遇到两个问题,梯度消失,梯度爆炸问题和网络退化的问题。

但是当使用更深层的网络时,会发生梯度消失、爆炸问题,这个问题很大程度通过标准的初始化和正则化层来基本解决,这样可以确保几十层的网络能够收敛,但是随着网络层数的增加,梯度消失或者爆炸的问题仍然存在。

还有一个问题就是网络的退化,举个例子,假设已经有了一个最优化的网络结构,是18层。当我们设计网络结构的时候,我们并不知道具体多少层次的网络时最优化的网络结构,假设设计了34层网络结构。那么多出来的16层其实是冗余的,我们希望训练网络的过程中,模型能够自己训练这五层为恒等映射,也就是经过这层时的输入与输出完全一样。但是往往模型很难将这16层恒等映射的参数学习正确,那么就一定会不比最优化的18层网络结构性能好,这就是随着网络深度增加,模型会产生退化现象。它不是由过拟合产生的,而是由冗余的网络层学习了不是恒等映射的参数造成的。

ResNet是在2015年有何凯明,张翔宇,任少卿,孙剑共同提出的,ResNet使用了一个新的思想,ResNet的思想是假设我们涉及一个网络层,存在最优化的网络层次,那么往往我们设计的深层次网络是有很多网络层为冗余层的。那么我们希望这些冗余层能够完成恒等映射,保证经过该恒等层的输入和输出完全相同。具体哪些层是恒等层,这个会有网络训练的时候自己判断出来。将原网络的几层改成一个残差块,残差块的具体构造如下图所示:

可以看到X是这一层残差块的输入,也称作F(x)为残差,x为输入值,F(X)是经过第一层线性变化并激活后的输出,该图表示在残差网络中,第二层进行线性变化之后激活之前,F(x)加入了这一层输入值X,然后再进行激活后输出。在第二层输出值激活前加入X,这条路径称作shortcut连接。

我们发现,假设该层是冗余的,在引入ResNet之前,我们想让该层学习到的参数能够满足h(x)=x,即输入是x,经过该冗余层后,输出仍然为x。但是可以看见,要想学习h(x)=x恒等映射时的这层参数时比较困难的。ResNet想到避免去学习该层恒等映射的参数,使用了如上图的结构,让h(x)=F(x)+x;这里的F(x)我们称作残差项,我们发现,要想让该冗余层能够恒等映射,我们只需要学习F(x)=0。学习F(x)=0比学习h(x)=x要简单,因为一般每层网络中的参数初始化偏向于0,这样在相比于更新该网络层的参数来学习h(x)=x,该冗余层学习F(x)=0的更新参数能够更快收敛,如图所示:

假设该曾网络只经过线性变换,没有bias也没有激活函数。我们发现因为随机初始化权重一般偏向于0,那么经过该网络的输出值为[0.6 0.6],很明显会更接近与[0 0],而不是[2 1],相比与学习h(x)=x,模型要更快到学习F(x)=0。

并且ReLU能够将负数激活为0,过滤了负数的线性变化,也能够更快的使得F(x)=0。这样当网络自己决定哪些网络层为冗余层时,使用ResNet的网络很大程度上解决了学习恒等映射的问题,用学习残差F(x)=0更新该冗余层的参数来代替学习h(x)=x更新冗余层的参数。

这样当网络自行决定了哪些层为冗余层后,通过学习残差F(x)=0来让该层网络恒等映射上一层的输入,使得有了这些冗余层的网络效果与没有这些冗余层的网络效果相同,这样很大程度上解决了网络的退化问题。

我们发现很深的网络层,由于参数初始化一般更靠近0,这样在训练的过程中更新浅层网络的参数时,很容易随着网络的深入而导致梯度消失,浅层的参数无法更新。

可以看到,假设现在需要更新 参数因为随机初始化偏向于0,通过链式求导我们会发现, 相乘会得到更加接近于0的数,那么所求的这个 的梯度就接近于0,也就产生了梯度消失的现象。

ResNet最终更新某一个节点的参数时,由于 ,由于链式求导后的结果如图所示,不管括号内右边部分的求导参数有多小,因为左边的1的存在,并且将原来的链式求导中的连乘变成了连加状态(正是 ),都能保证该节点参数更新不会发生梯度消失或梯度爆炸现象。

这样ResNet在解决了阻碍更深层次网络优化问题的两个重要问题后,ResNet就能训练更深层次几百层乃至几千层的网络并取得更高的精确度了。

这里是应用了ResNet的网络图,这里如果遇到了h(x)=F(x)+x中x的维度与F(x)不同的维度时,我们需要对identity加入Ws来保持Ws*x的维度与F(x)的维度一致。

x与F(x)维度相同时:

x与F(x)维度不同时:

下边是ResNet的网络结构图:

使用1*1卷积减少参数和计算量:

如果用了更深层次的网络时,考虑到计算量,会先用1 * 1的卷积将输入的256维降到64维,然后通过1*1恢复。这样做的目的是减少参数量和计算量。

左图是ResNet34,右图是ResNet50/101/152。这一个模块称作building block,右图称之为bottleneck design。在面对50,101,152层的深层次网络,意味着有很大的计算量,因此这里使用1 * 1卷积先将输入进行降维,然后再经过3 * 3卷积后再用 卷积进行升维。使用1*1卷积的好处是大大降低参数量计算量。

通过上述的学习,你应该知道了,现如今大家普遍认为更好的网络是建立在更宽更深的网络基础上,当你需要设计一个深度网络结构时,你永远不知道最优的网络层次结构是多少层,一旦你设计的很深入了,那势必会有很多冗余层,这些冗余层一旦没有成功学习恒等变换 ,那就会影响网络的预测性能,不会比浅层的网络学习效果好从而产生退化问题。

ResNet的过人之处,是他很大程度上解决了当今深度网络头疼的网络退化问题和梯度消失问题。使用残差网络结构 代替原来的没有shortcut连接的 ,这样更新冗余层的参数时需要学习 比学习 要容易得多。而shortcut连接的结构也保证了反向传播更新参数时,很难有梯度为0的现象发生,不会导致梯度消失。

这样,ResNet的构建,使我们更朝着符合我们的直觉走下去,即越深的网络对于高级抽象特征的提取和网络性能更好,不用在担心随着网络的加深发生退化问题了。

近段时间,准备持续发表一些CNN常见的网络模型讲解。好了,今天的十分钟就带你一起学会ResNet,下次的十分钟我们再见。

‘陆’ 注意力机制加在什么位置

注意力机制可以加在编码层和解码层之间,甚至可以加在Auto-Encoder里面。

此外,深度残差收缩网络是一种特殊的注意力机制算法,实现了注意力机制下的软阈值化;把注意力机制嵌入到了残差模块里面。

视觉注意力机制:

视觉注意力机制是人类视觉所特有的大脑信号处理机制。人类视觉通过快速扫描全局图像,获得需要重点关注的目标区域,也就是一般所说的注意力焦点,而后对这一区域投入更多注意力资源,以获取更多所需要关注目标的细节信息,而抑制其他无用信息。

这是人类利用有限的注意力资源从大量信息中快速筛选出高价值信息的手段,是人类在长期进化中形成的一种生存机制,人类视觉注意力机制极大地提高了视觉信息处理的效率与准确性。

‘柒’ SENet及对轻量级网络的一些理解

转自: https://zhuanlan.hu.com/p/71995304

受限于硬件的羸弱,深度学习在上世纪的发展一直是不温不火,直到2012年,Alexnet横空出世,深度学习才开始前所未有的大发展。随着技术的发展,卷积神经网络逐渐取代了之前全连接的神经网络,成为深度学习领域的主流算法。

卷积神经网络的优势在于能够更好的提取特征和权值共享,自Alexnet之后,VGG又提出了神经网络的深度越深,效果越好的思想。自此深度成为构建网络时所考虑的第一要素。此时,又有人提出了Inception模型,这是人们在关注深度之外第一次关注网络的时间复杂度和空间复杂度。

图1

如图1所示,就是Inception v1的模型,该模型主要利用了1x1卷积进行了降维处理,达到了减小网络参数量和计算量的效果。在接下来的改进中,Inception又提出了利用两层3x3网络取代一层5x5网络这样的奇思妙想,进一步达到了减轻网络复杂度的作用。

如图2所示,就是5x5卷积变成3x3卷积的示意图。

图2

从此之后,轻量级网络开始盛行。诸如Squeezenet,Mobilenet等都是轻量级网络中的杰出代表。

自Inception之后,人们已经不再通过暴力的增加网络层数的方法来企图获得更高的准确率了,然而面对复杂的问题,过浅的网络很难达到理想的效果,所以加深网络依然是解决图像分类问题的最佳途径。但是增加网络很容易造成overfiting甚至训练集上得到的效果也比浅层网络要差,所以如何有效的增加网络层数就成了深度学习领域研究的重中之重。

为了解决这个问题,很多学者提出了自己的见解,如resnet所讲述的残差网络就是一例。然而残差网络虽然能够增加层数但是层数增加到三位数之后再增加也就有些无能为力了。此时作者另辟蹊径,提出了一种新型的网络结构SENet,这个网络结构可以对所有网络进行改进然后做到真正有效的增加层数,无论原网络层数有多深,通过加入SENet,都能增加相当数量的深度,并有效的提高实验效果。值得一提的是SENet在2017年的ImageNet挑战赛获得冠军。

从Inception开始,学者们提出网络的时候就主要是提出一个block,然后用这个block像搭积木一样的搭出整个网络。同样,作者也是用这个方法设计网络的,作者提出了一个Squeeze-and-Excitation block,然后用这个SE block搭出了整个网络。

卷积神经网络虽然有诸多的好处,但是卷积神经网络捕捉到的只是局部的信息,假如卷积核是7x7,那么感受野的大小也只有7x7。但是一张图片的每一个像素点之间都是互相有联系的,之前使用局部感受野的网络都忽略掉了全局像素点之间的关联信息,使得实验效果不够理想。Inception通过多尺度的卷积核,找到了提取一张feature map上全局关联信息的方法,然而直到本文网络之前都没有谁考虑各通道之间的全局关联信息。所以作者将关注点放到了通道关联信息上,作者发现提取出通道之间互相关联的信息可以有效的增加神经网络的分类准确率。

图3

如图3所示,就是一个SE block。对于任意给定的变换

(1)

我们可以构造一个对应的SE块来进行特征重新校准。首先通过挤压操作,跨越空间维度WXH产生一个全局描述符,这个全局描述符聚合了所有通道的空间信息,之后再进行激励操作,其中通过基于通道依赖性的门控机制为每个通道学习特定采样的激活,控制每个通道的激励。然后特征映射U被重新加权以生成SE块的输出,再与之前的block结合在一起,就达到了提取通道关联信息的目的。

SE网络可以通过简单地堆叠SE block的集合来生成,也可以用作架构中任意深度的原始块的直接替换。

新CNN架构的开发是一项具有挑战性的工程任务,通常涉及许多新的超参数和网络各层配置的选择。相比之下,上面概述的SE块的设计是简单的,并且可以直接与现有的最新架构一起使用,其卷积层可以通过直接用对应的SE层来替换从而使效果得到加强。另外,SE块在计算上是轻量级的,并且在模型复杂性和计算负担方面仅稍微增加。为了支持这些声明,作者开发了一些SENets,即SE-ResNet,SE-Inception,SE-ResNeXt和SE-Inception-ResNet,并在ImageNet 2012数据集上对SENets进行了广泛的评估。此外,为了证明SE块的一般适用性,作者还呈现了ImageNet之外的结果,这表明作者所提出的方法不受限于特定的数据集或任务。

图3所示的Ftr,我们可以将其看做一个普通的卷积层,事实上,在SE-ResNet,SE-Inception中,对应的Ftr分别就是残差块和Inception块。

Squeeze操作的目的其实就是将空间信息提取出来,为了网络的轻量级,事实上我们还希望能够将信息进行压缩,不要增加过大的时间复杂度和空间复杂度。

因此作者选取了全局平均池化进行Squeeze操作。如图3所示,我们将通过全局平均池化得到的向量设为Z,那么z的第c个元素即可通过公式(2)进行计算:

(2)

这个操作实际上是在得到U之后再进行的全局平均池化。一般CNN的每个通道的滤波器都是对局部感受野进行特征提取,因此U中的每个feature map都无法利用与其他feature map之间的关联关系,而且在较低网络层次上对应到原图尺寸上的感受野相对于较高层数的来说,无疑是很小的,这样空间关联信息的流失就会更加严重。

那么作者提出的这个Squeeze,实际上就相当于将感受野扩展到了全局,自然能够提取的特征就更为丰富,通过训练得到的分类识别的准确率就更高了。

为了利用在上一个操作中得到的全局信息,作者就提出了Excitation这个操作来全面捕获通道相关性。如图4和图5所示,就分别是SE-Inception Mole和SE-Inception Mole。作者指出我们所需的这个Excitation必须是灵活的同时又要能学习到非互斥的信息。

那么通过观察图4和图5我们也能轻易的得知:

(3)

其中指的是Relu函数,指的是sigmoid函数,r为压缩比例。这实际上就是两个全连接层再加上两个激活层。第一层全连接层的作用就是将global pooling所得到的全局信息进行压缩,作者通过实验发现,压缩比例r=16的时候实验结果最为理想。那么第二层全连接层的作用就是将被压缩的向量进行还原,还原到和global pooling层之后的向量大小一致。然后再将该向量与Ftr得到的三维卷积进行乘运算,实际上该向量中的每个值就与三维卷积中每个通道对应的feature map 相乘,这样每一个feather map就得到了与其他通道的空间关联特征了。

图4

那么图4和图5中的C指的就是通道的数目,而指的就是这个模块输入的feather map的尺寸大小。而通过图示我们也能清楚的看到SE block可以通用的加在所有的网络结构中从而达到提升性能的作用。

SENet通过堆叠一组SE块来构建。实际上,它是通过用原始块的SE对应部分(即SE残差块)替换每个原始块(即残差块)而产生的,作者在表1中描述了SE-ResNet-50和SE-ResNeXt-50的架构。

图5

表1

作者通过实验发现,SE block改进resnet-50时,所增加参数量不超过10%,却提升了1.5个百分点的准确率,并且作者后来通过实验发现整体网络最末尾的SE block对效果提升作用很小,去除掉这些block网络的准确率也不过下降0.1个百分点,而增加的额外参数量就减小到4%了。如表2所示,是几个原有的网络结构的top-1和top-5的准确率,original表示的是网络提出者得到的结果,而re-implementation指的是作者复现的结果,而SENet指的是作者运用SENet加强之后得到的结果,很明显有显着的准确率提升。

表2(该表截取自论文)

同时,作者还提出了一个计算模型复杂度的方法来探究运用了SENet之后,模型的参数量到底增加了多少,很显然准确率增加百分比相同的情况下,参数量增加越少的话,算法性价比越高。

两个全连接层的参数量都是,那么两个全连接层的参数量就是。以resnet为例,假设resnet一共包含了S个stage,其中第s个stage里面包含了个重复的残差块,那么用SENet加强过的resnet所增加的参数量就可以用公式(4)进行计算:

(4)

SENet的结构非常简单,特别容易部署,不需要引入新的函数或者卷积层,并且增加的参数量微乎其微,是一个有效增加神经网络分类准确率的方法。同时,作者通过实验发现,在Faster-rcnn等用于实现目标检测的网络中增加SENet块进行加强,也能得到很好的效果,这进一步证明了SENet网络的通用性。

接下来,作者思考了最后一个问题,增加的SE block添加在原有block中位置的不同会不会影响到实验结果。为此,作者进行了对比试验。

如图6所示, 是原来的残差网络与作者在四个不同位置添加了SE block的四种不同的网络结构,总共是五个不同的网络结构。

图6

表3

而表3即是四种不同的SENet结构的错误率对比,我们能够看到SE-PRE结构是其中相对表现最好的,这说明了SE block块所在位置确实会影响到神经网络的整体效果,所以我们在运用SENet时,对于其所添加的位置应该好好斟酌。

这篇论文提出了一个名为名为SE block的架构单元,通过使网络能够执行动态的信道特征重新校准来提高网络的表示能力。实验证明了SENets的有效性,它在多个数据集和任务之间实现了最先进的性能。此外,SE块揭示了以前的体系结构无法充分地对通道相关关系建模。并且SE块生成的特征重要度值可以用于其他任务,例如用于模型压缩的网络剪枝。

‘捌’ 新息与残差有什么区别

新息与残差的区别在于:二者指代不同、二者特征不同、二者代表相关分析不同。

1、特征不同:

(1)由于其也是序列,所以也被称为新息序列:x(t)=x(t)+e(t),此式表明,x(t)可表达为两项之和:第一项,x(t)它是被序列历史所确定的;第二项e(t),根据历史数对其预报为零。

直观而言,在无偏预报意义下,原序列历史不包含对e(t)的信息,故此时称为它对原序列的新息。对极特殊的情况下,e(t)恒等于0时,此序列无新息,这样的序列称为纯确定型。

(2)在回归分析中,测定值与按回归方程预测的值之差,以δ表示。残差δ遵从正态分布N(0,σ2)。(δ-残差的均值)/残差的标准差,称为标准化残差,以δ*表示。δ*遵从标准正态分布N(0,1)。实验点的标准化残差落在(-2,2)区间以外的概率≤0.05。

若某一实验点的标准化残差落在(-2,2)区间以外,可在95%置信度将其判为异常实验点,不参与回归直线拟合。显然,有多少对数据,就有多少个残差。残差分析就是通过残差所提供的信息,分析出数据的可靠性、周期性或其它干扰。

2、指代不同:

(1)考察时间序列{x(t)},根据历史数据对x(n+1)的无偏预报x(n+1),且用斜体代表x尖,即x的估计值,预报误差e(n+1)=x(n+1)-x(n+1),e(n+1)被称为新息。

(2)残差在数理统计中是指实际观察值与估计值(拟合值)之间的差。

3、代表相关分析不同:

(1)新息定理是新息预报的基础。新息预报虽然公式较复杂,但占用的内存是有限的,并不随t而增长,而且每步预报是用递推计算,特别是MA序列,由新息预报公式可以看出,只要能判断出MA模型的阶数,不必计算出滑动平均参数就可以递推进行新息预报。

由新息定理可以看出,时刻t的新息et是随着样本数据xt的输入经过递推而得到的。

可以证明,无论是AR、MA或ARMA序列,当k充分大后,新息适时预报都与平稳预报渐近趋于一致。因此,在实际应用时,对于连续预报问题如果要求从较少的数据开始预报,并希望尽可能给出精确的预报值,那么,在开始一个阶段,可以进行新息适时预报。

(2)残差中残差图的分布趋势可以帮助判明所拟合的线性模型是否满足有关假设。如残差是否近似正态分布、是否方差齐次,变量间是否有其它非线性关系及是否还有重要自变量未进入模型等。

当判明有某种假设条件欠缺时, 进一步的问题就是加以校正或补救。需分析具体情况,探索合适的校正方案,如非线性处理,引入新自变量,或考察误差是否有自相关性。

(8)残差网络是加在哪里的扩展阅读:

残差应用——残差网络:

深度残差网络。如果深层网络的后面那些层是恒等映射,那么模型就退化为一个浅层网络。那当前要解决的就是学习恒等映射函数了。 但是直接让一些层去拟合一个潜在的恒等映射函数H(x)=x,比较困难,这可能就是深层网络难以训练的原因。

但是,如果把网络设计为H(x)=F(x)+x,可以转换为学习一个残差函数F(x)=H(x)-x。只要F(x)=0,就构成了一个恒等映射H(X)=x。 而且,拟合残差肯定更加容易。

F是求和前网络映射,H是从输入到求和后的网络映射。比如把5映射到5.1,那么引入残差前是:F'(5)=5.1,引入残差后是H(5)=5.1,H(5)=F(5)+5,F(5)=0.1。这里的F'和F都表示网络参数映射,引入残差后的映射对输出的变化更敏感。

比如s输出从5.1变到5.2,映射的输出增加了2%,而对于残差结构输出从5.1到5.2,映射F是从0.1到0.2,增加了100%。明显后者输出变化对权重的调整作用更大,所以效果更好。残差的思想都是去掉相同的主体部分,从而突出微小的变化。

参考资料来源:网络-残差

参考资料来源:网络-新息

参考资料来源:网络-新息定理

阅读全文

与残差网络是加在哪里的相关的资料

热点内容
小米三换移动网络 浏览:594
小区的网络设备怎么设置 浏览:869
哪里可以看到网络币的交易 浏览:117
连别人的网络路由器怎么设置 浏览:759
读网络小说用英语怎么说 浏览:266
网络安全基本功系列短片 浏览:997
无线网络有密码吗 浏览:738
如何学习5g承载网络 浏览:185
网络安全宣传报告 浏览:313
苹果退账号老是连接不到网络 浏览:82
安卓手机网络接入点选哪个 浏览:949
怎么打开移动网络快点 浏览:210
住建局在网络安全会议纪要 浏览:686
计算机网络技术对电子商务发展趋势的影响 浏览:7
出国哪个网络电话好用 浏览:226
苹果更新143后网络信号超差 浏览:521
苹果照片网络不可用怎么办 浏览:534
怎么进入暗黑网络 浏览:727
固定ip的网络怎么添加无线路由器 浏览:790
天翼网关如何提高网络信号 浏览:820

友情链接