Page 328 - 《软件学报》2026年第2期
P. 328

梁志宇 等: 知识增强的时间序列异常检测算法自动选择                                                       807


                                     z T, j,l j , i) 之间的距离, 以此实现时间序列和外部知识的对比学习. 该步骤通过最小化
                                         (
                 其他所有时间序列的表征
                 对比损失来完成. 由此, 知识融入模块优化的损失函数               L KI  定义为:

                                                                                                     (15)
                                                         L KI = L CL
                 其中,  L CL  可以由任意对比损失实现. 简单起见, 本文采用对比学习领域广泛使用的                   InfoNCE 损失  [34] 来实现知识融
                 入, 表示为:

                                                            (
                                                         exp sim(z T,i,l ,z K,i,l )/τ )
                                              L KI,i = −log ∑  (          )                          (16)
                                                           exp sim(z T,i,l ,z T,j,l )/τ
                                                          j,i
                 其中,  τ 为温度系数超参数, 用来控制对难学习样本的关注程度.                sim(u,v) 表示向量   u 和  v 的余弦相似度, 即:

                                                               u·v
                                                       sim(u,v) =                                    (17)
                                                               |u||v|
                    由于预训练的大语言模型具备通用的语言理解能力, 其参数在训练过程中保持冻结. 因此, 知识融入模块中仅
                      g K  进行优化更新.
                 对函数
                  3.4   方法总结与分析
                    综上所述, 本文所提方法的最终学习目标是最小化如下损失函数:

                                                  1  N ∑  [               ]
                                              L =     (1−α)L CE,i +αL S,i +λ·L KI,i                  (18)
                                                 N
                                                   i=1
                 其中,   N  为训练样本总数. 超参数     λ 控制知识融入损失的重要性.         α ∈ (0,1] 用于平衡原有的基于硬标签的分类损失
                 和本文提出的软标签损失. 训练过程由经典的反向传播算法                    [35] 实现: 给定输入数据, 根据公式     (18) 计算当前的损
                 失值  L, 继而通过链式求导法则得到         L 关于全部模型参数的梯度, 并通过梯度下降法对模型参数进行更新. 以上步
                 骤迭代执行, 直到达到中止条件.
                    所提方法的计算复杂度由时间序列编码器和大语言模型的架构决定. 特别地, 当算法选择器                              f  采用相同架构
                 时, 本文所提方法相较于第        2.3  节介绍的现有方法, 训练阶段增加的主要计算在于利用大语言模型处理外部知识.
                                                                  (                 )
                 当前的大语言模型采用        Transformer 架构  [30,32] , 计算复杂度为  O N layer (l D repr +l seq D 2 repr ) , 其中  N layer  为注意力层的
                                                                        2
                                                                        seq
                 数目,  l seq  为输入长度,  D repr  为嵌入的维度. 由于算法仅使用冻结参数的大语言模型, 且           Transformer 架构具有卓越
                 的并行计算能力      [30] , 所提方法在实际环境下的训练时间与现有方法相差甚微 (详见第                 4.5  节). 而在测试 (即模型推
                 理或算法选择) 阶段, 本文方法与现有方法的计算逻辑和计算量完全相同.
                  4   实验分析


                  4.1   实验数据
                    使用最近发布的时间序列异常检测评测基准                TSB-UAD 中的数据集进行实验验证. 包含           16  个来自不同应用
                                                               [3]
                 场景、具有不同数据特征和异常情况的公开数据集. 数据集信息如后文表                        3  所示.
                    为与现有方法公平比较, 采用          Sylligardos 等人  [4] 提出的方法划分训练和测试数据, 其中训练数据包含上述所
                 有数据集中的时间序列, 测试数据来自其中的              14  个子集. 使用表   2  中的模板 (无序列均值) 提取外部知识.

                  4.2   基准方法与评测指标
                    采用多种在时间序列异常检测算法自动选择任务上表现出色的方法作为基准. 这些方法通过标准时间序列分
                 类技术构建异常检测算法选择器. 大致分为              4  类.
                    (1) 基于特征的方法. 使用时间序列特征提取工具              TSFresh [36] 从分割后的时间序列中提取特征, 并在特征之上
                 构建传统机器学习模型作为异常检测算法选择器                  [4] . 机器学习方法包括    K  最近邻 (KNN)  [37] 、支持向量分类器
                 (SVC) [38] 、梯度提升决策树 (AdaBoost) [39] 和随机森林 (RF) [40] .
                    (2) 基于卷积的方法. 基于卷积模块        [31] 构建的时间序列分类模型, 包含一个由          3  层卷积层、最大池化层和分类
   323   324   325   326   327   328   329   330   331   332   333