边缘推理异常检测的自监督方案设计:利用模型中间层特征分布漂移实现无标签故障预警

边缘推理异常检测的自监督方案设计:利用模型中间层特征分布漂移实现无标签故障预警

一、当标签成为奢侈品:边缘推理异常的"无监督困境"

在边缘设备上部署了 AI 推理模型后,一个绕不开的问题便浮现出来:推理结果什么时候开始不可信了?这可能是因为摄像头镜头积灰导致输入质量下降,也可能是 NPU 电源轨纹波引发了数值计算偏差,还可能是模型量化后的累积误差在某个边界样本上突然放大。传统监控方案依赖的路径极为昂贵——需要人工标注大量异常样本,训练一个独立的异常分类器。而在边缘场景下,异常样本本身就是稀有的:你无法预见镜头积灰的程度,也无法枚举所有可能的电磁干扰模式。

这就催生了自监督异常检测的核心思路:不依赖异常标签,而是在正常推理过程中持续学习"正常状态"的统计特征,当实时推理的特征分布偏离正常基线时发出告警。方案的本质是将异常检测转化为分布漂移检测:模型的中间层特征在正常数据上的分布应该是稳定的,如果某次推理的特征分布出现了显著偏移——无论是均值漂移、方差膨胀还是高阶矩偏离——那就有理由怀疑输入或推理链路发生了异常。

在实际部署中,自监督异常检测模块并联在推理主路径旁,实时采集中间层特征并对比正常基线。具体而言,传感器输入经过预处理后进入推理引擎,流经从 Layer1 到 LayerN 的中间层网络并生成推理输出;与此同时,监控模块通过特征 Hook 实时采集中间层特征,计算当前特征统计量并与正常基线进行对比。若判断未发生分布漂移,则利用指数移动平均(EMA)更新正常基线;若检测到显著漂移,则触发异常告警并记录异常快照。

二、特征分布的统计表征:从单变量均值到马氏距离的递进

最简单的分布漂移检测是比较当前推理的特征均值与历史均值的 L2 距离。设历史正常样本的特征均值为 μ₀、协方差矩阵为 Σ₀,当前样本的特征向量为 x,则最直接的异常分数定义是马氏距离:

D = √((x - μ₀)ᵀ · Σ₀⁻¹ · (x - μ₀))

马氏距离的优势在于它自动归一化了不同特征维度的方差差异。如果某个特征维度本身就有较大的波动范围,马氏距离会自然地放宽容忍度;反之,对于稳定维度上的微小偏移,它会更加敏感。

但在嵌入式环境下,协方差矩阵 Σ₀ 的存储和求逆是沉重的计算负担。对于一个 256 维的中间层特征,Σ₀ 是一个 256×256 的矩阵,占用 256KB(float32)。这个开销在仅有 512KB SRAM 的 Cortex-M7 上无法承受。因此需要降维:选取中间层特征中信息量最高的 K 个主成分(K=8~16),仅计算 K×K 的协方差矩阵,将存储开销控制在数 KB 以内。
正常基线的维护采用指数移动平均(EMA),而非简单滑动窗口。EMA 的优势在于给近期样本更高权重,能够适应数据分布的缓慢自然漂移,同时抑制短期波动。α 参数(平滑系数)的选择是一个关键决策——α 过大会导致正常基线过度跟踪噪声;α 过小则无法适应自然漂移。在生产实践中,α=0.01 到 0.05 是一个合理的初始范围。

三、嵌入式 C 实现:PCA 降维与马氏距离计算的轻量方案

以下代码展示了一个可在 Cortex-M 系列 MCU 上运行的自监督异常检测核心,采用固定点运算替代浮点运算以降低计算开销。

/* anomaly_detect.h — 自监督异常检测模块 */ #include <stdint.h> #include <math.h> #define FEATURE_DIM 256 /* 中间层原始特征维度 */ #define PCA_DIM 8 /* PCA 降维后维度 */ #define EMA_ALPHA_Q15 327 /* EMA α=0.01 的 Q15 定点表示 (0.01 * 32768) */ typedef struct { int16_t mean_q12[PCA_DIM]; /* 正常均值, Q12 定点格式 */ int16_t inv_cov_q12[PCA_DIM][PCA_DIM]; /* 协方差逆矩阵, Q12 定点 */ int16_t pca_weights_q12[FEATURE_DIM][PCA_DIM]; /* PCA 投影矩阵 */ } NormalBaseline; /* 将原始特征向量投影到 PCA 子空间 */ static void pca_project(const float *raw_features, int16_t *pca_features, const int16_t pca_w[FEATURE_DIM][PCA_DIM]) { for (int k = 0; k < PCA_DIM; k++) { int32_t accum = 0; for (int i = 0; i < FEATURE_DIM; i++) { /* Q12 x float → Q12 (定点乘法) */ accum += (int32_t)pca_w[i][k] * (int32_t)(raw_features[i] * 4096.0f); } pca_features[k] = (int16_t)(accum >> 12); /* 右移恢复 Q12 */ } } /* 使用 EMA 更新正常基线 */ static void baseline_ema_update(NormalBaseline *bl, const int16_t *pca_feat) { for (int k = 0; k < PCA_DIM; k++) { int32_t new_mean = bl->mean_q12[k]; /* mean_new = mean_old * (1-α) + feat * α */ /* Q15 EMA: diff = (feat - mean) * α */ int32_t diff = ((int32_t)pca_feat[k] - bl->mean_q12[k]) * EMA_ALPHA_Q15; diff >>= 15; new_mean += diff; bl->mean_q12[k] = (int16_t)new_mean; } /* 协方差矩阵更新省略: 需要 Cholesky 分解用于矩阵求逆 */ /* 生产实现中采用 rank-1 更新: Σ_new = (1-α)Σ_old + α(x-x̄)(x-x̄)ᵀ */ } /* 计算马氏距离并返回告警标志 */ int anomaly_check(const NormalBaseline *bl, const int16_t *pca_feat, int16_t *out_distance_q12, int16_t threshold_q12) { int32_t sum_sq = 0; for (int k = 0; k < PCA_DIM; k++) { int32_t diff = (int32_t)pca_feat[k] - bl->mean_q12[k]; /* 使用协方差对角元的倒数做近似马氏距离 */ /* 完整马氏距离需要矩阵乘法 xᵀΣ⁻¹x */ int32_t scaled = diff * (int32_t)bl->inv_cov_q12[k][k]; sum_sq += (scaled >> 12); } *out_distance_q12 = (int16_t)(sum_sq / PCA_DIM); /* 错误处理: 若距离为负(定点溢出导致),强制置零 */ if (*out_distance_q12 < 0) { *out_distance_q12 = 0; } return (*out_distance_q12 > threshold_q12) ? 1 : 0; /* 1=异常 */ }

降维策略是确保该方案在嵌入式平台上可用的关键。PCA 投影矩阵通过离线训练计算后硬编码到固件中,运行时仅需执行FEATURE_DIM × PCA_DIM次乘加运算。对于 256×8 的矩阵,折合约 2048 次乘法,在 200MHz Cortex-M7 上耗时约 10μs,开销完全可接受。

四、假阳性的代价:阈值选择、概念漂移与基线污染风险

任何异常检测方案都绕不开阈值选择问题。阈值过低会导致假阳性泛滥——正常数据的微小波动被误报为异常;阈值过高则漏掉真正的异常。在实践中,阈值通常取历史正常样本马氏距离分布的 P99 值。但嵌入式环境的约束是:无法存储大量历史距离值用于离线计算 P99。一个实用的工程妥协是使用在线 P² 算法(一种固定内存的分位数估计器),仅需 5 个标记点即可跟踪任意分位数。

概念漂移是另一个深层挑战。随着季节变化、光照条件变化或硬件老化,真正正常的数据分布也会发生缓慢漂移。EMA 基线的 α 设置实际上定义了一个"记忆窗口"——α=0.01 的半衰期约 69 个样本周期。如果数据分布的自然漂移速度超过了 EMA 的跟踪能力,基线将永远滞后于真实分布,导致持续误报。在这种情况下,需要周期性地重新离线标定基线,或切换到更复杂的自适应基线的检测方案。

基线污染是最隐蔽的风险。如果系统在异常状态期间仍然用 EMA 更新基线,那么异常数据将"污染"正常基线,使基线向异常状态偏移。后果是:异常检测的灵敏度逐渐下降,直到真正的异常变得不可检测。防御措施是:仅在未被标记为异常的状态下更新基线,确保基线始终代表真实的正常状态。

五、总结

自监督异常检测方案通过监控模型中间层特征的分布漂移,实现了不依赖异常标签的边缘推理故障预警。核心架构由三部分构成:PCA 降维降低嵌入式环境的计算和存储开销、马氏距离作为异常分数度量指标、EMA 基线实现正常分布的在线持续学习。重点权衡在于:PCA 维度选择的精度与效率折中、EMA α 参数的自然漂移跟踪能力与噪声敏感性之间的平衡、以及异常阈值选择的假阳性率控制。在落地时建议先离线采集正常数据训练 PCA 投影矩阵和初始基线,再在线部署时设置保守阈值(如 P99.9)以优先控制假阳性,最后通过周期性基线快照保存实现异常状态下的基线回滚能力。