小数据集训练 CNN 如何缓解过拟合?
简化版
小数据训练 CNN 的首选不是从零堆正则化,而是使用与目标域接近的预训练模型,再配合合理增强、分层冻结/微调和交叉验证。还要先排除数据泄漏;训练集很高、验证集很低只是症状,不自动说明该用更大 dropout。
详细版
-
按主体、患者或时间分组划分,避免同源图片跨训练与验证集。
-
先训练新分类头,再以较小学习率逐步解冻高层;域差异越大,需解冻越多。
-
使用符合语义的裁剪、翻转、颜色扰动,必要时加 Mixup/CutMix。
-
控制容量、weight decay、early stopping 与 label smoothing,但每项都要做消融。
-
报告 K 折均值和方差、类别切片以及校准,不只看单次准确率。
完整版教学
一、小样本的核心矛盾是容量大于证据
CNN 有足够参数记住训练图片甚至背景噪声,而少量样本无法约束所有自由度。
预训练把通用边缘、纹理和形状知识作为强先验,显著缩小需要从目标数据学习的空间。
另一类风险是验证集不独立。
连续视频帧或同一患者的不同切片被随机拆开,会让验证分数虚高,任何正则化都修复不了这种评估泄漏。
二、底层机制与关键公式
冻结层等价于固定一部分表示,只估计较少参数;逐步解冻则允许高层适配新语义。
通常分类头学习率较大,越靠近输入的层学习率越小,以免灾难性破坏预训练特征。
增强扩大有效样本邻域,weight decay 限制权重规模,early stopping 限制优化步数。
它们作用机制不同,应按验证结果组合,而不是同时拉满。
discriminative LR example:
head: 1e-3
stage4: 1e-4
stage1: 1e-5
K-fold report = mean(metric_k) ± std(metric_k)
三、带数字的推演
只有 1200 张图时做 5 折,每折约 960 张训练、240 张验证。
若五折 F1 为 [0.78,0.83,0.75,0.81,0.79],应报告约 0.792±0.027,而不是只挑 0.83。
四、方案对比与选择
| 方案/场景 | 机制或优势 | 主要代价 |
|---|---|---|
| 预训练+冻结 | 样本极少、域接近 | 偏差可能偏大 |
| 逐层微调 | 有一定数据或域差异 | 需小学习率防遗忘 |
| 从零训练 | 数据充分或域完全不同 | 小数据下方差最高 |
五、实际执行流程
分组去重划分 -> 建立预训练基线 -> 只训分类头
-> 逐层解冻 + 合理增强 -> K 折/切片评估 -> 最后一次测试集评估
六、边界条件与工程代价
医学、工业等领域与 ImageNet 差异可能很大,预训练仍常有帮助,但不能默认所有低层特征都适配。
自监督领域预训练有时比自然图像监督预训练更合适。
测试集不能参与增强强度、冻结层数或 early stopping 的选择。
反复看测试集再调参,本质上仍是泄漏。
记忆钩子:按“先保评估可信,再借预训练降自由度,最后用增强和正则补强”的顺序处理。
七、常见误区与追问
-
误区:训练准确率高就证明模型学会了任务。 小数据下更可能是记忆,必须看独立验证与切片表现。
-
追问:为什么先冻结后解冻? 先让随机初始化的头稳定,再以小步更新预训练表示,减少破坏。
-
误区:Dropout 越大越能解决过拟合。 过强会造成欠拟合,而且卷积主干中未必是最佳手段。
-
追问:K 折后最终模型怎么训练? 确定方案后可用全部开发数据重训,再只在保留测试集评估一次。
-
追问:如何发现数据泄漏? 按样本来源查重,并按主体、时间或设备重新分组验证。
八、加强记忆
按“先保评估可信,再借预训练降自由度,最后用增强和正则补强”的顺序处理。
小数据答案若没提分组划分与方差,就只解决了训练问题,没有解决可信评估。