Perturbation Guiding Contrastive Representation Learning for Time Series Anomaly Detection

系列文章目录

扰动引导的时间序列异常检测对比表示学习 IJCAI-24



摘要

时间序列异常检测是各个领域应用的一项关键任务。由于标注的挑战,自监督方法已成为近年来时间序列异常检测的主流方法。然而,目前的对比方法将数据扰动分为二进制类,正常或异常,这缺乏明确的不同扰动方法的具体影响。受“扰动类型误分类概率越高,异常概率越高”的假设启发,提出了PCRTA方法,首先设计扰动分类器学习数据扰动的伪标签。此外,针对对比学习中的“类崩溃问题”,通过引入可学习的扰动分类网络,提出了一种扰动引导的正负样本选择策略。在6个真实数据集上的大量实验表明,与13个最先进的竞争对手相比,我们的模型具有显著的优越性,F1评分和AUC-PR分别平均提高了5.14%和8.24%。


一、引言

时间序列异常检测在现实场景中具有重要的研究意义。它广泛应用于工业过程、医疗保健系统和航空航天操作等领域[Baireddy等人,2021年],从而在维护网络物理系统的完整性和功能性方面发挥关键作用。该技术的不断进步和完善对于确保复杂互联系统的可靠性、可靠性和安全性至关重要。考虑一个带有多个传感器的航天器,通过多变量时间序列数据跟踪其组件。确保航天器的正常运行至关重要,因此异常检测是一个至关重要的方面。这在多变量时间序列域中尤其重要,在该域中,检测异常并诊断其根本原因已成为数据科学的一个关键主题[Aggarwal and Aggarwal,2017; Schmidl et al.,2022]近几年来。

实际应用中的时间序列数据具有高维、非结构化、复杂、属性独特等特点,给数据建模带来了挑战[Yang和Wu,2006]。尽管传统的基于统计的异常检测方法[Chandola等人,2009年; Siffer等人,2017年]已被证明是有效的。然而,由于它们对先验知识的严重依赖,它们在复杂的多元时间序列上不能给出好的结果。因此,基于机器学习的异常检测方法[Pang等人,2021]的方法得到了广泛的关注。传统的机器学习方法包含两类,监督方法[Liu等人,2015]和无监督方法[Malhotra等人,2016年; Li等人,2019年]的规定。由于如果没有人类可识别的模式,则在真实世界应用中标记时间序列数据比标记图像和语言要困难得多[Eldele等人,2021],异常检测问题一般被认为是一个无监督学习问题。

近年来,在应用深度学习方法进行时间序列异常检测方面取得了重大进展。例如,自动编码器(AE)[Aggarwal和Aggarwal,2017]方法将重建误差用作异常评分。最近,已经设计了许多先进的结构来增强模型能力。例如使用变化的自动编码器[Li等人,2021年; Su等人,2019年],生成对抗网络[Li等人,2019年]、图形神经网络[Deng和Hooi,2021年]和Transformer [Tuli等人,2022; Ahmed等人,2023年]的规定。由于时间序列数据标准所带来的挑战,自监督方法在过去几年中在时间序列异常检测中得到了广泛的应用。这种趋势的一个突出的例子是对比学习[Xu等人,2024年; Eldele等人,2021年;萨那·托内卡博尼和戈登伯格,2021年]。这是由于主流的无监督时间序列异常检测方法的流行,所述方法主要依赖于用于利用输入数据的一类学习的生成模型[Audibert等人,2020年]的项目。对于时间序列数据扩充,通常的做法是向原始序列引入扰动。考虑到时间序列特有的序列性和周期性特征,本文探讨了各种增强技术。然而,现有方法通常优先区分正常和异常情况[Xu等人,2024]中所描述的方法需要大量的实验来试验适当的扰动,这导致了可能导致模型对扰动的选择过度敏感的问题的粗略分类。
在这里插入图片描述
图1:随着分类器错误分类数量的增加,正常值与异常值之比的统计结果。

受图像异常检测方法的启发[Golan和El-Yaniv,2018],我们提出了一个假设,即错误分类扰动类型的概率越高,异常的概率就越高。换句话说,通过结合增强型识别器,具有较低识别率的样本更可能是异常。我们证明了这一假设的正确性,通过设计一个分类器来识别异常的增广类。如图1所示,我们观察到,随着分类器异常检测错误的数量增加,正常样本的比例减少,而异常样本的比例增加。换句话说,分类器发现更难以对扰动异常进行分类。另一方面,现有的对比学习方法在选择负样本时会调整与正样本和负样本的距离,但忽略了类别信息。这可能导致来自同一类的样本漂移,导致类崩溃[Chuang等人,#20200;,表现不佳。为了解决这个问题,我们将类标签集成到对比学习损失中,从而增强模型表示并提高性能。

为此,本文提出了一种新的基于扰动指导的对比表示学习的时间序列异常检测算法。该方法解决了传统时间序列对比学习中类信息丢失的问题。将图像对比学习中的增广分类概念引入到时间序列数据中,验证了其在异常检测中的可行性。此外,我们设计了一个新的损失函数,以防止在对比学习中常见的类崩溃问题。这些创新的结合使得时间序列数据的异常检测性能有了显著的提高。总之,本文的主要贡献可以概括为:

·提出了一种新的扰动引导对比表示学习的时间序列异常检测(PCRTA)模型。我们的模型利用各种类型的扰动来训练分类网络以生成伪标签。这些伪标签用于对比学习网络中的正样本和负样本的选择。这种方法增强了学习表示的区分性,从而获得更鲁棒的性能。

·为了解决对比学习对特定扰动函数的敏感性和低鲁棒性,我们引入了各种数据扰动技术。此外,我们集成了一个分类器来学习基于扰动的分类并生成伪标签。这种学习过程的增强增强了模型适应不同类型异常的能力,提高了其整体鲁棒性。

·为了解决类崩溃问题,我们利用分类器生成的伪标签。通过结合异常检测的关键见解,我们改进了对比学习中的选择策略,并设计了一种新的对比损失函数。扰动引导对比学习网络导致模型产生更清晰和更具区分力的表示,增强了区分不同类别的能力。

2 Related Work

在本节中,我们简要回顾了时间序列数据异常检测的常用方法以及对比学习在时间序列中的应用。

2.1 Anomaly Detection

异常检测是在各个领域中识别数据中的罕见和异常实例的关键任务。传统的异常检测方法包括基于密度的方法,诸如局部异常因子(LOF)[Breunig等人,2000],基于距离的方法,如K-最近邻(KNN)[Hautamaki等人,2004],以及基于线性模型的方法,如主成分分析(PCA)[Patcha和Park,2007]。一项调查[Gupta等人,2013]总结了时间序列异常检测的传统方法。最近,深度学习已经成为时间序列异常检测的主流方法。深度学习模型利用单类生成模型对输入数据进行编码,对未来数据进行预测,并执行基于对比或特征提取的处理以识别异常。这些方法的核心思想在于通过恢复或预测的原则隐式地对正常模式和行为进行建模。通过设计各种先进的网络架构和新颖的重构/预测学习目标,研究人员成功地提高了时间序列异常检测模型的性能。许多研究都集中在通过利用变分自动编码器来捕获更全面的依赖关系[Li等人,2021年; Su等人,2019]、图神经网络[Deng和Hooi,2021]和Transformer [Tuli等人,2022; Jiehui Xu和Long,2022]。然而,我们的目标是利用对比学习的思想来处理时间序列特征,并提取可以更好地捕获时间模式和区分异常的嵌入。

2.2 Contrastive Learning

近年来,对比学习在有监督和无监督表征学习中得到了广泛的应用。对比学习的核心思想是使对比损失最小化[Hadsell等人,2006],其涉及使正样本对更靠近并使负样本对更远离,以便获得判别空间。在监督学习中,对比学习通常用于深度度量学习[Schroff等人,2015年]的报告。近年来,自监督对比学习在视觉识别任务中取得了很好的效果。SimCLR中使用的传统借口任务,如数据扩充[Chen等人,2020年]和MoCo [He等人,2020年]的项目。近年来,人们对将对比学习应用于时间序列数据的兴趣越来越大[Oord等人,2018年; Eldele等人,2021年;萨纳·托内卡博尼和戈登伯格,2021年]。时间序列对比学习使用多项式逻辑回归来训练特征提取器,以区分时间序列数据中的不同片段[Hyvarinen和Morioka,2016]。然而,对比学习中的一个挑战是正样本和负样本的选择,这可能导致来自相同类的样本被错误地当作负样本,从而导致类崩溃和无效的特征表示。该方法引入了一种新的损失函数,在损失函数中加入了类的信息,减少了类的崩溃,提高了模型的效率。

3 Proposed Framework

在本节中,我们将详细阐述所提出的PCRTA模型,其网络架构如图2所示。

3.1 Notations and Problem Definition

本文研究了D个传感器观测到的时间序列数据集在时间N为 X = ⟨ x 1 , x 2 , ⋯   , x N ⟩ , x t ∈ R D X = \langle x_{1},x_{2},\cdots,x_{N}\rangle ,x_{t} \in \mathbb{R}^{D} X=x1,x2,,xN,xtRD时的时间序列。当D > 1时,数据集X被称为多元时间序列,并且如果D = 1,则数据集被简化为一元时间序列。我们的无监督时间序列异常检测f可以从样本中提取信息性嵌入而不依赖于任何预先存在的标签信息,2000年],即 f : X → R . f : X \to \mathbb{R}. f:XR.。异常评分越高,表示异常的可能性越高。

对于建模时间序列,我们采用在大多数深度时间序列异常检测方法中发现的常见实践[Campos等人,2021年; Su等人,2019年; Tuli等人,2022],其涉及考虑每个观察的局部上下文窗口以对它们的时间依赖性进行建模。具体地说,我们使用长度为l、步幅为r的滑动窗口将训练集转换为一个连续性集合,记为 S = { s 1 , s 1 + r , ⋯   } S = \{s_{1},s_{1+r},\cdots\} S={s1,s1+r,},其中 s t s_t st= ⟨ x t , x t + 1 , ⋯   , x t + l − 1 ⟩ \langle x_{t},x_{t+1},\cdots,x_{t+l-1}\rangle xt,xt+1,,xt+l1。这种方法捕获每个子序列中的时间模式,并为我们的时间序列建模奠定了基础。在推理阶段,测试数据集也使用相同的窗口长度l划分为连续性,滑动步长为1。异常检测模型评估每个子序列的异常级别,并为每个子序列的最后一个时间戳分配异常分数。为了获得异常分数的最终列表,我们将初始的l-1个时间戳填充为零。该过程确保评估每个子序列并为其分配异常分数,从而便于识别时间序列数据中的异常。

3.2 Overall Framework

PCRTA的总体框架如图2所示。我们采用一个时间建模网络来捕捉内在变量之间的时间相关性和相互作用。在比较了各种特征提取方法[Zeng等人,2023],我们选择时间卷积网络(TCN)[Bai等人,2018]作为PCRTA的时间建模模块。与传统的基于RNN的架构相比,TCN利用独特的卷积核,可以更快速,更有效地提取时间相关的信息,从而更有效地表示数据中的时间依赖性,整个表示过程可以表示为RNN(·)。我们设计了一个多分类网络来学习样本增强策略。鉴于这些增强策略的标签是已知的,我们的分类网络在交叉熵损失 L m u l \mathcal{L}_{mul} Lmul的指导下实现了有利的结果。因此,我们推导出伪标签来指导对比学习网络,从而提高学习表示的质量。随后,我们制定了一个对比学习网络。利用从多重分类网络中获得的伪标签,我们选择了阳性和阴性样本。在我们新设计的对比学习损失 L c o n \mathcal{L}_{con} Lcon的指导下,我们的目标是使从TCN中提取的特征对于正样本更接近,而对于负样本更远。这一过程产生了具有增强的辨别能力的表征。损失函数的最终计算如下:

在这里插入图片描述
其中α是用于调整对比学习网络的权重的参数。

3.3 Perturbation Classification Network

PCRTA旨在利用各种扰动技术,使用学习伪标签的概念来增强其鲁棒性。同时,我们从图像异常检测的观点中得到启发[Golan和El-Yaniv,2018]:应用于异常数据的增强应该使多分类器更难识别增强的类别。为了实现这一点,我们将数据扰动δ定义为基于时间序列异常的三种基本类型的定义和特性来修改输入时间序列子序列s的特定操作(即,点异常、上下文异常和集体异常)。这导致了一个新的子序列s′,它包含了时间序列的真正异常行为,并且s和s′保持相同的形状。

在这里插入图片描述

图2:PCRTA的框架。实线和虚线箭头分别表示我们模型中的训练和测试过程,而所提出的扰动引导对比学习模块用蓝色虚线框起来。

· δ ( I , γ ) ( s ) \delta_{(\mathrm{I},\gamma)}\left(s\right) δ(I,γ)(s):通过用全局极值γ随机替换选定的数据值,将数据增强应用于输入子序列s的最后一个观测值,生成具有点异常的新子序列。
· δ ( I I , γ ) ( s ) \delta_{(\mathrm{II},\gamma)}\left(s\right) δ(II,γ)(s):我们通过基于先前k值的平均值用偏移量γ替换输入子序列s的最终观察中的维度来增强数据,生成默认k为10的上下文异常。· δ ( I I I , γ ) ( s ) \delta_{(\mathrm{III},\gamma)}\left(s\right) δ(III,γ)(s):我们通过在输入子序列s的一个片段内随机选择维度并将所选值替换为离群值γ来增强数据。这造成了集体异常。

实际上,上述操作中的每一个都采用两个γ值来模拟两个极端异常。由于时间序列数据被归一化到范围[0,1]的预处理步骤,我们在δI中使用γ =+2,−2,在δII中使用γ =+0.5,−0.5,在δIII中使用γ = 1.0。定义了包含6个数据增广函数和不含增广δ0的函数的池模型,即,
在这里插入图片描述
这六个扰动函数有效地模拟了时间序列数据中存在的真正异常。在增强之后,增强数据被分配从第一类到第六类的标签,表示增强类型,而原始非增强数据被分配类别0的标签。为了使多分类网络学习伪标签,我们利用交叉熵损失函数来训练分类网络:

在这里插入图片描述

其中,N是扩充次数 N a u g + 1 N_{aug}+1 Naug+1,因为非扩充原始数据对应于第一类。

在通过扰动分类网络学习伪标签之后,我们将此类别信息反馈到对比学习网络中。它是在对比学习框架内选择正样本和负样本的基础。

3.4 Perturbation Guiding Contrastive Network

数据的高维度显著影响其分布,导致超椭球形而不是超球形。命题1提供了这方面的证据。在非正态分布的情况下,正负样本的选取是不准确的。因此,我们设计了一个投影网络,将高维数据投影到低维空间。我们执行积极和消极的样本选择上的压缩功能。

第一项提案。设U是D维的 χ 2 \chi^{2} χ2统计量,对于任意正σ,以下不等式成立:
在这里插入图片描述
命题1的证明可以在附录中找到。根据命题1,具有紧凑分布的概率随着向量维数的增加而降低。由于TCN产生的嵌入维数较高,为了解决这个问题,我们开发了一个投影网络\text{I}
,以减少嵌入维数,提高表示能力。
在这里插入图片描述
随后,我们根据分类网络提供的类别信息,选择正样本和负样本。我们计算了同一类 π c \pi_{c} πc内的向量对 z i z_{i} zi z j z_{j} zj之间的归一化点积。

然后,我们选择等式中的前k个归一化点积。在图7中, g k g^{k} gk表示其输入中的前k个值的索引。我们用 Z i + Z_i^{+} Zi+表示 z i z_i zi的正样本集。

在这里插入图片描述
最后,对于向量 z i ∈ π c z_i\in\pi_c ziπc,来自不同类 z n ∉ π c z_{n}\notin\pi_{c} zn/πc的所有向量被视为负样本。这导致了以下对比学习损失函数的构建:

在这里插入图片描述
其中C是类的总数, e x p ( z a T z b / τ ) exp(z_{a}^{T}z_{b}/\tau) exp(zaTzb/τ)是测量 z a   a n d   z b z_{a}\mathrm{~and~}z_{b} za and zb的相似性的函数,并且温度参数τ控制相似性分数的分布。

在扰动引导对比学习网络中,我们使用从分类网络获得的伪标签,而不是使用最初已知的真实标签。这种方法是由我们的核心概念驱动的,即与正常数据相比,增强异常更容易发生错误分类。因此,当分类器的准确度达到更高水平时,选择相同类别内的阳性样本和来自不同类别的阴性样本变得更准确。由于异常样本在模型收敛时被分配到不同类别的趋势,扰动引导对比学习网络驱动正常和异常实例之间的更大分离。这导致提取更有区别的表示,有效地捕捉正常和异常模式之间的区别。

4 Experimental Results

在本节中,我们将首先介绍实验装置。随后,我们将进行一系列实验,以评估模型的有效性,其泛化能力,鲁棒性和消融研究。

4.1 Preliminary

数据集和比较方法。时间序列异常检测采用了表1所示的六个真实的数据集,包括WaQ、DSADS、Epilepsy、ASD、SMD 1和SWaT[Zhang et al.,2022年; Xu等人,2024年]的规定。D表示维数,#anmo(ratio)是测试集中异常和比率的大小,#seqs是每个数据集中时间序列的个数。我们将PCRTA与13种传统和深度学习异常检测方法进行了比较,包括OCSVM [Manevitz和Yousef,2001年]、GOAD [Bergman和Hoshen,2020年]、ECOD [Li等人,2022],LSTM-ED [Mal hotra等人,2016年],Tcn-ED [Garg等人,2021年],DSVDD [Ruff等人,2018],MSCRED [Zhang等人,2019年],Omni [Su等人,2019年],USAD [Audibert等人,2020年]、GDN [Deng和Hooi,2021年]、NeuTraL [Qiu等人,2021年]、TranAD [Tuli等人,2022年]和COUTA [Xu等人,2024年]的规定。因此,上述竞争者列表有效地代表了时间序列异常检测研究领域的最新性能。
在这里插入图片描述

评估指标。根据先前的工作[Audibert等人,2020年; Campos等人,2021年; Su等人,2019年; Tuli等人,2022年; Xu等人,2024]中,我们使用最佳F1评分和精确度-回忆曲线下面积(AUC-PR)。F1 = P r e c ∗ R e c P r e c + R e c \frac{Prec*Rec}{Prec+Rec} Prec+RecPrecRec,其中Prec = = T P T P + F P \frac{TP}{TP+FP} TP+FPTP和Rec = T P T P + F N \frac{TP}{TP+FN} TP+FNTP,并且TP、TN、FP、FN表示真阳性、真阴性、假阳性和假阴性的数目。这些指标适用于不平衡数据,其中最佳F1评分代表最佳情况,AUC-PR代表不太理想条件下的平均情况。我们列举了所有可能的阈值(即,每个时间戳的分数)并计算相应的精确度和召回分数。然后可获得最佳F1,并使用平均精密度评分计算AUC-PR。这些性能评估度量的范围是从0到1,值越大表示性能越好。

实验性设置。WaQ、癫痫、DSADS、ASD、SMD和SWaT数据集在以前的文献中已被广泛用作基准数据集[Lai等人,2021年; Xu等人,2024年; Campos等人,2021年; Deng和Hooi,2021年; Li等人,2021年; Su等人,2019年; Tuli等人,2022年]的规定。对于ASD和SMD,我们使用的步长为1;对于较大的数据集SWaT和WaQ,我们分别使用100和5。对于癫痫和DSADS,它们的原始数据格式是分割的时间序列的集合,因此不需要滑动窗口。在PCRTA中,TCN使用的内核大小为2,默认设置为16个神经单元的单个隐藏层。我们最多训练100个历元的模型,对比网络的权重因子α默认设置为0.2。我们选择k = 5作为使用最近邻选择正样本的参数。所有实验均在工作站上执行,该工作站具有Intel(R)Xeon(R)Gold 6248 R 3.00GHz CPU和具有10 GB RAM的NVIDIA TITAN Xp GPU,运行在Ubuntu 20.04操作系统上。

4.2 Anomaly Detection

我们应用LOF算法来计算从经过良好训练的扰动引导对比学习网络获得的表示的异常分数。对于每个样本si,我们从由6个增强策略和原始表示生成的7个表示中计算平均得分。

在这里插入图片描述
表2:PCRTA及其竞争方法在6个真实世界数据集上的F1评分±标准差和AUC-PR ±标准差。MSCRED在SWaT上内存不足(OOM)。

在这里插入图片描述
其中, z a u g z_{aug} zaug是扩增子的嵌入 Ω ( s i ) \Omega(s_{i}) Ω(si),这在样本的最终异常分数中达到顶点,提供了对样本的异常性的综合评估。

如表2所示,PCRTA在时间序列异常检测中始终优于或匹配其他方法。PCRTA在五个数据集上取得了最好的结果,在一个数据集上取得了第二好的结果,在癫痫数据集上取得了显着的进步:F1评分增加了13%,AUC-PR增加了17%。TranAD利用Transformer和多样化的训练,GDN采用图神经网络,COUTA引入了新的目标和数据扰动。然而,TranAD的复杂性可能会导致在简单数据集上的过拟合。像LSTM-ED和Tcn-ED这样的基本架构表现良好。对于SWaT,由于其正常训练和异常测试数据,倾向于单类模型。相比之下,COUTA擅长噪声数据集,使用引入的异常信息。PCRTA通过将扰动类型类信息和更难检测的异常概念通过增强来超越。

4.3 Visualisation Experiment

在本节中,我们使用t分布随机邻居嵌入(t-SNE)[货车der Maaten和欣顿,2008]来可视化我们的模型在癫痫数据集上学习的表示是否具有区分性。癫痫发作数据集
在这里插入图片描述

图3:癫痫数据集输入窗口的t-SNE和相应信号的可视化。蓝色表示正常,红色表示异常。

(癫痫)是从一个三轴加速度计放置在优势手腕收集。参与者被指示进行四种不同的活动,癫痫发作被定义为异常类别,其他三种活动,步行,跑步和锯,作为正常数据。在图3中,蓝色和红色分别代表正常和异常样本。虽然有一些异常接近正常样本,但大多数异常样本的明显聚类形成在右上角,远离左下角正常样本形成的聚类。

4.4泛化能力

由于该模型能够从各种扰动方法中学习,因此在处理单个数据集内共存的不同类型的异常时,我们表现出更好的鲁棒性。在对时间序列异常进行细粒度分类之后[Lai等人,2021],我们构建了一个包含多种类型异常的合成数据集,并与单类生成模型进行了比较。

在图4中,顶部部分表示合成数据集,而底部部分显示在合成数据集上测试时由不同模型获得的异常分数。OCSVM的性能随着时间的推移而下降,在时间序列数据中积累错误,并导致异常分数增加。COUTA,虽然纳入异常信息,缺乏鲁棒性,未能区分不同的扰动影响,因此有一个小的异常分数增加。这些一类学习模型擅长检测不同的异常,但有些方法显示出波动的分数,使分析变得困难。相比之下,PCRTA擅长于有效地处理扰动类,为异常和正常实例产生高的、稳定的异常分数。

在这里插入图片描述

图4:在合成时间序列数据集中检测不同类型的时间序列异常的性能。

4.5 Ablation Study

我们进行烧蚀实验的两个主要组成部分,我们的模型。我们采用了三种消融变体:用地面真值替换分类网络中的伪标签,冻结分类网络的参数,以及冻结对比网络的参数。这些变体对应于去除伪标签、分类学习损失,如等式3,和对比学习损失作为Eq.8、模型PCRTA及其变体的比较分析表明,PCRTA对来自6个真实世界数据集的26个序列中的大多数序列的优越性可以归因于利用分类网络、对比网络和分类网络指导的对比网络的创新概念。
在这里插入图片描述
表3:拟定方法及其降解模型的消融研究性能,AUC表示AUC-PR。

从表3中,我们可以观察到烧蚀实验的结果。由地面实况引导的对比网络的性能不如PCRTA。伪标签提供了几个优点:1。在我们对阳性和阴性样本的选择策略中,具有大量扰动类型错误分类的样本被认为是异常。伪标签阻止选择异常的表示,而这是使用真实标签无法实现的。2.对于模型训练,在训练过程开始时使用基本事实将导致对比网络中阳性和阴性样本的变化最小,使模型容易提前收敛到局部最优值并阻碍进一步的训练。3.PCRTA的核心思想之一是基于异常中低扰动识别率的假设。因此,需要一个扰动分类网络进行异常选择。

5 Conclusion

在本文中,我们提出了我们的扰动引导对比表示学习时间序列异常检测(PCRTA),它结合了对比学习和分类引导增强的力量,以提高时间序列异常检测的性能。通过对六个真实世界数据集的广泛实验,PCRTA始终优于一系列最先进的竞争对手,证明了其有效性和鲁棒性。在未来,我们可以考虑其他架构来增强模型的性能和实用性。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值