ResNet网络结构

MSRA(微软亚洲研究院)何凯明团队的深度残差网络(Deep Residual Network)在2015年的ImageNet上取得冠军,该网络简称为ResNet(由算法Residual命名),层数达到了152层,top-5错误率降到了3.57,而2014年冠军GoogLeNet的错误率是6.7。(何凯明博士,2007年清华大学毕业之后开始在微软亚洲研究院(MSRA)实习,2011年香港中文大学博士毕业后正式加入MSRA,目前在Facebook AI Research (FAIR)实验室担任研究科学家)。

VGGNet和GoogLeNet都显示了网络有足够的深度是模型表现良好的前提,但是在网络达到一定深度之后,简单的网络堆叠反而效果变差了。



 
ResNet指出,在许多的数据库上都显示出一个普遍的现象:增加网络深度到一定程度时,更深的网络意味着更高的训练误差
 
 
误差升高的原因是网络越深,梯度消失的现象就越明显,所以在后向传播的时候,无法有效的把梯度更新到前面的网络层,靠前的网络层参数无法更新,导致训练和测试效果变差。所以ResNet面临的问题是怎样在增加网络深度的情况下有可以有效解决梯度消失的问题
 

ResNet中解决深层网络梯度消失的问题的核心结构是残差网络



 

残差网络增加了一个identity mapping(恒等映射),把当前输出直接传输给下一层网络(全部是1:1传输,不增加额外的参数),相当于走了一个捷径,跳过了本层运算,这个直接连接命名为“skip connection”,同时在后向传播过程中,也是将下一层网络的梯度直接传递给上一层网络,这样就解决了深层网络的梯度消失问题。


下图是VGG-19、VGG扩展以及使用了 skip connection 的VGG扩展结构,实线表示等维度的传递,虚线表示不等维度的传递,维度不等的情况下一般是用0来填充:




对于shortcut连接的方式,作者提出了三个选项:

A. 使用恒等映射,如果residual block的输入输出维度不一致,对增加的维度用0来填充
B. 在block输入输出维度一致时使用恒等映射,不一致时使用线性投影以保证维度一致;
C. 对于所有的block均使用线性投影。
对这三个选项都进行了实验,发现虽然C的效果好于B的效果好于A的效果,但是差距很小,因此线性投影并不是必需的,而使用0填充时,可以保证模型的复杂度最低,这对于更深的网络是更加有利的
 
 
 残差网络ResNets的特点
 
1. 残差网络在模型表征方面并不存在直接的优势,ResNets并不能更好的表征某一方面的特征,但是ResNets允许逐层深入地表征更多的模型
2. 残差网络使得前馈式/反向传播算法非常顺利进行,在极大程度上,残差网络使得优化较深层模型更为简单

3. “shortcut”快捷连接添加既不产生额外的参数,也不会增加计算的复杂度。快捷连接简单的执行身份映射,并将它们的输出添加到叠加层的输出。通过反向传播的SGD,整个网络仍然可以被训练成终端到端的形式。


<think>嗯,用户想详细了解ResNet网络结构,特别是关于深度学习的架构详解。首先,我需要回忆一下ResNet的背景和核心思想。ResNet主要是为了解决深度网络中的梯度消失和退化问题,通过残差学习来实现的。记得残差块是它的核心组件,包含跳跃连接,这样梯度可以直接回传,避免在深层网络中消失。 接下来,我需要整理ResNet的整体架构。ResNet有不同深度的版本,比如18层、34层、50层、101层和152层。这些不同深度的模型在结构上有何区别呢?特别是残差单元的设计,比如对于较浅的网络(如ResNet34)使用的是两个3x3卷积层的堆叠,而更深的网络(如ResNet50)则采用了Bottleneck结构,即1x1、3x3、1x1的卷积组合,这样可以减少参数数量。 然后要注意的是,每个conv_x块中的第一个残差单元可能需要调整输入输出的维度,这时候会使用虚线连接,即1x1卷积进行升维或降维。另外,BN层的位置也很重要,ResNet中BN层是在卷积层之后、ReLU之前,而且卷积层不使用偏置项,这有助于稳定训练过程。 用户提供的引用中有提到不同结构的实验结果,比如图5的结构优于原ResNet,可能是因为BN作为预激活的正则化效果。不过ResNet的标准结构还是需要按照原始论文来阐述,同时可以提到这些优化的可能性。 还要考虑用户可能关心的问题,比如ResNet如何解决梯度消失,残差块的具体设计,不同深度的模型差异,以及实际应用中的实现细节。需要确保回答覆盖这些点,并且结构清晰,分点说明。 最后,生成的相关问题要围绕用户可能进一步想了解的内容,比如与VGG的比较、梯度消失的具体解决机制、Bottleneck的作用、实际应用场景以及后续的改进模型如ResNeXt。这样能够帮助用户更全面地理解ResNet及其应用。</think>### ResNet网络结构详解 #### 一、背景与核心思想 ResNet(残差网络)由何恺明团队于2015年提出,解决了深度神经网络中梯度消失和网络退化问题。核心创新是引入**残差学习框架**,通过跳跃连接(Shortcut Connection)将输入直接传递到深层,使网络可以学习输入与输出的残差$F(x) = H(x) - x$,而非直接学习$H(x)$[^4]。 #### 二、整体架构组成 ResNet包含5个主要阶段(conv1~conv5_x),不同深度的模型通过调整残差单元数量实现: 1. **前置层** $$ \text{conv1: } 7×7\text{卷积,步长2 → 3×3最大池化,步长2} $$ $$ \text{输出尺寸:} 112×112 $$ 2. **残差阶段** | 网络深度 | conv2_x | conv3_x | conv4_x | conv5_x | |----------|---------|---------|---------|---------| | ResNet18 | 2层×2 | 2层×2 | 2层×2 | 2层×2 | | ResNet50 | 3层×3 | 4层×4 | 6层×6 | 3层×3 | #### 三、残差单元设计 1. **基础单元(ResNet18/34)** $$ \text{结构:} 3×3\text{Conv→BN→ReLU→3×3Conv→BN} $$ $$ \text{跳跃连接:} \text{恒等映射或1×1卷积(维度匹配)} $$ ```python # 残差单元示例(实线连接) class BasicBlock(nn.Module): def __init__(self, in_channels, out_channels, stride=1): super().__init__() self.conv1 = nn.Conv2d(in_channels, out_channels, kernel_size=3, stride=stride, padding=1) self.bn1 = nn.BatchNorm2d(out_channels) self.conv2 = nn.Conv2d(out_channels, out_channels, kernel_size=3, padding=1) self.bn2 = nn.BatchNorm2d(out_channels) self.shortcut = nn.Identity() if in_channels == out_channels else \ nn.Sequential(nn.Conv2d(in_channels, out_channels, 1, stride=stride)) ``` 2. **Bottleneck单元(ResNet50/101/152)** $$ \text{结构:} 1×1\text{Conv(降维)→3×3Conv→1×1Conv(升维)} $$ $$ \text{参数量减少约} \frac{1}{4} \text{(相比两个3×3卷积)} $$ ![ResNet结构对比图][^3] #### 四、关键技术细节 1. **维度匹配规则** - 当输入输出通道数不同时,使用1×1卷积调整维度(虚线连接) - 卷积步长计算: $$ W_{out} = \left\lfloor \frac{W_{in} + 2P - F}{S} \right\rfloor + 1 $$ (F为卷积核大小,S为步长,P为填充)[^3] 2. **标准化层配置** - BN层置于卷积层之后、激活函数之前 - 所有卷积层**不使用偏置项**(由BN层补偿)[^3] #### 五、性能优势分析 1. 梯度传播效率提升:跳跃连接使梯度可直达浅层,缓解梯度消失[^4] 2. 网络深度突破:ResNet152比VGG19深8倍但参数更少 3. 特征复用能力:残差结构保留原始信息,避免特征退化[^2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值