2、异常检测基础:异常类型与常见应用场景

在进入 TinyML 异常检测模型的算法细节之前,必须先建立对“异常”本身的系统性认知。异常检测并非简单的“非正常即异常”的二值判断,而是需要根据数据形态、时间上下文、群体行为等多维度信息,定义什么是“偏离预期”。在资源受限的嵌入式设备上,异常检测的挑战尤为突出:传感器数据噪声大、存储与算力有限、标注样本稀缺。因此,理解异常的类型学分类与典型应用场景,是选择 Autoencoder 或 One-Class SVM 等模型架构、设计特征工程流程、设定报警阈值的前提。本章将系统梳理异常检测的基础概念,为后续模型实战打下坚实的理论基础。

异常检测基础框架:类型 × 场景 × 模型映射 点异常 (Point Anomaly) • 单个数据点显著偏离全局分布 • 例:振动传感器瞬时尖峰 • 例:温度读数突然跳变 • 检测难度:低(最基础) 上下文异常 (Contextual) • 依赖时间/空间上下文判断 • 例:夜间用电量突增 • 例:静止时心率过高 • 检测难度:中(需时序建模) 集体异常 (Collective) • 数据点单独正常,群体异常 • 例:连续振荡的传感器序列 • 例:周期性脉冲群 • 检测难度:高(需序列模式) TinyML 异常检测模型选择 工业预测维护 • 旋转机械振动分析 • 电机电流/温度监测 可穿戴设备 • 心率/血氧异常监测 • 跌倒检测、睡眠分析 智能家居 • 设备能耗异常识别 • 入侵检测、管道泄漏

2.1 异常类型的核心原理与判断方法

异常检测的核心原理建立在“正常行为模式”的建模之上。在 TinyML 场景中,由于设备端无法存储大量历史数据,通常采用“离线训练、在线推理”的模式:在云端或边缘服务器上利用历史数据训练模型,然后将模型压缩部署到 MCU(微控制器)上。理解异常类型,直接决定了模型输入的特征维度、时间窗口长度以及损失函数的设计。

2.1.1 点异常(Point Anomaly)

点异常是最直观的异常类型,指单个数据实例相对于整体数据分布呈现显著偏离。在嵌入式传感器数据中,点异常通常表现为:振动传感器在稳定运行中突然出现一个远超正常幅度的尖峰;温度传感器读数在几毫秒内跳变 20°C;电流传感器捕获到瞬间的浪涌。这类异常往往对应着物理冲击、电磁干扰、传感器故障或瞬时过载。

判断方法:点异常检测通常采用基于距离或密度的方法。在 TinyML 中,最常用的是固定阈值法(如超过均值±3σ)或 One-Class SVM 的决策边界。Autoencoder 模型通过重构误差来识别点异常——如果输入数据经过编码-解码后的重构误差超过预设阈值,则判定为异常。需要注意的是,点异常检测对数据噪声敏感,需要先进行滑动平均或中值滤波预处理。

2.1.2 上下文异常(Contextual Anomaly)

上下文异常(也称条件异常)是指数据点在全局分布中处于正常范围,但在特定上下文(时间、空间、环境条件)下却显得不合逻辑。例如:在夜间 2 点,智能家居的功耗突然从 5W 升至 200W——这个功耗值在白天属于正常范围,但在深夜时段却高度异常;可穿戴设备检测到用户在静坐时心率飙升至 150bpm,虽然 150bpm 在运动时正常,但在静息状态下却是危险信号。

判断方法:上下文异常检测必须引入时间或空间上下文特征。在 TinyML 实现中,常见做法是使用滑动窗口提取时序特征(如均值、方差、斜率、频域能量),并将这些特征与当前环境变量(如时间戳、温度、设备状态)拼接作为模型输入。Autoencoder 的变体——序列自编码器(Sequence Autoencoder)或 LSTM-Autoencoder——能够学习时间依赖关系,从而捕捉上下文异常。One-Class SVM 也可以在高维特征空间中处理上下文信息,但需要谨慎设计核函数。

2.1.3 集体异常(Collective Anomaly)

集体异常是指一组数据点单独看都正常,但作为一个整体序列却呈现出异常模式。例如:工业设备振动信号中出现一段持续 2 秒的振荡衰减波形,每个采样点的幅值都在正常范围内,但整体波形形态与正常运行时的平稳信号完全不同;智能家居中多个传感器(门窗、红外、摄像头)在短时间内产生一系列看似正常但逻辑上矛盾的事件序列。

判断方法:集体异常检测需要分析序列的全局结构。在 TinyML 中,通常采用以下策略:一是提取序列级特征(如频谱质心、过零率、样本熵),将整个窗口作为输入;二是使用卷积自编码器(Conv-Autoencoder)学习局部模式;三是采用基于距离的序列比对方法(如动态时间规整 DTW),但计算量较大,需在 MCU 上做近似优化。集体异常是三种类型中最难检测的,因为需要模型具备“记忆”能力,而 TinyML 设备的内存往往只有几十 KB。

异常类型 定义 典型特征 适用模型 TinyML 实现难度
点异常 单点偏离全局分布 幅值突变、尖峰 阈值法、Autoencoder、One-Class SVM 低(适合 MCU)
上下文异常 在特定上下文中偏离 时间/空间条件依赖 LSTM-Autoencoder、带上下文特征的 SVM 中(需时序建模)
集体异常 群体序列模式异常 序列形态、频谱变化 Conv-Autoencoder、序列比对 高(需较大内存)
实战经验:在 TinyML 项目中,不要一开始就追求复杂的集体异常检测。建议从点异常入手,先建立基线模型,再逐步引入上下文特征。根据工业实践统计,约 70% 的设备故障在早期表现为点异常或上下文异常,集体异常往往已经是故障中后期。

2.2 常见应用场景深度拆解

异常检测在 TinyML 领域的应用横跨工业、医疗健康、智能家居三大方向。每个场景对异常类型、实时性、功耗、精度要求各不相同,这直接影响了模型架构和部署策略的选择。

2.2.1 工业预测维护(Predictive Maintenance)

工业预测维护是 TinyML 异常检测最成熟的应用领域。在旋转机械(电机、泵、风机)上部署加速度计和温度传感器,通过分析振动频谱和温度趋势,提前数小时甚至数天预测轴承磨损、齿轮断裂、转子不平衡等故障。

关键数据与指标:振动传感器采样率通常为 1kHz-10kHz,在 MCU 上需要做 FFT(快速傅里叶变换)提取频域特征。常用的特征包括:RMS 值(振动能量)、峰值因子(冲击特征)、频带能量(如 1x 转频、2x 转频的幅值)。温度传感器采样率较低(1Hz),但需要长时间趋势分析。

模型选择:对于旋转机械,Autoencoder 在频域特征上表现优异。将 FFT 后的频谱(如 256 个频点)作为输入,训练一个 256-64-16-64-256 结构的自编码器。正常数据的重构误差较小,而故障初期的频谱变化会导致重构误差显著上升。One-Class SVM 也常用于此场景,但需要将频域特征归一化到 [0,1] 区间,并选择合适的核函数(通常用 RBF 核)。

案例闭环:电机轴承早期故障检测
背景与约束:某工厂的 5kW 三相异步电机,转速 1450rpm,轴承型号 6205。部署 STM32L4 系列 MCU(主频 80MHz,RAM 64KB),外接 ADXL345 加速度计(量程 ±16g,采样率 3.2kHz)。目标是在轴承故障恶化前 48 小时发出预警。
初始现象:电机正常运行时的振动 RMS 值为 0.8g,频谱中 1x 转频(24.2Hz)幅值 0.5g,无明显边带。
关键输入数据:连续采集 10 秒振动数据,做 1024 点 FFT,取前 128 个频点作为特征向量。正常样本 500 组,故障样本(人为注入外圈裂纹)50 组。
分析判断过程:训练 Autoencoder(128-32-8-32-128),正常样本重构误差均值 0.02,标准差 0.005。设定阈值为均值+5σ=0.045。当轴承出现早期裂纹时,频谱在 1x 转频两侧出现边带(24.2Hz±15.3Hz),重构误差升至 0.12,超过阈值。
实际操作步骤:① 在 MCU 上实现滑动窗口 FFT(每 0.5 秒计算一次);② 将 128 维频域特征输入训练好的 Autoencoder;③ 计算重构误差并与阈值比较;④ 连续 3 次超阈值则触发报警。
结果对比:传统阈值法(RMS>1.5g)在故障前 12 小时才报警,而 Autoencoder 方法提前 52 小时报警。代价是模型推理耗时 18ms,功耗增加 2.3mA,在可接受范围内。
复盘经验:Autoencoder 对频域特征的微小变化敏感,但需要定期用新数据微调模型(每季度一次),否则设备老化会导致误报率上升。

2.2.2 可穿戴设备(Wearable Devices)

可穿戴设备(智能手表、健康手环、医疗贴片)是 TinyML 异常检测的另一大战场。这类设备对功耗和内存要求极为苛刻(通常使用 Cortex-M4 内核,主频 64MHz,RAM 16-32KB),但异常检测的实时性要求较高(如跌倒检测需在 1 秒内响应)。

核心应用:① 心率异常监测:检测房颤、心动过速、心动过缓;② 跌倒检测:通过加速度计和陀螺仪识别跌倒事件;③ 睡眠呼吸暂停:通过血氧饱和度(SpO2)和心率变异性(HRV)判断呼吸暂停。这些应用主要涉及点异常和上下文异常。

模型部署策略:由于内存限制,可穿戴设备通常采用轻量级 Autoencoder(如 32-8-32 结构)或 One-Class SVM(支持向量数量控制在 50 以内)。关键优化手段包括:将模型参数量化为 int8(精度损失 <1%)、使用 CMSIS-NN 库加速推理、采用事件驱动架构(仅在数据变化超过阈值时才唤醒模型)。

2.2.3 智能家居(Smart Home)

智能家居场景中的异常检测覆盖设备能耗监测、入侵检测、水管泄漏、燃气泄漏等。与工业场景不同,智能家居的数据源更加多样(智能电表、门窗传感器、温湿度计、摄像头),且网络连接不稳定,需要在本地完成大部分推理。

典型应用:① 能耗异常:通过智能电表数据识别电器故障或用户忘关设备;② 入侵检测:通过 PIR(被动红外)传感器和门窗磁簧的时序模式识别非法闯入;③ 水管泄漏:通过流量传感器检测微小持续水流。这些场景中,集体异常(如多个传感器的事件序列)和上下文异常(如夜间活动模式)较为常见。

模型选择:对于能耗异常,One-Class SVM 在统计特征(均值、方差、峰度)上表现良好;对于入侵检测,需要分析事件序列的时序逻辑,适合使用轻量级 LSTM 或基于规则的 Autoencoder。智能家居设备通常有 Wi-Fi 模块,可以将部分计算卸载到网关,但为了隐私和可靠性,本地推理仍是首选。

应用场景 主要异常类型 传感器类型 采样率 典型 MCU 资源 推荐模型
工业预测维护 点异常、上下文异常 加速度计、温度、电流 1kHz-10kHz RAM 64KB,Flash 256KB Autoencoder(频域)
可穿戴设备 点异常、上下文异常 加速度计、PPG、ECG 25Hz-100Hz RAM 16KB,Flash 128KB 轻量 Autoencoder、SVM
智能家居 上下文异常、集体异常 电表、PIR、磁簧、流量 0.1Hz-10Hz RAM 32KB,Flash 256KB One-Class SVM、规则+Autoencoder

2.3 常见误区与总结复盘

在 TinyML 异常检测项目的实际落地中,工程师常陷入以下误区,导致模型效果不佳或部署失败。

误区一:忽视数据分布漂移。 工业设备在运行数月后,由于磨损、润滑状态变化,正常数据的分布会逐渐偏移。如果 Autoencoder 模型是几个月前训练的,重构误差会持续增大,导致大量误报。解决方案:设计周期性在线微调机制,或使用自适应阈值(如基于 EWMA 的阈值更新)。
误区二:在 MCU 上直接跑原始波形。 原始振动波形数据量巨大(10kHz × 16bit = 160kbps),MCU 无法实时处理。必须先在设备端做特征提取(FFT、统计特征),将数据压缩到几十维再输入模型。
误区三:忽略时间上下文。 很多工程师将 Autoencoder 当作纯静态模型,输入只有当前时刻的特征。但在上下文异常场景中,必须引入时间窗口(如过去 5 秒的均值、趋势斜率),否则模型无法区分“正常的高值”和“异常的突变”。

总结复盘:异常检测基础是 TinyML 模型设计的“第一性原理”。点异常适合快速部署和验证,上下文异常需要时序建模能力,集体异常则需要更复杂的序列分析。在实际项目中,建议遵循以下流程:① 明确异常类型(通过数据可视化初步判断);② 选择合适的特征提取方法(时域/频域/时频域);③ 根据 MCU 资源选择模型(优先考虑 Autoencoder,因为其推理简单、内存占用可控);④ 设定合理的阈值(使用验证集计算 ROC 曲线);⑤ 部署后持续监控误报率,建立反馈闭环。

经验之谈:在 TinyML 异常检测中,“简单模型 + 好特征”往往优于“复杂模型 + 原始数据”。一个 32 维输入的 Autoencoder(3 层全连接)在多数工业场景中已经足够,关键是特征工程要到位。此外,务必在目标硬件上做推理时间测试——某些看似轻量的模型(如带核函数的 SVM)在 MCU 上可能因为大量乘加运算而超时。