一、卷积神经网络基础:从全连接层到卷积层的演进
大家好,我是你们的讲师。今天咱们聊聊卷积神经网络的基础——说白了,就是搞清楚为什么要有卷积层,它到底解决了什么问题。
我记得刚入行那会儿,做图像识别项目,用的还是全连接网络。一张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 从全连接到卷积的演进逻辑
为什么会从全连接演进到卷积?三个核心原因:
- 局部连接:每个神经元只连接输入的一个局部区域,而不是全部。参数量大幅减少。
- 权值共享:同一个卷积核在整个图像上滑动,权重是共享的。进一步减少参数量。
- 平移不变性:物体在图像中移动,卷积核照样能检测到。这很符合图像识别的需求。
你想想看,一张猫的图片,猫在左边还是右边,不影响它是猫这个事实。全连接网络做不到这一点,但卷积网络天生就具备这个能力。
我曾经踩过一个坑:用全连接网络做目标检测,训练集里猫都在图片中央,测试集里猫跑到边上了,结果网络完全认不出来。换成卷积网络,这个问题就解决了。
避坑指南:卷积核的大小选择很关键。3x3的核感受野小,适合提取细节特征;5x5或7x7的核感受野大,适合提取全局特征。但核越大,参数量和计算量也越大。我建议从3x3开始尝试,效果不够再考虑增大。
1.5 知识体系总览
下面这张图展示了本章的核心逻辑:
1.6 小结
这一章我们聊了三个核心点:
- 全连接层处理图像时参数量太大,而且忽略了空间结构
- 卷积通过局部连接和权值共享解决了这个问题
- 卷积核本质上是特征检测器,物理意义很直观
嗯,这些概念是后续所有内容的基础。搞懂了为什么需要卷积,后面学卷积加速器设计的时候,你就能理解每个硬件模块存在的意义了。
可可精品资料库