精华内容
下载资源
问答
  • 残差神经网络
    2022-08-26 17:25:42

    残差神经网络的主要贡献是发现了退化现象,并针对退化现象发明了快捷连接(shortcut connection),极大的消除了深度过大的神经网络训练困难问题。

    1.神经网络越深准确率越高

    假设一个层数较少的神经网络已经达到了较高准确率,可以在这个神经网络之后拼接一个恒等变换的网络层,这些恒等变换的网络层对输入数据不做任何转换,就能得到一个深度较大的神经网络,并且深度较大的神经网络的准确率等于拼接之前的神经网络准确率,准确率没有理由降低。
    层数较多的神经网络,可由较浅的神经网络和恒等变换网络拼接而成。

    2.退化现象

    随着网络层不断的加深,模型的准确率先是不断提高,达到最大值,然后随着网络深度的继续增加,模型准确率毫无征兆的出现大幅度的降低。
    退化现象归因于:深度神经网络难以实现恒等变换。
    随着网络的深度不断加大,竟无法实现线性转换。显然在神经网络中增加线性转换分支称为更好的选择,于是ResNet团队在resnet模块中增加了快捷连接分支,在线性转换和非线性转换之间寻求一个平衡。

    3.ResNet网络架构

    带有快捷连接(Shortcut Connection)的残差模块
    在这里插入图片描述

    #实现残差模块
    class ResidualBlock(nn.Module):
        def __init__(self,inchannel,outchannel,stride=1,shortcut=None):
            super(ResidualBlock,self).__init__()
            self.left=nn.Sequential(
                nn.Conv2d(inchannel,outchannel,3,stride,1,bias=False),
                nn.BatchNorm2d(outchannel),
                nn.ReLU(inplace=True),
                nn.Conv2d(inchannel,outchannel,3,stride,1,bias=False),
                nn.BatchNorm2d(outchannel)
            )
            self.right=shortcut
    
        def forward(self, x):
            out = self.left(x)
            residual = x if self.right is None else self.right(x)
            out += residual
            return F.relu(out)
    
    更多相关内容
  • 简单的resnet-18实现,附带数据增强,数据加载
  • 残差神经网络

    2020-12-15 12:03:10
    之前的章节,我们利用一个仅包含一层隐藏层的简单神经网络就在MNIST识别问题上获得了98%左右的准确率。我们于是本能会想到用更多的隐藏层,构建更复杂的神经网络将会为我们带来更好的结果。就如同在进行图像模式识别...

    之前的章节,我们利用一个仅包含一层隐藏层的简单神经网络就在MNIST识别问题上获得了98%左右的准确率。我们于是本能会想到用更多的隐藏层,构建更复杂的神经网络将会为我们带来更好的结果。

    就如同在进行图像模式识别的时候

    ,第一层的神经层可以学到边缘特征

    ,第二层的可以学到更复杂的图形特征,例如三角形,长方形等,第三层又会识别更加复杂的图案。

    这样看来,多层的结构就会带来更强大的模型,进行更复杂的识别。

    那么在这一章,就试着训练这样的神经网络来看看对结果有没有什么提升。不过我们发现,训练的过程将会出现问题,我们的神经网络的效果并没有什么提升。

    为什么会出现这样的情况呢,这一章就是主要围绕着这个问题展开的。

    我们将会发现,不同层的学习速率是不一样的。

    例如,在后面的网络层训练正在顺利学习的时候,前面网络层的学习却卡住几乎不动了。

    而且我们会发现这并不是偶然的,

    而是在理论上由梯度下降算法导致的。随着我们对问题的深入了解,我们会发现相反的情况也是可能发生的,就是前面网络层学习正常,而后面网络层学习停止。

    这虽然看上去都是坏消息,不过深入探索这些问题也是帮助我们设计更好的更高效的深度神经网络的训练方法。

    一. 梯度消失问题

    先回到之前的程序上,当我们选择一个隐藏层的时候得到准确率为96.48%。

    接着增加一个隐藏层得到96.90%的结果。

    看上去结果不错,毕竟提升了。接着再加上一个隐藏层,却只得到了96.57%的结果。这个结果虽说下降了没多少,

    但是我们模型变复杂了,我们期望得到一个更好的结果,但是却事与愿违了。

    这个结果看上去是奇怪的,而外的隐藏层理应使得模型可以处理更复杂的分类函数,不说结果提升多少,但是至少不能下降吧。为了搞清楚这期间到底是出了什么问题,我们回到两个隐藏层的情况,下面的图中,神经元上的柱形的长度表现的是其参数的更新速率,是当参数初始化完成后得到的结果:

    大致看上去,

    第二层整体的更新速率要比第一层的快很多

    。但是由于权重的初始化也是随机的,我们很难判断这是不是一种巧合。

    为了验证这是巧合还是事实,我们先定义,

    然后可以看作是一个向量,其中每个分量表示第层中该神经元上参数更新的速率。

    于是就可以将看作是层整体的学习速率,利用该速率的大小就可以比较不同层学习速率间的差别。

    根据这些定义,我们发现和,这的确印证了一开始观察到的结果,第二层整体比第一层快。

    三层隐藏层的时候呢?结果为0.012, 0.060和0.283,也是一样的结果:

    后面的层比前面的层快。四层的时候为0.003,0.017,0.070和0.285,也是一样。

    我们已经验证了参数刚初始完时的情形,也就是训练刚刚开始的情形,那么随着训练的进行,它们之间速率会发生什么变化呢?

    先看两层的情形:

    也是一样的结果,速率都是前面的层要慢于后面的层。

    我们于是可以得到一个重要的观察现象:

    在某些神经网络中,通过隐藏层从后向前看,梯度会变的越来越小。这也意味着,前面层的学习会显著慢于后面层的学习。这就是梯度消失问题。

    那么是什么导致了梯度消失呢?是否可以避免这样的问题呢?事实上,的确存在替代方案,

    但是会导致另外一个问题:前面层的梯度会变的很大而不是消失。

    这就是梯度爆炸问题。

    也就是说深度神经网络上的梯度要么倾向于爆炸要么倾向于消失,这都是不稳定的。

    而这个不稳定性也是基于梯度的学习算法都要面临的一个基本问题。

    不过我们也许会有疑问,为什么梯度消失就是问题,梯度是不是说明学习已经够了,这个神经元的参数已经被正确学习到了呢?

    事实当然不是这样的,我们一开始初始化产生的参数肯定不可能那么巧合是最优的参数。

    前层的学习速率慢,证明已经到了最优参数?no因为最开始的初始化肯定不能是最好的参数啊)

    然而从三层隐藏层的那个例子看到,随机初始化意味着第一层会错过很多的重要信息(会错过好多信息),

    即使后面的层训练的再好(前面和后面试分开的?)

    ,也很难识别输入图像。(前面的层次无法识别输入的图像)

    并不是第一层已经训练好了,而是它们无法得到足够的训练。

    如果我们想要训练这样的神经网络,就必须解决梯度消失问题。

    二. 是什么导致了梯度消失问题?

    看一个简单的例子,一个每层只有一个神经元的神经网络:

    不过注意到这里的其实表示的是损失函数,其输出分别为:。

    根据求导的链式法则有:

    为什么会发生梯度消失:

    其实看到这样一个式子:

    如果还记得前面章节神经元saturated发生的原因的话也能知道这里究竟是什么导致了梯度消失。

    注意到其间有一系列的项,先看一下sigmoid函数的导数图像:

    最大值也才0.25,然后由于参数的初始化使用的高斯分布,常常会导致,这样就会导致。然后一系列这些小值的积也会变得更小。

    当然这并不是一个严格的数学证明,我们很容易就会举出很多反例。

    比如在训练过程中权重是可能变大的,如果大到使得不再满足,

    或者说大于1,梯度就不会消失了,

    它将指数增长,从而导致另外一个问题:

    梯度爆炸问题。

    梯度爆炸问题:

    再来看一个梯度爆炸发生的例子。

    我们选择大的权重:

    然后选择偏差使得不太小。

    这个并不难做到,例如我们可以选择使得时的bias,于是得到,这样就会导致梯度爆炸了。

    梯度的不稳定性问题:

    经过这些讨论我们就会发现,梯度消失也好,梯度爆炸也好,归根结底是由于层数的增加,多个项相乘,势必就会导致不稳定的情况。

    除非这些积能恰到好处的相等,才可以让不同层之间的学习速率相近。不过实际上,这几乎是不可能发生的。总之,只要我们使用基于梯度的学习算法,不同层的学习速率势必是有很大差距的。

    练习:

    问题:

    之前我们基于的事实讨论了梯度消失的问题,那么是否可以使用另外一个激活函数,使得其导数足够大,来帮助我们解决梯度不稳定的问题呢?

    答案:

    这个当然是不可以的,不管一开始的值是怎么样的,因为多个项相乘,这就会导致积是指数增长或者指数下降,可能浅层时不明显,但是随着层数的增加,都会导致这个问题出现。

    梯度消失问题很难消除的原因:

    之前已经发现了在深层网络的前几层会出现梯度或者消失或者爆炸的问题。

    事实上,当使用sigmoid函数作为激活函数的时候,梯度消失几乎是总会出现的。

    考虑到避免梯度消失

    ,要满足条件。

    我们也许会觉得这还不简单,只要大不就可以了,但是注意到大,也会导致也大,然后就会很小。唯一的方法就是还需要保证只出现在一个很小的范围内,这在实际情况下显然是很难发生的。所以说就总是会导致梯度消失的问题。

    拓展:

    拓展一:

    考虑,假设

    (1) 证明这只可能在时成立

    之前已经知道在0处取最大值0.25,所以成立的话势必需要 。

    (2)假设,考虑到,证明此时的的变化区间被限制在宽度 内

    这个就是纯数学问题解方程了,利用一元二次方程的求根公式可以求得和,然后求对数后相减,稍微变换一下形式就可以得到这个结果。

    (3)证明上面的范围的最大值大约为0.45,在处得到。于是可以看到即使所有这些条件都满足,激活函数的符合要求的输入范围还是非常窄,还是很难避免梯度消失的问题。

    求导算导数为0的点求得。

    拓展二:identity神经元

    考虑一个单输入的神经元,中间层参数为和,然后输出层参数为,证明通过选择适当的权重和偏差,可以使得对任意成立。这个神经元可以被认为是一种identity神经元,其输出和输入一样(只差一个权重因子的放缩)。提示:可以将写为, 假设很小,使用处的泰勒展开。

    之前讨论sigmoid函数形状的时候知道,当增大的时候,函数会变得越来越窄,逼近解约函数。当非常小的时候,函数越来越宽,在某个区间内会逼近线性函数,但是既然是sigmoid函数,当时,函数都是会趋向于1或0的。

    这里的证明我没有用泰勒展开,我想的是既然要证明该函数在某个区间的线性,只要证明它导数在该区间趋近于常数即可。

    求的导数为。

    不妨令则上式变为:

    ,由于, 而是很小的数,于是可将上式展开为为常数,通过适当调整就可以使其输出恰好为。

    三. 复杂神经网络中的梯度不稳定问题

    Deep Residual Learning

    (2)初始化:

    我们设深度网络中某隐含层为

    H(x)-x→F(x),

    如果可以假设多个非线性层组合可以近似于一个复杂函数

    ,那么也同样可以

    假设

    隐含层的残差

    近似于某个复杂函数[6]

    。即那么我们可以将隐含层表示为H(x)=F(x)+ x。

    这样一来,我们就可以得到一种全新的残差结构单元

    ,如图3所示。可以看到,

    残差单元的输出

    由多个卷积层级联的

    输出和输入元素间相加(保证卷积层输出和输入元素维度相同),

    再经过ReLU激活后得到。

    将这种结构级联起来,就得到了残差网络。典型网络结构表1所示。

    图3 残差单元示意图

    可以注意到残差网络有这样几个特点:

    1. 网络较瘦,控制了参数数量;

    2. 存在明显层级,特征图个数逐层递进,保证输出特征表达能力

    3. 使用了较少的池化层,大量使用下采样,提高传播效率;

    4. 没有使用Dropout,利用BN和全局平均池化进行正则化,加快了训练速度;

    5. 层数较高时减少了3x3卷积个数,并用1x1卷积控制了3x3卷积的输入输出特征图数量,称这种结构为“瓶颈”(bottleneck)。

    网络响应:图7中可以看出,

    残差网络中大部分层的响应方差都处在较低水平,

    这一定程度上印证了我们的假设:

    这些响应方差较低的层响应较为固定,

    很有可能权重近似于零,

    这也就是说

    其所对应的残差结构可能近似于单位映射,

    网络的实际有效层数是要比全部层数要少一些的

    ,产生了跳过连接(Skip-connection)的作用。

    这样也就是网络为什么在较深的深度下仍可以保持并提升性能,

    且没有过多增加训练难度的原因。

    ResDeeper more

    何恺明等人基于深度残差结构,进一步设计了一些其他的残差网络模型,用于Cifar-10数据集上的分类任务,分类错误率如图8所示。可以看到,110层以下的残差网络中均表现出了较强的分类性能。但在使用1202层残差网络模型时,分类性能出现了退化,甚至不如32层残差网络的表现。由于Cifar-10数据集尺寸和规模相对较小,此处1202层模型也并未使用Dropout等强正则化手段,1202层的网络有可能已经产生过拟合,但也不能排除和之前“平整”网络情况类似的原因导致的性能退化。

    图8 Cifar-10数据集上残差网络和其他网络分类测试错误率对比

    何恺明等人经过一段时间的研究,认为极其深的深度网络可能深受梯度消失问题的困扰,BN、ReLU等手段对于这种程度的梯度消失缓解能力有限,并提出了

    单位映射的残差结构[7]。

    这种结构从本源上杜绝了梯度消失的问题:

    基于反向传播法计算梯度优化的神经网络,

    由于反向传播求隐藏层梯度时利用了链式法则,

    梯度值会进行一系列的连乘,导致浅层隐藏层的梯度会出现剧烈的衰减,这也就是梯度消失问题的本源,这种问题对于Sigmoid激活尤为严重,故后来深度网络均使用ReLU激活来缓解这个问题,但即使是ReLU激活也无法避免由于网络单元本身输出的尺度关系,在极深度条件下成百上千次的连乘带来的梯度消失。

    展开全文
  • 残差网络

    残差网络(Residual Network)是一种非常有效的缓解梯度消失梯度爆炸问题网络,极大的提高了可以有效训练的网络的深度。

    1.1残差网络的介绍和结构


    残差单元可以以跳层连接的形式实现,将单元的输入直接与单元输出加在一起,然后再激活。因此残差网络可以轻松使用主流的自动微分深度学习框架实现,直接使用BP算法更新梯度。残差神经网络的概念图如下所示:
    在这里插入图片描述
    如下图所示:pain network 和 残差网络的模型如下图所示:
    在这里插入图片描述
    在这里插入图片描述

    残差网络很好的解决了深度神经网络的模型退化问题,在ImageNet和CIFAR-10等图像任务上取得非常好结果。在同等层数前提下,残差网络也收敛的更快;并且去除个别神经网络层,残差网络的表现不会受到显著的影响

    1.2 残差网络的原理

    在这里插入图片描述
    经过展开,在前向传播时,输入信号可以从任意底层直接传到高层;其包含了一个天然的恒等映射,一定程度上解决了网络退化的问题。

    1.3 个人理解

    看了很多关于残差网络的资料和解释,我个人对残差网络有如此高的学习能力的解释如下:
    一般来说,神经网络的深度不应该太深,否则会出现梯度消失和梯度爆炸的情况。loss值在减小到一定程度后,随着训练的增加甚至会反弹。


    而残差网络(ResNet)的深度可以很深,很容易学得恒等函数,让loss很难反弹。


    一个网络深度越深,它在训练集上训练的效率就会有所减弱,这也是有时候我们不希望加深网络的原因。残差网络起作用的主要原因就是这些残差块学习恒等函数非常容易,很多时候甚至可以提高效率,因此创建类似残差网络可以提升网络性能。

    在这里插入图片描述

    与普通网络的串行结构相比,残差单元增加了跳跃映射,将输入与输出直接进行相加,并且补充卷积过程中损失的特征信息。由上图可知,设网络块学习到的映射是直接学习很难学习到的,但对一个残差函数来说,却可以很容易学习到的。因为此时网络块的训练目标是将逐渐逼近于某一特定映射。因此,最后的映射就是将F(x)和x相加。


    换句话说,拿一个网络块为例:以前都是一个模块中的**一层**在学习恒等函数,现在,变成了这个模块中的**两层**(输入+输出)来学习恒等函数。学习恒等函数的层数变多了,效果自然就加强了。
    展开全文
  • 一文读懂残差神经网络

    千次阅读 2021-11-30 17:34:05
    由于神经网络具有很强的拟合能力,我们期望训练一个很深的前馈神经网路,来完成任务。直观上看,更深的神经网络,在非线性激活函数的加持下,拥有更大的假设空间,因此当然“更有可能”包含了一个最优解。但是在实际...

    前言

    由于神经网络具有很强的拟合能力,我们期望训练一个很深的前馈神经网路,来完成任务。直观上看,更深的神经网络,在非线性激活函数的加持下,拥有更大的假设空间,因此当然“更有可能”包含了一个最优解。但是在实际使用时,训练又成了一个难题。除了过拟合问题以外,更深的神经网络会遇到如下两个难题,

    存在问题

    1.1 梯度消失爆炸问题

    以下图的反向传播为例,假设每一层只有一个神经元且对于每一层
    在这里插入图片描述
    传播链为
    在这里插入图片描述
    可以推导出
    在这里插入图片描述
    而sigmoid的导数如下图
    在这里插入图片描述
    由此可见导数的最大值为1/4,所以当w的初始化大或者小的时候,会使得连成结果很大或者很小,就会出现梯度爆炸、消失的情况。

    1.2 网络退化

    在前面的讨论中,梯度弥散/爆炸问题导致模型训练难以收敛,但是这个问题很大程度上已经被标准初始化和中间层正规化方法有效控制了,这些方法使得深度神经网络可以收敛。深度神经网络面临的另问题是网络退化问题:
    在神经网络可以收敛的前提下,随着网络深度增加,网络的表现先是逐渐增加至饱和,然后迅速下降。需要注意,网络退化问题不是过拟合导致的,即便在模型训练过程中,同样的训练轮次下,退化的网络也比稍浅层的网络的训练错误更高,如下图所示。
    在这里插入图片描述
    按道理来说,假如说K层获得最优结果,那么K+n层的情况下,结果也不会很差,因为后面几层只需要做恒等映射就可以了。总而言之,与浅层网络相比,更深的网络的表现不应该更差。因此,一个合理的猜测就是,对神经网络来说,恒等映射并不容易拟合

    残差网络

    2.1 介绍

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

    2.2 好用原因

    (1)解决1.1
    ResNet最终更新某一个节点的参数时,由于h(x)=F(x)+x,由于链式求导后的结果如图所示,不管括号内右边部分的求导参数有多小,因为左边的1的存在,并且将原来的链式求导中的连乘变成了连加状态(正是 ),都能保证该节点参数更新不会发生梯度消失或梯度爆炸现象。
    在这里插入图片描述
    (2)集成思想
    将残差网络展开,以一个三层的ResNet为例,将得到下面的树形结构:
    在这里插入图片描述
    使用图来表示就是
    在这里插入图片描述
    这样,残差网络就可以被看作是一系列路径集合组装而成的一个集成模型。

    展开全文
  • 针对高光谱影像分类时光谱维数据量巨大的特点,提出一种基于三维空洞卷积残差神经网络的高光谱影像分类方法。该方法以高光谱像元立方体作为数据输入,使用三维卷积核同时提取高光谱数据的空间维和光谱维特征,并通过在...
  • 残差神经网络(ResNet)理解

    千次阅读 2020-12-29 19:41:20
    快捷连接:在神经网络中增加线性转换分支,在线性转换和非线性转换之间寻求一个平衡。 与传统的机器学习相比,深度学习的关键特征在于网络层数更深、非线性转换(激活)、自动的特征提取和特征转换,其中,非线性...
  • Pytorch的学习——残差神经网络

    千次阅读 2020-01-09 15:53:50
    残差神经网络 残差神经网络产生的原因:为了更好的神经网络效果,研究人员想到了深层神经网络,即在浅层神经网络的基础上加更多的神经网络层,但是因为过拟合等的原因深层网络可能准确率还不如浅层网络,尽管误差值...
  • 残差网络(Residual Network)是一种非常有效的缓解梯度消失问题网络,极大的提高了可以有效训练的网络的深度。残差单元可以以跳层连接的形式实现,即将单元的输入直接与单元输出加在一起,然后再激活。因此残
  • 理解残差神经网络(Resnet)

    千次阅读 2020-07-05 11:19:05
    理解残差神经网络 目的 DNN在超过一定深度后,就会产生退化(degradation),在训练集和测试集的准确率都变低。一味地加深深度反而有不利的影响。很难找到一个合适的深度。如果可以给一个浅一些的神经网络加深,让...
  • 残差神经网络ResNet介绍

    千次阅读 2020-07-07 23:02:27
    神经网络层数比较高时,就很难被训练,容易出现梯度爆炸、梯度消失等问题。残差网络就是一种跳跃连接的网络,它通过将前面的激活值跳过中间的网络层而直接传到更后面的网络中,来避免梯度爆炸和梯度消失,训练更深的...
  • 该项目的目的是利用深度残差神经网络、多宽度频率增量数据增强和元数据融合技术,在具有相应物种标签的鸟类鸣叫数据上构建和训练鸟类物种分类器,改进最先进的鸟类物种分类器。
  • 人工智能-基于残差神经网络的图像阴影去除方法.pdf
  • 深度学习理论——残差神经网络

    万次阅读 多人点赞 2018-08-16 22:26:03
    大家好,继续理论学习,今天学习了何凯明大神的又一力作,残差神经网络。 我们知道,网络层数越深,其表达能力越强,但之前人们并不敢把网络设计的太深,因为会有梯度衰减等各种问题让网络的性能大幅度下滑,用一些...
  • 基于残差神经网络的木马通信流量分析研究.pdf
  • 人工智能-基于多任务残差神经网络的恒星光谱分类研究.pdf
  • 残差神经网络—代码详解

    万次阅读 多人点赞 2018-08-26 15:10:44
    一、残差神经网络——ResNet的综述 深度学习网络的深度对最后的分类和识别的效果有着很大的影响,所以正常想法就是能把网络设计的越深越好, 但是事实上却不是这样,常规的网络的堆叠(plain network)在网络很深...
  • 训练深层神经网络时,如果深度特别大,其实是很难训练下去的,因为会遇到梯度消失和梯度爆炸的问题。残差网络可以帮助我们更好地训练深层神经网络。...二、残差神经网络 首先给出一个普通神经网络.
  • 人工智能-基于残差神经网络和残基邻域特征的固有无序蛋白质分类.pdf
  • 残差神经网络究竟在干啥? 机器学习算法与自然语言处理今天 公众号关注 “ML_NLP” 设为 “星标”,重磅干货,第一时间送达! 来源:知乎专栏 作者:黄二二 本文作者重新审视了ResNet之所以工作的原因,得出结论: ...
  • 应用残差神经网络的色情图片检测.pdf
  • 【Pytorch(七)】基于 PyTorch 实现残差神经网络 ResNet
  • 所以,ResNet团队就大胆的提出,这可能是非线性的拟合能力太强(模型越深,非线性层堆叠越多,非线性拟合能力越强),所以他们就提出了想要增强线性的拟合能力的想法,提出了残差块。 残差块 在经过非线性层后,又...
  • 基于残差神经网络的矿井图像重构方法.pdf
  • 基于残差神经网络的陆空通话声纹识别.pdf
  • 基于残差神经网络的辐射源个体识别.pdf
  • 基于残差神经网络的图像增强方法研究.pdf

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 29,692
精华内容 11,876
关键字:

残差神经网络

友情链接: PID pic18f.zip