看了知乎的一篇关于残差网络的文章,https://zhuanlan.zhihu.com/p/72679537,我想发表一点我自己的看法!
1.我对残差网络的理解
-
残差网络(ResNet)确实与传统的卷积神经网络(CNN)在结构上有所不同,主要在于其在网络侧面引入了
恒等连接线
,也称为残差连接或跳跃连接。尽管这种改变似乎与传统的直线结构相悖,但残差网络在精度和性能上通常优于传统的CNN,尤其是在处理深度神经网络时。 -
残差连接的主要目的是
解决深度神经网络训练过程中的梯度消失和梯度爆炸问题
。在传统的CNN中,输入数据通过一系列的层逐层传递,每个层都对数据进行线性变换和非线性变换。当网络层数加深时,梯度在反向传播过程中可能会逐渐减小甚至消失
,导致网络难以训练。而残差连接允许网络跨层直接传递信息,使得梯度能够更直接地回流到前面的层,从而有效地缓解梯度消失问题。 -
在残差网络中,每个网络块(通常是两个或三个卷积层的组合)的输出不仅通过下一层进行传递,还通过恒等连接直接与前一个网络块的输入相加。这种相加操作形成了
残差
,即网络学习的不是完整的输出,而是输出与输入的差值。这种残差学习的方式使得网络更容易优化,因为网络只需要学习输入和输出之间的微小差异,而不是整个输出
。 -
由于残差连接的存在,残差网络在训练过程中能够更快地收敛,并且通常能够达到更高的精度。此外,残差网络还具有更好的特征提取能力,因为它能够
保留更多的原始输入信息
,并通过跨层连接将这些信息传递给后面的层。 -
至于如何进行运算,残差网络的基本运算过程与传统CNN类似,包括卷积、激活函数、池化等操作。但不同之处在于,在每个网络块的输出处,除了进行常规的卷积操作外,还需要将输出与通过恒等连接传递过来的输入进行相加,形成残差。这个残差随后会经过激活函数,并继续在网络中传递。
理解2-有人问我残差不是相减吗,看结构图那是相加呀!
其实,加法何尝不是一种“减法”呢,a=b+c,也就是c=a-b
在残差网络中,残差的概念确实涉及到输入与输出之间的关系,但这里的“残差”并非简单地指相减的结果。实际上,残差网络中的“残差”是通过将网络块的输出与恒等连接传递的输入相加来构建的。
这种相加操作背后的思想在于,网络试图学习输入和输出之间的“差异”或“变化量”,而不是直接学习从输入到输出的完整映射。这种差异或变化量就是所谓的“残差”。通过引入这种残差连接,网络能够更容易地优化和学习,特别是在处理深度网络时,能够缓解梯度消失问题,提高训练效率和性能。
因此,尽管“残差”这个词在直观上可能让人联想到相减,但在残差网络的上下文中,它实际上是通过相加操作来构建的。这种设计使得网络能够专注于学习输入和输出之间的变化,而不是整体的映射,从而提高了网络的训练效果和性能。
简单来说,残差网络中的“残差”是指网络试图学习的输入和输出之间的差异,这种差异是通过相加操作来构建的,而不是相减。