1. 卷积神经网络基础:从全连接到卷积的动机

大家好,我是你们的讲师。今天咱们聊聊卷积神经网络最核心的起点——为什么我们要从全连接走向卷积?

说实话,我刚入行那会儿,也觉得全连接网络挺香的。结构简单,理解容易。但后来在做一个图像分类项目时,发现一个残酷的现实:一张 256x256 的彩色图片,输入层就有 196,608 个神经元。如果第一层隐藏层有 1000 个神经元,光这一层的参数量就接近 2 亿。你想想看,这谁顶得住?

全连接网络的困境

全连接网络处理图像时,有几个硬伤:

  • 参数爆炸:每个输入像素都要和每个隐藏神经元连接,参数量随图像尺寸平方增长
  • 忽略空间结构:把二维图像拉成一维向量,像素间的空间关系全丢了
  • 没有平移不变性:猫在图片左上角和右下角,网络得当成两个完全不同的模式去学

核心洞察:图像有个重要特性——局部相关性。一个像素只和它周围的像素关系密切,离得远的像素基本没啥关系。全连接网络完全没利用这个特性。

卷积运算的数学定义

好,那卷积是怎么解决这些问题的?

卷积本质上就是一个滑动窗口操作。我习惯把它理解成「模板匹配」。数学上,二维卷积的定义是这样的:

(f * g)(x, y) = Σ Σ f(i, j) · g(x-i, y-j)

但在深度学习中,我们实际用的是「互相关」操作,写法略有不同:

输出(x, y) = Σ Σ 输入(x+i, y+j) · 卷积核(i, j) + 偏置

说白了,就是拿一个小窗口(卷积核)在输入上滑动,每个位置做一次点乘求和。

我的经验:刚开始学的时候,别纠结数学符号。你就记住:卷积核就是一组可学习的权重,它在输入图上「扫」一遍,提取局部特征。

特征图与感受野

卷积层输出的结果,我们叫它特征图。每个特征图对应一个卷积核提取到的某种特征。

举个例子:

  • 第一个卷积层可能有 64 个卷积核,输出 64 张特征图
  • 有的特征图检测边缘,有的检测纹理,有的检测颜色变化
  • 越往后的层,特征图越抽象,从「横线」「竖线」变成「眼睛」「轮子」

这里有个关键概念——感受野。它指的是特征图上某个点,对应到输入图像上的区域大小。

直观理解:第一层卷积,3x3 的卷积核,感受野就是 3x3。第二层卷积,如果还是 3x3,那第二层特征图上的一个点,实际上看到了输入图像上 5x5 的区域。

为什么会这样?因为第二层的每个点,是把第一层 3x3 区域的信息融合了。而第一层的每个点,本身已经看到了输入图像 3x3 的区域。两层叠加,感受野就扩大了。

避坑指南:我曾经在设计一个网络时,堆了太多小卷积核,结果感受野一直不够大,导致网络看不到全局信息,分类准确率死活上不去。后来加了几个空洞卷积才解决。所以设计网络时,一定要算清楚感受野够不够用。

知识体系结构图

下面这张图,我把本章的核心逻辑梳理了一下:

卷积神经网络基础:知识体系 全连接网络的困境 参数爆炸 忽略空间结构 无平移不变性 卷积运算 滑动窗口操作 局部连接 + 权值共享 参数大幅减少 特征图 提取局部特征 多层抽象 感受野 特征图上一点对应输入图像的区域大小 层数越深 → 感受野越大 → 看到越全局的信息 核心思想:利用图像局部相关性,通过卷积核提取特征,逐层抽象,构建层次化表示 为后续的池化、归一化、全连接分类奠定基础

小结

这一章我们聊了三个核心问题:

  1. 为什么不用全连接——参数太多,忽略空间结构,没有平移不变性
  2. 卷积怎么算——滑动窗口,局部连接,权值共享
  3. 特征图和感受野是什么——特征图是卷积结果,感受野是能看到输入的范围

嗯,这些概念看起来简单,但它们是整个卷积神经网络大厦的地基。我在后续做硬件加速器设计时,发现很多优化策略都跟感受野的计算、特征图的尺寸变化密切相关。所以,别嫌基础,把这些吃透了,后面讲硬件实现时你会轻松很多。

可可精品资料库