第5章 卷积神经网络
卷积神经网络(CNN/ConvNet)是专门为处理网格结构数据(比如图像、语音序列)设计的深层前馈网络。它的核心优势是局部连接、权重共享、汇聚降维——既解决了全连接网络参数爆炸的问题,又能高效捕捉数据的局部特征(比如图像的边缘、纹理),还能保证一定的平移、缩放不变性(比如猫的图像不管放在画面左边还是右边,都能识别)。本章会从“卷积”这个核心运算入手,逐步拆解CNN的结构、工作原理、参数学习方法,再
第5章 卷积神经网络
卷积神经网络(CNN/ConvNet)是专门为处理网格结构数据(比如图像、语音序列)设计的深层前馈网络。它的核心优势是局部连接、权重共享、汇聚降维——既解决了全连接网络参数爆炸的问题,又能高效捕捉数据的局部特征(比如图像的边缘、纹理),还能保证一定的平移、缩放不变性(比如猫的图像不管放在画面左边还是右边,都能识别)。
本章会从“卷积”这个核心运算入手,逐步拆解CNN的结构、工作原理、参数学习方法,再介绍经典模型和进阶卷积方式,帮你彻底搞懂CNN。
5.1 卷积:CNN的“核心运算”
卷积的本质是“滑动窗口加权求和”——用一个固定大小的“滤波器(卷积核)”在输入数据上滑动,每滑到一个位置,就计算窗口内数据与滤波器的加权和,得到输出特征。
5.1.1 卷积的定义(一维+二维)
(1)一维卷积(用于序列数据)
比如处理语音、时间序列(比如股票价格),输入是一维向量,卷积核也是一维向量。
- 例子:输入信号 x=[x1,x2,x3,x4,x5]x = [x_1, x_2, x_3, x_4, x_5]x=[x1,x2,x3,x4,x5],卷积核 w=[w1,w2,w3]w = [w_1, w_2, w_3]w=[w1,w2,w3],卷积运算就是:
y1=w1x1+w2x2+w3x3,y2=w1x2+w2x3+w3x4,y3=w1x3+w2x4+w3x5y_1 = w_1x_1 + w_2x_2 + w_3x_3, \quad y_2 = w_1x_2 + w_2x_3 + w_3x_4, \quad y_3 = w_1x_3 + w_2x_4 + w_3x_5y1=w1x1+w2x2+w3x3,y2=w1x2+w2x3+w3x4,y3=w1x3+w2x4+w3x5 - 作用:提取序列的局部特征(比如低频平滑、高频边缘),比如卷积核 [1/3, 1/3, 1/3] 是移动平均(平滑信号),[1, -2, 1] 是二阶微分(检测信号突变)。
(2)二维卷积(用于图像数据)
图像是二维网格(高度×宽度×通道),卷积核也是二维矩阵(比如3×3),运算逻辑和一维类似:
- 例子:输入图像 X(M×N),卷积核 W(U×V),输出特征 Y 的每个元素:
yij=∑u=1U∑v=1Vwuv⋅xi+u−1,j+v−1y_{ij} = \sum_{u=1}^U \sum_{v=1}^V w_{uv} \cdot x_{i+u-1, j+v-1}yij=∑u=1U∑v=1Vwuv⋅xi+u−1,j+v−1 - 作用:提取图像的局部特征,比如3×3卷积核[111111111]\begin{bmatrix}1&1&1\\1&1&1\\1&1&1\end{bmatrix} 111111111 是均值滤波(模糊图像),[−1−1−1−18−1−1−1−1]\begin{bmatrix}-1&-1&-1\\-1&8&-1\\-1&-1&-1\end{bmatrix} −1−1−1−18−1−1−1−1 是边缘检测(提取图像边缘)。
5.1.2 互相关:实际工程中的“卷积”
严格的卷积需要先将卷积核旋转180°,但在CNN中,卷积核是可学习的参数——旋转180°后的核和原核只是参数不同,学习能力完全一样。因此工程中常用互相关(不旋转卷积核) 代替卷积,减少计算开销。
- 互相关与卷积的关系:互相关 = 卷积核不旋转的卷积;
- 结论:CNN中的“卷积层”本质是互相关运算,不用纠结旋转细节,重点关注“滑动窗口加权求和”。
5.1.3 卷积的变种(步长+零填充)
为了灵活控制输出特征的大小,CNN中会给卷积加两个参数:步长和零填充。
(1)步长(Stride)
卷积核滑动时的“步幅”,比如步长=1(每次滑1个像素)、步长=2(每次滑2个像素)。
- 作用:步长越大,输出特征越小(降维越快),但可能丢失信息;步长越小,输出特征越大(保留细节),但计算量越大。
(2)零填充(Zero Padding)
在输入数据的边缘补0,避免卷积后特征缩小(比如3×3卷积核作用于3×3图像,不补0输出1×1,补1圈0输出3×3)。
- 三种常用卷积:
- 窄卷积:无零填充(P=0)、步长=1,输出大小 = 输入大小 - 卷积核大小 + 1;
- 等宽卷积:零填充P=(卷积核大小-1)/2、步长=1,输出大小 = 输入大小(最常用,比如保持图像尺寸不变);
- 宽卷积:零填充P=卷积核大小-1、步长=1,输出大小 = 输入大小 + 卷积核大小 - 1。
5.1.4 卷积的核心性质
- 交换性:宽卷积中,输入和卷积核交换后,结果不变(旋转180°后);
- 导数性质:损失函数对卷积核的梯度 = 输入数据与损失对输出的梯度的互相关;
- 局部性:输出特征的每个元素只依赖输入的局部区域(卷积核大小的窗口)——这是CNN能捕捉局部特征的关键。
5.2 卷积神经网络的结构:卷积层+汇聚层+全连接层
CNN的典型结构是“卷积层→汇聚层→卷积层→汇聚层→…→全连接层→输出层”,各层各司其职,协同完成特征提取和分类/回归。
5.2.1 卷积层:提取局部特征
卷积层是CNN的“特征提取器”,核心特性是局部连接和权重共享,这两个特性大幅减少了参数数量。
(1)局部连接
全连接层中,每个神经元与前一层所有神经元相连;而卷积层中,每个神经元只与前一层“局部窗口”内的神经元相连(窗口大小=卷积核大小)。
- 例子:输入是100×100的图像,卷积核3×3,每个神经元只连3×3=9个输入——相比全连接的10000个连接,参数减少上千倍。
(2)权重共享
同一个卷积核在输入上滑动时,权重不变(所有局部窗口用同一个卷积核计算)。
- 例子:3×3卷积核处理100×100图像,全连接需要100×100×3×3=90000个参数,权重共享后只需要3×3=9个参数;
- 意义:一个卷积核对应一种“特征模板”(比如边缘检测、纹理检测),滑动过程中提取输入中所有位置的该类特征。
(3)多通道卷积(处理彩色图像/多特征映射)
彩色图像有RGB三个通道(深度=3),卷积层会为每个通道分配一个卷积核,再将所有通道的卷积结果相加,得到一个输出特征映射。
- 若想提取多种特征(比如同时提取边缘、纹理),可以用多个卷积核(比如64个),最终输出64个特征映射(深度=64)。
- 数学表达:输入 X(M×N×D),卷积核 W(U×V×D×P),输出 Y(M’×N’×P),其中第p个输出特征映射:
Yp=∑d=1DWp,d⊗Xd+bpY^p = \sum_{d=1}^D W^{p,d} \otimes X^d + b^pYp=∑d=1DWp,d⊗Xd+bp
(Wp,dW^{p,d}Wp,d 是第p个输出、第d个输入的卷积核,bpb^pbp 是偏置)。
5.2.2 汇聚层:降维+增强鲁棒性
汇聚层(池化层)紧跟在卷积层之后,核心作用是下采样——减少特征映射的大小(高度×宽度),降低计算量和过拟合风险,同时增强特征的平移不变性(比如物体稍微移动,汇聚后特征不变)。
(1)常用汇聚函数
- 最大汇聚(Max Pooling):取窗口内的最大值(最常用);
- 例子:2×2窗口,输入 [1234]\begin{bmatrix}1&2\\3&4\end{bmatrix}[1324],最大汇聚输出4;
- 优点:保留局部最显著的特征(比如边缘、纹理的强度),鲁棒性强。
- 平均汇聚(Mean Pooling):取窗口内的平均值;
- 例子:2×2窗口,输入 [1234]\begin{bmatrix}1&2\\3&4\end{bmatrix}[1324],平均汇聚输出2.5;
- 优点:保留全局信息,平滑噪声,但容易丢失细节。
(2)汇聚层的特点
- 无参数:汇聚过程只有固定的计算规则(取最大/平均),没有可学习的参数;
- 通常用2×2窗口、步长=2:刚好将特征映射的高度和宽度减半(比如100×100→50×50);
- 深度不变:输入有P个特征映射,输出也有P个特征映射(只降维高度和宽度,不降深度)。
5.2.3 CNN的整体结构
一个典型的CNN结构如下(以图像分类为例):
- 输入层:图像原始数据(比如224×224×3的RGB图像);
- 卷积块:1~多个卷积层 + 1个汇聚层(比如“卷积→ReLU→卷积→ReLU→汇聚”);
- 作用:逐步提取高层特征(从边缘→纹理→物体部件→物体整体);
- 全连接层:1~2个全连接层(将汇聚后的特征映射展平为向量,进行非线性转换);
- 输出层:Softmax层(多分类)或线性层(回归),输出预测结果。
5.3 参数学习:CNN的反向传播
CNN的参数是卷积核的权重和偏置,学习方法依然是“梯度下降+反向传播”,但由于卷积层和汇聚层的特殊性,梯度计算方式和前馈网络不同。
5.3.1 核心思路
- 前馈计算:输入→卷积→ReLU→汇聚→…→全连接→输出,计算损失;
- 反向传播:从输出层反向计算损失对每层参数的梯度,重点处理卷积层和汇聚层的梯度传递。
5.3.2 汇聚层的梯度传递
汇聚层无参数,只需将上层的梯度“上采样”传递到下层(恢复到汇聚前的大小):
- 最大汇聚:上层梯度只传递到下层窗口内“最大值对应的位置”,其他位置梯度为0(因为只有最大值对输出有贡献);
- 平均汇聚:上层梯度平均分配到下层窗口内的所有位置(因为每个位置都对平均值有贡献)。
5.3.3 卷积层的梯度计算
卷积层的梯度计算依赖卷积的导数性质:
- 损失对卷积核 Wp,dW^{p,d}Wp,d 的梯度 = 输入特征映射 XdX^dXd 与损失对输出特征映射 YpY^pYp 的梯度的互相关;
- 损失对偏置 bpb^pbp 的梯度 = 损失对输出特征映射 YpY^pYp 的梯度之和(每个输出元素都依赖偏置);
- 数学表达(简化版):
∂L∂Wp,d=δp⊗Xd,∂L∂bp=∑i,jδi,jp\frac{\partial \mathcal{L}}{\partial W^{p,d}} = \delta^{p} \otimes X^d, \quad \frac{\partial \mathcal{L}}{\partial b^p} = \sum_{i,j} \delta^{p}_{i,j}∂Wp,d∂L=δp⊗Xd,∂bp∂L=∑i,jδi,jp
(δp\delta^pδp 是损失对输出特征映射 YpY^pYp 的梯度)。
5.3.4 总结
CNN的反向传播本质是“前馈卷积的逆过程”——汇聚层上采样梯度,卷积层用互相关计算参数梯度,最终通过梯度下降更新卷积核和偏置。
5.4 典型的卷积神经网络
从LeNet-5到ResNet,CNN的发展核心是“更深、更高效、更能捕捉复杂特征”,以下是几个里程碑式的模型:
5.4.1 LeNet-5(1998):CNN的开山之作
- 核心贡献:第一个成功应用的CNN,奠定了“卷积→汇聚→全连接”的经典结构;
- 结构:输入(32×32灰度图)→C1(6个5×5卷积核)→S2(2×2平均汇聚)→C3(16个5×5卷积核)→S4(2×2平均汇聚)→C5(120个5×5卷积核)→F6(84个全连接神经元)→输出(10个类别);
- 创新点:引入局部连接、权重共享,用卷积提取特征,汇聚降维;
- 应用:手写数字识别(美国银行用来识别支票上的数字)。
5.4.2 AlexNet(2012):CNN爆发的起点
- 核心贡献:首次证明CNN在大规模图像分类上的优越性(ImageNet竞赛冠军,准确率远超传统方法);
- 结构:输入(224×224×3)→5个卷积层+3个汇聚层+3个全连接层→输出(1000类);
- 关键创新:
- 用ReLU激活函数(替代Sigmoid,解决梯度消失);
- 用GPU并行训练(突破算力限制,能训练深层网络);
- 用Dropout(防止过拟合)、数据增强(提升泛化能力);
- 局部响应归一化(LRN,增强泛化能力)。
5.4.3 Inception v1(GoogLeNet,2014):高效利用计算资源
- 核心问题:深层网络参数多、计算量大,容易过拟合;
- 核心创新:Inception模块——并行使用1×1、3×3、5×5卷积核和3×3汇聚,再拼接输出;
- 1×1卷积核的作用:降维(减少后续3×3/5×5卷积的参数,比如256维→64维);
- 结构:22层网络,用多个Inception模块堆叠,引入“辅助分类器”(缓解深层网络梯度消失);
- 贡献:在不增加过多参数的前提下,提升网络的特征捕捉能力。
5.4.4 ResNet(2016):突破深度限制
- 核心问题:网络越深,梯度消失越严重,训练越困难(准确率先升后降);
- 核心创新:残差连接(Shortcut Connection)——给卷积层加“直连边”,让输入直接传到输出:
Y=f(X;θ)+XY = f(X; \theta) + XY=f(X;θ)+X
(f(X;θ)f(X;\theta)f(X;θ) 是卷积层的非线性输出,X 是输入,直接相加); - 原理:残差连接让网络学习“残差”(Y−X=f(X;θ)Y - X = f(X;\theta)Y−X=f(X;θ)),比直接学习“原始映射”更容易,梯度能通过直连边直接传递到浅层,解决梯度消失;
- 贡献:能训练上千层的网络,成为后续CNN的基础结构(比如ResNet-50、ResNet-101广泛用于工业界)。
5.5 其他卷积方式
除了基础的二维卷积,CNN还有很多进阶卷积方式,用于解决特定问题(比如上采样、扩大感受野)。
5.5.1 转置卷积(反卷积):用于上采样
基础卷积是“下采样”(输入大→输出小),转置卷积则是“上采样”(输入小→输出大),核心用途是恢复特征图大小(比如语义分割中,需要将小特征图恢复到原图大小)。
- 原理:将卷积的“输入-输出”关系反转,比如3×3卷积核下采样5×5→3×3,对应的转置卷积能上采样3×3→5×5;
- 注意:转置卷积不是卷积的逆运算,只是“形式上的转置”,主要作用是扩大特征图尺寸。
5.5.2 空洞卷积(膨胀卷积):扩大感受野
感受野是“神经元能看到的输入区域”——深层网络需要大感受野才能捕捉全局特征,但传统卷积扩大感受野需要下采样(会丢失信息)或增大卷积核(参数增多)。
- 核心创新:在卷积核中插入“空洞”(比如膨胀率D=2,3×3卷积核变成5×5,中间插1个0),不用下采样也能扩大感受野;
- 原理:膨胀率D越大,感受野越大,比如3×3卷积核:
- D=1(无空洞):感受野3×3;
- D=2(插1个空洞):感受野5×5;
- D=3(插2个空洞):感受野7×7;
- 应用:语义分割、目标检测(需要大感受野且保留细节)。
5.6 总结
CNN的核心是“用卷积提取局部特征、用汇聚降维、用深层结构捕捉复杂特征”,其成功的关键在于局部连接、权重共享、残差连接(解决参数爆炸、梯度消失问题)。
核心要点
- 卷积层的核心是“滑动窗口加权求和”,局部连接和权重共享减少参数;
- 汇聚层的核心是“下采样”,增强鲁棒性,不增加参数;
- 经典模型的演进:LeNet-5(奠基)→AlexNet(爆发)→Inception(高效)→ResNet(深层);
- 进阶卷积:转置卷积(上采样)、空洞卷积(扩大感受野),适用于分割、检测等任务。
深入阅读推荐
- 想系统学CNN理论:《Deep Learning》(Goodfellow等)第9章;
- 想了解卷积算术细节:《A Guide to Convolution Arithmetic for Deep Learning》;
- 想深入经典模型:《Deep Residual Learning for Image Recognition》(ResNet论文)、《Going Deeper with Convolutions》(Inception论文)。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)