4、数据采样基础:随机欠采样与随机过采样的原理、优缺点及在TinyML中的适用性

在TinyML场景中,类别不平衡(Class Imbalance)是模型性能下降的主要诱因之一。当某一类样本(如设备故障、异常声音、罕见手势)数量远少于其他类别时,模型会倾向于将输入预测为多数类,导致少数类召回率极低。数据采样是处理不平衡问题的第一道防线,其核心思想是在不改变模型结构的前提下,通过调整训练集的类别分布来缓解偏差。本章聚焦两种最基础的采样策略——随机欠采样(Random Undersampling)与随机过采样(Random Oversampling),深入剖析其原理、优缺点,并结合TinyML的硬件约束(内存、算力、实时性)讨论其适用边界。

原始训练集 多数类: 16 | 少数类: 3 随机欠采样 多数类: 3 (随机丢弃) | 少数类: 3 随机过采样 多数类: 16 | 少数类: 3 → 16 (复制) 核心权衡:欠采样减少数据量 → 省内存/省算力,但丢失信息;过采样增加数据量 → 提升少数类表征,但内存/算力开销增大

上图直观展示了两种采样策略对训练集分布的影响。随机欠采样通过丢弃多数类样本使两类数量趋于平衡,而随机过采样则通过复制少数类样本达到同样目的。这两种看似简单的操作,在TinyML的受限环境下却衍生出截然不同的工程取舍。

4.1 核心原理:从数据分布到模型偏差

类别不平衡的本质是经验风险最小化(ERM)框架下的先验偏差。当训练集中多数类占比达90%以上时,模型的最小化损失函数会倾向于将所有样本预测为多数类,因为这样能获得较低的总体损失。随机欠采样与随机过采样正是通过改变训练集的先验分布来干预这一过程。

  • 随机欠采样原理:从多数类样本中随机抽取与少数类数量相等的子集,与全部少数类合并形成平衡训练集。例如原始数据中多数类1000条、少数类100条,欠采样后多数类仅保留100条,总样本量从1100降至200。
  • 随机过采样原理:对少数类样本进行有放回随机复制,使其数量与多数类持平。同样例子中,少数类被复制10倍至1000条,总样本量变为2000。

两种方法都试图让模型在训练时看到“类别均衡”的分布,但实现路径完全不同:欠采样是“减法”,过采样是“加法”。在TinyML中,这种加减法直接影响了存储占用、训练时间和推理性能。

关键认知:采样操作发生在训练前的数据预处理阶段,不改变模型架构和推理计算图。但采样后的数据分布会间接影响模型权重的收敛方向,进而影响部署后模型在真实场景中的表现。

4.2 优缺点对比:不只是“平衡”那么简单

两种方法在TinyML中的适用性差异,源于其优缺点与嵌入式硬件约束的相互作用。下表从多个维度进行系统对比:

对比维度 随机欠采样 随机过采样
数据量变化 减少(仅保留部分多数类) 增加(复制少数类至平衡)
存储占用 显著降低,适合Flash/RAM受限设备 显著增加,可能超出MCU内存上限
训练时间 缩短(样本量减少) 延长(样本量增大,且存在重复计算)
信息保留 丢失多数类中的关键模式,可能欠拟合 完整保留所有样本,但复制样本导致过拟合风险
少数类表征 保持原始特征分布,无信息增强 重复样本使模型对少数类“记忆”而非“泛化”
实现复杂度 极低,仅需随机索引 低,但需注意随机种子管理
适用场景 数据量大、内存紧张、多数类冗余度高 数据量小、内存充足、少数类样本质量高

从表中可以看出,欠采样天然契合TinyML的“小内存、低功耗”特性,因为它直接减少了需要存储和处理的样本量。而过采样则与TinyML的资源约束相悖,但在某些特定场景下(如少数类样本极其珍贵且特征复杂)仍有其价值。

4.3 案例拆解:MCU上的关键词唤醒与异常检测

为了更具体地说明两种方法的适用性,我们以两个典型的TinyML应用场景进行对比分析。

场景一:关键词唤醒(KWS)中的欠采样实践

假设我们要在Cortex-M4内核的MCU上部署一个“唤醒词检测”模型,训练数据包含10000条非唤醒词语音(多数类)和500条唤醒词语音(少数类)。MCU的Flash为512KB,RAM为128KB,训练在PC端完成,但需要将模型和预处理后的数据打包到设备端进行增量学习或验证。

  1. 初始现象:直接使用原始数据训练,模型对唤醒词的召回率仅为62%,大量误唤醒(非唤醒词被触发)。
  2. 分析判断:由于多数类占比95.2%,模型倾向于输出“非唤醒”类别。若采用过采样,数据量将增至20000条,超出设备端存储预算;且复制样本会导致模型对特定噪声模式过拟合,降低泛化能力。
  3. 操作步骤:采用随机欠采样,从10000条非唤醒词中随机抽取500条,与500条唤醒词合并为1000条训练集。训练后模型参数量不变,但训练时间缩短至原来的1/10。
  4. 结果对比:唤醒词召回率提升至89%,误唤醒率从7.2%降至2.1%。模型大小未变(仍为48KB),但训练数据量减少使得PC端训练迭代速度加快,便于快速调参。
  5. 风险与代价:欠采样丢弃了9500条非唤醒词,可能丢失某些罕见噪声模式。后续在真实环境中发现,当用户处于嘈杂街道时误唤醒率上升至4.5%。复盘后决定在欠采样基础上,额外保留200条“困难样本”(如接近唤醒词的发音),形成“启发式欠采样”的改进方案。

场景二:传感器异常检测中的过采样尝试

另一个场景是工业振动传感器故障检测,少数类(故障信号)仅有30条,多数类(正常信号)有3000条。由于故障样本采集成本极高(需要人为制造故障),且每条样本包含多轴加速度时序数据,特征维度高。

  • 初始尝试:直接使用欠采样,多数类降至30条,模型严重欠拟合,测试准确率仅55%。
  • 方案调整:改用随机过采样,将30条故障样本复制100倍至3000条。训练后模型对故障的召回率达到91%,但验证时发现对未见过的新故障模式识别能力差。
  • 深度分析:过采样使模型“记住”了30条原始故障样本的具体特征,而非学习故障的通用模式。在TinyML部署后,由于传感器噪声差异,实际故障识别率降至70%。
  • 最终方案:结合过采样与数据增强(对故障样本添加轻微噪声、时间偏移),生成300条增强样本,再与3000条正常样本按1:10比例训练。既保留了故障特征多样性,又控制了数据总量。

重要警示:在TinyML中,过采样带来的数据量膨胀会直接冲击设备端的内存和Flash。例如,一个原本10MB的训练集过采样后可能膨胀至50MB,而典型MCU的Flash通常只有512KB~2MB。因此,过采样更适合在PC端训练后仅部署模型,而非在设备端进行增量学习。

4.4 常见误区与工程决策指南

在实际项目中,工程师常陷入以下误区,导致采样策略失效:

  • 误区一:认为采样后模型一定更好。采样只是改变了训练分布,若原始数据本身噪声大或特征重叠严重,采样无法解决根本问题。
  • 误区二:忽视验证集的分布。采样只应用于训练集,验证集和测试集必须保持原始的真实分布,否则评估结果会虚高。
  • 误区三:在TinyML设备端直接做随机采样。设备端内存有限,随机采样需要维护索引数组,且复制样本会占用额外RAM。建议在PC端完成采样后,将平衡数据集转换为TensorFlow Lite或CMSIS-NN所需的格式。
  • 误区四:认为欠采样一定优于过采样。当多数类样本本身信息密度高、每一条都不可丢弃时,欠采样会严重损害模型性能。

基于上述分析,我们给出TinyML场景下的采样策略决策流程:

  1. 评估数据规模:若总样本量小于1万条,优先考虑过采样或数据增强;若大于10万条,欠采样更高效。
  2. 评估内存预算:计算过采样后的数据量是否超出设备端Flash/RAM的50%。若超出,必须采用欠采样或更高级的合成采样方法(如SMOTE,但需注意其计算开销)。
  3. 评估少数类质量:若少数类样本特征多样、覆盖不同子模式,过采样效果较好;若少数类样本高度相似,过采样只会加剧过拟合。
  4. 进行交叉验证:在PC端分别用两种采样策略训练,对比在原始分布验证集上的F1-score和召回率,选择更优者。

经验之谈:在TinyML项目中,我们通常推荐“欠采样为主、过采样为辅”的混合策略。例如,先对多数类进行欠采样至少数类的3~5倍,再对少数类进行轻度过采样(复制2~3倍),这样既控制了数据总量,又保留了多数类的多样性。这种“3:1或5:1的不完全平衡”往往比完全平衡(1:1)获得更好的泛化性能。

总结而言,随机欠采样与随机过采样是TinyML类别不平衡处理中最基础、最易实现的两把“手术刀”。欠采样适合资源受限、数据冗余的场景,过采样适合少数类样本稀缺且内存充裕的场景。理解它们的原理与局限,是后续学习更高级采样方法(如SMOTE、NearMiss)和代价敏感学习的基础。在实际工程中,务必结合硬件约束、数据特性和业务指标(如误唤醒率、漏检率)进行综合权衡,而非机械地追求类别数量的平衡。