一、前言:为什么MLP做图像分类效果极差?
之前我们使用MLP多层感知机训练CIFAR10图像分类任务,最终准确率仅有50%~55%,效果非常差。
核心原因:
MLP会将 3×32×32 的图像直接展平为一维向量,彻底丢失图像局部空间信息。
图像最重要的是:边缘、纹理、局部结构、空间位置关系,而MLP只能接收全局像素数值,无法提取有效视觉特征,因此分类能力极其有限。
解决方案:引入CNN卷积神经网络
CNN专门用于图像特征提取,依靠局部感知、权值共享、下采样三大特性,高效提取视觉特征,大幅提升图像分类精度。
二、图像数据增强(Data Augmentation)
1. 核心原理
数据增强不增加原始数据集总量,而是对训练集图像做随机变换,丰富每一轮训练的样本形态,提升模型泛化能力、抑制过拟合。
✅ 训练集:开启数据增强
✅ 测试集:只标准化、不做增强(保证测试数据真实可靠)
2. 常用数据增强方式
-
几何变换:随机裁剪、边缘填充、随机水平翻转、随机旋转
-
像素变换:亮度、对比度、饱和度、色相抖动,高斯模糊、加噪声
-
高级增强:Mixup、Cutout随机遮挡(小数据集可用GAN/VAE扩充样本)
3. CIFAR10标准化细节
已知数据集固定均值、方差,直接使用官方统计值标准化,加速收敛:
均值:(0.4914, 0.4822, 0.4465)
方差:(0.2023, 0.1994, 0.2010)
若为自定义数据集,需要手动遍历数据集统计全局均值与方差。
三、CNN核心模块详解
CNN结构可简单概括:卷积层(特征提取) + 池化层(特征压缩) + BN归一化 + 全连接分类头
1. 卷积层 Conv2d(特征提取器)
卷积本质:卷积核在图像上滑动,局部加权求和,提取局部空间特征(边缘、纹理、结构)。
核心超参数:
-
in_channels:输入通道(RGB图像为3)
-
out_channels:输出通道=卷积核数量(越多特征越丰富)
-
kernel_size:卷积核尺寸(常用3×3)
-
padding:边缘填充,保证卷积后尺寸不变
-
stride:滑动步长,默认1
2. 池化层 MaxPool2d(特征压缩器)
作用:下采样降维,缩小特征图尺寸、减少参数量、保留核心特征,降低计算量与过拟合风险。
本文使用2×2最大池化,特征图尺寸直接减半。
3. BatchNorm2d 批量归一化(重点)
(1)解决问题:内部协变量偏移
深层网络训练时,前层参数不断更新,导致后层输入数据分布持续变化,模型需要反复适应新分布,训练收敛慢、易梯度消失。
(2)核心作用
-
将批次数据规整为均值0、方差1的分布
-
稳定各层输入分布,加速模型收敛
-
支持更大学习率,提升训练效率
-
缓解梯度消失/梯度爆炸
(3)训练与推理差异
-
训练阶段:基于当前batch计算均值方差,更新γ、β参数
-
推理阶段:使用训练全局滑动平均统计量,参数固定不更新
(4)BN与LN区别
-
BatchNorm:适用于图像任务,batch固定、统计稳定
-
LayerNorm:适用于NLP文本,序列长度不固定、batch波动大
4. 特征图概念
卷积层输出的多维张量即为特征图,保留图像长宽空间信息,可逐层提取:底层边缘→中层纹理→高层语义特征。
MLP输出一维向量,无空间结构,无法可视化特征;CNN可通过Grad-CAM可视化模型关注区域,实现深度学习可解释性。
5. Dropout防止过拟合
全连接层加入Dropout,训练时随机丢弃部分神经元权重,避免单一神经元过度依赖,有效抑制过拟合。
四、CNN模型整体结构(CIFAR10)
3组卷积块(特征提取) + 2层全连接(分类)
💡 可将卷积+池化+BN整体看作通用特征提取器,全连接层仅作为分类器头部。
五、优化器 + 学习率调度器
1. 优化器
本文使用Adam优化器,负责梯度反向传播、更新网络权重。
注:Adam的自适应调优是相对步长调整,不会改变基础学习率。
2. 学习率调度器(核心调参技巧)
调度器直接修改基础学习率,实现动态学习率策略:
训练前期:大学习率快速收敛降损失
训练后期:小学习率精细优化,逼近全局最优
本文使用 ReduceLROnPlateau(首选通用调度器)
监控验证损失,连续3个epoch无下降则学习率×0.5,适配绝大多数CV任务。
其他常用调度器
-
StepLR:固定间隔轮次衰减学习率
-
MultiStepLR:指定epoch节点阶梯衰减
-
CosineAnnealingLR:余弦周期波动学习率
六、MLP与CNN性能对比(CIFAR10)
| 模型结构 | 参数量规模 | 特征提取方式 | 计算效率 | 测试准确率 |
|---|---|---|---|---|
| MLP | 约370万(参数量极大) | 全连接展平,无空间感知,丢失局部特征 | 参数冗余,计算量大、易过拟合 | 50%~55% |
| 简单CNN | 约10万(参数量极小) | 局部感知+权值共享,保留完整空间特征 | 卷积核复用,高效低参 | 70%~80% |
七、完整训练优化流程
-
数据集加载 + 训练集数据增强、测试集标准化
-
搭建CNN卷积特征提取模块 + BN + Dropout
-
定义交叉熵损失、Adam优化器、学习率调度器
-
迭代训练:前向传播→损失计算→反向传播→参数更新
-
每个epoch验证测试集精度与损失,更新学习率
-
可视化batch损失、epoch准确率/损失曲线,分析收敛与过拟合情况