卷积神经网络 - ResNet(残差网络)

残差网络(Residual Network,ResNet)通过给非线性的卷积层增加直连边 (Shortcut Connection)(也称为残差连接(Residual Connection))的方式来提高信息的传播效率。

这是一种特殊的深度神经网络结构,由 Kaiming He 等人在 2015 年提出,目的是解决深层网络训练中出现的退化问题和梯度消失问题。

假设在一个深度网络中,我们期望一个非线性单元(可以为一层或多层的卷积层)𝑓(𝒙; 𝜃) 去逼近一个目标函数为 h(𝒙)。如果将目标函数拆分成两部分:恒等函数(Identity Function)𝒙 和残差函数(Residue Function)h(𝒙) − 𝒙。

根据通用近似定理,一个由神经网络构成的非线性单元有足够的能力来近似逼近原始目标函数或残差函数,但实际中后者更容易学习。因此, 原来的优化问题可以转换为:让非线性单元 𝑓(𝒙; 𝜃) 去近似残差函数 h(𝒙) − 𝒙,并 用 𝑓(𝒙; 𝜃) + 𝒙 去逼近 h(𝒙)。

下图给出了一个典型的残差单元示例。残差单元由多个级联的(等宽)卷 积层和一个跨层的直连边组成,再经过 ReLU 激活后得到输出:

残差网络就是将很多个残差单元串联起来构成的一个非常深的网络。

接下来,我们从其核心概念、设计思想和举例说明:

1. 核心思想

  • 深层网络的难题
    随着网络层数加深,传统网络往往难以训练,原因在于:

    • 梯度在反向传播中逐渐变小(梯度消失),导致前面层更新缓慢。

    • 层数过深时,网络容易出现“退化”问题,即即使加深网络,训练误差也可能反而增大。

  • 残差学习(Residual Learning)
    ResNet 的核心思想是让网络学习“残差函数”,而不是直接学习原始映射。设原始目标映射为 H(x)(输入 x 到输出之间的映射),传统网络直接逼近 H(x)。而在残差网络中,设计层(即残差块)学习一个残差函数 F(x)=H(x)−x,因此原始映射可以表示为

    H(x)=F(x)+x.

    这种“快捷连接”(skip connection)直接将输入 x 加到输出上,帮助梯度直接传递,使得更深的网络也能有效训练。

2. 残差块结构

基本残差块通常由以下部分构成:

  1. 两个或三个卷积层:负责学习残差函数 F(x)。

  2. 激活函数(通常是 ReLU):在每个卷积层之后加上非线性变换。

  3. 快捷连接(Shortcut/Skip Connection):将输入 x 直接加到残差输出 F(x) 上,形成输出 H(x)=F(x)+x。

举例说明
假设一个简单的残差块,输入 x 经过两层卷积操作:

  • 第 1 层:卷积 W_1 + 批归一化 + ReLU,得到中间特征 F_1(x)。

  • 第 2 层:卷积 W_2 + 批归一化,得到残差 F(x)。

  • 然后输出为

    H(x) = F(x) + x.
  • 最后再经过 ReLU 得到最终输出。

这种设计让网络可以更容易地学习恒等映射(即如果 F(x)=0,那么 H(x)=x),从而防止网络层数增加时性能下降。

3. 残差网络的优势

  • 缓解梯度消失:快捷连接使得梯度在反向传播时可以直接传递给较早的层,从而避免梯度消失问题。

  • 易于训练更深的网络:通过残差块,网络可以堆叠几十甚至上百层,而不会出现明显的退化现象。

  • 更好的泛化能力:实验表明,ResNet 在 ImageNet 等大型数据集上表现优异,并推动了深度学习向更深层次的发展。

4. 直观比喻

可以将残差网络比作一条高速公路:

  • 普通网络:每一层都是一段独立的路段,如果某一段出现了堵车(梯度消失),整个行程都会受影响。

  • 残差网络:在每段路之间都有直通车道(快捷连接),即使某一段路段“堵车”,信号(梯度)也能通过直通车道直接到达前方,确保整个系统的流畅性。

5. 举例说明

假设我们有一个输入图像 x,通过残差块后得到输出 H(x)。

  • 如果输入 x 的信息本身已经足够好,那么理想情况下网络只需要学习到 F(x)≈0,于是 H(x)≈x。

  • 如果图像存在一些复杂特征需要调整,那么卷积层学习的 F(x) 会捕捉到这些“差异”信息,并加上 x 后得到更合适的特征表示。

例如,在图像分类任务中,如果低层已经能够提取到简单的边缘和纹理,而某些高层需要区分细微的类别差异,残差块就能帮助网络更精确地调整特征表示,而不会因层数加深而导致训练困难。

6. 总结

  • 残差网络通过引入快捷连接,让每个残差块学习输入与输出之间的差异(残差),而不是直接学习复杂的映射。

  • 这种设计有效缓解了深层网络训练中出现的梯度消失和退化问题,使得网络可以更深、更容易训练,并取得更好的性能。

  • 理解残差网络不仅需要从数学公式上掌握 H(x) = F(x) + x 的设计,还需要通过直观比喻和实验观察其对梯度流动和特征提取的积极作用。

这些详细解释和实例能够帮助我们更全面地理解残差网络的设计理念和优势。

基于CNN卷积神经网络ResNet50残差网络)的项目通常用于图像分类、目标检测和图像分割等计算机视觉任务。ResNet50是一种深度卷积神经网络,具有50个卷积层,通过引入残差块(Residual Blocks)来解决深层网络中的梯度消失问题,从而使得网络能够更深、更复杂。 ### 项目概述 #### 1. 项目背景 在深度学习领域,卷积神经网络CNN)在图像处理任务中表现出色。ResNet50是其中的一个经典模型,因其在ImageNet数据集上的优异表现而被广泛应用。 #### 2. 项目目标 - **图像分类**:将输入图像分类到预定义的类别中。 - **目标检测**:识别并定位图像中的多个目标。 - **图像分割**:将图像分割成不同的区域,每个区域属于不同的类别。 #### 3. 技术路线 - **数据预处理**:包括图像缩放、归一化、数据增强等。 - **模型搭建**:使用ResNet50作为基础模型,进行微调或迁移学习。 - **模型训练**:使用训练数据进行模型训练,调整超参数以优化性能。 - **模型评估**:使用验证集和测试集评估模型性能,计算准确率、召回率、F1-score等指标。 - **模型部署**:将训练好的模型部署到生产环境中,提供API接口或集成到应用程序中。 ### 关键步骤 #### 数据预处理 ```python from tensorflow.keras.preprocessing.image import ImageDataGenerator train_datagen = ImageDataGenerator( rescale=1./255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True) train_generator = train_datagen.flow_from_directory( 'data/train', target_size=(224, 224), batch_size=32, class_mode='categorical') ``` #### 模型搭建 ```python from tensorflow.keras.applications import ResNet50 from tensorflow.keras.models import Model from tensorflow.keras.layers import Dense, GlobalAveragePooling2D base_model = ResNet50(weights='imagenet', include_top=False) x = base_model.output x = GlobalAveragePooling2D()(x) x = Dense(1024, activation='relu')(x) predictions = Dense(num_classes, activation='softmax')(x) model = Model(inputs=base_model.input, outputs=predictions) ``` #### 模型训练 ```python model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) model.fit( train_generator, steps_per_epoch=train_generator.samples // train_generator.batch_size, epochs=10, validation_data=validation_generator) ``` #### 模型评估 ```python test_loss, test_accuracy = model.evaluate(test_generator, steps=test_generator.samples // test_generator.batch_size) print('Test accuracy:', test_accuracy) ``` ### 应用场景 - **医疗影像分析**:如肿瘤检测、疾病分类。 - **自动驾驶**:如行人检测、车道识别。 - **安防监控**:如人脸识别、异常行为检测。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值