郭震 AI公众号:郭震AI

7 ResNet网络结构详解

发布日期:

最近更新:

分类: 30个神经网络

预计阅读: 3 分钟

阅读次数: 0

系列进度

AI 30 个神经网络 · 第 7 / 62

预计阅读3 分钟
结构重点6 个
图文要点6 张
正文规模1.4k 字
ResNet网络结构详解结构图查看大图
ResNet网络结构详解结构图

ResNet 的关键是让信息有一条更短的路回传。残差连接不是装饰,它决定了深层网络能不能稳定训练。这篇重点看结构。先把数据流、关键模块和输出层画清楚,再回头看公式或代码。

ResNet网络结构详解实操核对图查看大图
ResNet网络结构详解实操核对图

我会看每个残差块的输入输出通道是否一致,不一致时是否有投影分支。这里错了,网络通常会直接维度报错。

在前一篇关于BERT的训练技巧中,我们讨论了BERT模型如何利用其独特的架构和自监督学习从大量文本中进行特征提取,然后在各种任务上表现出色。接下来,我们将深入了解ResNet,一种在计算机视觉领域广泛应用的深度学习架构,分析其网络结构及其运作原理。

ResNet简介

ResNet(Residual Network)是一种深度卷积神经网络,最初由Kaiming He等人在2015年提出,并在ImageNet挑战赛中取得了优异的成绩。ResNet的成功在于其引入了残差学习(Residual Learning)的方法,这使得构建极深网络(如152层及以上)成为可能。

ResNet结构判断卡查看大图
ResNet结构判断卡

学习 ResNet 结构时,先看残差块、跳跃连接、恒等映射和层数变化。理解信息如何绕过复杂层,才能明白它为什么适合深层网络。

网络结构

ResNet的核心思想是通过引入跳跃连接(skip connections)来解决深度神经网络训练中的梯度消失退化问题。在传统的CNN中,随着网络层数的增多,模型的训练准确性可能会下降,而ResNet通过如下结构来解决这一问题:

神经网络阅读地图卡查看大图
神经网络阅读地图卡

开始读《ResNet网络结构详解》前,可以先看图中从问题到结果的路径。读完后再对照正文,确认自己能不能照着复现。

残差块

ResNet的基本组成单元是残差块。每个残差块包含两个或三个卷积层,以及连接输入与输出的跳跃连接。其结构可以用如下公式表示:

H(x)=F(x)+x\mathcal{H}(x) = \mathcal{F}(x) + x

这里,H(x)\mathcal{H}(x)是残差块的输出,F(x)\mathcal{F}(x)是通过卷积层的变换,xx是块的输入。通过这种方式,网络可以学习到实现这一变换的残差,而不是直接学习所需的映射。

残差块实现的关键代码

PyTorch中,实现一个简单的ResNet残差块的代码如下:

import torch
import torch.nn as nn

class BasicBlock(nn.Module):
    expansion = 1
    
    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, stride=1, padding=1, bias=False)
        self.bn2 = nn.BatchNorm2d(out_channels)
        self.downsample = downsample

    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

网络层级

ResNet模型可以有多种深度,主要有ResNet-18ResNet-34ResNet-50ResNet-101ResNet-152。其中,较深的网络使用了带有Bottleneck(瓶颈)的结构,以减少计算复杂性和参数数量。在ResNet-50及以上的版本中,每个残差块通常由三层构成:1x1的卷积层、3x3的卷积层和另一个1x1的卷积层。

ResNet网络结构详解应用复盘卡查看大图
ResNet网络结构详解应用复盘卡

如果《ResNet网络结构详解》还没完全消化,可以从这张卡片的四个动作重新走一遍。

ResNet网络结构详解应用检查卡查看大图
ResNet网络结构详解应用检查卡

回看《ResNet网络结构详解》时,不必一次做大项目,先用一条简单样例确认主线是否清楚。

总结

ResNet网络结构通过引入残差学习和跳跃连接,大大缓解了深度网络训练面临的挑战,使得网络能够更深,并且在各种视觉任务上获得了优异的结果。

下一篇将讨论ResNet的优势与不足,深入分析其在实际应用中的表现及改进方向。通过对比BERTResNet的特性,我们可以更好地理解深度学习模型在不同领域的应用场景。

相关教程

相关入口

AI 教程总索引

分享文章

转发到常用平台

微信/朋友圈可先复制链接

相关教程

AI 教程总索引

相关内容

相关 AI 教程

返回栏目

Reader Messages

读者留言

有问题、补充资料或实测结果,可以直接留下。这里不需要登录。

最多 800 字

为了防刷,每条留言会做长度、链接数量和提交频率限制。

0/800

留言列表

0
正在加载留言...