3. 异常检测概念

在进入TinyML端侧异常告警的实战之前,必须先厘清“异常检测”这一核心概念。异常检测(Anomaly Detection)并非简单的“超阈值报警”,而是一套在数据中识别出不符合预期模式、显著偏离正常行为的数据点的系统性方法。在端侧资源受限的背景下,理解异常的定义、分类以及应用场景,直接决定了我们后续选择何种算法、提取哪些特征、设定怎样的告警策略。本章将系统梳理异常检测的基础理论,并结合工业、家居、可穿戴三大场景,为后续的模型训练与部署打下坚实的认知基础。

异常检测核心概念与场景映射 异常检测定义 识别偏离正常模式的数据点 点异常 单个数据点偏离 例:温度瞬间飙升 检测难度:低 上下文异常 在特定语境下异常 例:夜间用电量激增 检测难度:中 集合异常 一组数据整体异常 例:连续振动波形畸变 检测难度:高 工业预测性维护 振动/温度/电流传感器 点异常+集合异常 提前预警轴承故障 智能家居 环境/能耗/行为数据 上下文异常为主 漏水/入侵/设备老化 可穿戴设备 心率/加速度/血氧 上下文+集合异常 跌倒检测/心律不齐 图:异常检测定义、类型与典型场景的映射关系

3.1 异常检测的定义与核心原理

异常检测,又称离群点检测(Outlier Detection),其本质是在数据分布中寻找那些“不寻常”的样本。这里的“不寻常”并非主观臆断,而是相对于数据自身的历史规律或既定标准而言。在TinyML端侧场景中,异常检测通常以无监督或半监督形式运行——因为标注异常数据的成本极高,且异常形态千变万化,难以穷举。

从数学角度看,异常检测的核心是建立“正常行为轮廓”(Normal Profile)。这个轮廓可以是统计分布(如高斯分布)、距离度量(如K近邻)、重构误差(如自编码器)或树形隔离结构(如孤立森林)。当新样本到来时,系统计算其与正常轮廓的偏离程度,若偏离度超过预设阈值,则判定为异常。

端侧异常检测的特殊性:在云端,我们可以用复杂模型(如深度自编码器)处理海量数据;但在MCU级别的端侧设备上,内存可能仅有几百KB,算力以MHz计。因此,端侧异常检测必须满足三个约束:低内存占用(模型参数通常小于100KB)、低计算量(单次推理时间小于50ms)、可增量更新(设备运行中能持续学习正常模式漂移)。

理解异常检测的定义时,需要区分它与“分类”和“回归”的本质差异。分类任务需要预先定义所有类别(包括异常类),而异常检测只学习“正常”的边界,任何超出边界的事物都被视为异常。这种“只学正常”的思路,使得异常检测天然适合那些异常形态未知或不断演变的场景。

3.2 异常检测的三种类型

根据异常的结构特征,学术界和工业界通常将异常分为三类:点异常、上下文异常和集合异常。理解这三者的区别,有助于我们在端侧选择正确的特征提取窗口和算法模型。

类型 定义 典型示例 端侧适用算法 挑战
点异常 单个数据点与整体数据分布显著偏离 电机温度瞬间从60°C跳到120°C Z-Score、IQR、阈值法 阈值设定需动态适应
上下文异常 在特定上下文(时间/空间)下异常,但全局看可能正常 凌晨3点智能门锁突然开锁(时间上下文) 滑动窗口统计、周期性分析 需要维护上下文状态
集合异常 一组数据点整体表现异常,但单个点可能正常 连续10秒的振动波形呈现不规则脉冲序列 孤立森林、自编码器、序列特征 需要窗口级特征提取

3.2.1 点异常:最基础的异常形态

点异常是最直观的异常类型。在端侧传感器数据流中,点异常通常表现为突发的尖峰或骤降。例如,工业电机上的温度传感器,正常工作时温度在60°C±5°C范围内波动,若某次采样值达到95°C,这就是一个典型的点异常。检测点异常最常用的方法是基于统计的Z-Score法:

// 伪代码:Z-Score点异常检测
float mean = 60.0f;   // 正常均值
float std = 5.0f;     // 正常标准差
float threshold = 3.0f; // 3σ原则

float z_score = (current_value - mean) / std;
if (z_score > threshold) {
    trigger_alarm();
}

点异常检测的优点是计算量极小,适合在MCU上逐样本执行。但它的局限性也很明显:无法捕捉时间序列中的趋势变化,且对噪声敏感。在端侧实践中,通常会对原始信号先做滑动平均滤波,再计算Z-Score,以降低误报率。

3.2.2 上下文异常:结合场景的智能判断

上下文异常是端侧智能告警中最具实用价值的类型。它要求算法不仅看当前值,还要结合时间、位置、环境等上下文信息。以智能家居场景为例:智能电表在白天记录到3kW的功率是正常的(空调开启),但如果同样的情况发生在凌晨2点,且家中无人,则极可能是异常(如线路漏电或设备故障)。

在TinyML端侧实现上下文异常检测,通常采用“时间特征+阈值”的组合方案。具体做法是:将一天划分为多个时段(如白天/夜晚/清晨),每个时段维护独立的统计基线。当新数据到来时,先判断当前时段,再与该时段的基线比较。这种方法的优势在于无需复杂模型,仅需少量内存存储各时段的均值和方差。

经验提示:上下文异常检测的关键在于“上下文粒度”的选择。粒度过粗(如仅分白天/黑夜)会漏掉细节异常;粒度过细(如每10分钟一个基线)则会导致统计样本不足。建议根据业务场景的周期性,选择小时级或分钟级的滑动窗口。

3.2.3 集合异常:捕捉复杂模式偏离

集合异常关注的是数据序列的整体行为模式。在可穿戴设备中,检测跌倒就是一个典型的集合异常场景:正常行走时的加速度波形具有规律性,而跌倒瞬间的波形呈现“剧烈冲击-静止”的特殊模式。单个加速度样本可能落在正常范围内,但连续几十个样本组成的序列却明显偏离正常行走模式。

端侧实现集合异常检测,通常需要先对原始数据做窗口化处理(如取256个采样点为一个窗口),然后提取窗口级特征(如峰值、均方根、频谱能量、过零率等),再将这些特征输入轻量级分类器或异常评分模型。由于窗口化处理会引入延迟(需等待窗口填满),在设计实时告警系统时,需要权衡检测延迟与准确性。

3.3 典型应用场景深度拆解

异常检测的价值最终体现在具体应用中。下面结合三个典型场景,分析各自的业务痛点、数据特征和端侧部署要点。

3.3.1 工业预测性维护:从“定期检修”到“按需维护”

在工业制造中,电机、泵、压缩机等旋转设备的意外停机可能导致数十万元的生产损失。传统维护方式有两种:故障后维修(被动)和定期保养(主动但浪费)。预测性维护的目标是通过连续监测设备状态,在故障发生前数小时甚至数天发出预警。

端侧部署的典型方案是:在设备附近部署振动传感器(加速度计)和温度传感器,以1kHz采样率采集振动数据,以1Hz采样率采集温度数据。MCU上运行轻量级异常检测模型,持续计算振动信号的RMS(均方根)、峰值因子和频带能量。当这些指标偏离正常基线时,触发告警。

案例闭环:某工厂水泵轴承故障预警
背景与约束:某化工厂循环水泵,功率45kW,转速2950rpm。原维护策略为每季度停机检修,但曾因轴承保持架断裂导致非计划停机8小时,损失约15万元。工厂希望在不增加人工巡检频率的前提下,提前48小时预警轴承早期故障。
初始现象:设备正常运行时,振动加速度RMS稳定在0.8~1.2 m/s²。故障前第5天,RMS缓慢上升至1.8 m/s²,但仍在工厂设定的2.5 m/s²报警阈值以下。
关键数据与判断:通过频谱分析发现,故障特征频率(BPFO,轴承外圈故障频率)处的幅值从0.05g上升至0.23g,增幅360%。虽然整体RMS未超阈值,但特定频带的能量异常增长是早期故障的明确信号。
实际操作:在端侧MCU上部署了3个频带能量监测器(低频0-500Hz,中频500-2000Hz,高频2000-5000Hz),每10秒计算一次各频带能量与基线值的比值。当高频段能量比超过3倍且持续30秒时,触发“注意”级告警;超过5倍时触发“严重”级告警。
结果对比:系统在第5天发出“注意”告警,维护团队在第6天安排停机检查,发现轴承外圈出现轻微剥落。更换轴承耗时3小时,避免了潜在的8小时停机。
风险与代价:频带能量法需要预先知道故障特征频率,对于未知故障类型可能失效。此外,传感器安装位置对信号质量影响极大,安装不当会导致漏报。
复盘经验:单一指标(RMS)容易漏报早期故障,多频带能量分析能捕捉更细微的变化。端侧设备应保留原始波形摘要(如每小时的频谱峰值),便于事后分析。

3.3.2 智能家居:让环境感知更聪明

智能家居中的异常检测覆盖多种传感器:门窗磁、人体红外、水浸、烟雾、电流等。与工业场景不同,家居环境的异常往往具有强上下文相关性。例如,独居老人家中,若夜间(23:00-6:00)卫生间红外传感器频繁触发,可能暗示老人起夜次数异常增多,存在健康风险。

端侧部署的挑战在于:家居设备通常使用电池供电,功耗预算极低(如Zigbee设备平均电流<50μA)。因此,异常检测模型必须极简,且尽量在事件驱动模式下运行——即传感器触发时才唤醒MCU执行检测,空闲时深度睡眠。

一个实用的端侧方案是“双基线”策略:短期基线(最近24小时)捕捉突发变化,长期基线(最近30天)捕捉缓慢漂移。例如,智能插座监测冰箱的功率曲线,正常时功率在80-120W之间周期性波动(压缩机启停)。若连续3小时功率恒定在150W,则可能是门封条老化导致压缩机持续运行。

3.3.3 可穿戴设备:守护健康的第一道防线

可穿戴设备(智能手表、手环)是TinyML异常检测的重要阵地。核心应用包括:跌倒检测、心律不齐识别、睡眠呼吸暂停预警等。这些场景对实时性要求极高——跌倒检测需要在0.5秒内完成判断并触发SOS呼叫。

可穿戴设备的硬件约束最为严苛:MCU主频通常为64-128MHz,内存仅64-256KB,且必须保证7×24小时运行。因此,模型设计常采用“两级流水线”:第一级用极简的阈值逻辑(如加速度幅值>3g)快速筛选候选事件;第二级用轻量级神经网络(如1D-CNN或决策树)对候选窗口做精细分类。

场景 传感器 采样率 异常特征 端侧模型 告警延迟要求
工业预测性维护 加速度计、温度 1kHz(振动) 频带能量、峰值因子 频带能量比+阈值 分钟级
智能家居漏水 水浸传感器 事件驱动 电阻突变 状态机+去抖 秒级
可穿戴跌倒 加速度计、陀螺仪 50Hz 冲击峰值+姿态变化 两级流水线(阈值+CNN) 亚秒级

3.4 常见误区与设计复盘

在端侧异常检测项目的初期,开发者常陷入几个典型误区,导致项目返工或系统上线后误报频发。

  • 误区一:追求“万能”模型。试图用一个模型检测所有类型的异常。实际上,点异常、上下文异常和集合异常需要不同的特征和算法,混合使用往往导致模型臃肿且效果不佳。正确做法是:先明确业务最关心的异常类型,再针对性设计。
  • 误区二:忽略数据漂移。端侧设备的正常基线会随季节、设备老化、用户习惯改变而漂移。例如,工业设备在冬季的振动基线可能高于夏季。若基线不更新,系统会在数月后频繁误报。解决方案是设计周期性基线更新机制(如每周重新计算均值和标准差)。
  • 误区三:阈值设定“一刀切”。不同设备、不同安装位置、不同用户,其正常数据分布差异巨大。固定阈值必然导致部分设备过于敏感、部分设备过于迟钝。建议在设备部署初期进行“自校准”——采集24小时正常数据,自动计算个性化阈值。
  • 误区四:忽视告警疲劳。如果异常检测系统每天触发数十次告警,维护人员会逐渐忽视所有告警。端侧系统应设计分级告警(信息/注意/严重),并支持告警抑制(同一故障源在短时间内不重复告警)。
风险提示:在医疗相关的可穿戴异常检测中,误报可能导致用户焦虑,漏报则可能延误救治。务必在系统设计中加入“人工确认”环节,并明确告知用户系统的局限性。切勿将端侧异常检测结果作为唯一诊断依据。