AI大模型-深度学习-卷积神经网络-残差网络

目的

为避免一学就会、一用就废,这里做下笔记

说明

本文内容紧承前文-卷积神经网络CNN,欲渐进,请循序

一、是什么?------ 定义与核心思想

残差网络(ResNet)是一种通过引入 "快捷连接" 来构建极深 卷积神经网络的架构。其核心思想是"残差学习"。

残差二字的由来:

  • 在数学和统计学中,残差 指的是观测值预测值之间的差值。
  • 在ResNet中,理想的"观测值 "设为H(x)
  • 基准预测值设为B(x)=x(即输入和输出相同,什么也不改变)
  • 残差F(x)=H(x)-B(x)=H(x)-x
  • 传统网络 :让多层网络直接学习一个目标映射 H(x)
  • 残差网络 :让多层网络学习一个残差映射 F(x) = H(x) - x,而最终的输出仍是 H(x)=F(x) + x。这里的 x 就是通过快捷连接直接传递过来的输入。

简单比喻

  • 传统学习像是让你从零开始画一只猫。
  • 残差学习则是:我先给你一张猫的草图 x,你只需要在上面修改 (添加或删减几笔)F(x),就能得到更完美的猫 H(x)。如果你的修改是零,那至少还有一张不错的草图保底。

关键技术恒等快捷连接 。它允许输入信号x跨层直接传递,与经过卷积层变换后的输出F(x)进行逐元素相加

二、为什么?------ 解决的问题与动机

提出残差网络,是为了解决传统深度CNN在扩展时遇到的两个根本性难题:

  1. 梯度消失/爆炸:网络层数过深时,误差梯度在反向传播中会不断连乘,导致传到浅层时变得极其微小(消失)或巨大(爆炸),使得浅层参数无法有效更新。

  2. 网络退化 :这是ResNet论文中更关键的一个发现。即使使用标准化等技术缓解了梯度问题,当网络深度增加时,训练集和测试集的准确率反而会下降 。这并非过拟合(因为训练误差也升高),而是表明极深的普通网络难以被优化,它连在训练集上找到一个好的解都做不到。

根本原因:在深度网络中,让多个非线性层直接拟合一个复杂的恒等映射(即输入=输出)是非常困难的。而很多深层网络的有效部分,恰恰接近于一个恒等映射。

残差网络的解决方案 :通过快捷连接,将"拟合恒等映射 "这个困难任务,转变为"将残差推向0 "的简单任务。如果恒等映射是最优的,那么将残差权重推为零即可;如果需要非恒等映射,也只需在恒等映射的基础上进行小幅调整。这极大地降低了优化难度

三、怎么办?------ 实现方式与关键结构

残差网络通过构建残差块 来实现其思想,下图是一个基础的残差块结构:

上图展示了一个包含两个卷积层的基本残差块 的完整数据流。输入 x 可以"抄近路"直接跳到相加环节,这保证了即使在最坏情况下(所有卷积层权重无效),网络至少能保留输入信息,而不会被"损坏"。这使得信号可以跨越多个层直接传播,显著缓解了梯度消失问题。

在实际构建深层网络(如ResNet-34, ResNet-50)时,会采用两种关键设计:

  1. 瓶颈结构 :在更深的残差块中,使用 1x1 卷积先降维再升维,大幅减少计算量。
  2. 下采样调整 :当需要缩小特征图尺寸(步长为2)或增加通道数时,快捷连接也需要进行相应调整(通常通过一个 1x1 卷积,步长为2来完成),以确保 F(x)x 的尺寸匹配,可以相加。

总结

  • 是什么 :一种通过 "快捷连接" 实现残差学习的深度CNN。
  • 为什么 :为了解决极深网络中的梯度消失网络退化问题,降低优化难度。
  • 怎么办 :构建 "恒等快捷连接 + 逐元素相加"残差块 作为基本单元,堆叠成深度网络,并在需要时用 1x1 卷积进行维度匹配。

正是这个简洁而深刻的设计,使训练数百甚至上千层的网络成为可能,深刻影响了深度学习的发展。

相关推荐
Eloudy7 小时前
用 Python 直写 CUDA Kernel的技术,CuTile、TileLang、Triton 与 PyTorch 的深度融合实践
人工智能·pytorch
神的泪水7 小时前
CANN 实战全景篇:从零构建 LLM 推理引擎(基于 CANN 原生栈)
人工智能
yuanyuan2o27 小时前
【深度学习】全连接、卷积神经网络
人工智能·深度学习·cnn
八零后琐话7 小时前
干货:Claude最新大招Cowork避坑!
人工智能
汗流浃背了吧,老弟!7 小时前
BPE 词表构建与编解码(英雄联盟-托儿索语料)
人工智能·深度学习
软件聚导航7 小时前
从 AI 画马到马年红包封面,我还做了一个小程序
人工智能·chatgpt
啊森要自信7 小时前
CANN ops-cv:AI 硬件端视觉算法推理训练的算子性能调优与实战应用详解
人工智能·算法·cann
要加油哦~7 小时前
AI | 实践教程 - ScreenCoder | 多agents前端代码生成
前端·javascript·人工智能
玄同7657 小时前
从 0 到 1:用 Python 开发 MCP 工具,让 AI 智能体拥有 “超能力”
开发语言·人工智能·python·agent·ai编程·mcp·trae
新缸中之脑7 小时前
用RedisVL构建长期记忆
人工智能