残差连接详细解释

为什么用残差连接??

随着深度网络层数的加深,带来了一系列问题,如梯度消失,梯度爆炸,模型容易过拟合,计算资源的消耗等问题。随着网络层数的增加发生了网络退化现象,loss先是下降并趋于饱和,然后loss增加。

针对这些问题,也有一些对应的解决方案,如dropout层用来防止过拟合,随机丢弃神经元对网络结构进行轻量化处理,一定程度上解决数据集小和网络复杂的情况下的过拟合问题。Rule层(y=max(0,x))主要用来防止梯度消失问题。。   BN(batch normlization)将数据规整到0到1或者-1到1之间,避免梯度爆炸和消失问题。但是在网络层数过深的情况下,这些优化措施的改善能力有限,因此提出了resnet网络中提出了残差连接思想来解决这些问题。。

残差连接的定义:

也就是输入和输入的非线性变化的叠加。x1=x+F(x,w)

残差块分为两部分,直接映射部分和残差部分。为weight代表卷积,addition代表单位加操作。

如果对函数求导,可以

### 深度学习中残差网络(ResNet)的残差连接机制及其作用 #### 残差连接定义 残差连接是一种特殊的网络架构设计,在传统前馈路径之外增加了额外的直连通路,使输入可以直接加到后续层的输出上。这种结构让模型能够更轻松地拟合恒等映射。 #### 工作原理 在标准卷积神经网络里,每一层都试图直接从输入数据学到有用的特征表示;然而当网络变得非常深时,就会遇到所谓的“退化问题”,即随着层数增多反而导致准确率降低的情况。为了解决这个问题,残差网络采用了一种新的思路——不是尝试去预测每层的目标输出 \(H(x)\),而是用一层或多层来建模一个残差函数 \(\mathcal{F}(x)=\mathcal{H}(x)-x\) 。这样做的好处是可以更容易地逼近零残差(也就是保持原始信号不变),因为即使权重很小也能维持住信息流不丢失[^1]。 具体来说,对于给定的一组连续层次\(L_{i}\sim L_{j}\),如果这些层之间存在一条捷径,则该部分可以写作: \[y=L_j(L_{j-1}(...(L_i(x))))+x\] 这里 \(x\) 表示跳过中间若干层后的输入向量或者张量形式的数据,而 \(+\) 运算符代表逐元素相加操作。因此,无论经过多少次变换处理之后,只要最终得到的结果加上最初的输入值就可以恢复成接近原样的形态[^3]。 #### 主要优势 引入这样的跳跃链接有助于缓解梯度弥散现象并促进反向传播过程中误差的有效传递,进而支持构建更深更大的CNNs而不必担心性能恶化的问题。此外,由于简化了优化目标,训练过程也会变得更加稳定高效[^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 ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值