残差结构详解

背景知识:

  1. 为什么要构建深层网络?
    答:认为神经网络的每一层分别对应于提取不同层次的特征信息,有低层,中层和高层,而网络越深的时候,提取到的不同层次的信息会越多,而不同层次间的层次信息的组合也会越多。
  2. ResNets为什么能构建如此深的网络?
    答:深度学习对于网络深度遇到的主要问题是梯度消失和梯度爆炸,传统对应的解决方案则是数据的初始化(normlized initializatiton)和(batch normlization)正则化,但是这样虽然解决了梯度的问题,深度加深了,却带来了另外的问题,就是网络性能的退化问题,深度加深了,错误率却上升了,而残差用来设计解决退化问题,其同时也解决了梯度问题,更使得网络的性能也提升了。

普通网络(Plain network),类似VGG,没有残差,凭经验会发现随着网络深度的加深,训练错误会先减少,然后增多(并证明的错误的增加并不是由于过拟合产生,而是由于网络变深导致难以训练)。从理论上分析,网络深度越深越好。但实际上,如果没有残差网络,对于一个普通网络来说,深度越深意味着用优化算法越难训练。实际上,随着网络深度的增加,训练误差会越来越多,这被描述为网络退化。
ResNets的提出,可以解决上述问题,即使网络再深吗,训练的表现仍表现很好。它有助于解决梯度消失和梯度爆炸问题,让我们在训练更深网络的同时,又能保证良好的信息。


残差结构示意图
在这里插入图片描述
残差网络的设计思想
残差元的主要设计有两个,快捷连接和恒等映射,快捷连接使得残差变得可能,而恒等映射使得网络变深,而恒等映射主要有两个:跳跃连接和激活函数。

### ResNet 残差结构详解 #### 1. 基本概念 ResNet(残差网络)通过引入跳跃连接解决了深层神经网络训练过程中遇到的梯度消失问题。这种设计使得模型能够更有效地传递梯度,从而支持更深层数的构建。 #### 2. 残差的设计理念 传统卷积神经网络随着深度增加会出现退化现象——即当网络变得更深时,准确率反而会饱和甚至下降。为解决这一难题,ResNet提出了残差学习框架。在网络中加入恒等映射路径,允许信息绕过某些层直接传播到后续层[^1]。 #### 3. 数学表达形式 假设输入特征图记作 \( x \),标准前向传播过程可表示为: \[ y = F(x,\{W_i\}) \] 其中 \( W_i \) 表示权重参数集合;\( F(\cdot) \) 是若干非线性变换函数组成的复合操作序列。而在残差单元里,则定义了一个新的输出计算方式: \[ y = F(x,\{W_i\}) + x \] 这里增加了原始输入 \( x \) 的直连通路,形成了所谓的“捷径连接”。这样做的好处是可以让优化器更容易找到合适的解空间位置,因为即使 \( F(x,\{W_i\})=0 \),整个系统的输出仍然保持不变,不会造成任何负面影响[^2]。 #### 4. 实现细节 具体实现上,为了使加法运算合法有效,需要确保参与相加的操作数具有相同维度大小。如果两者的形状不匹配,则可以通过填充零或采用线性投影的方式调整尺寸。此外,在实际应用中还经常会在每个阶段的第一个残差模处改变通道数量并执行下采样操作来减少分辨率。 ```python import torch.nn as nn class BasicBlock(nn.Module): expansion = 1 def __init__(self, inplanes, planes, stride=1, downsample=None): super(BasicBlock, self).__init__() self.conv1 = conv3x3(inplanes, planes, stride) self.bn1 = nn.BatchNorm2d(planes) self.relu = nn.ReLU(inplace=True) self.conv2 = conv3x3(planes, planes) self.bn2 = nn.BatchNorm2d(planes) self.downsample = downsample self.stride = stride def forward(self, x): residual = x out = self.conv1(x) out = self.bn1(out) out = self.relu(out) out = self.conv2(out) out = self.bn2(out) if self.downsample is not None: residual = self.downsample(x) out += residual out = self.relu(out) return out ```
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值