2、异常检测基础:异常类型与常见应用场景
在进入 TinyML 异常检测模型的算法细节之前,必须先建立对“异常”本身的系统性认知。异常检测并非简单的“非正常即异常”的二值判断,而是需要根据数据形态、时间上下文、群体行为等多维度信息,定义什么是“偏离预期”。在资源受限的嵌入式设备上,异常检测的挑战尤为突出:传感器数据噪声大、存储与算力有限、标注样本稀缺。因此,理解异常的类型学分类与典型应用场景,是选择 Autoencoder 或 One-Class SVM 等模型架构、设计特征工程流程、设定报警阈值的前提。本章将系统梳理异常检测的基础概念,为后续模型实战打下坚实的理论基础。
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、序列比对 | 高(需较大内存) |
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 异常检测项目的实际落地中,工程师常陷入以下误区,导致模型效果不佳或部署失败。
误区二:在 MCU 上直接跑原始波形。 原始振动波形数据量巨大(10kHz × 16bit = 160kbps),MCU 无法实时处理。必须先在设备端做特征提取(FFT、统计特征),将数据压缩到几十维再输入模型。
误区三:忽略时间上下文。 很多工程师将 Autoencoder 当作纯静态模型,输入只有当前时刻的特征。但在上下文异常场景中,必须引入时间窗口(如过去 5 秒的均值、趋势斜率),否则模型无法区分“正常的高值”和“异常的突变”。
总结复盘:异常检测基础是 TinyML 模型设计的“第一性原理”。点异常适合快速部署和验证,上下文异常需要时序建模能力,集体异常则需要更复杂的序列分析。在实际项目中,建议遵循以下流程:① 明确异常类型(通过数据可视化初步判断);② 选择合适的特征提取方法(时域/频域/时频域);③ 根据 MCU 资源选择模型(优先考虑 Autoencoder,因为其推理简单、内存占用可控);④ 设定合理的阈值(使用验证集计算 ROC 曲线);⑤ 部署后持续监控误报率,建立反馈闭环。