卷积神经网络(CNN)课程笔记
约 1247 字大约 4 分钟
卷积神经网络(CNN)课程笔记
1. 基本概念:卷积层
- 卷积层:执行卷积运算的神经网络层。
- 核心思想:使用卷积核在输入数据(如图像)上滑动,进行局部特征提取。
- 参数学习:卷积核中的参数(权重)并非预设,而是通过反向传播和梯度下降在训练中学习得到。
- 类比全连接层:卷积运算可被拆解为多个“普通神经元”的线性运算:
- 每个局部感受野(如3x3小图)的像素是输入。
- 卷积核的值是对应输入数据的权重
W。 - 对应元素相乘再相加,即线性运算
z = W·X + b(b为偏置)。 - 之后通过激活函数(如ReLU)进行非线性变换,得到最终输出。
1.1 卷积层的独特性质
- 输出结构:输出是排列成二维/三维结构的特征图,而非平铺向量。
- 输入来源:同一层内的不同“神经元”(对应不同位置)的输入来自同一张图片的不同区域。
- 参数共享:最关键的特性。所有用于提取同一种特征的“神经元”共享同一套卷积核权重参数。
- 优势:极大减少了模型参数量。
- 合理性:例如,一个用于提取“垂直边缘”的卷积核,应适用于图像的任意位置。
2. 多卷积核与深度卷积
- 单个卷积核学习提取图像的一种特征。
- 为了提取多种特征,可以使用多个卷积核。
- 多个卷积核的输出堆叠在一起,形成一个三维张量(特征图),其第三个维度等于卷积核的数量。
- 这个三维数据可以被送入后续网络层(如另一个卷积层或全连接层)。
3. 三维卷积
- 当输入数据是三维时(如多通道特征图或RGB图像),需使用三维卷积核。
- 规则:卷积核的第三个维度值(深度)必须与输入数据的通道数相同。
- 运算:与二维卷积类似,对应位置元素相乘后求和,再加上偏置,并通过激活函数。
4. 池化层(Pooling Layer)
- 目的:对特征图进行下采样,降低空间尺寸,减少计算量并增强特征的平移不变性。
- 操作:在特征图上滑动一个窗口(如2x2),对窗口内的值进行聚合。
- 最大池化(Max Pooling):取窗口内的最大值。
- 平均池化(Average Pooling):取窗口内的平均值。
- 特性:
- 池化操作是固定的,没有需要学习的参数。
- 在多通道数据上,池化操作在每个通道上独立进行,输出通道数不变。
- 在许多经典CNN中常见,但并非网络必须的组成部分。
5. 经典网络示例:LeNet-5
5.1 网络结构
- 输入:32x32灰度图(MNIST为28x28,需调整)。
- C1层(卷积层1):
- 6个5x5卷积核,步长=1,padding='valid'。
- 激活函数:ReLU。
- 输出:28x28x6(对于32x32输入)或 24x24x6(对于28x28 MNIST输入)。
- S2层(池化层1):
- 2x2平均池化。
- 输出:14x14x6(或12x12x6 for MNIST)。
- C3层(卷积层2):
- 16个5x5卷积核。
- 输出:10x10x16(或8x8x16 for MNIST)。
- S4层(池化层2):
- 2x2平均池化。
- 输出:5x5x16(或4x4x16 for MNIST)。
- Flatten层:将三维特征图平铺成一维向量。
- 全连接层:
- FC5: 120个神经元。
- FC6: 84个神经元。
- 输出层: 10个神经元(对应10分类),使用Softmax激活函数。
5.2 关键技术与公式
- 卷积尺寸变化公式(无填充时):
M = N - F + 1N: 输入边长F: 卷积核边长M: 输出边长
- Padding(填充)模式:
valid: 不填充,输出尺寸会缩小。same: 填充零,使得输出尺寸与输入尺寸相同(需要根据卷积核大小计算填充圈数)。
- Stride(步长):卷积核每次滑动的像素数。
6. 优势总结
- 参数共享:显著减少参数量,降低模型复杂度,缓解过拟合,加快训练速度。
- 局部连接:更符合图像、语音等数据的局部相关性特点。
- 层次化特征提取:浅层卷积提取边缘、纹理等低级特征,深层卷积组合低级特征形成更复杂的高级特征。
总结
卷积神经网络通过卷积层(利用可学习的卷积核进行局部特征提取和参数共享)、池化层(下采样)和全连接层的组合,构建出特别适用于处理网格状数据(如图像)的深度学习模型。其核心优势在于参数效率高和特征提取能力强。LeNet-5作为早期成功案例,展示了CNN的基本架构和工作原理。后续更复杂的网络(如AlexNet, VGG)在此基础上进一步发展,在图像识别等领域取得了卓越成效。
