Skip to content

数据增强

数据增强(Data Augmentation)通过对训练数据施加随机变换,等效扩充数据集规模,是抑制过拟合、提升泛化能力最有效的手段之一。它在本质上是一种隐式正则化(详见正则化与防过拟合)。本页系统讲解图像、文本和音频三大模态的数据增强方法。前置阅读:模型评估。

把数据增强想象成”给模特换装拍照”——同一个人换不同角度、光照、背景拍很多照片,模型(学生)学到的是”人”的本质特征(脸、身体),而不是某张特定照片的细节(光影、背景)。增强让模型”见过更多变体”,从而对新数据更鲁棒。

  • 翻转 / 旋转 / 裁剪= 改变物体的位置和角度。一只猫翻转过来还是猫——模型学会不依赖”猫总是朝左”这种偏差。
  • 颜色抖动= 改变光照和色调。红色的苹果调暗调绿还是苹果——模型学会不依赖特定颜色。
  • CutMix / MixUp= 把两张图混合。模型被迫学习”混合体中两个物体的特征”,而不是只关注一个显眼物体——正则化效果极强。
  • Mosaic= 把四张图拼成一张(YOLO 专属)。一张图里同时有更多物体,极大提升小目标检测能力。
  • 回译= 中文→英文→中文,得到表达不同但语义相同的句子——文本增强的经典方法。

数学基础:为什么增强能降低泛化误差

Section titled “数学基础:为什么增强能降低泛化误差”

理解数据增强为什么有效,需要一点概率论和统计学习理论。

模型训练的目标是最小化期望风险(Expected Risk)——在真实数据分布 p(x,y)p(x,y) 上的损失:

R(θ)=E(x,y)∼p[L(fθ(x),y)]R(\theta) = \mathbb{E}_{(x,y)\sim p}[\mathcal{L}(f_\theta(x), y)]

但我们无法知道真实分布 pp,只能用有限的训练样本近似,得到经验风险(Empirical Risk):

R^(θ)=1N∑i=1NL(fθ(xi),yi)\hat{R}(\theta) = \frac{1}{N}\sum_{i=1}^{N}\mathcal{L}(f_\theta(x_i), y_i)

当训练样本有限时,最小化 R^\hat{R} 容易导致过拟合(Overfitting,即模型记住了训练数据的噪声和细节,对新数据泛化能力差)。数据增强的本质是:通过变换集合 T\mathcal{T} 扩充数据分布,让我们在更大的”虚拟数据集”上最小化经验风险,从而逼近期望风险。

形式化:增强等价于在扩展分布上求期望

Section titled “形式化:增强等价于在扩展分布上求期望”

假设增强变换 t∼Tt \sim \mathcal{T} 以概率 p(t)p(t) 采样,增强后的期望风险为:

R^aug(θ)=1N∑i=1NEt∼T[L(fθ(t(xi)),yi)]\hat{R}_{aug}(\theta) = \frac{1}{N}\sum_{i=1}^{N}\mathbb{E}_{t\sim\mathcal{T}}\left[\mathcal{L}(f_\theta(t(x_i)), y_i)\right]

这等价于在”扩展分布” paug(x,y)=∫p(t) p(x,y) dtp_{aug}(x,y) = \int p(t)\,p(x,y)\,dt 上训练。当变换集合 T\mathcal{T} 足够丰富时,paugp_{aug} 更接近真实分布 pp,泛化误差下降。

直观类比:假如真实世界中的猫会出现在各种角度和光照下,但你的训练集只有正面照。模型学到的是”正面 = 猫”。增强后模型见到各种角度的猫,等价于用少量真实样本近似了真实分布的多样性。

VC 维视角:增强隐式约束了假设空间

Section titled “VC 维视角:增强隐式约束了假设空间”

从统计学习理论看,数据增强等效于告诉模型”这些变换后的样本属于同一类”,缩小了模型可选的函数空间(假设空间),从而降低了模型的VC 维(Vapnik-Chervonenkis Dimension,衡量模型复杂度的指标)。复杂度降低 → 泛化误差上界降低。这与 L2 正则化(正则化)和 Dropout 在数学上属于同一类隐式正则化手段。

MixUp 的数学形式为:

x~=λxi+(1−λ)xj,y~=λyi+(1−λ)yj\tilde{x} = \lambda x_i + (1-\lambda) x_j, \quad \tilde{y} = \lambda y_i + (1-\lambda) y_j

其中 λ∼Beta(α,α)\lambda \sim \text{Beta}(\alpha, \alpha)。当 α→0\alpha \to 0 时退化为标准训练(λ\lambda 接近 0 或 1),α→∞\alpha \to \infty 时 λ→0.5\lambda \to 0.5(完全混合)。MixUp 强制模型在样本间的”插值区域”也输出正确的线性混合标签,从而产生极其平滑的决策边界。从贝叶斯视角看,MixUp 近似于对输入空间施加了线性插值的先验。

Beta 分布(Beta Distribution)是定义在 [0,1][0,1] 区间上的连续概率分布,形状由两个参数 α,β\alpha, \beta 控制。MixUp 用它来采样混合比例 λ\lambda,使得 λ\lambda 倾向于接近 0 或 1(即偏向某一张图),而不是恒为 0.5。α=0.2\alpha=0.2 是常用值。

  • 水平翻转(Horizontal Flip):左右翻转图像,最常用。对自然图像几乎不影响语义,但对文字识别(OCR)类任务会破坏语义。
  • 随机裁剪(Random Crop / Resize):从图像中随机裁出一个子区域再缩放到目标尺寸。迫使模型识别局部特征而非全局位置。ImageNet 训练标配。
  • 旋转 / 缩放 / 平移:对几何不变的任务有效,但对方向敏感的任务(如文字、数字识别)需谨慎。
  • 颜色抖动(Color Jitter):随机调整亮度(Brightness)、对比度(Contrast)、饱和度(Saturation)、色调(Hue)。SimCLR 等对比学习方法使用极强的颜色抖动。
  • 高斯噪声 / 模糊:添加随机噪声或高斯模糊,提升对图像质量变化的鲁棒性。
  • Cutout:随机遮挡图像中一个矩形区域(填零或均值),迫使模型不依赖某个局部特征,增强对遮挡的鲁棒性。
  • MixUp:将两张图像及其标签按比例线性混合:x_mix = λ*x_1 + (1-λ)*x_2,y_mix = λ*y_1 + (1-λ)*y_2。λ 从 Beta 分布采样。MixUp 产生极其平滑的决策边界,正则化效果极强。
  • CutMix:从图 B 中裁一个矩形区域粘贴到图 A 上,标签按面积比例混合。比 MixUp 保留了更多真实局部纹理,在分类和检测中效果更好。
  • Mosaic:YOLOv4 引入。将四张图拼成一张 2×2 网格图,极大增加单张图中的目标数量和背景多样性,对小目标检测尤其有效。
  • AutoAugment:用强化学习搜索最佳增强策略组合(如”先旋转 15° 再以概率 0.7 做颜色反转”),在 ImageNet 等数据集上自动找到比人工设计更好的策略。缺点是搜索成本极高。
  • RandAugment:AutoAugment 的简化版。不搜索具体策略,而是从一组变换中均匀采样,只调两个超参数(变换数量 N 和幅度 M)。效果接近 AutoAugment 但几乎无搜索成本,已成为默认选择。
  • 回译(Back Translation):将原文翻译成另一种语言再翻回来。如”这个电影很好”→ 翻译成英文 “This movie is great” → 翻回中文”这部电影很棒”。得到表达不同、语义一致的增强样本。
  • 同义词替换(Synonym Replacement):随机选取非停用词,用同义词替换。简单有效但可能改变细微语义。
  • 随机插入 / 删除 / 交换:EDA(Easy Data Augmentation)包含四种操作:同义词替换、随机插入同义词、随机删除单词、随机交换单词位置。
  • 上下文词替换(Contextual Augmentation):用 BERT 等预训练模型预测 mask 位置的词来替换,比同义词表更自然。
  • SpecAugment:Park et al. (2019) 提出,在梅尔频谱图(Mel Spectrogram)上做时间掩码(Time Masking)和频率掩码(Frequency Masking)——随机遮蔽一段连续的时间窗或频率窗。已成为语音识别(ASR)训练的标准增强手段,大幅提升泛化能力。
  • 加噪(Noise Injection):在原始波形或频谱上叠加随机噪声(白噪声、环境噪声),提升对嘈杂环境的鲁棒性。
  • 速度扰动(Speed Perturbation):以 0.9x / 1.0x / 1.1x 倍速重采样,模拟不同语速。

MixUp vs CutMix:两种数据混合方式

Section titled “MixUp vs CutMix:两种数据混合方式”

图像增强:torchvision + albumentations

Section titled “图像增强:torchvision + albumentations”
import torch
import torchvision.transforms as T
# torchvision 标准增强组合(用于训练)
train_transform = T.Compose([
T.RandomResizedCrop(224), # 随机裁剪并缩放到 224×224
T.RandomHorizontalFlip(p=0.5), # 50% 概率水平翻转
T.ColorJitter(0.4, 0.4, 0.4, 0.1), # 亮度/对比度/饱和度/色调抖动
T.RandomRotation(15), # 随机旋转 ±15°
T.ToTensor(), # 转张量并归一化到 [0,1]
])
# albumentations:更快更强,工业级首选(MixUp / CutMix 需额外实现)
import albumentations as A
aug = A.Compose([
A.RandomResizedCrop(224, 224),
A.HorizontalFlip(p=0.5),
A.ColorJitter(brightness=0.2, contrast=0.2, p=0.5),
A.CoarseDropout(max_holes=8, max_height=16, max_width=16, p=0.5), # Cutout
])
# 测试/推理时不做随机增强!只做必要的 Resize + CenterCrop
test_transform = T.Compose([T.Resize(256), T.CenterCrop(224), T.ToTensor()])
import numpy as np
def mixup_data(x, y, alpha=0.2):
"""MixUp:将一个 batch 内的数据两两混合"""
lam = np.random.beta(alpha, alpha) # 从 Beta 分布采样混合比例
index = torch.randperm(x.size(0)) # 随机打乱索引
mixed_x = lam * x + (1 - lam) * x[index] # 图像混合
y_a, y_b = y, y[index] # 标签混合(训练时两个标签都算 loss)
return mixed_x, y_a, y_b, lam
# 训练循环中使用
# mixed_x, y_a, y_b, lam = mixup_data(images, labels)
# loss = lam * criterion(model(mixed_x), y_a) + (1 - lam) * criterion(model(mixed_x), y_b)
  • 测试 / 推理时绝不增强:增强只用于训练。测试时做固定的 Resize + CenterCrop(或简单缩放)。这个错误很常见——增强测试数据等于人为加噪声,评估结果不可信。
  • 增强强度要与任务匹配:数字识别(MNIST)不能做上下翻转(6 和 9 会颠倒)、医学影像不能随意旋转(器官方向有诊断意义)。先确认增强不破坏标签语义。
  • 从弱到强逐步加:先用翻转 + 裁剪跑基线,效果稳定后再加 MixUp / CutMix / RandAugment。一上来就全开容易训练崩溃且难以定位问题。
  • CutMix 通常优于 MixUp:保留真实局部纹理,在分类和检测任务中表现更好。二者也可以组合(先 MixUp 再 CutMix)。
  • Mosaic 是 YOLO 专属增强:大幅提升小目标检测,但对非检测任务不一定有效。YOLOv8 中 Mosaic 在最后几个 epoch 关闭(避免过度增强导致欠拟合)。
  • 文本增强对大模型效果有限:大语言模型(GPT-4 级别)预训练数据量巨大,简单的同义词替换增强意义不大。文本增强主要用于小数据集分类任务。
  • SpecAugment 是语音识别标配:几乎所有现代 ASR 模型(Whisper、Conformer)都在用,训练时必开。
  • 图像分类:ResNet / EfficientNet 训练用 RandAugment + MixUp + CutMix。详见CNN 卷积神经网络。
  • 目标检测:YOLOv4-v8 用 Mosaic + 颜色抖动 + 随机仿射。详见目标检测与 YOLO。
  • 图像分割:随机裁剪 + 翻转 + 弹性形变。详见图像分割。
  • 自监督 / 对比学习:SimCLR 用极强的颜色抖动 + 多裁剪作为正样本对。详见自监督与对比学习。
  • 语音识别:SpecAugment 几乎是标配。详见语音识别。
  • 大语言模型:预训练用大规模原始数据(不需要增强),微调阶段偶尔用回译 / 指令改写扩充数据。
类库语言说明
torchvision.transformsPythonPyTorch 官方图像变换模块,覆盖翻转/裁剪/颜色抖动/RandAugment 等
albumentationsPython工业级图像增强库,速度快、操作丰富,支持 Cutout/CutMix 等
nlpaugPythonNLP 数据增强库:回译、同义词替换、EDA、BERT 词替换
audiomentationsPython音频增强库,类似 albumentations 的音频版本
torchaudio.transformsPythonPyTorch 官方音频变换,含 SpecAugment
术语英文解释
数据增强Data Augmentation对训练数据施加随机变换等效扩充数据集,抑制过拟合
颜色抖动Color Jitter随机调整亮度/对比度/饱和度/色调,提升对光照变化的鲁棒性
CutoutCutout随机遮挡图像中一个矩形区域,迫使模型关注全局特征
MixUpMixUp将两张图像及标签按比例线性混合,产生平滑的决策边界
CutMixCutMix从一张图裁一块贴到另一张上,标签按面积比例混合
MosaicMosaic将四张图拼成 2×2 网格,YOLO 专属增强,提升小目标检测
AutoAugmentAutoAugment用强化学习搜索最佳增强策略组合
RandAugmentRandAugmentAutoAugment 的简化版,均匀采样只调两个超参,效果接近
回译Back Translation文本翻译到另一语言再翻回来,得到表达不同的同义增强
SpecAugmentSpecAugment在频谱图上做时间/频率掩码,语音识别的标准增强
  • Zhang et al.,「mixup: Beyond Empirical Risk Minimization」(ICLR 2018):MixUp 论文,线性混合图像与标签,正则化效果极强。
  • Yun et al.,「CutMix: Regularization Strategy to Train Strong Classifiers with Localizable Features」(ICCV 2019):CutMix 论文,保留真实局部纹理的混合增强。
  • Bochkovskiy et al.,「YOLOv4: Optimal Speed and Accuracy of Object Detection」(2020):YOLOv4 论文,引入 Mosaic 增强等检测专用增强策略。
  • Cubuk et al.,「RandAugment: Practical automated data augmentation with a reduced search space」(NeurIPS 2020):RandAugment 论文,极简的自动增强方案。
  • Park et al.,「SpecAugment: A Simple Data Augmentation Method for Automatic Speech Recognition」(Interspeech 2019):SpecAugment 论文,语音识别增强的标准方案。
  • Shorten & Khoshgoftaar,「A survey on Image Data Augmentation for Deep Learning」(2019):图像增强综述,系统梳理各类方法。