泛化与训练实践:让模型不只记住卡片
- 识别过拟合与同源数据泄漏
- 解释正则化、数据增强和提前停止的边界
训练表现好为什么仍可能失败
云朵工坊的每张卡片都能拍十次,角度略有区别。若把这些近乎相同的照片随机分到训练与测试中,测试就可能只是在考模型是否记住同一张卡片。泛化指模型面对未用于训练、且符合目标使用分布的新样本时仍能完成任务。高训练准确率只是说明对训练数据表现好,不能自动推断泛化。卡片上的固定背景颜色甚至可能成为捷径:网络记住蓝背景对应圆形,却没有学到形状关系。
先设计划分,再讨论技术
应按原始卡片编号分组,把同一张卡片的所有照片放到同一集合。训练集用于更新参数,验证集用于比较设置与选择方案,测试集用于方案确定后的独立评估。如果图片来自不同拍摄时间,还可以按时间划分来贴近未来使用场景。标准化所用统计量也应仅从训练数据估计,再应用到其他集合。把测试信息提前混入特征处理会造成泄漏,哪怕没有直接把测试标签用于训练,也可能让结果不再可信。
控制复杂度有不同工具
正则化可以限制过大的权重,或用随机失活减少训练时对少数组合的依赖,但这些做法不是消除过拟合的万能开关。数据增强对图片进行轻微平移、合理旋转等处理,让模型看到可能出现的变化;增强必须保持标签含义。若任务区分上下方向,随意翻转就可能改变答案。提前停止根据验证表现选择合适的训练时点,而不是凭训练损失决定何时结束。工具有效与否最终仍要用符合目标场景的数据检验。
读懂两种常见曲线
当训练与验证都表现差,可能是模型表达不足,也可能是标签噪声、输入处理错误或训练尚未稳定,不能立即断定需要更深网络。当训练很好而验证明显较差,过拟合是重要线索,还应检查两集合是否来自不同分布。工坊记录每轮训练损失、验证损失与分组准确率,观察遮挡和背景变化的错误。类别不均衡时,总准确率会被多数类掩盖,应看混淆矩阵、每类召回率,以及需要人工复核的案例。
形成可复现的小实验
先建立简单规则或浅层模型作为基线,再只改变一项主要设置进行比较。记录卡片数量、分组办法、增强规则、训练轮次与随机种子。随机种子能帮助复现部分过程,却不保证不同硬件与软件配置逐位一致。选择方案后再评估保留测试集,报告误差而非只展示最好样本。若新卡片都来自从未覆盖的背景,即使原测试结果很好,也应补充新的评估;泛化始终依赖数据所代表的范围。
本节要点
- 同一原始对象的变体应成组划分,防止近重复泄漏
- 增强必须保持任务标签,正则化不保证可靠
- 模型选择看验证集,独立测试用于最终评估
动手练习:修复一份不可信的数据划分
- 假设有十二张原始卡片、每张五张照片,按卡片编号分成八张训练、两张验证、两张测试
- 写出合理平移增强与不适用增强各一种,并解释标签是否改变
- 对训练准确率百分之九十九、验证百分之七十列出三个待核查原因和一条下一步动作
自查清单
- 所有照片按原始卡片成组划分
- 解释增强是否保持标签含义
- 没有反复用测试集选择训练设置
先自己做,再查看参考答案
示范划分是卡片一至八的四十张照片全部训练,九至十的十张照片验证,十一至十二的十张照片测试,任何同一卡片的照片不跨集合。轻微平移若不会裁掉主要形状,可以模拟摆放差异;把主要边角大幅裁掉可能让原标签失去依据,因此不应盲目加入。训练与验证差距大时,先核查近重复泄漏是否曾出现在旧实验、背景与拍摄条件是否不同、标签及输入处理是否一致,再检查模型容量和轮次数。下一步可在固定分组下比较提前停止前后的验证表现,并保存失败卡片清单。这个微型样本只用于理解流程,不足以证明真实场景可靠。