深度学习与神经网络学习笔记 —— 卷积神经网络(CNN)基础
课程内容:卷积神经网络基础、卷积与池化、PyTorch、LeNet、AlexNet、VGG、ResNet
一、卷积神经网络的提出背景与基本思想
传统全连接神经网络在处理图像时存在一个非常严重的问题:参数数量过于庞大。课程中提到,如果输入是一张 (1000 \times 1000) 的图像,而隐藏层拥有100万个神经元,那么参数规模将达到:
10^6 \times 10^6 = 10^{12}
即万亿级参数。
如此庞大的参数量会导致:
计算复杂度极高
模型训练速度缓慢
内存消耗巨大
极易出现过拟合
因此,传统神经网络并不适合直接处理高维图像数据。
课程中指出,人类视觉系统在观察物体时,并不是一次性理解整个图像,而是通过“局部到整体”的方式逐层提取特征。
卷积神经网络(CNN)正是借鉴了这种思想,其核心包括:
局部连接
权值共享
多层特征提取
其中“局部连接”意味着神经元只关注图像中的局部区域,而不是整张图像;“权值共享”则表示同一个卷积核在整张图像中重复使用,从而大幅减少参数数量。
CNN 的整体结构通常如下:
Input ↓ Conv ↓ Pooling ↓ Conv ↓ Pooling ↓ FC ↓ Softmax ↓ Output随着网络不断加深,通常会呈现一种规律:
图像宽高逐渐减小
特征通道数量逐渐增加
课程中也专门总结了这一特征变化规律。
二、卷积运算、Padding 与 Pooling 的核心原理
卷积(Convolution)是 CNN 中最重要的操作,其本质是:
使用卷积核在图像上滑动并提取局部特征。
卷积层前向传播公式为:
a^l(x,y)=f\left(\sum_{u=0}^{p}\sum_{v=0}^{q}a^{l-1}(x+u,y+v)w^{l,k}(u,v)+b\right)
其中:
(a^{l-1}):上一层输入特征图
(w):卷积核参数
(b):偏置项
(f):激活函数
卷积运算实际上是:
对应元素相乘
对结果求和
经过激活函数输出
卷积层输出尺寸通常满足:
n_{out}=\frac{n+2p-f}{s}+1
其中:
(n):输入尺寸
(p):Padding
(f):卷积核大小
(s):Stride
Padding(填充)的作用是避免图像尺寸过快缩小。课程中提到了零填充等方式。
Stride(步长)则决定卷积核每次滑动距离。
步长越大:
输出尺寸越小
计算量越低
特征损失越明显
此外,CNN 还会使用池化(Pooling)进行降采样。课程中将其定义为:
使用局部统计特征解决特征过多问题。
常见池化包括:
最大池化(Max Pooling)
y=\max(x_1,x_2,\dots,x_n)
其特点是保留最显著特征。
平均池化(Average Pooling)
y=\frac{1}{n}\sum_{i=1}^{n}x_i
其特点是让特征更加平滑。
池化层能够:
减少参数数量
降低计算复杂度
提高鲁棒性
抑制过拟合
三、CNN 的误差反向传播与激活函数
卷积神经网络除了前向传播外,还需要通过 BP(反向传播)更新参数。
课程中给出了 CNN 的 BP 推导过程。
输出层误差可表示为:
\delta_i^L=f'(z_i^L)e_i
对于卷积层,误差传播公式为:
\delta^{l,k}(x,y)=\sum_{j=1}^{c^{l+1}}w^{l+1,kj}\ast\delta^{l+1,j}(x,y)\cdot f'(z^{l,k}(x,y))
权值更新公式:
\Delta w=\alpha\sum_x\sum_y\delta(x,y)a(x+u,y+v)
其中:
(\delta):误差项
(\alpha):学习率
(a):输入特征图
这些公式说明 CNN 本质上仍然属于神经网络,只是其连接方式更加适合图像处理。
激活函数则负责引入非线性能力。
早期网络(如 LeNet)大量使用:
Sigmoid
tanh
Sigmoid 函数:
\sigma(x)=\frac{1}{1+e^{-x}}
tanh 函数:
tanh(x)=\frac{e^x-e^{-x}}{e^x+e^{-x}}
但这两种函数在深层网络中容易产生梯度消失问题。
因此 AlexNet 开始大量使用 ReLU:
f(x)=\max(0,x)
ReLU 的优势包括:
收敛速度快
计算简单
梯度传播稳定
因此成为现代 CNN 中最常用的激活函数。
四、经典 CNN 网络结构分析
LeNet-5 是 CNN 历史上最经典的网络之一。课程中详细介绍了其结构。
LeNet-5 的结构如下:
Input ↓ C1 ↓ S2 ↓ C3 ↓ S4 ↓ C5 ↓ F6 ↓ Output其特点包括:
使用平均池化
使用 Sigmoid/tanh
网络层数较浅
参数量约为6万
LeNet 的成功奠定了整个 CNN 发展的基础。
2012 年,AlexNet 在 ImageNet 比赛中取得突破性成绩,标志着深度学习时代正式到来。课程中总结了 AlexNet 的主要改进:
使用 ReLU 激活函数
使用 Max Pooling
使用 Dropout
使用数据增强
使用 GPU 并行训练
其中 Dropout 的思想是:
训练过程中随机关闭部分神经元。
数学表达为:
y=r\cdot x,\quad r\sim Bernoulli(p)
这可以有效防止神经元之间过度依赖,从而减轻过拟合。
随后提出的 VGG-16 网络进一步加深了网络层数。课程中指出:
VGG 参数量约1.38亿
结构非常规整
大量采用 (3\times3) 卷积核
两个 (3\times3) 卷积可以获得接近 (5\times5) 的感受野:
3+3-1=5
但参数量明显更少,因此网络表达能力更强。
五、ResNet 与深层网络的发展
随着网络不断加深,一个核心问题逐渐显现:
梯度消失(Vanishing Gradient)
课程中分析了普通深层网络存在的问题。
在 BP 过程中,梯度会不断连乘:
\frac{\partial L}{\partial x}=\frac{\partial L}{\partial y_n}\prod_{i=1}^{n}\frac{\partial y_i}{\partial y_{i-1}}
如果每层梯度都小于1,那么随着层数增加,梯度会迅速趋近于0。
为了解决这一问题,ResNet 引入了残差结构。课程中给出的核心思想为:
H(x)=F(x)+x
即:
(x):原始输入
(F(x)):卷积学习结果
(H(x)):最终输出
这种“跳跃连接”可以让浅层信息直接传递到深层。
反向传播时:
\frac{\partial H}{\partial x}=\frac{\partial F}{\partial x}+1
即使 (\frac{\partial F}{\partial x}) 很小,也仍然存在恒等项1,从而避免梯度完全消失。
课程最后总结指出:
传统 CNN:
“卷积层 + 池化层”不断堆叠。
而残差网络:
通过跨层连接解决深层网络训练困难问题。
ResNet 的提出,使得:
50层
101层
152层
甚至更深网络的训练成为可能,也推动了现代深度学习的发展。
