Resnet原理讲解

前言:

由于以往的网络模型都是层层叠加,网络的层次太深,导致了浅层的参数不敏感,从而出现了网络退化、梯度消失等问题。都是因为反向传播中的链式法则都是相乘,在求梯度时,都在(01)之间,层层缩小,就会出现梯度消失,反之,梯度大于1,就是梯度爆炸。

于是出现了Resnet网络,该网络模型中的核心结构(残差结构)解决了网络退化的问题,即在求梯度时,对x求导时出现了加法

结构图:

原始的34层-Resnet网络:

添加残差结构的34层-Resnet网络:

  残差结构:

 残差结构讲解:

在正常的神经网络中,增加一个分支,可以理解为一条高速公路,简单来说,就是将数据原样传输,直接对结果产生影响,使网络的输出不再是单纯卷积的输出,而是拥有原始特征和提取出来的特征,是一种加法而不是拼接,使梯度敏感,能够让浅层特征与深层特征结合(F(x)+x),使提取的特征效果更好,并且前提是要求前后的通道数是一致的

Resnet的网络结构:

 

 可以看出Resnet模型由多个残差模块堆叠起来,主要分为5个卷积块和一个pooling层,首先通过第一个卷积块进行下采样。以34层Resnet网络为例,添加虚线残差结构,目的是为了进行通道数的改变,来保持主分支与short cut的输出维度相同。

### ResNet架构及工作原理详解 #### 背景介绍 随着神经网络层数的增加,训练难度也随之增大。深层网络容易遇到梯度消失和梯度爆炸等问题,这使得模型难以收敛并可能导致性能下降。为解决这一问题,ResNet(残差网络)通过引入残差学习机制有效缓解了这些问题。 #### 基本概念 ResNet的核心思想在于构建一种允许信息绕过某些层传递的方式,从而让网络能够更容易地学习到恒等映射或其他复杂函数[^1]。这种设计被称为“残差块”,它通过在传统卷积操作的基础上加入跳跃连接实现。 #### 架构组成 ResNet由多个堆叠的残差模块构成,这些模块可以分为两种主要形式: - **基本残差块** 对于较浅的网络结构(如ResNet-18 和 ResNet-34),每个残差块通常包含两个连续的3×3卷积层以及批量归一化(Batch Normalization)和ReLU激活函数。输入数据经过这两个卷积处理后再与原始输入相加形成最终输出。 - **瓶颈残差块** 更深的网络版本(如ResNet-50, ResNet-101 及 ResNet-152)则采用更复杂的瓶颈结构来减少计算量。这类残差块先利用1×1卷积降低通道数以压缩特征图尺寸,接着执行标准3×3卷积提取空间特征,最后再用另一个1×1卷积恢复原来的维度以便后续加法运算完成短路链接功能。 #### 工作流程分析 当信号流经某个特定层次时,如果该处存在一条直接通往更高阶位置路径,则称之为捷径(shortcut connection)或者跨层连接(skip connections)。具体来说,在前向传播过程中,除了正常逐级变换外还会保留一部分未经修改的信息沿此特殊路线传输至目标节点并与之融合;而在反向传播期间,误差项同样会沿着相同轨迹返回更新参数权重值。如此这般既保证了低频部分得以完好保存又促进了高频细节的有效捕捉,进而提升了整体泛化能力。 ```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): identity = 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: identity = self.downsample(x) out += identity out = self.relu(out) return out ``` 上述代码片段展示了如何定义一个基础版的残差单元类`BasicBlock`,其中包含了两组卷积操作及其配套组件,并实现了跳越连接逻辑。 --- #### 总结 ResNet通过巧妙的设计解决了深度神经网络中的退化问题,极大地推动了图像分类等领域的发展。其核心贡献在于提出了残差学习的概念,即通过对原输入加上少量调整后的输出来进行预测,而不是单纯依赖新增加的部分去逼近理想解。这种方法不仅简化了优化过程还增强了表达力。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值