1、课程导入:TinyML中类别不平衡问题的定义、影响与学习目标

TinyML 是机器学习与嵌入式系统深度融合的前沿领域,其核心目标是在毫瓦级甚至微瓦级功耗约束下,将深度学习模型部署到 MCU、DSP 或极低功耗 AI 加速器上,实现端侧实时推理。然而,当我们将目光从云端大数据中心转向资源受限的端侧设备时,一个在传统机器学习中已被广泛研究的难题——类别不平衡(Class Imbalance)——会以更加尖锐、更加隐蔽的形式浮现出来。在 TinyML 场景中,类别不平衡不仅影响模型收敛速度和最终精度,更直接关系到模型在真实物理世界中能否可靠触发关键动作。本章作为整个课程的开篇,将系统定义 TinyML 中的类别不平衡问题,剖析其独特的工程影响,并明确后续章节的学习路径与能力目标。

TinyML 类别不平衡问题全景图 数据采集层 传感器事件流 正常状态:>95% 样本 异常/目标事件:<5% 样本 本质:物理世界事件频率天然不均衡 TinyML 部署约束 内存:Flash 256KB / RAM 64KB 算力:数十 MHz MCU 功耗:电池供电,mW 级 → 无法直接套用云端重采样方案 模型性能恶化 准确率虚高(99% 假象) 召回率极低(漏报严重) 误触发频繁(功耗浪费) → 模型不可用,甚至产生安全风险 策略一:数据采样 过采样 / 欠采样 / 合成数据 需考虑存储与实时性 策略二:损失加权 Focal Loss / 类别权重 计算开销需适配 MCU 策略三:阈值调整 决策阈值 / 后处理校准 零额外内存开销 核心矛盾:数据分布极不均衡 + 资源极度受限 → 需要专门针对 TinyML 的轻量化不平衡处理方案 目标:在保持模型轻量化的同时,最大化少数类(关键事件)的检出能力

1.1 核心原理:从数据分布到模型失效的传导机制

类别不平衡的本质是训练数据集中不同类别的样本数量存在显著差异。在 TinyML 的典型应用场景中,这种差异往往达到 10:1 甚至 1000:1 的极端比例。以工业预测性维护为例,振动传感器在 99% 的时间内采集的是正常运转数据,只有 1% 的时间包含轴承故障特征;在智能家居中,被动红外传感器(PIR)检测到人体活动的次数远少于空闲状态;在语音唤醒词检测中,"Hey Device" 的出现频率与背景噪声相比微乎其微。

这种数据分布直接导致模型训练过程中的梯度主导权失衡。神经网络通过最小化损失函数来学习,而损失函数是所有样本损失的均值。当多数类样本占据比例时,模型为了降低整体损失,会倾向于将所有样本预测为多数类。此时,虽然准确率(Accuracy)可能高达 99%,但少数类的召回率(Recall)趋近于零——模型实际上变成了一个"永远输出正常状态"的惰性分类器。

在 TinyML 环境中,这种失效模式的危害被进一步放大。由于端侧模型通常采用 8-bit 量化、模型剪枝等压缩技术,其表征能力本就弱于云端大模型。如果训练阶段未能有效处理类别不平衡,压缩后的模型将更加难以捕捉少数类的微弱特征。更关键的是,TinyML 设备往往部署在无人值守的现场,一旦模型对异常事件漏报,可能导致设备损坏、安全事故或数据丢失,其代价远高于云端推荐系统中一次错误的广告推送。

1.2 判断方法:如何识别 TinyML 场景中的类别不平衡

并非所有数据分布不均都需要特殊处理。工程实践中,我们需要通过量化指标和业务约束来综合判断。以下是系统化的诊断流程:

  1. 统计样本分布:对采集的原始数据集进行类别计数,计算不平衡比率(Imbalance Ratio, IR),即多数类样本数除以少数类样本数。当 IR > 10 时,属于严重不平衡,必须采取干预措施。
  2. 评估基线模型:使用简单的逻辑回归或小型 CNN 训练一个基线模型,观察其在验证集上的混淆矩阵。重点关注少数类的召回率(Recall)和 F1-Score,而非整体准确率。
  3. 分析误分类代价:在 TinyML 场景中,漏报(False Negative)和误报(False Positive)的代价往往不对称。例如,在火灾烟雾检测中,漏报可能导致灾难性后果,而误报仅造成一次无效报警。这种代价不对称性决定了我们需要优先优化少数类的召回率。
  4. 检查资源预算:评估 MCU 的 Flash/RAM 余量、推理延迟预算和功耗限制。如果资源极度紧张,则无法采用复杂的集成学习方法或大规模数据增强,需要选择轻量级方案。
诊断维度 轻度不平衡 (IR 2-5) 中度不平衡 (IR 5-20) 严重不平衡 (IR > 20)
模型影响 精度轻微下降 少数类召回率明显降低 模型完全失效,沦为"多数类分类器"
推荐策略 阈值调整即可 加权损失 + 轻度过采样 组合方案:采样 + 加权 + 阈值联合优化
TinyML 适配性 直接部署 需评估内存增量 需重新设计模型结构或特征工程
经验提醒:在 TinyML 项目启动初期,务必先采集一段真实环境数据(至少覆盖一周的运行周期),统计事件发生频率。很多团队在实验室合成数据上表现良好,但部署到现场后因真实数据分布与训练分布差异过大而失败。建议在数据采集阶段就引入事件日志记录机制,为后续的不平衡处理提供数据基础。

1.3 案例拆解:工业电机故障检测中的不平衡困境

我们以一个典型的工业电机预测性维护项目为例,完整展示类别不平衡问题的发现、分析与初步应对过程。

项目背景与约束:某工厂需要在电机轴承上部署振动分析节点,使用 STM32L4 系列 MCU(主频 80MHz,Flash 512KB,RAM 128KB),通过加速度计以 1kHz 采样率采集振动信号,每 10 秒进行一次 FFT 特征提取并运行推理。目标是检测轴承早期故障(内圈裂纹、外圈点蚀),以便在设备完全损坏前安排维护。

初始现象:团队采集了 30 天的振动数据,其中正常样本 280,000 条,故障样本 2,100 条(IR ≈ 133:1)。使用一个 3 层 1D-CNN 模型训练后,验证集准确率达到 98.7%,但进一步分析混淆矩阵发现:故障类别的召回率仅为 12.3%,即 87.7% 的故障事件被漏报。这意味着模型在实际运行中几乎无法提供有效的预警功能。

关键数据分析:通过 t-SNE 可视化特征空间,发现正常样本聚集为一个大簇,而故障样本分散在边缘区域,且与正常样本存在重叠。进一步分析频谱特征,发现早期故障信号的能量主要集中在 2kHz-5kHz 的特定频段,但幅值仅为正常振动基频的 1/50,极易被噪声淹没。

初步应对措施:

  • 数据层面:对故障样本应用时间滑窗重叠采样(每次滑动 50% 窗口),将故障样本扩充至 8,400 条;同时引入 SMOTE 算法在特征空间合成新的故障样本,最终将 IR 降至 15:1。
  • 算法层面:在损失函数中为故障类别分配 10 倍权重,强制模型关注少数类特征。
  • 阈值调整:将决策阈值从默认的 0.5 降低至 0.3,以增加故障检出灵敏度。

结果对比:经过上述处理后,故障召回率从 12.3% 提升至 78.6%,同时误报率从 0.8% 上升至 3.2%。虽然误报率有所增加,但考虑到每次误报仅触发一次维护检查(成本约 50 元),而一次漏报可能导致电机烧毁(成本约 2 万元),这种代价权衡是合理的。

风险与复盘:SMOTE 合成样本在特征空间中可能产生不真实的组合,导致模型对某些实际不存在的特征模式过度敏感。后续通过部署后 A/B 测试发现,合成样本引入的噪声导致 2% 的额外误报。复盘结论是:在 TinyML 场景中,优先采用物理意义明确的采样方法(如时间滑窗),谨慎使用纯数据驱动的合成算法。

1.4 常见误区与总结复盘

在 TinyML 类别不平衡处理中,工程师常陷入以下误区,需要特别警惕:

误区一:盲目追求高准确率。在极端不平衡场景下,准确率是极具欺骗性的指标。一个 99% 准确率的模型可能对少数类完全无效。必须始终以混淆矩阵、召回率、精确率、F1-Score 作为核心评估指标。
误区二:照搬云端重采样方案。云端常用的随机过采样(复制少数类样本)在 TinyML 中会导致模型过拟合,且增加训练时间;而随机欠采样(丢弃多数类样本)会丢失重要背景信息。更关键的是,云端可以承受的复杂数据增强(如 AutoAugment)在 MCU 上因计算开销过大而不可行。
误区三:忽略推理阶段的阈值校准。很多团队只在训练阶段处理不平衡,却使用默认的 0.5 作为推理阈值。实际上,训练阶段的采样和加权已经改变了模型输出的概率分布,必须重新在验证集上搜索最优阈值,且该阈值需要根据部署环境的先验概率进行动态调整。