DAY42

一、前言:为什么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%

七、完整训练优化流程

  1. 数据集加载 + 训练集数据增强、测试集标准化

  2. 搭建CNN卷积特征提取模块 + BN + Dropout

  3. 定义交叉熵损失、Adam优化器、学习率调度器

  4. 迭代训练:前向传播→损失计算→反向传播→参数更新

  5. 每个epoch验证测试集精度与损失,更新学习率

  6. 可视化batch损失、epoch准确率/损失曲线,分析收敛与过拟合情况

@浙大疏锦行

相关推荐
艾莉丝努力练剑1 小时前
【AI大模型接入SDK】C++日志体系与spdlog封装的理论部分
开发语言·c++·ide·人工智能·学习·面试·trae
墨染天姬1 小时前
[人工智能训练师]生成对抗网络(GAN)
人工智能·神经网络·生成对抗网络
RisunJan1 小时前
AI新闻速递(2026-08-25)
人工智能
金融小师妹1 小时前
多因子市场推演:油价、英伟达与杰克逊霍尔如何影响资产定价的AI事件预测框架
人工智能·python·深度学习
Wang's Blog1 小时前
Vibe Coding一人即团队系列4:AI 编程初体验与多平台对比评测
人工智能
码视野1 小时前
基于 Vue3 + Element Plus 的【基于物联网与深度学习的智慧工业园区能耗监测与光储充一体化微电网协同调度系统】设计与实现(附完整源码与PRD)
前端·人工智能·深度学习·物联网·vue3
大海变好AI1 小时前
AI 工作流怎么搭建提升效率
大数据·人工智能·python
nanawinona1 小时前
2026年下半年按能力基础选量化工具
人工智能·python
AI发掘1 小时前
知网AIGC检测怎么降?快降重和比话降AI谁更稳?实测对比
人工智能·aigc