Temporal-Frequency Masked Autoencoders for Time Series Anomaly Detection

系列文章目录

用于时间序列异常检测的时频屏蔽自动编码器 IEEE2024



摘要

摘要:在可观测时代,大量的时间序列数据被收集来监控目标系统的运行状态,其中异常检测有助于识别与其余观测值显着不同的观测值,对于实现价值提取至关重要 从这样的数据。 虽然现有的基于重建的方法在没有标记数据的情况下表现出了良好的检测能力,但它们仍然遇到异常时间的训练偏差和时间序列内的分布变化问题。 为了解决这些问题,我们提出了一种简单而有效的时频屏蔽自动编码器(TFMAE),通过对比标准来检测时间序列中的异常。 具体来说,TFMAE使用两个基于Transformer的自动编码器,分别结合基于窗口的时间掩蔽策略和基于幅度的频率掩蔽策略来学习没有异常偏差的知识,并通过提取的正常信息重建异常。 此外,双自动编码器通过对比目标函数进行训练,最大限度地减少时频屏蔽自动编码器的表示差异以突出异常,因为它有助于减轻分布变化的负面影响。 最后,为了防止过度拟合,TFMAE在训练阶段采用对抗性训练。 对七个数据集进行的广泛实验证明我们的模型能够在异常检测准确性方面超越最先进的模型。 索引术语——时间序列异常检测、时频分析、屏蔽自动编码器


一、引言

时间序列是一系列按时间顺序排列的观察结果,随着传感器网络、云计算、时间序列数据收集和存储能力的进步,对其进行分析已迅速成为学术和工业研究的焦点任务。 尤其是最近出现的可观测性概念[1]、[2]。 异常检测是时间序列分析中必不可少的任务,判断数据是否符合正态数据分布,不符合的部分称为异常。 及时发出异常警报可以使系统维护人员主动进行维护,从而在欺诈检测 [3]、入侵检测 [4] 和能源管理 [5] 等实际应用中实现可持续性和安全性。

然而,提供准确的时间序列异常检测是一项艰巨的任务,因为时间序列的模式在各种应用中是复杂且动态的,这使得很难寻求准确定义异常的通用方法。 此外,由于标记数据的稀缺,时间序列异常检测的监督方法的进展受到阻碍。 无监督方法可以在没有标记数据的情况下检测异常,这通常依赖于基于密度的方法(利用邻居之间的差异)和基于聚类的方法(利用距聚类中心的距离)。 随着时间序列数据规模的不断增大以及深度学习在数据分析方面的优势,最近的研究转向通过使用各种深度学习模型来重建具有复杂时间相关性和多变量依赖关系的时间序列。 这些模型关注重建时间序列与原始时间序列之间的差异。 OmniAno [6]、TimesNet [7] 和 TranAD [8] 等创新分别将循环神经网络、卷积神经网络和 Transformer 网络引入时间序列异常检测。

尽管最近有所改进,现有的基于深度重建的方法仍然面临以下挑战。

挑战一:异常偏见。 深度学习模型在训练阶段严重依赖于从数据中学到的知识,但由于其复杂的模式,从时间序列中提取信息比语言和图像数据更具挑战性[9]、[10]。 因此,学习高质量的重建模型变得特别困难,尤其是在存在与知识无关的异常偏差的情况下。 如图 1 左侧所示,典型的重建模型 TimesNet [7] 能够很好地重建正常序列,但会过度拟合异常观测值,导致性能下降。 这种现象是由于引入了误导性的异常偏差,这些偏差可以通过常用的时间模型融入正常模式。 不幸的是,许多现有的基于重建的方法忽视了这种异常偏差,导致性能不佳。

挑战二:时间序列分布偏移。 时间序列的分布偏移引入了一个关键因素,其中从训练数据中学习到的模式可能变得不适合甚至不正确地用于测试数据,从而导致错误的重构时间序列。 如图 1 右侧所示,测试数据上的累积分数曲线比验证数据上的累积分数曲线走得更快,这是由于时间序列的分布偏移造成的,导致阈值泛化不良。 尽管有两种类型的现有技术可以合并到基于重建的方法中以减轻分布变化:归一化和分解。 基于静态统计的归一化[11]、[12]和基于预定义参数的分解[9]、[13]-[15]在泛化方面表现出局限性。 此外,依赖学习统计数据[16]和参数[17]、[18]的方法仍然容易受到分布变化的影响。

在这里插入图片描述

图 1:左:TimesNet [7] 对合成的 NIPS-TS-Global 数据集进行异常检测。 右图:TimesNet 的真实 SMAP 验证和测试集上的异常分数的累积分布函数 (CDF)。

这项工作旨在通过设计一种名为时频掩模自动编码器(TFMAE)的开创性模型来解决上述挑战,该模型通过对抗性对比目标函数进行训练。 对于异常偏差,认识到净化时间序列的重要性,我们实施了基于窗口的时间掩蔽策略,以消除具有大变异系数的潜在观察异常(例如,全局和上下文观察异常),以及基于幅度的频率掩蔽策略 消除小幅度的潜在模式异常(例如趋势和季节性异常)。 这些策略有利于无异常偏差的学习以及用学到的正常知识重建异常。 为了解决分布偏移问题,我们最初设计了两个基于 Transformer 的自动编码器来生成基于时间和频率掩蔽的时间序列的不同表示。 然后引入一种新颖的对比目标函数来最小化这些表示之间的差异。 最后,对比差异取代了异常检测的传统重建误差,因为异常与其相应的正常恢复视图之间的差异超过了正常表示的差异。 对比标准摆脱了重建范式,利用了不同视图的相似性与分布无关的事实[19]。 此外,为了避免过度拟合以最小化差异,对抗性训练被集成到我们的 TFMAE 中。

我们的贡献可总结如下:

• 为了在建模之前消除潜在的异常观察和模式,我们提出了基于窗口的时间掩蔽策略和基于幅度的频率掩蔽策略。 因此,具有纯化输入的自动编码器不会被观察和模式异常所误导,即 TFMAE 是一种异常的抗偏差模型

• 据我们所知,这项工作是第一个用基于时间和频率掩蔽的对比标准代替重建误差进行时间序列异常检测的研究,这是一个不受影响的分布平移模型。

• 我们对七个公共实时序列数据集进行了广泛的实验,结果提供了对 TFMAE 有效性和效率的深入了解。

第二节概述了相关工作。 第三节介绍了问题陈述和系统概述。 然后我们在第四部分介绍 TFMAE,第五部分介绍实验结果。第六部分总结本文。

II. RELATED WORK

A. Time Series Anomaly Detection

关于时间序列异常检测已经进行了大量研究。 根据异常检测的方式,我们可以将方法分为五种类型:基于密度的方法、基于聚类的方法、基于标签的方法、基于重建的方法和基于对比的方法。

基于密度的方法主要关注观测值与其邻居之间的差异。 基于密度的局部异常值因子(LOF)[20]和基于连通性的连通性异常值因子(COF)[21]是两种典型的传统基于密度的方法。 随着深度表征学习的兴起,DAGMM [22] 和 MPPCACD [23] 等先进模型学习时间序列的低维表征,并利用高斯混合模型推导其密度,从而实现高精度的检测结果。

基于聚类的方法利用观测值与聚类中心之间的距离来识别异常。 考虑到聚类,支持向量数据描述(SVDD)[24]和一类支持向量机(OC-SVM)[25]等经典技术在核空间中搜索超球面和超平面。 随后,DSVDD [26] 和 THOC [27] 被提出在深层潜在和分层空间中寻找簇以进行异常检测。

基于标签的方法在训练阶段进行监督分类。 Microsoft [28] 率先使用人类生成的标签来训练用于异常检测的 CNN 模型。 RobustTAD [29] 扩展了这种方法,引入了为标签和关键点分配标签和值权重,以提高检测性能。

基于重建的方法一直是研究的基石,特别是在缺乏标记训练数据的情况下。 这些模型以无监督的方式进行训练,通过辨别原始时间序列和重建时间序列之间的差异来检测异常。 早些年,重建依赖于 ARIMA [30] 等统计方法。 深度学习的出现催生了 OmniAno [6]、HIFI [31]、Interfusion [32]、TFAD [13]、VQRAE [33]、RDAE [34] 和 TimesNet [7] 等方法。 他们根据当前输入重建时间序列。 此外,对抗性训练已被纳入基于重建的方法中,以实现稳健的检测。 例子包括 BeatGAN [35]、USAD [36]、DAEMON [37]、[38]、SA-GAN [39] 和 TranAD [8]。

基于对比学习的方法旨在通过从同一输入的各个方面派生的表示之间的差异来检测异常。 TimeAutoAD[40]和CTAD[41]通过注入噪声构造负样本,并根据原始负样本的差异来判断异常。 AnoTran [42] 最小化先验表示和关联表示之间的距离,以减轻异常检测中的分布变化。 相反,DCDetector [43] 最小化基于不同块大小的关联表示之间的距离以避免先验知识。 值得注意的是,以前的方法仅关注时间方面,忽略了频率特征在检测异常模式中的关键作用。

B. Masked Autoencoder

以 BERT 为代表的掩码语言建模的成功为基础,掩码自动编码器 (MAE) [44] 已成为图像表示的有效自监督视觉学习器。 具体来说,MAE 随机屏蔽图像中的标记,允许其编码器从未屏蔽的标记中学习,并允许解码器恢复屏蔽的标记。 STMAE [45]将MAE范式扩展到视频建模中,取得了显着的性能。 虽然 MAE 已在非欧几里得数据建模(GraphMAE [46])和时间序列建模(STEP [47])等各个领域得到应用,但传统的基于随机的 MAE 方法缺乏特定于任务的适应性。 为此,引入了创新的适应措施:MAERec [48] 屏蔽具有更高结构一致性的标记,以实现稳健的顺序推荐,GPT-ST [49] 使用集群感知屏蔽进行跨集群知识学习,EMAE [50] 屏蔽学习语义 图像中的部分用于快速训练。 然而,这些方法不能直接转化为时间序列异常检测。

III. PRELIMINARIES

1)时间序列表示:我们将时间序列 S 定义为表示传感器或机器产生的数值的观察序列。 形式上,S = { s 1 , … , s t , … , s ∣ S ∣ } \{s_1,\ldots,s_t,\ldots,s_{|S|}\} {s1,,st,,sS},其中 s t ∈ R N s_t\in\mathbb{R}^N stRN在时间 t 包含 N 个数值。 时间序列的长度表示为|S| 其中 S ∈ R ∣ S ∣ × N S\in\mathbb{R}^{|S|\times N} SRS×N。 在 N =1 的特殊情况下,S 是单变量时间序列。 对于给定的S,我们可以使用参数化模型 G ( ⋅ , Θ ) \mathcal{G}(\cdot,\Theta) G(,Θ)生成其D维表示,其中θ表示参数。

在这里插入图片描述
图 2:所提出的 TFMAE 的总体架构。 左侧部分包含时频掩模,中间部分是基于变压器的自动编码器,右侧部分显示目标函数。 DKL 表示 Kullback-Leibler 散度。

  1. 问题定义:给定一个训练好的模型 G ( ⋅ , Θ ) \mathcal{G}(\cdot,\Theta) G(,Θ) 和一个时间序列 S ∈ R ∣ S ∣ × N S \in \mathbb{R}^{|S|\times N} SRS×N,时间序列异常检测的目标是确定该序列中的观测值是否表现出异常。 这一确定是通过 D 维表示和标签 Y = { y 1 , … , y t , … , y ∣ S ∣ } ∈ R ∣ S ∣ \{y_1,\ldots,y_t,\ldots,y_{|S|}\} \in \mathbb{R}^{|S|} {y1,,yt,,yS}RS来做出的,其中 y t ∈ { 0 , 1 } y_t\in\{0,1\} yt{0,1} y t = 1 y_{t}=1 yt=1表示第 t 个观测值是异常。

3)系统概述:图2描述了我们的TFMAE的架构,它由以下组件组成:

• 时间频率模板。 给定单变量或多变量时间序列,TFMAE采用基于窗口的时间掩蔽策略和基于幅度的频率掩蔽策略来选择性地消除潜在的异常观测值和模式,这可以避免异常偏差并得出输入时间序列的两种不同视图。 在时间掩蔽之后,被掩蔽的观测结果被替换为可学习的参数,并且未掩蔽的观测结果被分别投影到高维空间。 在频率掩蔽之后,掩蔽模式被可学习的参数替换,然后整个时间序列被投影到高维空间。

• 基于变压器的自动编码器。 为了增强屏蔽模式和观察结果的恢复,TFMAE 结合了广泛采用的顺序建模框架 Transformer,以进行有效的时间信息学习。 对于基于频率掩蔽的表示,采用仅解码器的方式来恢复由于频率混合而导致的掩蔽模式。 对于基于时间掩蔽的表示,未掩蔽的部分最初通过编码器来学习正常模式。 随后,所有观察结果都被输入解码器,从而有助于恢复被屏蔽的观察结果。

在这里插入图片描述
• 模型训练。 在获得学习到的基于时间和频率掩蔽的表示后,使用对比目标函数来最小化它们的 Kullback-Leibler 散度 (KLD)。 基于时间掩蔽的表示的梯度在对比函数中停止,以确保基于频率掩蔽的表示的对齐。 随后,应用对抗性训练来最大化基于时间频率掩蔽的表示之间的 KLD,同时停止基于频率掩蔽的表示的梯度。 对抗性训练可以防止差异过度拟合

上述组件的详细信息如第四节所示。 此外,表一总结了本文中使用的符号。

IV. METHODOLOGY

我们继续提供 TFMAE 中每个组件和异常检测的细节,然后分析 TFMAE 的复杂性。

A. Temporal-Frequency Masks

1)基于窗口的时间掩蔽(Window-based Temporal Masking):目前,重建范式在时间序列异常检测中很流行。 然而,当输入时间序列在训练阶段不是原始的时,基于重构的方法面临着从异常中学习误导性信息的风险,这可能会导致异常恢复良好而正常观测值恢复较差。 减少异常偏差的自然解决方案是用正常模式替换异常。 受屏蔽自动编码器(MAE)[44]在不同领域的成功及其固有的屏蔽重建特性的启发,我们设计了一种新颖的基于窗口的时间屏蔽策略来替代MAE中的随机屏蔽策略,它可以屏蔽潜在的异常观测值和 用正常信息恢复它们。 基于窗口的时间掩蔽策略的详细信息如下所示。

在这里插入图片描述
图 3 说明了这种屏蔽策略的流程,该策略最初利用滑动窗口来提取子序列,然后采用局部统计数据作为屏蔽的度量。 在时间序列上滑动窗口来提取每个观测值的子序列的原因是,基于窗口计算的统计数据是局部时间丰富的,并且与观测值相比对分布变化更加鲁棒[51]。 与直接使用子序列的平均值不同,我们的策略采用变异系数,它可以反映局部子序列的相对波动程度[52]。 具体来说,给定输入时间序列S的特征n的观测值 s t n s_t^n stn ,通过滑动窗口采样其子序列 s [ t − W : t ] n s_{[t-W:t]}^n s[tW:t]n,其中W表示滑动窗口的长度。 第t个子序列的变异系数计算如下:
在这里插入图片描述

其中 v t v_{t} vt表示第 t 个子序列上 N 个特征的变异系数之和, μ t n \mu_t^n μtn表示第 t 个子序列上第 n 个特征的平均值, V ∈ R ∣ S ∣ V\in\mathbb{R}^{|{S}|} VRS包含所有观测值的变异系数。 当窗口在波动上滑动时,变异系数会增加。 变异系数越大,说明数据越分散,即局部子序列越异常。 因此,我们选择变异系数较大的 r ( T ) % r^{(T)}\% r(T)%观测值子集作为候选异常,以减少异常观测偏差。 此外,我们的掩蔽策略不受数据规模变化的影响,因为变异系数已按其平均值标准化。 从数学上讲,屏蔽观测值的指数可以表述如下:

在这里插入图片描述
其中 I ( T ) = [ r ( T ) % × ∣ S ∣ ] I^{(T)}=\begin{bmatrix}r^{(T)}\%\times|S|\end{bmatrix} I(T)=[r(T)%×S], T o p I n d e x ( ⋅ , I ( T ) ) TopIndex(\cdot,I^{(T)}) TopIndex(,I(T)) 返回第一个输入中具有最高 I(T) 值的索引,因此 i d x ( T ) ∈ R I ( T ) idx^{(T)}\in\mathbb{R}^{I^{(T)}} idx(T)RI(T)是时间索引的子集。 获得屏蔽观测值的索引后,我们利用可学习的基于参数的向量 m ( T ) ∈ R D m^{(T)}\in\mathbb{R}^{D} m(T)RD 作为屏蔽表示和线性投影,将未屏蔽观测值转换为潜在空间,以实现更好的建模。 时间未屏蔽输入 U ∈ R ( ∣ S ∣ − I ( T ) ) × D U \in \mathbb{R}^{(|S|-I^{(T)})\times D} UR(SI(T))×D和时间屏蔽输入 P ∈ R I ( T ) × D P\in\mathbb{R}^{I^{(T)}\times D} PRI(T)×D 计算如下:

在这里插入图片描述

其中 W ( T ) ∈ R N × D   a n d   b ( T ) ∈ R D W^{(T)}\in\mathbb{R}^{N\times D}\mathrm{~and~}b^{(T)}\in\mathbb{R}^D W(T)RN×D and b(T)RD是线性投影的可学习参数。

基于 FFT 的加速。 考虑到效率是异常检测的关键考虑因素,我们基于窗口的时间屏蔽策略引入了两个不可避免的循环(内部循环用于计算统计数据,外部循环用于滑动窗口),从而显着增加了计算时间。 认识到效率的关键作用,我们探索了变异系数的另一种推导方式,即依赖于预期值和平均值的推导方式。 这种替代形式可以简单地表述如下:

在这里插入图片描述

其中 μ ( 2 ) \mu^{(2)} μ(2)表示子序列的平方的平均值。 通过在 S 上滑动过滤器 θ ∈ 1 W \theta\quad\in\quad\mathbb{1}^W θ1W(即,在时间序列上采用与内核进行卷积),可以获得每个窗口的平均值的好处。 根据 Wiener–Khinchin 定理 [53],通过快速傅立叶变换 (FFT) 可以加速计算变异系数:

在这里插入图片描述
其中\bar{v}{n}\in\mathbb{R}{|S|}表示第 n 个特征的变异系数,式中 \text{E}
(5) 是逐元素加法。 接下来, F ( ⋅ ) a n d F − 1 ( ⋅ ) \mathcal{F}(\cdot) \mathrm{and} \mathcal{F}^{-1}{(\cdot)} F()andF1()表示FFT及其逆运算。 因此,两个循环被 FFT 运算取代,FFT 运算可以以 O ( ∣ S ∣ l o g ( ∣ S ∣ ) ) O(|S|log(|S|)) O(Slog(S))的复杂度并行执行。

2)基于幅度的频率掩蔽:虽然我们基于窗口的时间掩蔽有效地过滤了潜在的异常观察结果,但时间序列中仍然存在各种模式异常,包括季节性和趋势异常。 为了解决这个问题,我们引入了一种直接应用于输入时间序列的新颖的频率掩蔽策略,旨在减轻异常模式偏差。 值得注意的是,我们选择对原始时间序列执行频率掩蔽,而不是对时间序列后时间掩蔽。 这种双通道的设计使我们能够保留时间掩蔽后的异常模式和频率掩蔽后的异常观察结果。 这种深思熟虑的选择植根于对比学习需要两种不同的表示来检测异常。

图 4 说明了频率掩蔽的过程。 最初,为了便于掩盖潜在的异常模式,时间序列被转换为基于频率的表示。 选择频域是因为它对模式变化的敏感性更高并且易于更新模式[13]。 | 给定输入时间序列 S,其频率表示 X ∈ C ∣ S ∣ × N X\in\mathbb{C}^{|S|\times N} XCS×N是通过对每个特征使用离散傅立叶变换 (DFT) 获得的。 从数学上讲,特征 n 的频谱 x i n x_i^n xin具有角频率 ω i n = 2 π i ∣ S ∣ \omega_i^n=\frac{2\pi i}{|S|} ωin=S2πi 公式如下:
在这里插入图片描述
在这里插入图片描述
其中 e 和 j 分别是欧拉数和虚数单位。 以前基于频率的时间序列建模方法通常在假设高频表示噪声的情况下丢弃高频分量(i 大的角频率)。 然而,在本文中,我们认为仅频率不足以作为判断异常模式的标准。 首先,应保留某些高频操作,例如在服务器集群中写入日志。 其次,趋势和小形体异常可能表现为时间序列中仍然存在低频分量。 为了解决这些问题,我们利用幅度代替频率作为掩蔽标准,考虑到存在持续时间和时间幅度等因素,可以更全面地评估频率重要性[29],如图4中的掩蔽曲线。 输入时间序列的幅值 A ∈ C ∣ S ∣ × N A\in\mathbb{C}^{|S|\times N} ACS×N可以计算如下:
在这里插入图片描述
其中 R [ x i n ]   a n d   J [ x i n ] \mathfrak{R}[x_i^n]\mathrm{~and~}\mathfrak{J}[x_i^n] R[xin] and J[xin]分别表示频率的实部和虚部。 最后,我们选择幅度较小的 r ( F ) % r^{(F)}\% r(F)%频率的子集作为掩蔽模式,因为它们的幅度较低且存在时间较短。 从数学上讲,这些选定频率的指数可以表示为:
在这里插入图片描述
其中 I ( F ) = ⌊ r ( F ) % × ∣ S ∣ ⌋   a n d   i d x ( F ) ∈ R I ( F ) × N I^{(F)}=\lfloor r^{(F)}\%\times|S|\rfloor\mathrm{~and~}idx^{(F)}\in\mathbb{R}^{I^{(F)}\times N} I(F)=r(F)%×S and idx(F)RI(F)×N

与时域相反,在时域中,掩蔽和未掩蔽表示可以分离,频率在恢复到时域后被混合。 因此,传统的 MAE 范式(通常按顺序对未掩蔽的所有观测进行建模)在频域中遇到了挑战。 为了解决这个问题,我们在转换到时域之前直接使用可学习向量 m ( F ) ∈ C N m^{(F)}\in\mathbb{C}^N m(F)CN 来替换屏蔽频率。 因此,替换的表示可以形成如下:

在这里插入图片描述

其中 X ~ ∈ C ∣ S ∣ × N \tilde{X}\in\mathbb{C}^{|S|\times N} X~CS×N封装了有关可学习的屏蔽频率和原始未屏蔽频率的信息。 为了将频率表示转换到原始时域, X ~ \tilde{X} X~使用逆离散傅里叶变换(IDFT)。 此外,还利用线性投影将基于频率掩蔽的时间序列转换为潜在空间,以便更好地建模。 在数学上,频率掩蔽后的表示 F ∈ R ∣ S ∣ × D F\in\mathbb{R}^{|S|\times D} FRS×D 如下:

在这里插入图片描述

其中 W ( F ) ∈ R N × D , b ( F ) ∈ R D W^{(F)}\in\mathbb{R}^{N\times D}, b^{(F)}\in\mathbb{R}^{D} W(F)RN×D,b(F)RD 是全连接网络的可学习参数。
在这里插入图片描述
图 5:左:基于 Transformer 的仅解码器自动编码器,用于恢复屏蔽频率,其中 ⊕ 表示元素加法。 右:基于 Transformer 的自动编码器,用于恢复屏蔽观测值,其中 || 表示将屏蔽表示插入到学习的未屏蔽表示中。

B. Transformer-based Autoencoders

1)基于频率掩蔽的自动编码器:在本节中,我们采用基于 Transformer 的普通解码器来恢复掩蔽频率,从 Transformer 捕获时间依赖性的功效中汲取灵感 [54],如 Informer [55]、PatchTST [56] 所演示的 ]、AnoTran [42] 和 TranAD [8] 模型。 在基于频率掩蔽的自动编码器中采用仅解码器架构的决定源于 IDFT 后掩蔽和未掩蔽频率的混合。 此外,如图 5 左侧所示,vanilla Transformer 包括位置编码模块和后续的 L 层自注意力模块。

位置编码。 遵循普通 Transformer 的范例,我们使用正弦函数将观测的绝对顺序信息合并到表示 F 中以加速收敛。 具体地,第t个表示的第i维的值表示为 f t ( 0 ) i f_t^{(0)^i} ft(0)i,通过将原始表示 f t i f_t^i fti与其对应的位置编码 c t i c_t^i cti相加而获得。 位置编码的细节表述如下:

在这里插入图片描述
其中 F ( 0 ) ∈ R ∣ S ∣ × D F^{(0)}\in\mathbb{R}^{|S|\times D} F(0)RS×D 表示编码修饰的输出。

自我关注。 如图 5 所示,每个注意力层都包含点积自注意力机制和前馈网络。 在第 l 层中,输入 F ( l − 1 ) F^{(l-1)} F(l1)最初被投影到查询 Q ( l ) ∈ R ∣ S ∣ × D , k e y K ( l ) ∈ R ∣ S ∣ × D Q^{(l)} \in \mathbb{R}^{|S|\times D}, \mathrm{key} K^{(l)} \in \mathbb{R}^{|S|\times D} Q(l)RS×D,keyK(l)RS×D,以及值 V ( l ) ∈ R ∣ S ∣ × D V^{(l)} \in \mathbb{R}^{|S|\times D} V(l)RS×D通过三个线性投影。 随后,通过查询 Q ( l )  and  K ( l ) Q^{(l)}\text{ and }K^{(l)} Q(l) and K(l) 相乘来计算注意力权重,即每个观察之间的相关性。 最后,值 V ( l ) V^{(l)} V(l)根据它们的注意力权重进行时间增强。 从数学上讲,第 l 层中第 t 个观察的自注意力表示可以表示为:

在这里插入图片描述
其中 F ~ ( l ) ∈ R ∣ S ∣ × D \tilde{F}^{(l)}\in\mathbb{R}^{|S|\times D} F~(l)RS×D 表示第 l 个自注意力的表示。 为了确保稳定的训练并提高自注意力的泛化能力,我们结合了残差连接和前馈网络。 其配方如下:
在这里插入图片描述
其中LN(·)和MLP(·)分别表示层归一化和多层感知器。 F ˉ ( l ) ∈ R ∣ S ∣ × D \bar{F}^{({l})} \in \mathbb{R}^{|S|\times D} Fˉ(l)RS×D F ( l ) ∈ R ∣ S ∣ × D F^{(l)}\in\mathbb{R}^{|S|\times D} F(l)RS×D 是残差连接和前馈网络之后的表示。

2)基于时间掩蔽的自动编码器:在本节中,我们详细介绍在时间掩蔽后对表示进行建模的过程。 如图 5 右侧部分所示,未屏蔽的观察结果最初由基于 Transformer 的编码器进行处理,以学习正常的时间模式。 随后,将整组观察结果输入到基于 Transformer 的解码器中,以通过学习到的正常模式恢复屏蔽的观察结果。

编码器。 与频域中仅解码器的设计不同,未屏蔽的时间输入 U 最初由编码器处理以获取正常的时间模式。 具体来说,U最初用正弦位置编码修饰,然后通过L层编码器建模,促进时间信息从上下文到当前状态的传播。 经过编码器之后,获得未屏蔽观测值的学习表示 U ( L ) ∈ R ( ∣ S ∣ − I ( T ) ) × D U^{(L)} \in \mathbb{R}^{(|S|-I^{(T)})\times D} U(L)R(SI(T))×D

解码器。 与频率视图类似,在基于 Transformer 的解码器中使用全套观测值(即编码的未屏蔽和可学习的屏蔽观测值)。 在将其输入解码器之前,根据原始时间序列中的位置将正弦位置编码添加到屏蔽观测值中,因为可学习的基于向量的屏蔽表示缺乏位置信息。 随后,将屏蔽观测值的修饰表示插入到未屏蔽观测值的编码表示中。 然后,两者都被输入解码器,通过编码器中学习到的正常模式来恢复屏蔽的观察结果。 最后,经过 L 层解码器,获得所有观测值的表示 P ( L ) ∈ R ∣ S ∣ × D P^{(L)}\in\mathbb{R}^{|S|\times D} P(L)RS×D

C. Model Training

在本节中,我们制定了对抗训练增强对比目标函数,它使用两个不同视角(即时间视图和频率视图)的表示来训练我们的 TFMAE。

1)对比目标函数:虽然重建误差一直是异常检测任务中的主要损失函数,但时间序列分布偏移的持续挑战阻碍了其功效。 时间序列分布偏移表示测试数据的分布与训练数据相比的变化,这给从先前学习的模式重建未见过的数据带来了困难。 换句话说,具有高异常分数的观察结果不一定是异常的,而是看不见的。 为了减轻时间序列分布变化的负面影响,我们提出了一种新颖的对比目标函数来训练我们的 TFMAE,它用基于时间和频率掩蔽的表示之间的差异最小化来代替原始时间序列和重构时间序列之间差异的最小化 。 这是因为即使没有看到输入,同一时间序列的基于时频掩蔽的表示根据其时频一致性[57]保持一致。 此外,与利用正负对的经典对比学习相比,我们的对比目标函数中仅采用正样本,以最大限度地减少时频掩蔽视图表示的差异[58]。 在训练阶段,异常将逐渐突出显示,因为与一致的正常观察相比,不同视图中异常的正常恢复和原始异常表示之间的差异更难以减少。 因此,具有较高差异的观测结果将在推理阶段被检测为异常。 在数学上,对比目标函数计算如下:

在这里插入图片描述
其中DKL(·,·)表示Kullback-Leibler散度,它计算两个表示之间的距离,用于反映基于时间频率掩蔽的表示之间的差异。

2)对抗性训练:如表IV所示,单独使用对比学习并不能产生最佳结果,这主要是由于过度拟合现象的出现,例如,时间视图中异常频率的表示往往是接近的 对比训练后频率视图中相应的正常恢复表示。 这种现象与我们的预期目标相矛盾,即最小化正常观察之间的差异,同时最大化异常之间的差异。 为了克服这个问题,我们在目标函数中引入了对抗机制,这增强了大多数深度学习任务的鲁棒性和泛化性。 在 TFMAE 中,对抗性训练旨在增加正常表示之间的相似性,同时保持异常表示与其相应的正常视图之间的显着差异。 从数学上讲,我们的对抗性对比函数表示如下:
在这里插入图片描述

其中 max 和 min 表示增加和减少基于时间频率掩蔽的表示之间的差异。 在训练阶段,异常表示的差异与正常表示的差异之间的差距逐渐增大,因为异常表示的差异更难减少而更容易增加。 此外,基于时间和频率掩蔽的表示的梯度分别在最小化和最大化阶段停止,因为基于时间掩蔽的表示保留了更多原始信息,因此更适合在对抗性训练中充当标签。 如图 8 所示,对抗性对比目标函数可以输出较大的异常差异。

D. Anomaly Detection

在我们的对比设计中,基于时间频率掩蔽的表示之间的差异程度直接对应于异常的可能性。 因此,我们在推理阶段采用对比差异作为异常分数。 输入观测值 st ∈ RN 的得分可以计算为:

在这里插入图片描述
最终,根据异常分数和预先确定的阈值δ来评估观察结果,即当分数超过阈值时检测到异常。 检测到的标签 Y ^ ∈ R ∣ S ∣ \hat{Y}\in\mathbb{R}^{|S|} Y^RS如下图所示:

E. Complexity Analysis

在本节中,我们讨论 TFMAE 的复杂性,它由基于窗口的时间掩蔽、基于幅度的频率掩蔽和基于 Transformer 的自动编码器组成。 通过FFT运算将基于窗口的时间掩蔽的时间复杂度从O(N|S|W)优化为O(N|S|log(|S|)),基于幅度的频率掩蔽中的DFT算法为 也可以通过 FFT 运算来加速,复杂度为 O(N|S|log(|S|))。 因此,由于 Transformer 中的二次自注意力,我们的 TFMAE 的时间复杂度主要是 O(LD|S|2),这可以与最先进的方法相媲美甚至超越。

在这里插入图片描述

V. EXPERIMENTS

为了验证 TFMAE 的有效性和效率,我们对七个数据集进行了全面的实验,以回答以下六个研究问题:

• RQ1:与不同数据集的基线相比,我们的 TFMAE 是否表现出卓越的性能? • RQ2:TFMAE 中的组件(例如自动编码器)如何影响异常检测的性能? • RQ3:TFMAE 中设计的时频掩蔽策略的有效性如何? • RQ4:调整各种超参数,特别是时频掩蔽比,如何影响TFMAE 的性能? • RQ5:TFMAE 是否输出合理的异常分数? • RQ6:TFMAE 在异常检测方面的效率如何?

A. Experimental Setup

1)基准数据集:在本文中,我们选择了七个广泛使用的时间序列异常检测数据集来评估 TFMAE 的有效性。 这些数据集包括五个真实世界数据集和两个合成数据集:MSL(火星科学实验室漫游车)和SMAP(土壤湿度主动被动卫星)均由NASA发布[59],其中的时间序列和异常警报由NASA记录 航天器监测系统的意外事件异常报告。 PSM(Pooled Server Metrics)由 eBay 发布[60],包含来自 eBay 多个服务器节点的时间序列。 与上述数据集相比,SMD(服务器机器数据集)[6] 是一个更大的数据集,包含为期五周的互联网服务器节点时间序列。 SWaT(安全水处理)记录连续运行下关键基础设施系统的数据[61]。 NIPS-TS-Global 和 NIPS-TS-Seasonal 是由精心设计的规则生成的合成数据集[62],分别代表全球观测异常和季节性异常。 表 II 列出了有关这些数据集的详细信息。

2)指标:为了比较时间序列异常检测性能,我们采用了三种广泛使用的评估指标:精度(P)、召回率(R)和F1分数(F1)。 与文献设置一致,我们应用点调整策略来获得检测结果,如果检测到片段中的单个观察,则识别连续异常。

  1. 基线:我们将我们提出的 TFMAE 与以下基于 6 个类别的 14 个基线进行了广泛比较:

• 基于密度的方法:LOF [20] 计算局部密度偏差,并且密度较低的观测结果是异常。 DAGMM [22]进一步利用高斯混合模型来计算数据的密度。

• 基于树的方法:IForest [63] 使用具有线性时间复杂度的隔离树执行异常检测。
• 基于聚类的方法:DSVDD [26] 使用深度网络来导出表示并通过到聚类的距离检测异常。 THOC [27] 通过扩张的循环神经网络提取层次信息,并使用集群超球面上的一类目标来训练模型以进行异常检测。
• 基于重建的方法:OmniAno [6] 利用归一化流增强型 LSTM 来重建时间序列以检测异常。 TimesNet [7] 将一维时间序列转换为多个二维张量,然后使用卷积主干来重建时间序列。 GPT4TS [64]将大型语言模型与时间序列异常检测任务结合起来。
• 基于对抗性重建的方法:USAD [36]提出了一种基于两个解码器的自动编码器,并使用对抗性方式进行快速训练。 BeatGAN [35] 利用对抗性增强卷积模型来检测时间序列异常。 DAEMON [37]利用两个鉴别器来对抗性地训练自动编码器,然后导出鲁棒的重构时间序列。 TranAD [8]利用 Transformer 框架对时间序列进行编码,然后将对抗性训练引入到两个基于解码器的模型中以增强鲁棒性。
• 基于对比的方法:AnoTran [42]通过先验关联和序列关联对时间序列进行编码,然后使用两种表示之间的差异来区分异常。 DCDetector [43] 利用对不同块大小的时间序列表示的正对比学习来检测异常。

我们利用基线中最佳性能的配置在运行我们模型的同一台机器上运行他们的官方代码。

4)超参数设置:TFMAE由Adam优化器[65]训练,初始学习率为0.0001,epoch为1,batch size为64。在自动编码器中,我们将transformer层数设置为3 128 个隐藏特征维度。 在基于窗口的时间掩蔽过程中,滑动窗口的长度设置为10以计算局部统计特征。 此外,由于不同数据集的特点,我们设置了不同的时频掩蔽比。 具体设置如图6所示。此外,阈值δ是通过将r%数据检测为异常来预先确定的。 具体来说,我们将 MSL 和 PSM 设置为 r = 0.9%,将 SMAP 设置为 0.75%,将 SMD 设置为 0.45%,将 SWaT 设置为 0.3%。

  1. 实现细节:TFMAE 和所有基线的实验均在配备一个 Intel® Xeon® Gold 6230R CPU @ 2.10GHz 和一张带有 PyTorch 1.12.1 的 NVIDIA GeForce RTX 3090 GPU 卡的机器上进行。 TFMAE 的源代码位于:https://github.com/LMissher/TFMAE。 为了公平比较,所有方法的阈值都是通过验证集计算的。

在这里插入图片描述

B. Performance Comparison (RQ1)

表 III 显示了所有方法在五个数据集上的时间序列异常检测的性能,以精度、召回率和 F1 分数来衡量。 为了确保公平比较,我们坚持基线的原始配置,唯一的调整是固定输入长度 100,与[42]一致。 因此,与原始文献中的结果相比,报告的基线性能可能会出现轻微的变化。 主要发现如下:

时态学习的优点。 在所考虑的基线模型中,以 DAGMM 为代表的基于深度学习的方法比经典的 LOF 具有显着的优势。 此外,基于聚类的 DSVDD 和 THOC 的性能表明,利用先进的时间建模技术可以获得更准确的结果。 这种现象强调了学习时间依赖性的有效性。

对抗性训练的优点。 与基于重建的方法相比,基于对抗性重建的方法(例如 TranAD 和 USAD)表现出明显的优势,这归因于对抗性训练的有效性,即规避异常模式重建的能力。

对比学习的优点。 如表 III 所示,AnoTran 和 DCDetector 利用对通过双通道模型获得的表示进行对比学习,显示出显着的优越性,特别是与基于重建的方法相比在 SWaT 数据集上。 这种现象归因于分布偏移,其中测试集中相同时间序列的多视图表示表现出接近性,而重建的时间序列可能与未见过的测试数据显着偏离。

频率学习的优点。 TimesNet 的结果表明,与单独使用时间特征的方法(例如 GPT4TS)相比,使用频域中的特征可以显着提高检测时间序列异常的性能。 这是因为异常不仅是单次产生的,而且还存在模式,并且频域对模式异常更敏感。

一致的性能优势。 利用上述技术,我们引入了 TFMAE,这是一种新颖的方法,它最初采用时间和频率屏蔽自动编码器来获取没有异常模式和观察结果的原始表示。 随后,它将基于时频掩蔽的对比目标函数作为异常标准,并采用对抗性训练来减轻过度拟合的潜在不利影响。 因此,如表 III 所示,TFMAE 在所有数据集上始终保持最先进的性能。

C. Model Ablation Study (RQ2)

在本节中,我们使用 TFMAE 的 7 种变体在 5 个数据集上进行实验。 这些实验旨在展示模型设计的有效性。 这些变体的详细信息概述如下:

• “w/o Ladv”:此变体在训练阶段排除对抗性目标。 • “w/ Lradv”:该版本涉及交换方程15 中F(L) 和P(L) 的位置。 • “w/o Fre”:TFMAE 消除了频率视图。 • “w/o FD”:不再配备频率解码器。 • “w/o Tem”:TFMAE 删除时间视图。 • “w/o TE”:不再配备时间编码器。 • “w/o TD”:不再配备时间解码器。

基于表IV中呈现的消融结果,可以得出以下发现。

对抗性训练带来的好处。 “w/o Ladv”的结果显示性能显着下降,这表明对抗性目标的包含可以引导 TFMAE 训练朝着更准确的方向发展,即对抗性训练可能有助于防止过度拟合。 此外,“w/ Lradv”的性能进一步验证了基于时间掩蔽的表示可以存储更多原始信息。

频率屏蔽自动编码器的有效性。 “w/o Fre”的实验表明,在大多数场景下,去除频率视图会导致性能显着下降。 这一观察结果强调了我们对比目标函数的有效性。 此外,“w/o FE”的性能低于“w/o Fre”的性能,这表明导出特定于视图的正确表示比仅仅引入该视图更重要。

时间屏蔽自动编码器的有效性。 与频率视图类似,时间视图作为“w/o Tem”的表现在我们的 TFMAE 中是不可或缺的。 此外,正如“w/o TD”中性能受损所证明的那样,解码器在时间视图中对于将正常时间信息传递到屏蔽观测中至关重要。

D. Investigation on Temporal-Frequency Masks (RQ3)

在本节中,我们试图验证我们提出的时间频率掩蔽策略的有效性。 为了实现这一目标,我们设计了 TFMAE 的六种变体,并在五个时间序列异常检测数据集上进行实验。 这些变体的详细信息如下:

• “w/o MT”:它不再配备时间掩蔽。 • “w/ SMT”:该版本仅使用标准差来掩盖观察结果。 • “w/ RMT”:该版本随机屏蔽观察结果。 • “w/o MF”:不再配备频率掩蔽。 • “w/ HMF”:屏蔽高频。 • “w/ RMF”:此变体随机屏蔽频率。

根据表V所示的结果,可以得出以下结论。

基于窗口的时间掩蔽的影响。 “w/ RMT”的结果一致表明,我们基于窗口的时间掩蔽超过了所有数据集的随机掩蔽。 此外,“w/o MT”的性能与“w/ RMT”相当,甚至优于“w/ RMT”,这表明提高性能的关键因素不在于“屏蔽”本身,而在于“屏蔽异常”。 值得注意的是,与“w/ SMT”相比,变异系数表现出优越的性能,因为它对数据规模的变化不太敏感。

在这里插入图片描述
基于幅度的频率掩蔽的影响。 与时间掩蔽类似,去除频率掩蔽“w/o MF”的性能相当,甚至优于随机掩蔽“w/RMF”。 此外,为了进一步验证我们的掩蔽策略的有效性,我们将基于幅度的频率掩蔽与利用基于高频的掩蔽的变体进行比较。 如表 V 所示,“w/ HMF”在大多数任务中表现不如 TFMAE,这表明高频并不完全代表异常,相反,偏离历史数据的短暂时间模式更有可能是异常。

E. Hyper-Parameter Sensitivity Analysis (RQ4)

图 6 和图 7 描述了不同超参数的结果。 具体来说,我们探索 Transformer 的层数、隐藏特征的维度、时间掩蔽策略的窗口长度以及搜索空间 [1, 2, 3, 4, 5], [32, 64, 128, 256, 512],[1, 5, 10, 15, 20],5到95,间隔为10,10到90,间隔为10。如图7所示,TFMAE的性能最初有所提高 随着层数的增加而增加,当层数超过三层时减少。 此外,当隐藏特征的维度设置为 128 时,TFMAE 实现了最佳性能。 这是因为过多的隐藏特征可能会阻碍收敛。 此外,还可以从以下数据中获得更多见解:

窗口长度 W。该超参数控制每次观察时考虑的局部信息。 值得注意的是,设置 L = 10 会产生最佳性能,这表明短子序列会忽略关键信息,而长子序列可能会减弱当前波动的影响。 此外,L = 1 的性能相当于用原始值进行掩蔽,表明绝对值不能有效掩蔽异常观测值,特别是在时间序列分布偏移的潜在问题下。

时间掩蔽比 r ( T ) r^{(T)} r(T)。 该超参数确定要屏蔽的观测值的比例。 如图6所示,SWaT、SMD、SMAP、PSM和MSL的最佳比例为25%、5%、65%、65%和55%。 尽管在 SMD 数据集上以较小的掩蔽比(例如 5%)实现了最佳性能,但当在 SWaT 数据集上将时间掩蔽比提高到 95% 时,也观察到了类似的结果。 这是由于时间序列表现出显着的时间冗余,使得从缺失的观察中恢复相对容易。

频率掩蔽比 r ( F ) r^{(F)} r(F)。 该超参数决定了要屏蔽的频率数量。 如图6所示,SWaT、SMD、SMAP、PSM和MSL的最佳比例为40%、20%、30%、10%和40%。 据观察,与大时间掩蔽比相比,大频率掩蔽比导致性能较差。 这种差异是由于单个频率比单个观察包含更多信息这一事实引起的。 因此,基于频率掩蔽的表示可能难以重建并且应该与时间对齐。

在这里插入图片描述

F. Case Study (RQ5)

异常偏差。 为了验证 TFMAE 产生准确检测结果的能力,我们使用 NIPS-TS-Seasonal 和 NIPS-TS-Global 数据集进行了案例研究。 如图 8 所示,TFMAE 和 DC detector 生成的异常分数始终可区分,即,除非存在异常,否则分数仍然很小。 此外,TFMAE 可以识别季节性和全局观测异常,而 DCDetector 则失败。 这种差异表明异常偏差可能会误导模型,而我们的屏蔽自动编码器有效地解决了这个问题。

在这里插入图片描述

图 8:NIPS-TS-Seasonal 和 NIPS-TS-Global 数据集中季节性和全球观测异常的可视化。 “DCdet”是指 DC 检测器。 第一行中,红色圆圈表示全球观测异常,红色框表示季节性异常。 在第二行和第三行中,红线表示检测异常的阈值。

在这里插入图片描述
图 9:左:TimesNet 的 SMAP 验证和测试集异常分数的 CDF。 右图:SMAP 验证和 TFMAE 测试集上异常分数的 CDF。

时间序列分布变化。 为了确定我们的对比标准在存在时间序列分布变化的情况下的稳健性,我们使用 SMAP 数据集进行了案例研究。 如图 9 所示,TimesNet 在验证集和测试集上的累积分数显示出由变化引起的明显差距。 然而,我们的 TFMAE 在验证集和测试集上生成的累积分数始终相似。 这种比较证实了我们的对比标准可以有效地减轻时间序列分布变化,从而导致阈值具有更高的泛化性。

G. Model Efficiency Study (RQ6)

为了评估 TFMAE 的有效性和效率,我们展示了 TFMAE、基于大型语言模型的 GPT4TS 和最先进的基线(包括 TranAD、AnoTran、TimesNet)之间的 F1 分数、训练速度和 GPU 内存大小比较 和直流检测器。 此外,我们在评估中包含了 TFMAE 的一个变体,表示为“w/o FFT”。 评估是在 SMD 数据集上进行的,这是我们论文中最长和第二大的数据集。

• “w/o FFT”:该版本省略了使用FFT 来加快变异系数的计算。 如图 10 所示,TFMAE 获得了最高的 F1Score,拥有最高效的 GPU 内存利用率,并且在训练速度方面排名第二。 虽然 TranAD 在速度方面表现出色,但与 TFMAE 相比,更大的内存占用和较低的性能表明 TFMAE 在速度和性能之间实现了卓越的权衡,并且具有出色的内存使用率。 此外,“w/o FFT”训练速度的明显下降强调了我们基于 FFT 的加速的有效性。

在这里插入图片描述

图 10:在 SMD 数据集上比较性能指标,y 轴上以 % 表示 F1-Score,x 轴上以速度表示,内存占用量以每种方法的圆圈大小表示。

VI. CONCLUSION

在本文中,我们介绍了一种新颖的时频掩模自动编码器(TFMAE),用于时间序列异常检测,它不同于传统的重建范例。 TFMAE 利用基于时间频率掩蔽的表示之间的差异来取代传统的重建误差并减轻时间序列分布变化的影响。 此外,TFMAE 在基于 Transformer 的自动编码器之前结合了基于窗口的时间掩蔽策略和基于幅度的频率掩蔽策略,以减少时间序列中的异常偏差。 为了防止对比训练期间潜在的过度拟合,对抗性目标函数被集成到 TFMAE 中。 七个基准数据集的实验结果展示了 TFMAE 相对于 14 个基准的卓越性能。 未来的工作将把 TFMAE 扩展到其他时间序列任务,例如时间序列预测和分类

ACKNOWLEDGMENTS

该工作得到国家自然科学基金委(No. 61972069、61836007和61832017)、深圳市科技研发资助基础研究计划(JCYJ20210324133607021)、衢州市人民政府资助(No. 2022D037、2023D044)、衢州市重点实验室的部分资助 数据智能与认知计算,深圳市龙华区。


时空动作检测(spatio-temporal action detection)是一项计算机视觉任务,旨在从视频片段中准确地检测和识别出发生的动作。与传统的动作识别任务相比,时空动作检测旨在通过不仅仅检测动作在空间上的出现,还要捕捉动作在时间上的变化。 时空动作检测往往涉及以下几个主要步骤: 1. 帧级特征提取:首先,利用现有的特征提取技术,从每个视频帧中提取稳定而有信息量的特征,以捕捉空间信息。 2. 时间建模:接下来,通过对连续帧之间的变化进行建模,来捕捉动作的时间相关性和动态信息。这可以通过各种技术,如光流,差分图和循环网络等来实现。 3. 动作检测:在获得空间和时间特征后,利用学习算法(如深度神经网络)来进行动作检测。这通常通过将时空特征输入到分类器,然后根据预先训练的模型推断动作类别和位置。 4. 时空定位:最后,定位动作在视频中的准确位置。这可以通过在时间上进行滑窗检测,并使用非极大值抑制来抑制重叠检测结果来实现。 时空动作检测在很多领域具有广泛应用,比如视频监控、智能交通、运动分析和人机交互等。通过准确地检测和识别动作,我们可以实现更精确的行为理解和动作预测,从而为许多实际应用带来便捷和效益。然而,时空动作检测仍然存在一些挑战,如动作遮挡、背景干扰和不同尺度的动作等问题,所以该领域的研究仍在不断发展和进步。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值