残差网络:一文读懂 AI 大模型的基石技术

9 阅读11分钟

从深度学习到残差网络:一文读懂 AI 大模型的基石技术

本文将带你从零开始,循序渐进地理解深度学习、卷积神经网络,以及革命性的残差网络(ResNet)。即使你不是技术专业人士,也能轻松读懂!


一、开篇:为什么要了解残差网络?

如果你关注过 AI 领域,一定听说过 ChatGPT、Stable Diffusion 这些大模型。但你可能不知道,支撑这些庞然大物的底层技术中,有一个关键的里程碑——残差网络(ResNet)

2015 年,微软亚洲研究院的何恺明团队提出了残差网络,一举拿下了当年 ImageNet 图像识别大赛的冠军,错误率仅有 3.57%——这意味着 AI 的图像识别能力首次超越了人类!更重要的是,ResNet 的核心思想至今仍在影响着几乎所有的深度学习模型。

让我们从最基础的概念开始,一步步揭开它的神秘面纱。


二、什么是深度学习?

2.1 从人脑到人工神经网络

想象一下我们的大脑是如何工作的:当你看到一只猫时,眼睛接收光信号,然后信号通过无数个神经元层层传递、处理,最终你的大脑告诉你"这是一只猫"。

人工神经网络就是模仿这个过程的数学模型:

输入层          隐藏层(多层)         输出层
  ○               ○  ○  ○              ○
  ○    →         ○  ○  ○      →       ○ (是猫的概率)
  ○               ○  ○  ○              ○ (是狗的概率)
(图像像素)    (特征提取)          (分类结果)
  • 输入层:接收原始数据(比如图片的像素值)
  • 隐藏层:对数据进行加工处理(提取特征)
  • 输出层:给出最终结果(分类、预测等)

2.2 "深度"是什么意思?

所谓深度学习,就是"深层"的神经网络学习。这里的"深"指的是神经网络的层数多

网络类型层数特点
浅层网络2-3 层只能学习简单模式
深层网络数十到数百层能学习复杂的抽象特征

打个比方:

  • 浅层网络就像小学生,只能认识简单的字母和数字
  • 深层网络就像大学教授,能理解复杂的概念和抽象的知识

2.3 深度学习为什么这么强大?

深度学习的魔力在于自动特征提取

在传统机器学习中,工程师需要手动告诉机器"猫的特征是尖耳朵、胡须、毛茸茸..."而深度学习可以自己从大量数据中学习这些特征:

  • 第 1 层:学习边缘、颜色
  • 第 2 层:学习纹理、局部形状
  • 第 3 层:学习耳朵、眼睛等部位
  • 第 N 层:学习整体"猫"的概念

这种层层递进、从简单到复杂的学习方式,让深度学习在图像、语音、文本等领域取得了突破性进展。


三、卷积神经网络:计算机的"眼睛"

3.1 为什么需要卷积神经网络(CNN)?

普通的神经网络处理图像时有个大问题:参数太多了

假设一张 224 x 224 的彩色图片:

  • 像素数:224 x 224 x 3 = 150,528 个输入
  • 如果第一层有 1000 个神经元,参数数量 = 1.5 亿!

这不仅计算量惊人,还容易导致过拟合(模型死记硬背,泛化能力差)。

3.2 卷积的核心思想:局部感知 + 参数共享

卷积神经网络用一个巧妙的方法解决了这个问题:

1. 局部感知(Local Connectivity)

与其让每个神经元看整张图片,不如只让它看一小块区域。就像我们看东西时,视觉焦点一次也只关注一小块区域。

原图:                     卷积核(滤波器):
[ 1  2  3  4  5 ]         [ 1  0 -1 ]
[ 6  7  8  9  10]    ×    [ 1  0 -1 ]   =   特征图
[ 11 12 13 14 15]         [ 1  0 -1 ]
[ 16 17 18 19 20]
[ 25 22 23 24 25]

卷积核在图像上滑动,每次只处理一个 3x3 的区域

2. 参数共享(Parameter Sharing)

同一个卷积核在整张图片上滑动,用相同的参数处理不同位置——这大大减少了参数数量!

方式参数数量
全连接1.5 亿
卷积(3x3核)27 个

差距惊人吧?这就是卷积的威力。

3.3 CNN 的经典结构

一个典型的 CNN 包含以下组件:

输入图像
    ↓
[卷积层] → 提取特征(边缘、纹理等)
    ↓
[激活函数 ReLU] → 引入非线性
    ↓
[池化层] → 降低分辨率,减少计算量
    ↓
[重复上述结构若干次...][全连接层] → 综合特征,做出判断
    ↓
输出结果

卷积层:用卷积核提取图像特征 激活函数(ReLU)f(x) = max(0, x),简单但有效,让网络能学习复杂模式 池化层:通常取局部最大值(Max Pooling),压缩信息的同时保留重要特征

3.4 CNN 的发展历程

年份网络名称层数突破
1998LeNet-57首个成功的 CNN,用于手写数字识别
2012AlexNet8深度学习的复兴之作,ImageNet 冠军
2014VGGNet19证明了网络越深效果越好
2014GoogLeNet22引入 Inception 模块
2015ResNet152残差学习,突破深度限制

注意到了吗?网络越来越深,效果越来越好。但 VGG 到 ResNet 之间发生了什么?为什么层数能从 19 跃升到 152?

这就要说到 ResNet 解决的核心问题了。


四、残差网络:深度学习的里程碑

ResNet 解决的核心问题(速览)

在深入了解残差网络之前,让我们先明确它到底解决了什么问题:

问题表现ResNet 的解决方案
退化问题网络层数增加后,训练和测试准确率都下降残差学习 + 跳跃连接
梯度消失/爆炸深层网络反向传播时,梯度变得极小或极大,导致浅层无法有效学习跳跃连接提供梯度直通路径
恒等映射难以学习网络即使只需要"什么都不做",也很难学会跳跃连接直接提供恒等映射

一句话总结:ResNet 通过引入跳跃连接(Skip Connection),让信息和梯度能够"绕过"中间层直接传递,从而使训练非常深的网络成为可能。

下面我们详细看看这些问题是如何产生的,以及 ResNet 的解决思路。


4.1 深度网络的困境

理论上,网络越深,能学习的特征越抽象、越复杂,效果应该越好。但现实中却出现了一个奇怪的现象:

网络层数增加到一定程度后,准确率反而下降了!

                   准确率
                     ↑
                     │    ___
                     │   /   \
                     │  /     \___
                     │ /           \
                     │/             \_____
                     └─────────────────────→ 网络深度
                              ↑
                           这里开始下降!

这个问题叫做退化问题(Degradation Problem),注意它不是过拟合(过拟合是训练集上表现好但测试集上差),而是训练集和测试集上的效果都变差了!

这说明更深的网络更难训练。主要原因有两个:

  1. 梯度消失/爆炸:反向传播时,梯度在层层传递中变得极小或极大,导致浅层几乎无法学习
  2. 恒等映射难以学习:即使只需要让深层网络学会"什么都不做"(恒等映射),它也很难做到

4.2 残差学习:一个天才的想法

何恺明团队提出了一个简单却革命性的想法:

如果深层网络难以学习恒等映射,那我们直接把恒等映射"送"给它

具体做法是引入跳跃连接(Skip Connection)

传统网络:
输入 x → [卷积层1][卷积层2] → 输出 H(x)
目标:学习 H(x)

残差网络:
                    ┌──────────────────────────┐
                    │      跳跃连接(恒等映射)  │
                    ↓                          │
输入 x → [卷积层1][卷积层2] → (+) → 输出 H(x) = F(x) + x
                                 ↑
                            两者相加
目标:学习 F(x) = H(x) - x

关键洞察

  • 传统网络需要直接学习一个复杂的映射 H(x)
  • 残差网络只需要学习残差 F(x) = H(x) - x,即输入和输出的差值

如果最优情况是恒等映射(什么都不做),那么:

  • 传统网络需要让每一层都精确学习 H(x) = x,很难!
  • 残差网络只需要让 F(x) = 0,把所有权重推向零,容易得多!

4.3 为什么残差学习有效?

让我们用一个生活中的例子来理解:

假设你是一个学生,老师给了你两种考试方式:

方式 A(传统网络):直接写出答案(比如 3.14159265...)

方式 B(残差网络):给你一个参考答案 3.14,你只需要写出修正值(+0.00159265...)

显然,方式 B 更容易!因为:

  1. 如果参考答案已经很准确,你可以直接写 0
  2. 你只需要关注"差异"在哪里,而不是从头开始

这就是残差学习的精髓:让网络专注于学习"需要改变什么",而不是"目标是什么"

4.4 残差块的结构

ResNet 的基本组成单元是残差块(Residual Block)

基础版(用于 ResNet-18/34):

         x
         │
         ├──────────────────────┐
         ↓                      │
    [3×3 卷积, 64]              │
         ↓                      │
       [BN]                     │
         ↓                      │
      [ReLU]                    │
         ↓                      │
    [3×3 卷积, 64]              │
         ↓                      │
       [BN]                     │
         ↓                      │
        (+) ←───────────────────┘  跳跃连接
         ↓
      [ReLU]
         ↓
       输出
瓶颈版(用于 ResNet-50/101/152):

         x
         │
         ├──────────────────────┐
         ↓                      │
    [1×1 卷积, 64]   ← 降维     │
         ↓                      │
       [BN + ReLU]              │
         ↓                      │
    [3×3 卷积, 64]   ← 处理     │
         ↓                      │
       [BN + ReLU]              │
         ↓                      │
    [1×1 卷积, 256]  ← 升维     │
         ↓                      │
       [BN]                     │
         ↓                      │
        (+) ←───────────────────┘
         ↓
      [ReLU]
         ↓
       输出

瓶颈结构用 1x1 卷积先压缩维度,处理完再还原,大大减少了计算量。

4.5 当维度不匹配时怎么办?

有时候,跳跃连接的输入 x 和 F(x) 的维度不一样(比如通道数不同,或者特征图尺寸不同),这时需要用一个投影连接来对齐:

         x
         │
         ├──────────────────────┐
         ↓                      ↓
    [残差分支]            [1×1 卷积]  ← 投影连接,调整维度
         ↓                      ↓
        (+) ←───────────────────┘
         ↓
       输出

4.6 ResNet 的完整结构

以 ResNet-34 为例:

                              层数
输入图像 (224×224×3)
         ↓
[7×7 卷积, stride=2]           1[3×3 最大池化, stride=2][残差块 × 3] (64 通道)          6[残差块 × 4] (128 通道)         8[残差块 × 6] (256 通道)        12[残差块 × 3] (512 通道)         6[全局平均池化][全连接层 → 1000 类]           1
                            ────
                             34

ResNet 系列网络对比:

网络层数残差块数参数量Top-5 错误率
ResNet-1818811.7M10.92%
ResNet-34341621.8M9.46%
ResNet-50501625.6M7.48%
ResNet-1011013344.5M6.52%
ResNet-1521525060.2M6.16%

五、残差网络的深远影响

5.1 解锁了网络深度

ResNet 之前,主流网络最多 20 多层。ResNet 证明了几百甚至上千层的网络是可行的!这直接启发了后来的"大模型"思路:模型越大、越深,潜力越大。

5.2 跳跃连接成为标配

ResNet 的跳跃连接思想被广泛采用:

  • Transformer:用于 ChatGPT、BERT 等大语言模型,其中也使用了残差连接
  • U-Net:医学图像分割的经典网络,使用类似的跳跃连接
  • DenseNet:将跳跃连接发展到极致,每层都与之前所有层相连

5.3 后续变体

ResNet 启发了大量改进版本:

变体改进点
ResNeXt引入分组卷积,提升效率
SE-ResNet加入通道注意力机制
Res2Net多尺度特征提取
ResNeSt分离注意力机制

六、从 ResNet 到大模型

6.1 共同的设计哲学

当今的大模型(如 GPT、BERT、ViT)虽然和 ResNet 处理的任务不同,但继承了它的核心思想:

  1. 残差连接:Transformer 的每个注意力层和前馈层都使用残差连接
  2. 深度堆叠:GPT-3 有 96 层,没有残差连接根本无法训练
  3. 预训练 + 微调:这种范式也受益于残差网络证明的"深度可行性"

6.2 视觉大模型中的 ResNet

在 CLIP、DALL-E 等视觉大模型中,ResNet(或其变体)常被用作图像编码器:

图像 → [ResNet 编码器] → 图像特征向量
                            ↓
                     [多模态融合]
                            ↓
文本 → [Transformer 编码器] → 文本特征向量

可以说,没有 ResNet 解决深度网络的训练问题,就没有今天的 AI 大模型时代。


七、总结

让我们回顾一下这趟旅程:

阶段核心概念关键突破
深度学习基础神经网络、层层抽象自动特征提取
卷积神经网络局部感知、参数共享高效处理图像
残差网络跳跃连接、残差学习解锁网络深度

ResNet 的核心贡献用一句话概括就是:

让极深的神经网络成为可能,为 AI 打开了通往更强大模型的大门。

何恺明团队用一个简单优雅的想法——跳跃连接——解决了困扰学界多年的深度网络退化问题。这个故事告诉我们,有时候最伟大的创新不是复杂的算法,而是对问题本质的深刻洞察。


延伸阅读

如果你想进一步了解这个领域,推荐以下资源:

  1. 论文原文Deep Residual Learning for Image Recognition(何恺明等,2015)
  2. 视频教程:吴恩达的深度学习课程(Coursera)
  3. 实践项目:使用 PyTorch/TensorFlow 实现一个简单的 ResNet