5.2 数据增强:给训练集注水还是赋能


5.2 数据增强:给训练集注水还是赋能

GAN 用于数据增强的机制是:学真实数据的分布,再采样新样本扩充训练集,尤其服务稀缺类别的下游分类器训练。 它对传统增强(翻转、裁剪、色彩扰动)的优势在"分布级多样性",风险在"模式污染"——把生成器的偏差灌进下游模型。本节设计一个可复算的对照实验说清两边。

应用现场第二站:训练集经济。深度模型的胃口与标注预算的矛盾是永恒痛点,稀缺类别(罕见病影像、小语种字符、故障样本)尤甚。GAN 的卖点听上去完美:学一遍分布,无限采样。本节的任务是把这个卖点拆开验证,别让"注水"冒充"赋能"。

两种增强的本质区别

传统增强是已知变换的组合:翻转、旋转、裁剪、色彩抖动——它产出的是"真实样本的变体",信息量受限于变换集合,翻来覆去都是同一张图的几何光学亲戚。GAN 增强是分布级的再采样:生成器学的是类别分布本身,理论上能造出"没见过但合理"的新个体(新姿态、新光照组合、新纹理排布)。

两者不是替代关系。产业实践的主流配方是串联:传统增强打底(零风险、零成本),GAN 增强只投放在稀缺类别上(收益最大、风险可控)。风险在哪里?生成器若带病(模式崩溃丢了一半姿态、或凭空造出不合理样本),增强就成了系统性投毒——下游分类器学会认"生成器的偏见"而不是"类别的本质",验证集上还看不出来,直到遇到真实分布的长尾才翻车。这就是模式污染

对照实验:注水还是赋能,数字说话

设计一个最小但完整的对照:三个类别,其中类别 2 是稀缺类(样本量只有其他类的十分之一)。下游任务是小分类器,对比三种训练数据配方。数据侧用可复算的合成实验:

import numpy as np rng = np.random.default_rng(9) def make_class(center, n, spread=0.6): return center + rng.normal(0, spread, (n, 2)) # 类别 0/1 充足(各 500), 类别 2 稀缺(仅 50) X0 = make_class(np.array([0, 0]), 500) X1 = make_class(np.array([6, 0]), 500) X2 = make_class(np.array([3, 5]), 50) print(f"原始训练集: 类0={len(X0)} 类1={len(X1)} 类2={len(X2)}") # 输出: 原始训练集: 类0=500 类1=500 类2=50 # --- 方案A: 传统增强(加噪扰动, 不改变分布中心) --- X2_trad = X2 + rng.normal(0, 0.1, X2.shape) # --- 方案B: GAN 式增强(从学到的分布重新采样, 覆盖真实散布) --- X2_gan = np.array([3, 5]) + rng.normal(0, 0.6, (450, 2)) # --- 方案C: 带病 GAN(模式崩溃: 丢失一半散布, 只会聚在子区域) --- X2_bad = np.array([3.4, 5.4]) + rng.normal(0, 0.25, (450, 2)) # 下游评估: 用一个大的"真实验证集"算各类覆盖 val2 = np.array([3, 5]) + rng.normal(0, 0.6, (2000, 2)) def coverage(gen, val, thresh=0.35): # 验证点中, 半径 thresh 内有生成样本的比例 d = np.linalg.norm(val[:, None, :] - gen[None, ::5, :], axis=2) return (d.min(axis=1) < thresh).mean() print(f"传统增强对验证分布覆盖: {coverage(X2_trad, val2):.3f}") print(f"健康 GAN 增强覆盖: {coverage(np.vstack([X2, X2_gan]), val2):.3f}") print(f"崩溃 GAN 增强覆盖: {coverage(np.vstack([X2, X2_bad]), val2):.3f}") # 输出: # 传统增强对验证分布覆盖: 0.550 # 健康 GAN 增强覆盖: 0.937 # 崩溃 GAN 增强覆盖: 0.667

三组读数讲完整个故事:传统增强(同点加微扰)对真实散布的覆盖只有 0.550——它把 50 个点的邻域稍微加厚,但点与点之间的空白依然空白;健康 GAN 增强覆盖 0.937——分布级再采样真正填满了类别 2 的散布;而模式崩溃的带病 GAN 覆盖只有 0.667——三成多的姿态空间被"注水"注丢了,下游模型在丢失区域的表现不会比没增强好多少,还多了过拟合生成偏差的风险。

工程守则:四步走

对照实验的结论可以直接翻译成操作清单。第一步,诊断需求:增强前先确认瓶颈真是稀缺类(用混淆矩阵定位,别对着全类别盲目增强)。第二步,验生成器:给增强用的 GAN 单独跑一遍 4.2 节的验收——尤其看多样性(IS 或覆盖率),模式崩溃的生成器(6.1 节)在这里是毒药。第三步,控制配比:生成样本与真实样本比例从 1:1 起步试探,不是越多越好;带病样本的边际负效应随比例上升。第四步,留出纯净验证:验证集绝掺生成样本,且要覆盖真实分布的长尾(上游业务数据),否则模式污染测不出来。

⚠️ 常见坑:用测试分布的样本训练增强用的 GAN——信息泄漏让"提升"变成假象。增强 GAN 的训练数据必须与下游验证/测试严格隔离。

本节要点回顾

  • 本质区别:传统增强是"样本的变体"(覆盖 0.550),GAN 增强是"分布的再采样"(覆盖 0.937);
  • 模式污染:崩溃生成器覆盖仅 0.667,三成多散布被注丢,负效应随配比上升;
  • 主流配方:传统增强打底 + GAN 只投稀缺类,串联而非替代;
  • 四步守则:诊断需求、验生成器、控配比、纯净验证;
  • 红线:增强 GAN 与测试数据严格隔离,防信息泄漏制造假提升。

常见问题:增强实操

生成样本与真实样本按什么比例掺? 从一比一起步,按下游验证集性能试探上调。经验规律:稀缺类样本越少,可掺比例越高(50 个真实样本配 200 个生成样本常见);充足类掺了多半是白费算力甚至帮倒忙。

增强用的 GAN 要不要训到完美? 不用,也等不起。够用标准是"覆盖率诊断过关"(本节的覆盖率或 4.2 节 IS 不塌方)。为增强专用 GAN 追求最后一点 FID 改善,性价比通常是负的。

除了分类器,别的下游任务能用吗? 能,检测与分割同样吃这一套,但验收要加任务侧指标:检测任务看增强后漏检率变化,分割看边界指标。增强的终极裁判永远是下游任务,不是生成质量本身。

演算自测

某缺陷检测任务:缺陷样本 80 个,正常样本 8000 个。方案甲传统增强(旋转翻转,样本变 640),方案乙 GAN 增强至 2000。按本节框架,两个方案各覆盖什么、缺什么?参考答案:甲零风险但对样本间空白无补(变体不填空),乙能填空白但必须先过生成器体检(缺陷模式少、极易崩溃——覆盖率诊断不可省),且配比与纯净验证集(含真实长尾)要预先设计。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U