← 返回笔记列表
深度学习 第 28 / 49 篇

深度学习:视觉问题的特点 — 为什么全连接网络不适合图像

查看“深度学习”专题目录(28/49)
本文目录 8 个小节

1. 一张猫图暴露全连接网络的三个致命问题

任务:判断一张图里是否有猫。

1.1 问题一:输入特征太多

一张 1000 × 1000 的彩色图片(RGB 三个通道):

输入特征数=1000×1000×3=3,000,000\text{输入特征数} = 1000 \times 1000 \times 3 = 3{,}000{,}000

如果用一个隐藏层 1000 个神经元的全连接网络:

参数量=3,000,000×1,000=30亿\text{参数量} = 3{,}000{,}000 \times 1{,}000 = 30 \text{亿}

以 float32 存储:模型大小 ≈ 12 GB。只是加载模型就耗光了显存,更别说训练。

1.2 问题二:局部性 — 全连接太浪费

识别猫时,只需要看猫所在的区域就够了,不需要看整张图的每一个像素。

但全连接网络中,隐藏层的每个神经元都和所有输入像素相连。判断”有没有猫耳朵”只需要局部像素,却被迫接收全图的输入 → 大量无意义的连接浪费了参数。

1.3 问题三:平移不变性

猫在图片左上角还是右下角,都不改变它是一只猫。

全连接网络中,猫在左上角和右下角是两组完全不同的输入(不同的像素位置),网络需要分别学习”左上角的猫”和”右下角的猫” → 同一个模式需要学多遍。


2. 三者的共同根源:参数没共享 — 步兵扫雷的类比

视觉问题步兵扫雷
输入特征多(大图)雷区大,不能造一个和雷区一样大的探测器
局部性(猫只占局部区域)地雷只在局部位置,探测只需看一小块
平移不变性(猫在哪都一样)地雷不管在哪都是地雷,属性不变

探雷兵的做法

雷区 6×6,探雷器 3×3 — 用一个小的探测器在整个雷区上滑动,从上到下、从左到右扫描每个 3×3 区域。

         探雷器 (3×3)
            ↓
    ┌─────────────┐
    │ · · · · · · │
    │ · · · · · · │  雷区 (6×6)
    │ · · · · · · │
    │ · · · · · · │
    │ · · · · · · │
    │ · · · · · · │
    └─────────────┘

一个小探测器 + 滑动扫描 = 解决全部三个问题:

问题如何解决
输入多探测器很小,参数量不随雷区大小增长
局部性每次只看一小块区域
平移不变性同一个探测器扫过所有位置 → 参数共享,不管地雷在哪都能检测

3. 从探雷到卷积

探雷器 (3×3) → 一个局部的"感受野" → 在整张图上滑动 → 卷积核
同一个探测器到处用 → 参数共享 → 卷积核的权重在所有位置复用

这正是卷积神经网络(CNN)的核心思想:

  • 小的卷积核(如 3×3)→ 解决输入特征多和局部性问题
  • 全图滑动 + 参数共享 → 解决平移不变性问题

4. 总结

全连接网络用在图像上:
  ├── 1000×1000 图 = 300 万个输入 → 30 亿参数(爆炸)
  ├── 看猫只需看局部 → 其他像素的连接是浪费
  └── 猫在左上和右下 → 同一模式需要学两遍

视觉问题共有的三大特点:
  ① 输入特征多 → 参数爆炸
  ② 局部性    → 不需要看到全图
  ③ 平移不变性 → 同一模式可能出现在任何位置

解法:小探测器 + 滑动扫描 = 卷积
  → 参数少(小核)、局部看(感受野)、参数共享(同核复用)
继续学习本专题