导航:首页 > 网络设置 > 残差连接网络设置

残差连接网络设置

发布时间:2022-12-15 03:46:18

❶ fluent残差设置在哪里

在模型树节点上。
1、首先打开Fluent软件,并进入首页。
2、其次双击模型树节点Monitor和Resial即弹出残差设置对话框。
3、最后在该对话框中,用户可以设定每一个物理量的残差标准,选择对应的残差标准即可设置。
4、Fluent是国际上比较流行的商用CFD软件包,残差设置是一项测量数据误差的功能。

❷ 残差网络(ResNet)

残差操作这一思想起源于论文《Deep Resial Learning for Image Recognition》。如果存在某个K层的网络f是当前最优的网络,那么可以构造一个更深的网络,其最后几层仅是该网络f第K层输出的恒等映射(IdentityMapping),就可以取得与f一致的结果;也许K还不是所谓“最佳层数”,那么更深的网络就可以取得更好的结果。 总而言之,与浅层网络相比,更深的网络的表现不应该更差。但是如下图所示,56层的神经网络表现明显要比20层的差。 证明更深的网络在训练过程中的难度更大,因此作者提出了残差网络的思想。+

ResNet 的作者将这些问题归结成了一个单一的假设:直接映射是难以学习的。而且他们提出了一种修正方法: 不再学习从 x 到 H(x) 的基本映射关系,而是学习这两者之间的差异,也就是“残差(resial)”。然后,为了计算 H(x),我们只需要将这个残差加到输入上即可。假设残差为 F(x)=H(x)-x,那么现在我们的网络不会直接学习 H(x) 了,而是学习 F(x)+x。

这就带来了你可能已经见过的着名 ResNet(残差网络)模块:

ResNet 的每一个“模块(block)”都由一系列层和一个“捷径(shortcut)”连接组成,这个“捷径”将该模块的输入和输出连接到了一起。然后在元素层面上执行“加法(add)”运算,如果输入和输出的大小不同,那就可以使用零填充或投射(通过 1×1 卷积)来得到匹配的大小。

回到我们的思想实验,这能大大简化我们对恒等层的构建。直觉上就能知道,比起从头开始学习一个恒等变换,学会使 F(x) 为 0 并使输出仍为 x 要容易得多。一般来说,ResNet 会给层一个“参考”点 x,以 x 为基础开始学习。

在此之前,深度神经网络常常会有梯度消失问题的困扰,因为 ResNet 的梯度信号可以直接通过捷径连接回到更早的层,而且它们的表现依然良好。

ResNet本质上就干了一件事:降低数据中信息的冗余度具体说来,就是对非冗余信息采用了线性激活(通过skip connection获得无冗余的identity部分),然后对冗余信息采用了非线性激活(通过ReLU对identity之外的其余部分进行信息提取/过滤,提取出的有用信息即是残差)。
其中,提取identity这一步,就是ResNet思想的核心。 对ResNet本质的一些思考

一方面是残差网络更好的拟合分类函数以获得更高的分类精度,另一方面是残差网络如何解决网络在层数加深时优化训练上的难题。

首先从万能近似定理(Universal Approximation Theorem)入手。这个定理表明,一个前馈神经网络(feedforward neural network)如果具有线性输出层,同时至少存在一层具有任何一种“挤压”性质的激活函数(例如logistic sigmoid激活函数)的隐藏层,那么只要给予这个网络足够数量的隐藏单元,它就可以以任意的精度来近似任何从一个有限维空间到另一个有限维空间的波莱尔可测函数(Borel Measurable Function)。
万能近似定理意味着我们在构建网络来学习什么函数的时候,我们知道一定存在一个多层感知机(Multilayer Perceptron Model,MLP)能够表示这个函数。然而,我们不能保证训练算法能够学得这个函数。因为即使多层感知机能够表示该函数,学习也可能会失败,可能的原因有两种。

第二种过拟合情况不在我们的讨论范围之内,因此我们聚焦在前一种情况,为何残差网络相比简单的多层网络能更好的拟合分类函数,即找到期望函数的参数值。
对于普通的不带短连接的神经网络来说,存在这样一个命题。

事实上对于高维函数,这一特点依然适用。因此,当函数的输入维度非常高时,这一做法就变的非常有意义。尽管在高维空间这一特点很难被可视化,但是这个理论给了一个很合理的启发,就是原则上,带短连接的网络的拟合高维函数的能力比普通连接的网络更强。这部分我们讨论了残差网络有能力拟合更高维的函数,但是在实际的训练过程中仍然可能存在各种各样的问题使得学习到最优的参数非常困难,因此下一小节讨论残差在训练过程中的优越性。

这个部分我们讨论为什么残差能够缓解深层网络的训练问题,以及探讨可能的短连接方式和我们最终选择的残差的理由。正如本章第三部分讨论的一样,整个残差卷积神经网络是由以上的残差卷积子模块堆积而成。如上一小节所定义的,假设第 层的残差卷积字子模块的映射为

❸ 残差网络(ResNets)(Resial Networks (ResNets))

如果我们使用标准优化算法训练一个普通网络,比如说梯度下降法,或者其它热门的优化算法。如果没有残差,没有这些捷径或者跳跃连接,凭经验你会发现随着网络深度的加深,训练错误会先减少,然后增多。而理论上,随着网络深度的加深,应该训练得越来越好才对。也就是说,理论上网络深度越深越好。但实际上,如果没有残差网络, 对于一个普通网络来说,深度越深意味着用优化算法越难训练。实际上,随着网络深度的加深,训练错误会越来越多。

但有了ResNets就不一样了,即使网络再深,训练的表现却不错,比如说训练误差减少,就算是训练深达100层的网络也不例外。有人甚至在1000多层的神经网络中做过实验,尽管目前我还没有看到太多实际应用。但是对的激活,或者这些中间的激活能够到达网络的更深层。这种方式确实有助于解决梯度消失和梯度爆炸问题,让我们在训练更深网络的同时,又能保证良好的性能。也许从另外一个角度来看,随着网络越来深,网络连接会变得臃肿,但是ResNet确实在训练深度网络方面非常有效。

这里使用跳跃连接(Skip connection),它可以从某一层网络层获取激活,然后迅速反馈给另外一层。就是指跳过一层或者好几层,从而将信息传递到神经网络的更深层。

相比于从头训练权重,如果使用别人已经训练好的网络结构的权重,通常能够进展得相当快,用这个作为预训练。

如果任务只有一个很小的数据集,如图1所示,我们可以完全使用它的权重,把前面的层都冻结;
要是有一个更大的训练集,如图2所示,我们冻结更少的层,然后训练后面的层;
或者如图3所示,换成自己的网络结构。
最后,如果有大量数据,我们应该用这些网络和它的权重当做初始化,用它们来代替随机初始化,接着你可以用梯度下降训练,更新网络所有层的所有权重。

❹ 残差神经网络 - ResNet50

上周写论文的时候,引用了一下恺明大神的ResNet,发现引用量已经到了32888了。柠檬精附体了……现在来回味经典~

万能近似定理已经说明了深度神经网络的强大之处,只要有一个足够宽足够神的非线性神经网络,可以以任意精度的近似模拟一个可测映射函数。然而,臭名昭着的梯度消失(爆炸)问题,让我们认识到现实:随着深度的增加,网络表示能力增强的同时,训练的难度也在增加。于是,恺明大神为我们带来了 ResNet 。

paper在这里

ResNet的贡献之一,就是残差结构 :

上图中,假设拟合目标函数为 ,非线性的叠加层为 ,一般的做法是,使 逼近 。而残差结构中,使用 的方式,逼近 。

在反向传播过程中,求解每层参数的梯度,需要通过链式求导法则由深层到浅层,浅层参数的梯度中包含深层梯度的累乘。而在深度较大的神经网络中,连续的累乘极易导致梯度过小或者过大,造成浅层网络的权重难以正常更新。造成深度网络的学习能力退化的现象。
为了解决网络退化,恺明大神提出了残差结构,这种结构有两个好处:

含有shortcut的残差结构可以解决在深度增加时的网络退化问题。在进行shortcut连接时,需要保证张量 与 具有相同的尺寸,然而,我们在进行网络结构设计时,倾向于在浅层网络使用较少的通道,在深层网络,采用更大的通道提取更加抽象的特征。为了在网络中使用不同的通道数,恺明大神带来了两种可选的结构:Identity 和 Bottleneck。

待定。

❺ 一个残差网络的简介【MATLAB】

对于许多应用来说,使用由一个简单的层序列组成的网络就已足够。但是,某些应用要求网络具有更复杂的层次图结构,其中的层可接收来自多个层的输入,也可以输出到多个层。这些类型的网络通常称为有向无环图 (DAG) 网络。残差网络就是一种 DAG 网络,其中的残差(或快捷)连接会绕过主网络层。残差连接让参数梯度可以更轻松地从输出层传播到较浅的网络层,从而能够训练更深的网络。增加网络深度可在执行更困难的任务时获得更高的准确度。

主分支 - 顺序连接的卷积层、批量归一化层和 ReLU 层。

残差连接 - 绕过主分支的卷积单元。残差连接和卷积单元的输出按元素相加。当激活区域的大小变化时,残差连接也必须包含 1×1 卷积层。残差连接让参数梯度可以更轻松地从输出层流到较浅的网络层,从而能够训练更深的网络。

首先创建网络的主分支。主分支包含五部分。

初始部分 - 包含图像输入层和带激活函数的初始卷积层。

三个卷积层阶段 - 分别具有不同的特征大小(32×32、16×16 和 8×8)。每个阶段包含 N 个卷积单元。在示例的这一部分中,N = 2。每个卷积单元包含两个带激活函数的 3×3 卷积层。netWidth 参数是网络宽度,定义为网络第一卷积层阶段中的过滤器数目。第二阶段和第三阶段中的前几个卷积单元会将空间维度下采样二分之一。为了使整个网络中每个卷积层所需的计算量大致相同,每次执行空间下采样时,都将过滤器的数量增加一倍。

最后部分 - 包含全局平均池化层、全连接层、softmax 层和分类层。

使用 convolutionalUnit(numF,stride,tag) 创建一个卷积单元。numF 是每一层中卷积过滤器的数量,stride 是该单元第一个卷积层的步幅,tag 是添加在层名称前面的字符数组。convolutionalUnit 函数在示例末尾定义。

为所有层指定唯一名称。卷积单元中的层的名称以 'SjUk' 开头,其中 j 是阶段索引,k 是该阶段内卷积单元的索引。例如,'S2U1' 表示第 2 阶段第 1 单元。

❻ 网络学习系列(三)Inception系列

论文链接: Going deeper with convolutions

对于深度学习来说,目前的共识是更深的网络的性能要优于较浅的网络,所以论文中所做的就是在充分利用计算机资源的基础上,精心设计网络的结构,使网络更深。

1、目前普遍的较为高效的神经网络,是由一系列堆积的卷积层,后面跟有池化层跟全连接层,如果出现过拟合,可以采用dropout进行处理。

2、由network-in-network这篇paper的启发,1*1的卷积可以用来进行降维打破计算的瓶颈,同时也能增加网络的宽度,保持网络较高的性能。

3、一般来说,如果直接增加网络的深度,会带来两个比较严重的问题:第一个是网络规模太大,参数太多容易过拟合,第二个是计算资源会急剧的增加,即便只有两个卷积层连在一起,其计算量也会以幂级增加。解决这个问题的方法是使用较为稀疏的结构,不仅在全连接层进行这种操作,甚至卷积层也需要这么做。Arora等人的研究表明,如果数据集的概率分布可以用一个稀疏的网络进行表示,那么可以通过分析每一层的激活值的相关性,将相关的神经元进行聚类,进而将网络搭建起来。这也符合赫布原则(赫布原则是神经学的理论,没搞懂跟这地方是怎么联系起来的,有待后续的学习)。然而,目前的计算机手段处理稀疏的数据结构是非常低效的,所以采取了一种折中的办法,即将稀疏的矩阵聚类到相对密集的子矩阵,当进行稀疏矩阵相乘的操作时就能达到较高的效率。关键是如何做到这点,首先,卷积肯定是密集型操作,这个无法改变,而且也有利于计算,关键是在其他方面下功夫,可以理解成以下几点,空间上的稀疏性,采用卷积本身就是一种稀疏,其对图像的局部进行操作,而且采用了不同大小的卷积核,3*3的卷积核可以理解成5*5的稀疏表示,这也是一种稀疏;特征上的稀疏性,根据赫布原则(一起激活一起连接,即相关性强的特征聚集在一起),特征图可以由强相关性的特征图群聚而成,因此使用了不同级别的特征图,例如3*3,5*5等,其内部特征高度相关,这其实也就是多尺度。

1、原始结构:

网络实现的关键是找到某些密集成分,来拟合网络的局部稀疏结构,为了做到这点,网络去除了全连接层,同时构造了上述的结构,体现了聚类的思维,这样做增加了网络的宽度,同时增加了网络对多尺度的适应性。这个地方卷积核的尺寸不具有特殊的含义,仅仅是为了方便最终组合特征图。然而,这样的结构也有一个较大的缺点,那就是5*5卷积的存在,会极大的增加运算量,同时又有池化层的存在,进行特征图的融合增加输出的数量,使得网络在计算上并不高效。

2、改进结构:

为了减小运算量,在进行卷积之前加入了1*1的卷积进行降维,使得这种结构的高效成为可能。

3、整个结构:

网络的前端还是普通的卷积网络结构,在后面使用了inception网络的堆砌,同时,在网络的下面,还延伸出了几个分支,这是用来进行辅助分类。

论文链接: Batch Normalization

当对深层的网络进行训练时,由于模型的参数不断的改变,每一层输入的概率分布都在不断的变化,这就要求使用非常小的学习率,同时需要非常谨慎的设置参数。而且由于非线性饱和的存在,会使得网络非常难以训练,这个现象被称之为 internal covariate shif。

1、Experience Covariate Shift现象,即系统输入的分布发生了改变,解决方法是领域适应与迁移学习,作者发现,如果输入的分布更有利于训练。

2、非线性饱和问题:网络越深,越容易出现梯度的弥散,而数据的分布不一致,使这种情况出现的概率增加。

3、internal covariate shif问题,即网络训练过程中网络参数不断变化,导致各层的输入分布变化,使得网络不易训练。

1、由经验可知,对输入进行白化处理,可以加快收敛,因此,为了解决每层的输入不一致的问题,考虑对每一层的输入进行归一化,使其分布一致。

2、理论上来说,应该在每一层的非线性激活之后进行归一化操作,然而,在训练初期分界面还在剧烈变化,计算出的参数很不稳定,所以一般讲归一化的操作放在非线性激活之前,这也是现在网络所采用的方式。

3、论文中提出的批量归一化,并非只是简单的白化处理,在计算梯度时就需要考虑归一化的问题。因为网络学习的本质就是学习数据的分布,如果只是简单的归一化会破坏这种分布,论文给出的解决办法是归一化之后要通过均值和方差两个系数还原这种分布。(在别处还看到另一种说法,就是如果只是单纯的归一化,一旦进行反向传播操作,会撤销这种归一化的处理,所以在最后要通过均值和方差两个系数来避免这种情况的出现)

4、通过论文中这种归一化的操作,不仅可以加快训练,而且在一定程度上可以解决过拟合问题。

论文链接: Rethinking the Inception Architecture for Computer Vision

相较于AlexNet与VGGNet,googleNet的计算量与参数无疑少了许多,但是,由于网络的复杂性,使得网络不易于向更大规模进行扩展,论文主要是为了解决这个问题。

1、通用的网络设计原则:

1)避免表示瓶颈:前向传播网络可以看作一个有向无环图,从输入到输出,其特征图应该缓慢的减小。我们不能仅仅通过维度来读取图片的信息,因为在维度增加的过程中已经丢掉了许多重要的特征,例如相关结构。维度信息只是对图片信息的粗略估计。对于表示瓶颈的简单理解就是网络中层的池化等操作使得特征图尺寸明显减小。

2)高维度的特征在局部更加容易处理,在网络中增加非线性关系,可以使训练更加快速,另外层宽一些还是有好处的,可以增加其表示能力;

3)在网络的深层,空间的聚合可以在较低维度上进行,这样不会损失表示能力,例如在3*3、5*5卷积之前进行了降维处理。

4)平衡网络的深度与宽度,理论上来说,同时增加网络的深度与宽度都能增加网络的性能,但要考虑计算资源的分配。

2、使用较大的卷积核往往意味着巨大的运算量,理论已经证明,往往可以通过几个较小的卷积核来代替较大的卷积核,从而使得计算量的下降。

1、

使用3*3卷积代替5*5卷积,且使用了非线性激活。

2、尝试进一步减小网络的计算量,结果发现,非对称的结构要比进一步减小卷积核的尺寸更加高效,即将n*n的卷积分解为1*n与n*1,网络设计如下:

实践证明,在网络的开始应用这种结构效果并没有明显的改善,这种网络适用于中等的网络(特征图的大小为m*m,m介于12到20之间)

在高维特征上,如下的网络结构更好一些:

3、采用了辅助分类结构,实践证明,在初期辅助分类结构并没有加速训练过程,反而在训练将要结束时开始发挥作用,辅助分类结构在这里起到了一个正则化的作用,实验证明,辅助分类结构使用了batch-normalized或dropout时,主分类器效果会更好。

4、一般来说,会使用池化来减小特征图的尺寸,但为了避免表示瓶颈,在池化之前会增加特征图的维数,这会导致计算量的增加,论文提出了一种并行结构,使用步长为2的卷积与池化并行操作,之后将两者的响应结合在一起,这样既能降低维度,又不至于造成信息提取上的损失。

论文链接: Inception-v4, Inception-ResNet

ResNet网络取得了较好的效果,所以尝试结合ResNet

论文提出,残差连接并不是训练较深网络的必要条件,但残差连接的确可以提升训练速度,且不会提高运算量。

1、incetion v4:

其中,Stem的结构如图所示:

inception-A、B、C的结构如下所示:

为了减小运算量,网络加入了rection结构,如下所示:

整个网络思想与前几个版本并没有太大的不同,这里不再赘述。

2、inception-resnet v1与inception-resnet v2:

两者的框架与inception v4大致相同,其中的改进就是将inception模块变成了inception-resnet模块,如下所示:

另外,引入了残差连接之后,如果一个残差连接的滤波器过多,很可能出现输出都是0的结果,论文中给出的解决方案是在残差函数之后,激活函数之前引入一个尺度变换,如下所示:

❼ 十分钟一起学会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,下次的十分钟我们再见。

❽ 吴教授的CNN课堂:进阶 | 从LeNet到残差网络(ResNet)和Inception Net

第二周是关于卷积网络(CNN)进阶部分,学到挺多新东西。因为之前了解过CNN基础后,就大多在用RNN进行自然语言处理方面的研究,很多CNN的最新进展虽有耳闻,但是并不清楚。

特别是各个论文模型又喜欢取一些奇怪的名字(比如昨天读的两篇论文,一个叫NTT,一个叫TMD),如果没读过论文,不了解一些缘由,真是傻傻分不清。

之前看视觉问答时,预处理图片部分需选择训练好的网络,结果一看,一大堆什么 VGG、Res、Incept 这些看不懂的名词,而且后面还加着16、19、101等数字和V1、V2、V3这样的版本数。结果只能两眼一抹黑,参考别人的论文,瞎选了一个。

闲话不多说,开始吧。

在提到之后的ResNet和Inception Net前,最好先回顾一下CNN里面成功架构的发展,这样就可以把握住一条清晰的发展脉络,之后讲解进阶网络的时候也能很快理解。

首先是爷爷级的 LeNet-5 ,因为这大概是20年前提出来的了。是当时尚且青涩,而现在已是深度学习四大天王里的LeCun提出的,LeNet也是取自他名字前半截,5表示只有五层,当时用于处理MNIST这样的手写数字识别。

在基础课里面吴教授也有亲手把整个架构画出来,所以并不是很复杂。分别卷积和池化两次后,然后直接输入全连接网络就可以了。

LeNet后,因为人工智能寒冬,所以很长时间并没有太大发展。

直到13年的时候,后起之秀Alex Krizhevsky (相信不少人也看过他的博客,听过他有名的Stanford cs231) 提出了AlexNet,在ImageNet比赛上取得了很大的成功,向大家展示了深度学习的力量,从此掀起一次浪潮。

AlexNet和LeNet差别并不是很大,主要不同有以下三点。

在AlexNet展示了深度学习在图像处理上的成功后,大家也就开始不断在其之上完善图像处理的CNN构架。而VGG就是第一个 非常简洁又系统化,提出了一套怎么使用更深的网络来训练的网络架构

VGG的创举之点在于,比起之前那些网络其中参数的混杂,它很有计划和条理地布置了架构中各个层的结构。比如说可以列举出一下几点:

VGG是当时参赛组(Visual Geometry Group)的名称。一般现在大家用到的都是VGG-16或者VGG-19,16和19也正如所想,分别是对应的VGG版本中的层数。

看上去16和19层好像也很多了,但和之后ResNet这样的动不动就101,152层的巨无霸相比,还是小巫见大巫。

那为什么不也增加VGG的层数呢?

这里要提到深层神经网络训练中的一个大问题了,那就是当层数过大时,会产生所谓的 梯度爆炸(Exploding Gradients)和梯度消失(Vanishing Gradients) 现象。

打个比方,如果每次的梯度相乘的系数都是小于1的数,假如说0.6, 那么19 层算下来,0.6的19次方就已经是0.00061了,更别提上百层了。这样传播到最底层的时候,能够 学习到的参数就很小 了,这就是梯度消失。

反过来,梯度爆炸的情况,如果系数大于1,多次累乘后就会得到一个很大的数,也会造成不好的结果。有点像是复利的概念,也就是那个和国王打赌要一棋盘稻子的故事。

梯度爆炸还好解决,可以用 梯度修剪(Gradient Clipping) 修剪一下就好了。而梯度消失就有点难解决了。

因为这样的问题,所以虽然理论上普通的深处网络是越深学的越好,但是实际上却事与愿违。下图横轴是网络层数,竖轴是训练误差(越小越好)。 理论上随着层数增加,误差就减小,但是实际是过了某个点之后,误差反而会增大。

那么ResNet是怎么训练到上百层的呢,难道它就不怕上面的问题吗?

它用一个很简单的方法解决了上面的问题。

有很多很棒的论文,没读之前,看名字觉得很厉害的。但结果一看论文,才发现方法非常之简洁,特别是有一些利用数学知识推导出的简单解决方法,让人不得不一边拍手称赞,一边感叹自己数学渣。

ResNet也是这样子的,看名字很酷炫,但是打开论文一看,才发现原来是这样啊。

ResNet的最主要就是 Shortcut(捷径) 这个概念。来看看这到底是什么吧,首先假设我们从一个神经网络中取出两层,当做是一个块(block),先不管中间是MLP或者是CNN。

而shortcut就如下图一样,从第一层的输入直接建立一条捷径到第二层的输出,激活函数前。

也就是说第二层激活后的输出可以会发生这样的变化。

变成

这样子处理之后,我们得到的这一小块就叫做 Resial Block(残差块) ,而把这些块堆叠起来就是我们的残差网络了。很简单吧,像下面这样,一个34层的残差网络。

这样子我们就得到残差网络,那么实际上训练会怎么样呢。

正是我们想要的模型,也非常符合理论。

最后再提一下残差网络背后的原理,为什么这样简单改一下就能够有这么好的表现呢。

原因是捷径的建立,使得每一个残差块可以 很容易地学习到恒等函数 ,也就是f(x)=x。也就是说加入残差块之后,再差也能学会恒等函数,保留信息,把之前的结果直接这样传下去,所以也就不用担心之前提到的 梯度消失 问题了。

介绍Inception网络前,先介绍一下其中一个很重要的概念1x1卷积。

初看1x1卷积的概念会觉得很奇怪,这样子每次对一个像素进行卷积有什么用,我们本来不就是想检测局部的特征吗。但是如果理解了 通道 概念的话,就能很好理解了。

因为,如果说普通的 大窗口卷积更注重一个通道内各个特征的互动 的话,那么1x1卷积就是只在通道与通道进行卷积运算,加强了通道之间的互动。

这就是第一点, 加强了通道与通道之间的交流 。用这个就可以只对通道进行一些操作,如用1x1卷积增加通道数,减少通道数,也可以不增不减,但是对之前的通道进行整理。

1x1卷积网络还有一个好处,那就是 通过合理运用可以减少整体网络的运算量

还是来举例子吧,假设有以下一个卷积过程。

那么上面这个过程所需要的运算量大约一亿两千万次。

而如果我们巧妙地利用1x1卷积来对通道进行合理处理的话,像下面这样。

运算量会变得只有大概一千二百万左右,一下子就缩小了十倍。

有了上面的知识以后,一切就简单多了。Inception网络的核心概念是,既然在选择CNN架构的时候要为了过滤器的窗口大小考虑半天,那么 何不把各个尺寸都用上去,最后再把结果接起来就好了呢

于是就有了下面这样的 Inception模块 。有用1x1、3x3、5x5各个尺寸的卷积,而且还用到之前讲到的利用1x1卷积减少运算量的技巧。

最后至于整个Inception网络,就像之前残差网络一样,把 Inception模块 堆叠起来就好了。

当然论文中还有一些次要细节,这里就不多说了。

而且自最初的论文之后,Inception网络也有很多改进,加入了很多技巧,比如之前的残差网络中的技巧。所以现在网上的Inception网络,后面会有V1、V2、V3之类后缀,表示的就是各个版本。

最后,作为余谈,说说为什么Inception网络要叫做 Inception 网络。

因为在这篇正经的学术论文里面,作者引用了一个链接,点开后会出现这张图片。

❾ 残差网络ResNet笔记

作者根据输入将层表示为学习 残差函数 。实验表明,残差网络更容易优化,并且能够通过增加相当的深度来提高准确率。
核心是解决了增加深度带来的副作用(退化问题),这样能够通过单纯地增加网络深度,来提高网络性能。

网络的深度为什么重要?

因为CNN能够提取low/mid/high-level的特征,网络的层数越多,意味着能够提取到不同level的特征越丰富。并且,越深的网络提取的特征越抽象,越具有语义信息。

为什么不能简单地增加网络层数?

怎么解决退化问题?

深度残差网络。如果深层网络的后面那些层是恒等映射,那么模型就退化为一个浅层网络。那现在要解决的就是学习恒等映射函数了。 但是直接让一些层去拟合一个潜在的恒等映射函数H(x) = x,比较困难,这可能就是深层网络难以训练的原因。但是,如果把网络设计为H(x) = F(x) + x,如下图。我们可以转换为学习一个残差函数F(x) = H(x) - x. 只要F(x)=0,就构成了一个恒等映射H(x) = x. 而且,拟合残差肯定更加容易。

其他的参考解释

这种残差学习结构可以通过前向神经网络+shortcut连接实现,如结构图所示。而且shortcut连接相当于简单执行了同等映射,不会产生额外的参数,也不会增加计算复杂度。 而且,整个网络可以依旧通过端到端的反向传播训练。

ImageNet上的实验证明了作者提出的加深的残差网络能够比简单叠加层生产的深度网络更容易优化,而且,因为深度的增加,结果得到了明显提升。另外在CIFAR-10数据集上相似的结果以及一系列大赛的第一名结果表明ResNet是一个通用的方法。

F(x)与x相加就是就是逐元素相加,但是如果两者维度不同,需要给x执行一个线性映射来匹配维度:

用来学习残差的网络层数应当大于1,否则退化为线性。文章实验了layers = 2或3,更多的层也是可行的。
用卷积层进行残差学习: 以上的公式表示为了简化,都是基于全连接层的,实际上当然可以用于卷积层。加法随之变为对应channel间的两个feature map逐元素相加。

key point:

key point:

❿ 残差网络

残差网络(Resial Network简称ResNet)是在2015年继Alexnet Googlenet VGG三个经典的CNN网络之后提出的,并在ImageNet比赛classification任务上拔得头筹,ResNet因其简单又实用的优点,现已在检测,分割,识别等领域被广泛的应用。
ResNet可以说是过去几年中计算机视觉和深度学习领域最具开创性的工作,有效的解决了随着网络的加深,出现了训练集准确率下降的问题,如下图所示:

做过深度学习的同学应该都知道,随着网络层数的增加而导致训练效果变差的一个原因是梯度弥散和梯度爆炸问题(vanishing/exploding gradients),这个问题抑制了浅层网络参数的收敛。但是这个问题已经通过一些参数初始化的技术较好的解决了,有兴趣的同学可以看参考文献中的以下几篇文章:[2][3][4][5][6]。
但是即便如此,在网络深度较高的时候(例如图中的56层网络)任然会出现效果变差的问题,我们在先前的Alexnet Googlenet VGG三个模型中可以看出,网络的深度在图片的识别中有着至关重要的作用,深度越深能自动学习到的不同层次的特征可能就越多,那到底是什么原因导致了效果变差呢?

Fig. 3
左侧19层的VGG模型的计算量是 19.6 billion FLOPs 中间是34层的普通卷积网络计算量是3.6 billion FLOPs。
右边是34层的ResNet计算量是3.6billion FLOPs,图中实线的箭头是没有维度变化的直接映射,虚线是有维度变化的映射。通过对比可以看出VGG虽然层数不多但是计算量还是很大的,后面我们可以通过实验数据看到34层的ResNet的表现会比19层的更好。

从图中可以看出在效果上,34层的残差网络比VGG和GoogleNet都要好,A,B,C三种方案中C方案效果最好,但是B,C方案在计算量上比A方案要大很多,而效果提升的又很少,所以论文作者建议还是使用A方案较为实用。
下面我们介绍层数在50及以上的残差网络的结构: Deeper Bottleneck Architectures。这种结构是作者为了降低训练时间所设计的,结构对比如下图所示:

ResNet通过残差学习解决了深度网络的退化问题,让我们可以训练出更深的网络,这称得上是深度网络的一个历史大突破吧。也许不久会有更好的方式来训练更深的网络,让我们一起期待吧!
目前,您可以在 人工智能建模平台 Mo 找到基于tensorflow 的34层的残差网络(ResNet)实现样例,数据集是CIFAR-10 (CIFAR的十分类数据集),这个样例在测试集上的精度为90%,验证集上的精度为98%。主程序在ResNet_Operator.py中,网络的Block结构在ResNet_Block.py中,训练完的模型保存在results文件夹中。
项目源码地址: http://momodel.cn/explore/5d1b0a031afd944132a0797d?type=app
参考文献:
[1] _K. He, X. Zhang, S. Ren, and J. Sun. Deep resial learning for image recognition. arXiv preprint arXiv:1512.03385,2015.
[2] Y. LeCun, L. Bottou, G. B. Orr, and K.-R.M¨uller. Efficient backprop.In Neural Networks: Tricks of the Trade, pages 9–50. Springer, 1998.
[3] X. Glorot and Y. Bengio. Understanding the difficulty of training deep feedforward neural networks. In AISTATS, 2010.
[4] A. M. Saxe, J. L. McClelland, and S. Ganguli. Exact solutions to the nonlinear dynamics of learning in deep linear neural networks.arXiv:1312.6120, 2013.
[5] K. He, X. Zhang, S. Ren, and J. Sun. Delving deep into rectifiers:Surpassing human-level performance on imagenet classification. In ICCV, 2015.
[6] S. Ioffe and C. Szegedy. Batch normalization: Accelerating deep network training by recing internal covariate shift. In ICML, 2015.

Mo (网址: momodel.cn )是一个支持 Python 的 人工智能在线建模平台 ,能帮助你快速开发、训练并部署模型。

Mo 人工智能俱乐部 是由网站的研发与产品设计团队发起、致力于降低人工智能开发与使用门槛的俱乐部。团队具备大数据处理分析、可视化与数据建模经验,已承担多领域智能项目,具备从底层到前端的全线设计开发能力。主要研究方向为大数据管理分析与人工智能技术,并以此来促进数据驱动的科学研究。

阅读全文

与残差连接网络设置相关的资料

热点内容
网络共享中心没有网卡 浏览:516
电脑无法检测到网络代理 浏览:1368
笔记本电脑一天会用多少流量 浏览:560
苹果电脑整机转移新机 浏览:1371
突然无法连接工作网络 浏览:1043
联通网络怎么设置才好 浏览:1217
小区网络电脑怎么连接路由器 浏览:1018
p1108打印机网络共享 浏览:1205
怎么调节台式电脑护眼 浏览:680
深圳天虹苹果电脑 浏览:918
网络总是异常断开 浏览:607
中级配置台式电脑 浏览:975
中国网络安全的战士 浏览:626
同志网站在哪里 浏览:1408
版观看完整完结免费手机在线 浏览:1452
怎样切换默认数据网络设置 浏览:1103
肯德基无线网无法访问网络 浏览:1278
光纤猫怎么连接不上网络 浏览:1458
神武3手游网络连接 浏览:959
局网打印机网络共享 浏览:994