Anomaly Transformer:基于关联差异的时间序列异常检测思路整理 📅 2026/7/1 17:25:30 Anomaly Transformer基于关联差异的时间序列异常检测思路整理本文主要参考 Xu 等人在 ICLR 2022 发表的论文Anomaly Transformer: Time Series Anomaly Detection with Association Discrepancy。这篇文章的思路很有启发性它没有只把异常检测看成“重构误差大不大”的问题而是进一步观察时间点之间的关联模式并用Association Discrepancy关联差异来刻画正常点和异常点之间的区别。下面内容更多是个人学习和整理尝试用较通俗的方式解释这篇论文的背景、核心方法、数学思想和实验现象。理解上难免有不完善的地方欢迎大家一起交流指正。1. 背景为什么时间序列异常检测并不简单时间序列异常检测在工业监控、服务器运维、航天器遥测、水处理系统、金融风控等场景中都很常见。真实系统通常会连续产生大量传感器数据或业务指标例如 CPU 使用率、网络延迟、流量、压力、温度、电压等。异常点往往意味着设备故障、攻击行为、系统退化或潜在风险因此及时发现异常非常重要。不过从建模角度看时间序列异常检测并不是一个轻松任务。首先异常本身通常很稀少正常点远多于异常点其次异常标签往往难以获得人工标注成本比较高再次很多异常并不是单点突变而是与上下文、趋势、周期或局部模式相关。例如一个数值在某个时刻看起来并不大但放在对应周期或上下文里可能就是异常。因此很多实际方法会选择无监督或自监督方式模型只从大量时间序列中学习一般规律然后根据某种异常评分来判断哪些时间点“不像正常模式”。常见思路包括基于密度或距离的方法例如 LOF、OCSVM、Isolation Forest基于重构的方法例如 AutoEncoder、VAE、LSTM-VAE基于预测的方法例如 RNN/Transformer 预测下一个时间点基于图结构或关联关系的方法例如建模变量之间或时间点之间的关系。这些方法都有各自价值但也存在一些不足。单纯依赖点级表示或重构误差时模型可能会把异常也重构得不错从而降低异常和正常之间的区分度如果只建模局部片段或固定图结构又可能难以表达复杂时间依赖。Anomaly Transformer 的出发点正是想从 Transformer 的注意力机制中挖掘“时间点之间的关联模式”并进一步把这种关联模式变成异常检测信号。2. 本文主要想法异常点的关联更容易“局部集中”这篇论文中最关键的直觉是正常时间点更容易和整个序列中多个相关位置建立有意义的关联而异常点由于稀少且模式特殊往往更难和全局正常模式建立强关联因此它的关联更可能集中在相邻时间点附近。论文把这种现象称为一种adjacent-concentration bias邻近集中偏置。换句话说异常点虽然可能在数值上很突出但从“和其他时间点的关系”来看它更像是一个只和附近片段抱团的局部模式而正常点因为重复出现、具有周期性或趋势结构更容易和更远位置的时间点建立关联。Transformer 的 self-attention 恰好会为每个时间点生成一组对其他时间点的注意力权重。这个注意力权重分布可以理解成该时间点对全序列的series-association序列关联。如果再人为构造一个偏向邻近位置的prior-association先验关联就可以比较二者之间的差异如果真实学到的序列关联和邻近先验差异较大说明这个时间点可能可以和更广范围建立关系如果真实学到的序列关联和邻近先验差异较小说明这个时间点的关联可能更局部、更邻近集中论文认为异常点更容易呈现较小的关联差异。这个“关联差异”就是论文提出的Association Discrepancy。它不是简单替代重构误差而是和重构误差结合形成最终的异常评分。3. Anomaly Transformer 整体架构Anomaly Transformer 的整体结构仍然保留了 Transformer 的基本骨架例如注意力层、残差连接、LayerNorm 和前馈网络。但它对标准 self-attention 做了改造提出了Anomaly-Attention用两条分支同时建模先验关联和序列关联。图1 Anomaly Transformer 整体架构如图1所示模型中比较值得关注的是左侧的 Anomaly-Attention 模块。它不是只计算普通的QK⊤QK^\topQK⊤注意力而是同时产生两类关联Series-Association由输入序列通过 Query、Key 计算得到类似标准 self-attention 中的注意力分布用于表示当前时间点从原始序列中学习到的真实关联。Prior-Association由可学习的 Gaussian Kernel高斯核构造主要体现“相邻时间点更相关”的先验假设。从系统结构上看Anomaly Transformer 可以理解为输入时间序列 ↓ Embedding ↓ 多层 Anomaly-Attention Feed Forward ↓ 重构输出 ↓ 计算重构误差 关联差异 ↓ 得到每个时间点的异常分数这里的核心并不只是“用了 Transformer”而是利用 Transformer 注意力分布表达时间点之间的关联再设计一个先验关联分布与之对比。这个角度对时间序列异常检测很有启发异常不一定只体现在数值大小也可能体现在“它和其他时间点建立关系的方式”。4. 关键技术一Anomaly-Attention4.1 Series-Association从数据中学到的真实关联在普通 Transformer 中每个时间点会通过 Query 和 Key 与其他时间点计算相似度再通过 Softmax 得到注意力权重。对时间序列而言这组权重可以看作一个时间点对整段序列的关联分布。论文将这种由原始序列学习出来的关联称为Series-Association。它的形式大致可以理解为SSoftmax(QKT/d)SSoftmax(QK^T/\sqrt{d})SSoftmax(QKT/d)其中QQQ表示 Query 矩阵KKK表示 Key 矩阵ddd是特征维度用于缩放点积结果SSS的每一行可以看成某个时间点对其他时间点的关联分布。如果某个时间点属于正常模式它可能会关注到很多具有相似周期、趋势或上下文的位置如果某个时间点是异常模式它与全局正常模式的可关联性可能更弱。4.2 Prior-Association用高斯核表达邻近先验论文并没有直接把注意力分布拿来作为异常分数而是额外构造了一个Prior-Association。这个先验关联希望表达一种朴素假设如果没有更多信息离当前时间点越近的位置越可能相关。论文使用可学习尺度参数σ\sigmaσ的高斯核来表达这种邻近集中关系。可以粗略理解为Pi,j12πσiexp(−∣j−i∣22σi2)P_{i,j}{1\over \sqrt{2\pi}\sigma_i}exp(-{|j-i|^2\over 2\sigma_i^2})Pi,j2πσi1exp(−2σi2∣j−i∣2)其中iii表示当前时间点jjj表示被关联的另一个时间点∣j−i∣|j-i|∣j−i∣表示时间距离σi\sigma_iσi控制关联分布的宽窄Pi,jP_{i,j}Pi,j越大说明先验上认为iii与jjj越相关。这里的σ\sigmaσ是可学习的这一点很关键。不同数据集、不同异常类型、不同时间片段的邻近范围并不一样固定一个尺度往往过于死板。让模型学习σ\sigmaσ可以让 prior-association 对不同时间模式更加自适应。4.3 Association Discrepancy用分布差异刻画异常性有了先验关联PPP和序列关联SSS后论文用二者之间的分布差异来定义Association Discrepancy。具体使用的是对称 KL 散度AssDis(P,S,X)1L∑l1L(KL(Pil∣∣Sil)KL(Sil∣∣Pil))AssDis(P,S,X){1\over L}\sum_{l1}^{L}(KL(P_i^l||S_i^l)KL(S_i^l||P_i^l))AssDis(P,S,X)L1l1∑L(KL(Pil∣∣Sil)KL(Sil∣∣Pil))这里LLL表示模型层数PilP_i^lPil表示第lll层中第iii个时间点的先验关联分布SilS_i^lSil表示对应的序列关联分布KL(P∣∣S)KL(P||S)KL(P∣∣S)表示 KL 散度用来衡量两个离散分布之间的差异最终得到的是每个时间点对应的关联差异。直观来看Association Discrepancy 不是在问“这个点重构得好不好”而是在问“这个点学到的真实关联和邻近先验之间差得多不多”。论文的观察是异常点往往更邻近集中因此其关联差异可能更小正常点能建立更丰富的远距离关联因此差异更明显。5. 关键技术二Minimax Association Learning如果只是简单计算两个分布之间的差异模型未必能自动学出足够明显的正常/异常区分。因此论文进一步设计了一个minimax association learning极小极大学习策略通过两个阶段放大 prior-association 和 series-association 之间的可区分性。图2 Minimax Association Learning 思路图2可以理解为一个“拉近再拉开”的训练过程在minimize phase中让 prior-association 尽量靠近 series-association在maximize phase中让 series-association 在重构约束下尽量拉开与 prior-association 的差异同时通过 stop-gradient 控制梯度传播避免两个分支互相干扰。这个策略的目的不是为了制造一个抽象的对抗过程而是为了让正常点和异常点在关联差异上的表现更加可分。正常点由于存在更多可学习的全局关联在重构约束下更容易把 series-association 推向非邻近区域异常点由于稀少且局部集中更难做到这一点于是二者差异被放大。从工程直觉看这有点像给模型施加一个额外压力不只是要求它重构好序列还要求它解释每个时间点如何与其他时间点建立关系。正常模式通常有更多“解释路径”异常模式则更局促。6. 异常评分重构误差与关联差异的结合论文最终没有单独使用重构误差也没有单独使用关联差异而是把二者结合起来构造异常分数AnomalyScore(X)Softmax(−AssDis(P,S,X))∗∣Xi−Xhati∣2AnomalyScore(X)Softmax(-AssDis(P,S,X))*|X_i-Xhat_i|^2AnomalyScore(X)Softmax(−AssDis(P,S,X))∗∣Xi−Xhati∣2这个公式可以拆成两部分理解∣Xi−Xhati∣2|X_i-Xhat_i|^2∣Xi−Xhati∣2是重构误差表示模型对当前时间点重构得是否困难Softmax(−AssDis)Softmax(-AssDis)Softmax(−AssDis)则利用关联差异对重构误差进行加权∗*∗表示将关联差异权重与重构误差相乘。为什么是−AssDis-AssDis−AssDis因为论文认为异常点的 Association Discrepancy 往往更小取负后再 Softmax可以让这些点获得更高权重。这样一来即使某些异常点的重构误差并不极端也可能因为关联模式异常而得到更高的异常评分。我觉得这个设计的价值在于它把“点的数值是否异常”和“点的关联方式是否异常”放在了同一个评分框架中。对于真实系统里的复杂异常这种组合通常比单一重构误差更有表达力。当然这也意味着模型训练和解释都会更复杂实际落地时还需要结合具体业务做调参和可视化分析。7. 实验现象简要说明论文在多个真实时间序列异常检测数据集上进行了实验包括 SMD、MSL、SMAP、SWaT、PSM、NeurIPS-TS 等。这些数据集覆盖服务器监控、航天器遥测、水处理系统等场景。这里不展开过多指标细节主要关注几个对理解方法比较有帮助的结果现象。图3 不同数据集上的检测结果对比从论文给出的结果表可以看到Anomaly Transformer 在多个数据集上取得了较好的表现。这里更值得注意的是性能提升并不是只来自 Transformer 本身而是与关联差异、可学习先验关联、minimax 策略等模块共同相关。论文的消融实验也显示如果只使用普通 Transformer 或只依赖重构误差效果会明显弱一些加入 association-based criterion 后模型对异常点的区分能力更强。这个结论和前面的直觉是一致的异常检测不只是重构问题也可以从关联模式角度补充信息。图4 不同异常类型下的可视化效果图4展示了不同异常类别下原始序列、重构结果以及 association-based criterion 的变化。相比单纯重构误差关联差异相关的评分在一些场景下能更清晰地突出异常区域尤其是上下文异常、季节模式异常等不一定表现为简单尖峰的情况。这类可视化对理解模型很有帮助。因为在实际业务中很多异常并不是“数值突然爆炸”而是“当前数值放在当前模式里不太合理”。如果模型能给出更稳定、更成段的异常评分后续报警和人工排查都会更容易。图5 窗口大小和损失权重的参数敏感性图5展示了滑动窗口大小和损失权重λ\lambdaλ对模型表现的影响。论文中使用窗口大小为 100并用λ\lambdaλ平衡重构损失和关联差异相关损失。从趋势上看模型对部分参数具有一定稳定性但不同数据集仍然会有差异。这也提醒我们实际使用这类模型时不宜完全照搬论文参数。窗口大小会影响模型能看到的上下文长度也会影响显存和计算开销λ\lambdaλ则会影响模型到底更重视重构还是更重视关联差异。对于具体业务数据最好结合采样频率、周期长度、异常持续时间做调试。8. 从实现角度如何理解这套方法如果尝试从工程实现角度复现或改造 Anomaly Transformer可以把它拆成几个相对清晰的模块。8.1 数据窗口化论文中使用非重叠滑动窗口将长时间序列切成固定长度片段。窗口长度决定了模型一次能观察到多少上下文。窗口太短可能看不到周期和趋势窗口太长计算成本会上升也可能引入无关噪声。8.2 Anomaly-Attention 模块实现上需要同时计算标准注意力得到的 series-association基于时间距离和可学习σ\sigmaσ的 prior-association两个分布之间的 KL 差异。这里要注意数值稳定性例如 Softmax、KL 散度中可能需要添加极小值避免log(0)\log(0)log(0)。8.3 Minimax 训练训练时需要区分 minimize phase 和 maximize phase并通过 stop-gradient 控制某些分支不回传梯度。这个部分如果实现不当很容易出现两个问题梯度方向不符合论文设计两个分支同时被更新导致约束关系失效。因此如果只是初步学习建议先实现重构损失和 Association Discrepancy 的计算再逐步加入 minimax 策略。8.4 异常评分与阈值最终异常评分需要结合重构误差和关联差异。得到分数后还需要设置阈值判断异常。论文中使用验证集上的比例来选阈值并采用时间段调整策略如果某个连续异常段中有一个点被检测到则认为整个异常段被检测到。这种评估方式在时间序列异常检测论文中比较常见但实际业务中仍需结合报警策略进一步设计。9. 个人理解与可借鉴之处这篇论文对我比较有启发的地方主要有三点。第一它没有把异常检测局限在“误差大不大”而是引入了“关联方式是否异常”。很多复杂异常确实不一定有特别大的重构误差但它和上下文之间的关系可能发生了变化。第二它利用 Transformer 注意力天然产生的分布来做解释和检测。注意力权重本身并不一定等同于解释但在时间序列中将每个时间点对其他时间点的注意力看成关联分布是一个比较自然的切入点。第三它通过可学习高斯先验和 minimax 策略把一个直觉性的邻近集中偏置变成了可训练目标。这种做法也提示我们在深度学习模型中加入合理先验并不一定要牺牲模型表达能力关键在于如何设计可学习的约束形式。当然这个方法也有一些需要继续思考的地方。例如Transformer 的注意力复杂度较高长序列场景下成本会比较大关联差异的有效性可能依赖数据模式和异常类型阈值选择、窗口长度、异常段调整策略都会影响最终效果对业务人员而言Association Discrepancy 的解释仍需要可视化辅助。因此本文更多是整理一种值得参考的思路。如果要落到具体业务系统还需要根据数据频率、异常类型、实时性要求和可解释性需求做进一步适配。10. 总结Anomaly Transformer 的核心可以概括为一句话利用 Transformer 建模时间点之间的关联分布再通过先验关联与序列关联之间的差异来辅助异常检测。它提出的 Association Discrepancy 为时间序列异常检测提供了一个很有意思的视角异常点不仅可能在数值上异常也可能在“和其他时间点建立关联的方式”上异常。通过 Anomaly-Attention、可学习高斯先验和 minimax association learning模型尝试把这种差异放大并与重构误差结合形成最终异常评分。从学习角度看这篇论文适合用来理解 Transformer 在时间序列异常检测中的一种改造方式从实践角度看它也提示我们在做异常检测时可以同时关注点值误差、上下文关系和时间关联结构。本文只是对论文思路的一个整理和理解欢迎大家补充不同看法也欢迎一起讨论它在具体业务数据上的适配方式。