ResNet (Residual Network) - 深度网络的新篇章:解决退化问题

背景 随着网络深度的增加,出现了退化问题:更深的网络并不能带来更好的性能,反而可能由于梯度消失或梯度爆炸导致模型训练困难。ResNet通过残差连接有效解决了这一问题。

网络结构 ResNet的核心是残差模块(Residual Block),其通过"跳跃连接"(skip connection)使梯度能够顺利传递,缓解了梯度消失问题。

性能与影响

实际应用案例

  • 基本残差模块:

    python 复制代码
    class BasicBlock(nn.Module):
        def __init__(self, in_channels, out_channels, stride=1, downsample=None):
            super(BasicBlock, self).__init__()
            self.conv1 = nn.Conv2d(in_channels, out_channels, kernel_size=3, stride=stride, padding=1, bias=False)
            self.bn1 = nn.BatchNorm2d(out_channels)
            self.relu = nn.ReLU(inplace=True)
            self.conv2 = nn.Conv2d(out_channels, out_channels, kernel_size=3, padding=1, bias=False)
            self.bn2 = nn.BatchNorm2d(out_channels)
            self.downsample = downsample
    
        def forward(self, x):
            identity = x
            if self.downsample is not None:
                identity = self.downsample(x)
    
            out = self.conv1(x)
            out = self.bn1(out)
            out = self.relu(out)
            out = self.conv2(out)
            out = self.bn2(out)
            out += identity
            out = self.relu(out)
    
            return out

    ResNet-18的代码实现:

    python 复制代码
    class ResNet(nn.Module):
        def __init__(self, block, layers, num_classes=1000):
            super(ResNet, self).__init__()
            self.in_channels = 64
            self.conv1 = nn.Conv2d(3, 64, kernel_size=7, stride=2, padding=3, bias=False)
            self.bn1 = nn.BatchNorm2d(64)
            self.relu = nn.ReLU(inplace=True)
            self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1)
    
            self.layer1 = self._make_layer(block, 64, layers[0])
            self.layer2 = self._make_layer(block, 128, layers[1], stride=2)
            self.layer3 = self._make_layer(block, 256, layers[2], stride=2)
            self.layer4 = self._make_layer(block, 512, layers[3], stride=2)
            self.avgpool = nn.AdaptiveAvgPool2d((1, 1))
            self.fc = nn.Linear(512, num_classes)
    
        def _make_layer(self, block, out_channels, blocks, stride=1):
            downsample = None
            if stride != 1 or self.in_channels != out_channels:
                downsample = nn.Sequential(
                    nn.Conv2d(self.in_channels, out_channels, kernel_size=1, stride=stride, bias=False),
                    nn.BatchNorm2d(out_channels)
                )
    
            layers = []
            layers.append(block(self.in_channels, out_channels, stride, downsample))
            self.in_channels = out_channels
            for _ in range(1, blocks):
                layers.append(block(out_channels, out_channels))
    
            return nn.Sequential(*layers)
    
        def forward(self, x):
            x = self.conv1(x)
            x = self.bn1(x)
            x = self.relu(x)
            x = self.maxpool(x)
    
            x = self.layer1(x)
            x = self.layer2(x)
            x = self.layer3(x)
            x = self.layer4(x)
    
            x = self.avgpool(x)
            x = torch.flatten(x, 1)
            x = self.fc(x)
    
            return x
    
    # 实例化ResNet-18
    model = ResNet(BasicBlock, [2, 2, 2, 2])
    print(model)
  • 关键创新

  • 残差连接:通过引入恒等映射,解决深度网络的退化问题。

  • 瓶颈结构:在较深的ResNet中(如ResNet-50、ResNet-101),采用1x1卷积层减少计算量。

  • 模块化设计:基于残差模块的层次堆叠,增强了网络的可扩展性。

  • 多层深度优化:更深的网络(如ResNet-152)在图像分类任务上获得更高精度。

  • 性能:ResNet在ImageNet上以3.57%的错误率刷新了记录。

  • 迁移学习:ResNet的预训练模型被广泛应用于目标检测、分割和其他任务中。

  • 深远影响:残差学习成为现代深度学习的核心思想,被广泛应用于各种网络设计。

  • 医学图像分析:用于病变检测和分割。

  • 自动驾驶:作为感知模块的一部分,用于目标检测和语义分割。

  • 自然语言处理:结合Transformer模型,用于多模态任务。

相关推荐
程序员柒叔2 分钟前
先AI化,再升级人生系统:解读孙宇晨与邵艾伦4.5小时长谈
人工智能
程序猿编码8 分钟前
不用 PyTorch!从零手写 C++ 深度学习框架,自动微分、CUDA、分布式一把搞定
c++·深度学习·大模型推理·自动微分
“AI国潮设计-小江”10 分钟前
《【AIGC实战】Python+SDXL批量生成“英歌舞草莓抱抱卷蛋糕”IP插牌立牌方案,锁定角色一致性,甜品插件化落地》
开发语言·人工智能·python·prompt·aigc
Ivanqhz11 分钟前
超参数考量与设计
数据库·人工智能·深度学习·算法·机器学习
AI小百科13 分钟前
模型微调是什么?企业怎么用好它
人工智能
硅谷秋水15 分钟前
VLMeg:把 VLM 从奖励回归器变成成功检测器
人工智能·机器学习·语言模型·数据挖掘·机器人
IT智慧客073116 分钟前
什么人适合做 OPC,又该怎么开始?
人工智能
Data_AI4Science17 分钟前
AI 时代,人更重要了
人工智能·ai·智能体·生物医药·电子实验记录本·ai取代人
企业数字化笔记19 分钟前
AI视频成片怎样做到可追溯?用镜头清单、文件哈希和字幕时间轴复盘交付
人工智能·音视频·哈希算法
霍格沃兹测试学院-小舟畅学22 分钟前
Playwright CLI:语义快照与局部检索,AI 如何找到正确的页面元素?
人工智能·microsoft