一、卷积神经网络基础:从全连接层到卷积层的演进

大家好,我是你们的讲师。今天咱们聊聊卷积神经网络的基础——说白了,就是搞清楚为什么要有卷积层,它到底解决了什么问题。

我记得刚入行那会儿,做图像识别项目,用的还是全连接网络。一张32x32的小图,拉成一维向量,喂进网络。结果呢?参数量爆炸,训练慢得要命,还容易过拟合。后来接触了卷积神经网络,才恍然大悟——原来处理图像数据,有更聪明的办法。

1.1 全连接层的困境

先看一个简单例子。假设输入是一张32x32的灰度图,像素值排成一列,总共1024个点。全连接层每个神经元都要跟这1024个点相连。

你想想看,如果第一层有100个神经元,那光这一层的权重参数就是:

1024 × 100 = 102,400 个参数

这还只是一层。网络深一点,参数量轻松上百万。我在项目中遇到过这种情况——模型还没跑起来,显存先爆了。

核心问题:全连接层没有利用图像的空间结构。它把每个像素当成独立的特征,忽略了相邻像素之间的关联。

图像有什么特点?局部相关性。一个像素跟它周围的像素关系最密切,离得远的像素基本没啥关系。全连接层偏偏把远近像素一视同仁,这显然不合理。

1.2 卷积的数学定义

卷积是什么?说白了,就是一种加权求和的操作。数学上定义如下:

对于二维图像 I 和卷积核 K,卷积运算定义为:
S(i,j) = (I * K)(i,j) = Σ_m Σ_n I(i+m, j+n) · K(m,n)

嗯,这里要注意,m和n遍历卷积核的所有位置。卷积核在图像上滑动,每个位置做一次点乘求和,得到输出特征图的一个像素值。

举个例子,一个3x3的卷积核:

输入图像块(3x3):    卷积核(3x3):      输出(1个值):
[ a11  a12  a13 ]      [ k11  k12  k13 ]     a11·k11 + a12·k12 + a13·k13
[ a21  a22  a23 ]   ·  [ k21  k22  k23 ]   + a21·k21 + a22·k22 + a23·k23
[ a31  a32  a33 ]      [ k31  k32  k33 ]   + a31·k31 + a32·k32 + a33·k33

就这么简单。但背后有深刻的物理意义。

1.3 卷积的物理意义

卷积核本质上是一个特征检测器。不同的卷积核检测不同的特征:

  • 边缘检测核:检测图像中的水平或垂直边缘
  • 纹理检测核:检测特定方向的纹理模式
  • 模糊核:对图像做平滑处理

我习惯把卷积核比喻成「模板」。卷积操作就是在图像上找跟这个模板匹配的区域。匹配度越高,输出值越大。

个人经验:设计卷积加速器时,我经常把卷积核权重提前固化到硬件里。这样能省掉权重加载的时间,但代价是灵活性降低。具体怎么取舍,得看应用场景。

1.4 从全连接到卷积的演进逻辑

为什么会从全连接演进到卷积?三个核心原因:

  1. 局部连接:每个神经元只连接输入的一个局部区域,而不是全部。参数量大幅减少。
  2. 权值共享:同一个卷积核在整个图像上滑动,权重是共享的。进一步减少参数量。
  3. 平移不变性:物体在图像中移动,卷积核照样能检测到。这很符合图像识别的需求。

你想想看,一张猫的图片,猫在左边还是右边,不影响它是猫这个事实。全连接网络做不到这一点,但卷积网络天生就具备这个能力。

我曾经踩过一个坑:用全连接网络做目标检测,训练集里猫都在图片中央,测试集里猫跑到边上了,结果网络完全认不出来。换成卷积网络,这个问题就解决了。

避坑指南:卷积核的大小选择很关键。3x3的核感受野小,适合提取细节特征;5x5或7x7的核感受野大,适合提取全局特征。但核越大,参数量和计算量也越大。我建议从3x3开始尝试,效果不够再考虑增大。

1.5 知识体系总览

下面这张图展示了本章的核心逻辑:

卷积神经网络基础:知识体系 全连接层的困境 参数量爆炸 忽略空间结构 卷积的数学定义 加权求和操作 核在图像上滑动 物理意义 特征检测器 从全连接到卷积的演进逻辑 局部连接 → 权值共享 → 平移不变性 关键参数 卷积核大小 步长、填充 硬件实现考量 并行度设计 数据复用策略 典型应用 图像分类 目标检测

1.6 小结

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

  • 全连接层处理图像时参数量太大,而且忽略了空间结构
  • 卷积通过局部连接和权值共享解决了这个问题
  • 卷积核本质上是特征检测器,物理意义很直观

嗯,这些概念是后续所有内容的基础。搞懂了为什么需要卷积,后面学卷积加速器设计的时候,你就能理解每个硬件模块存在的意义了。

可可精品资料库