ResNet残差网络

ResNet是一种深度残差网络,通过引入残差块和跳连解决了深度网络中梯度消失的问题,提高了模型训练的效率和性能。残差块包含两个分支,通过相加操作保持信息流畅通。ResNet在图像分类等领域表现出色,是深度学习的经典模型之一。
摘要由CSDN通过智能技术生成

1.ResNet介绍

ResNet是由微软研究员提出的一种深度残差网络,采用了残差学习的方法,通过引入“跳连”(skip connection)的方式解决了在深度网络中梯度消失和梯度爆炸的问题,从而有效解决了通过增加网络深度提高网络性能所面临的难题。

其核心思想就是:设想要学习一个恒等映射,若直接拟合该映射难以学习到,则可以通过构建一个具有相同映射的更浅的网络,通过这个新的网络与旧网络之间的“跳链接”来更好地进行学习。

ResNet中加入了“残差块”(residual block),残差块接受输入,通过卷积、激活函数等操作后得到输出,该输出与输入之间通过“跳链接”相连接,即输出直接加到输入中,这种“跳链接”可以使得网络中的信息流更加畅通,而且不会使得信息丢失。同时,ResNet还采用了大量的批标准化和学习率衰减等方法,使得网络更加容易训练和收敛,使得模型更容易优化。

ResNet在图像分类、目标检测、人脸识别等多个领域都有很好表现,在ImageNet分类竞赛中达到了当时的最好结果,成为了深度学习领域中的经典模型之一。

2.残差块

残差块的设计思路是基于残差学习的理念,即学习“残差”以提高网络性能。在残差块中,输入信号会被分别送到两个分支上,其中一个分支是指路连接(shortcut connection),另一个分支是主路(main path)。主路中包含一系列卷积、批标准化和激活函数等操作,最终的输出与指路连接的输入进行相加操作,得到最终的输出。

残差块的主要设计思路是在充分保留特征的基础上,通过跳过一定深度的主路,提高特征传递的效率。在传统的深层神经网络中,由于信号需要逐层传递,当网络层数较深时,信号存在衰减和消失的问题,网络表现能力减弱,难以训练。而在 ResNet 中引入了跨层连接的指路连接分支,能够直接跨越若干层,使得信号能够更加自由快速地从前层传递到后层,使得模型能够轻松训练,并提高模型的性能。

此外,残差块的设计思路还考虑了一些实用性问题,如在卷积核大小、批标准化和激活函数等方面的选择,以及不同层之间卷积核的厚度变化等,从而使得残差块能够有效地应用于各种不同的深度学习任务和实际应用中。

残差块的实现为如下的代码:

import torch
from torch import nn
from torch.nn import functional as F
from d2l import torch as d2l


class Residual(nn.Module):  #@save
    def __init__(self, input_channels, num_channels,
                 use_1x1conv=False, strides=1):
        super().__init__()
        self.conv1 = nn.Conv2d(input_channels, num_channels,
                               kernel_size=3, padding=1, stride=strides)
        self.conv2 = nn.Conv2d(num_channels, num_channels,
                               kernel_size=3, padding=1)
        if use_1x1conv:
            self.conv3 = nn.Conv2d(input_channels, num_channels,
                                   kernel_size=1, stride=strides)
        else:
            self.conv3 = None
        self.bn1 = nn.BatchNorm2d(num_channels)
        self.bn2 = nn.BatchNorm2d(num_channels)

    def forward(self, X):
        Y = F.relu(self.bn1(self.conv1(X)))
        Y = self.bn2(self.conv2(Y))
        if self.conv3:
            X = self.conv3(X)
        Y += X
        return F.relu(Y)

3.经典的ResNet-18模型 

基础网络单元设计:ResNet-18 中的基础网络单元是由两个残差块组成,每个残差块包含两个有相同卷积核大小的卷积层。每个卷积层都是带有 stride=1 的 3x3 卷积,具体如下:

  • 残差块的第一个卷积层输入输出通道数相同,即在主路和指路连接两个分支都采用了相同的通道数,可以增加模型深度和表达能力,同时也能够在特征传播过程中防止信息瓶颈。
  • 在两个卷积层之间使用批标准化(batch normalization)和 ReLU 激活函数提高网络鲁棒性和非线性建模能力。

网络结构设计: ResNet-18 的网络结构主要是由多个基础网络单元组成,其中第一个基础单元采用一个带有 stride=2 的 7x7 卷积来降采样。另外,每个基础单元之间通过 max pooling 操作进行下采样,从而实现更大的感受野。

指路连接设计:ResNet-18 的指路连接采用了相加的方式,从而能够有效地将前面层的特征和后面层的特征进行结合,避免了模型过度依赖高层次信息的问题,减轻了梯度消失问题。

模型参数设计:ResNet-18 的模型参数设置非常少,只有几百万个,相比于其他深度学习模型,其参数量很小,更加适合在资源有限的情况下应用于实际场景。

综上所述,ResNet-18 的设计思路主要从卷积单元、网络结构、指路连接和模型参数等多个方面具体考虑,其使用简洁、鲁棒性强、通用性好,很好地解决了深层网络难以训练的问题,成为深度学习领域中的经典网络之一。

 4.残差网络总结与展望

残差网络是一种通过引入跳跃连接(shortcut connection)解决深度神经网络训练困难问题的网络结构,在计算机视觉、自然语言处理、语音识别等领域得到了广泛的应用。

在残差网络的设计中,通过添加残差单元使得网络能够在不增加参数量的情况下增加深度,避免了网络随着深度的增加导致梯度消失或梯度爆炸的问题,同时也能够有效地增加网络的表达能力。此外,残差网络的跳跃连接设计还可以避免信息的丢失,提高网络的精度和鲁棒性。

随着深度学习技术的不断发展和应用的不断推广,残差网络同时也在不断演进和完善。例如,在 ResNet 后面的 DenseNet、ResNeXt 等网络结构中,在残差单元中引入了更加复杂的结构,通过更加灵活的连接方式和更加有效的信息传递方式,进一步提高网络的表达能力和精度。

同时,近年来也有多篇研究文章提出了一些改进和变种的残差网络设计,例如边界感知池化(boundary aware pooling)、低秩逼近卷积(low-rank approximation convolution)等,这些设计可以进一步减少模型的参数量和计算复杂度,同时提高网络的性能。

在未来,残差网络有望在更多领域得到应用,例如增强学习、图像超分辨率、目标检测和视频分析等。同时,不断改进和优化残差网络的设计和训练方法,可以进一步提高深度学习的性能和泛化能力。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值