TranAD对比8大基线模型:LSTM_AD、OmniAnomaly、USAD、GDN等异常检测算法实测分析
TranAD对比8大基线模型:LSTM_AD、OmniAnomaly、USAD、GDN等异常检测算法实测分析
【免费下载链接】TranAD[VLDB'22] Anomaly Detection using Transformers, self-conditioning and adversarial training.项目地址: https://gitcode.com/gh_mirrors/tr/TranAD
TranAD 是基于深度 Transformer 网络的多变量时间序列异常检测框架(VLDB 2022 论文开源实现),内置了 LSTM_AD、OmniAnomaly、USAD、GDN 等 8 个主流基线模型,支持在 SMAP、MSL、SWaT、SMD 等 9 个公开数据集上"一键复现"论文结果。本文带你实测对比这些异常检测算法的表现,并讲清楚 TranAD 为什么更强。
一、TranAD 是什么?适合谁用?
TranAD(Deep Transformer Networks for Anomaly Detection in Multivariate Time Series Data)解决的核心问题是:
- 多变量时间序列:一条时间线上有多个特征(如机器 25 个传感器指标),需要整体判断是否异常;
- 异常检测 + 异常诊断:不仅给出"哪段时间异常",还能输出每个特征维度的异常分数,定位"哪个指标出了问题";
- 统一对比:仓库里直接实现了 8 个基线异常检测算法,同代码、同数据、同指标横向对比,省去自己搭实验环境的麻烦。
💡 适合人群:做时序异常检测研究的研究生/工程师、需要选型异常检测算法的业务同学。
二、快速上手:3 步跑通异常检测对比实验
1️⃣ 获取代码
git clone https://gitcode.com/gh_mirrors/tr/TranAD2️⃣ 安装依赖(Python ≥ 3.7)
pip3 install torch==1.8.1+cpu torchvision==0.9.1+cpu torchaudio==0.8.1 -f https://download.pytorch.org/whl/torch_stable.html pip3 install -r requirements.txt3️⃣ 预处理数据 + 训练模型
# 预处理 9 个数据集(数据集不全可删减,详见 data/ 下各目录 readme) python3 preprocess.py SMAP MSL SWaT WADI SMD MSDS UCR MBA NAB # 训练并测试某个异常检测模型 python3 main.py --model TranAD --dataset SMAP --retrain其中--model可取:TranAD、GDN、MAD_GAN、MTAD_GAT、MSCRED、USAD、OmniAnomaly、LSTM_AD;--dataset可取SMAP、MSL、SWaT、WADI、SMD、MSDS、MBA、UCR、NAB。加--less参数则只用 20% 训练数据,方便快速验证。
三、8 大基线异常检测算法一览
仓库中所有模型定义在src/models.py,训练调度逻辑在main.py,每个基线对应一类经典思路:
| 基线模型 | 核心思路 | 类型 |
|---|---|---|
| LSTM_AD | 单变量 LSTM 自编码,重建误差判异 | RNN 自编码 |
| OmniAnomaly | VAE + RNN,概率化异常评分,支持流式检测 | 变分自编码 |
| USAD | 双自编码器对抗式训练,放大正常/异常差距 | 对抗自编码 |
| GDN | 图自注意力 + 自编码,显式建模特征间关系 | 图注意力 |
| MAD_GAN | 生成器 + 判别器,重建误差 + 判别分数 | GAN |
| MTAD_GAT | 门控图注意力 + LSTM 混合建模 | GNN + RNN |
| MSCRED | 多变量自编码 + 图注意力联合训练 | 自编码 |
| MERLIN | 基于自注意力的序列异常评分(实现见src/merlin.py) | 注意力 |
四、实测结果对比:TranAD 赢在哪?
项目自带的九大数据集完整对比结果如下图所示(指标为各数据集上的 Precision / Recall / AUC / F1):
📊 关键结论(摘自上表 F1 列):
- TranAD 在 9 个数据集中的 F1 均位于第一梯队:NAB 0.9364、UCR 0.9694、MBA 0.9780、SMAP 0.8915、SWaT 0.8151、MSDS 0.9262 均为全场最高;
- GDN 在 MSL 上 F1 最高(0.9591),但 TranAD 以 AUC 0.9916 的排序能力紧随其后,说明其异常分数区分度极强;
- 简单模型在复杂场景掉分明显:WADI 上 LSTM-NDT 的 F1 仅 0.0271、DAGMM 仅 0.1412,而 TranAD 稳定在 0.4951,体现 Transformer 对多变量复杂耦合关系的建模优势;
- SMD 数据集上,TranAD 拿下 AUC 0.9974、F1 0.9605 双第一,工业机器监控场景可直接参考该配置。
⚠️ 注意:仓库内的基线代码是简化实现,官方建议精确复现论文原数据时应使用各基线原始代码库(README 中已注明)。
五、TranAD 为什么更强?三大核心技术
完整模型定义见 src/models.py 中的TranAD类(L491 起),核心设计有三点:
- Transformer 编码-解码结构:以 10 步窗口输入(
n_window=10),编码器学习多变量依赖,解码器重建当前时间步,重建误差即异常分数; - 自条件(Self-conditioning):两阶段解码——第一阶段正常解码,第二阶段把第一阶段的重建误差作为异常分数条件再次解码,让模型学会"利用已检测到的异常"提升精度;
- 对抗训练(Adversarial):训练中向输入添加对抗扰动,增强对未见异常模式的鲁棒性。
想拆解各组件贡献?仓库提供了 4 个消融变体,直接换模型名即可运行:
python3 main.py --model TranAD_Basic --dataset SMAP --retrain python3 main.py --model TranAD_Transformer --dataset SMAP --retrain python3 main.py --model TranAD_Adversarial --dataset SMAP --retrain python3 main.py --model TranAD_SelfConditioning --dataset SMAP --retrain超参数(学习率、epoch 等)统一在src/params.json与src/constants.py中配置,可按数据集微调。
六、如何看懂输出指标?
训练完成后,程序会打印每个特征维度的检测结果与整体汇总,例如:
Training time: 3.1920 s Testing TranAD on SMAP {'FN': 0, 'FP': 182, 'TP': 748, 'TN': 7575, 'f1': 0.8915, 'precision': 0.8043, 'recall': 0.9999, 'Hit@150%': 1.0, 'NDCG@150%': 1.0, 'threshold': 0.1613}- P / R / F1:检测准确率的经典三件套,选型看 F1 最直观;
- AUC:异常分数排序能力,AUC 高意味着容易通过阈值调参;
- Hit@150% / NDCG:检测位置与真实异常区间的对齐程度,衡量"报得准不准位置";
- threshold:推荐判异阈值,可直接用于线上部署。
每次运行还会在plots/下生成训练曲线与预测曲线 PDF(如plots/TranAD_SMD/training-graph.pdf),便于可视化对比不同模型的收敛情况。
七、总结:怎么选异常检测算法?
| 场景 | 推荐 |
|---|---|
| 多变量复杂系统、精度优先 | TranAD(F1/AUC 综合最强) |
| 需要图结构建模传感器关系 | GDN |
| 流式/在线检测、概率输出 | OmniAnomaly |
| 计算资源受限 | LSTM_AD(但复杂场景精度损失大) |
TranAD 用统一的代码框架把 Transformer 异常检测做到了"开箱即比",是时序异常检测选型与论文实验复现的高性价比起点。动手试试吧!🚀
【免费下载链接】TranAD[VLDB'22] Anomaly Detection using Transformers, self-conditioning and adversarial training.项目地址: https://gitcode.com/gh_mirrors/tr/TranAD
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
