现在是2023年11月27日,10:48,今天把这篇论文看了。

论文:Self-supervised Contrastive Representation Learning for Semi-supervised Time-Series Classification

GitHub:https://github.com/emadeldeen24/CA-TCC

TPAMI期刊论文,是CCF-A类的期刊论文,IEEE Transactions on Pattern Analysis and Machine Intelligence (TPAMI)。

摘要

在只有未标记数据或很少标记样本的情况下,学习时间序列表示是一项具有挑战性的任务。最近,对比式自监督学习通过对比数据的不同增强视图,在从无标记数据中提取有用表征方面取得了巨大进步。在这项工作中,我们提出了一个新颖的时间序列表征学习框架--时间和上下文对比(TS-TCC),通过对比学习从无标签数据中学习表征。具体来说,我们提出了针对特定时间序列的弱增强和强增强,并利用它们的视图在提议的时间对比模块中学习稳健的时间关系,此外还通过我们提议的上下文对比模块学习判别表征。此外,我们还对时间序列数据增强选择进行了系统研究,这是对比学习的关键部分。我们还将 TS-TCC 扩展到了半监督学习环境,并提出了 "类别感知 TS-TCC" (CA-TCC),它能从可用的少量标记数据中获益,进一步改进 TS-TCC 学习到的表征。具体来说,我们利用 TS-TCC 产生的稳健伪标签来实现类别感知对比损失。广泛的实验表明,我们提出的框架对所学特征的线性评估与完全监督训练的效果相当。此外,我们的框架在标注数据较少和迁移学习场景中表现出了很高的效率。代码可在 https://github.com/emadeldeen24/CA-TCC 公开获取。

索引词——自监督学习、半监督学习、时间序列分类、时间对比、上下文对比、增强。

1 引言

人们每天都在从物联网、可穿戴设备和机器传感器中收集时间序列数据,这些数据被广泛应用于医疗保健、制造业等领域。[1]. 然而,与图像不同的是,时间序列数据通常不包含人类可识别的模式,无法区分不同的类别,因此无法轻松地为数据分配类别标签。因此,不同的时间序列应用需要训练有素的专家来完成具有挑战性的数据注释/标签任务。因此,与收集到的数据相比,实际应用中很少对时间序列数据进行标注[2]。随着深度学习技术的发展,利用大量标注数据训练基于深度学习的模型以学习有用的表征并避免过拟合变得至关重要。然而,由于上述标注限制,将其应用于时间序列数据变得具有挑战性。

自监督学习利用无标记数据为深度学习模型学习强大的表征,近来备受关注。与在完全标记数据上训练的模型(即监督模型)相比,自监督预训练模型可以提取有效的表征,并在使用一小部分标签进行微调时取得不相上下的性能[3], [4]。最近重生的自监督学习依赖于人工设计的前置任务来学习数据表征。例如,Noroozi 等人将图像分割成较小的片段,对其进行洗牌,然后训练模型对这些片段重新排序,以形成原始图像[3]。其他一些借口任务则为输入样本的不同变化分配伪标签。例如,Gidaris 等人对原始图像进行了多次旋转,并为每个角度分配了一个标签[5]。然后对模型进行训练,以预测图像的旋转角度,以此作为分类任务。

对比学习最近显示出了它比借口任务更强的能力,可以从无标签数据中学习表征。对比学习的优势在于它能通过对比输入样本的不同视图来学习不变表征,而这些视图是通过增强技术生成的[4], [6], [7]。然而,这些基于图像的对比学习方法可能无法很好地应用于时间序列数据,原因如下。首先,时间序列数据与图像不同,图像的特征主要是空间特征,而时间序列数据的特征主要是时间依赖性[8]。因此,将上述技术直接应用于时间序列数据可能无法有效处理数据的时间特征。其次,一些用于图像的增强技术(如色彩失真)一般不能很好地适用于时间序列数据。到目前为止,针对时间序列数据提出的对比学习方法还很少。例如,[9]、[10] 为生物信号开发了对比学习方法。不过,这两种方法是针对特定的临床应用提出的,可能无法推广到其他时间序列数据。

在本文中,我们提出了一种新颖的框架,将对比学习融入自监督和半监督学习中。具体来说,我们提出了一种通过时间和上下文对比(TS-TCC)的时间序列表示学习框架,该框架在完全无标记的数据集上进行训练。我们的 TS-TCC 采用了两种对比学习和增强技术来处理时间序列数据的时间依赖性。我们提出了简单而高效的数据增强技术,它可以适应任何时间序列数据,为输入样本创建两个不同但相关的视图。然后,这两个创新的对比学习模块将使用这些视图。在第一个模块中,我们提出了一个新颖的时间对比模块,通过设计一个艰难的跨视图预测任务来学习稳健的表征。具体来说,在某个时间步,它利用一个增强体过去的潜在特征来预测另一个增强体的未来。这种新颖的操作将迫使模型通过更难的预测任务来学习稳健的表征,以应对不同时间步和增强所带来的任何扰动。在第二个模块中,我们提出了上下文对比,以便在时间对比模块学习到的稳健表征的基础上进一步学习辨别表征。在上下文对比模块中,我们的目标是最大化同一样本不同上下文之间的相似性,同时最小化不同样本上下文之间的相似性。无论下游任务如何,预训练模型都能学习到有关时间序列数据的强大表征。

我们还将 TS-TCC 扩展到了半监督设置中,在这种设置中,只有很少的标注样本可用,因此我们提出了分类感知 TS-TCC (CA-TCC)。具体来说,我们利用少量标记样本对 TS-TCC 编码器进行微调,并将其用于为整个未标记数据生成伪标签。接下来,我们利用伪标签中的类别信息对样本进行有监督的上下文对比,从而最大化具有相同类别标签的样本之间的相似性,同时最小化不同类别样本之间的相似性。

本期刊论文是我们之前工作[11]的扩展版本。主要调整如下: 1) 我们扩展了 TS-TCC 模型,以适应半监督环境,利用可用的少量标签数据来进一步改进学习到的表征。2) 我们更详细地研究了被视为对比学习关键部分的时间序列数据增强。我们还提供了一种系统的方法,用于为时间序列数据选择最佳增强。3) 我们进行了额外的实验来评估我们提出的 CA-TCC,证明了其在半监督环境下学习表征的有效性。总之,这项工作的主要贡献如下。

  • 为时序表示学习开发了一个新颖的对比学习框架,该框架有两个变体。第一个变体(TS-TCC)用于从无标记数据中学习,第二个变体(CA-TCC)用于半监督学习。
  • 我们为对比学习框架中的时间序列数据提供了简单而高效的增强功能,并对其选择进行了广泛的讨论。
  • 我们提出了一个新颖的时间对比模块,通过设计一个艰难的跨视图预测任务,从时间序列数据中学习稳健的表征。此外,我们还提出了一个(有监督的)上下文对比模块,以便在稳健表征的基础上进一步学习判别表征。
  • 我们使用十个真实世界数据集对我们框架的两个变体进行了广泛的实验。实验结果表明,这两个变体都能针对不同场景学习有效的表征。

2 相关工作

2.1 自监督学习

自监督学习最近越来越受到关注,因为它涉及从无标记数据中学习的新问题 [12]、[13]、[14]。自监督学习的最新进展始于在图像上应用借口任务来学习有用的表征。根据目标应用的不同,提出了许多性质各异的借口任务。对于与图像相关的应用,Zhang 等人训练他们的模型为输入的灰度图像着色[15]。Misra 等人提出了基于借口任务的不变表征学习方法,鼓励借口任务和原始图像的表征相似[16]。Zhai 等人开发了基于自监督训练的借口任务,以增强在半监督环境下学习到的表征[17]。

对于视频相关任务,Srivastava 等人提出了不同的任务,如输入序列重建或未来序列预测,以学习视频序列的表征[18]。此外,Wei 等人建议训练模型来检查输入帧序列的顺序是否正确[19]。另一个方向是使用排序作为代理任务来解决回归问题[20],作者在其中开发了一种用于连体网络的反向传播技术,以防止冗余计算。虽然使用代理任务可以改善表征学习,但人们发现它们会限制所学表征的通用性。例如,对图像的不同旋转角度进行分类可能会使模型偏离对物体颜色或方向特征的学习[21]。

另一方面,对比方法旨在从数据的不同增强视图中学习不变表征。不同的方法在训练过程中选择负样本和正样本的方式也不尽相同。SimCLR [4] 将原始图像的增强视图视为正图,而批次中不同图像的所有其他视图则视为负图。这种技术得益于较大的批次规模,可以积累更多的负样本。另一种方法是按照 MoCo [7] 中的建议,在内存库中积累大量负样本。这些样本的嵌入会定期更新为最新的样本。下一个方向是在不需要负样本的情况下使用对比学习。例如,BYOL[22] 通过引导两个神经网络的表征来学习表征,这两个神经网络相互影响、相互学习。SimSiam [23] 支持忽略负样本的想法,仅依靠暹罗网络和停止梯度操作就达到了最先进的性能。

一些方法在半监督设置中部署了对比学习。例如,FixMatch[24] 使用弱增强视图为输入图像生成伪标签,如果伪标签超过置信度阈值,就会对同一输入图像的强增强视图的预测进行惩罚。虽然所有这些方法都成功地改进了视觉数据的表示学习,但对于具有不同属性(如时间依赖性)的时间序列数据来说,它们可能效果不佳。

2.2 时间序列的自监督学习

时间序列的自监督表示学习最近越来越流行。一些方法采用了时间序列数据的前置任务。例如,Saeed 等人设计了一种用于人类活动识别的二元分类借口任务,方法是对数据进行多次转换,并训练模型在原始版本和转换版本之间进行分类[25]。同样,Sarkar 等人提出了 SSL-ECG,通过对数据集应用六种变换作为借口任务来学习心电图表征,并根据变换类型分配伪标签[26]。该模型有望通过对这些变换进行分类来学习有用的数据表示。Saeed 等人也采用了同样的方法,他们设计了八个辅助任务,并从多传感器人类活动数据中学习表征[27]。此外,Aggarwal 等人通过对局部和全局活动模式建模来学习主体不变表征[28]。

受对比学习在视觉应用中取得成功的启发,最近有几项研究利用对比学习来处理时间序列数据。例如,CPC[21] 通过预测潜在空间中的未来来学习表征,并在各种语音识别任务中取得了巨大进步。Banville 等人研究了三个自监督任务,其中有两个前置任务,即相对定位、时间洗牌,还有一个对比任务,即使用 CPC 学习临床脑电图数据的表征[29]。他们发现,通过 CPC 学习到的表征表现最好。这表明对比学习技术通常比借口任务表现更好。Mohsenvand 等人设计了与脑电图相关的增强功能,并将 SimCLR 模型[4]扩展到不同的脑电图临床数据[9]。TS2Vec [30] 提出了两种对比损失,第一种是将增强视图中的时间步拉近,将同一时间序列中的不同时间步拉远,第二种是实例对比。(有空把这篇论文看了)。

有些方法还包含了学习时间序列表征的频域特征。例如,双线性时域-频域融合(BTSF)[31] 在时间序列的时间表示和频率表示的特征嵌入之间应用了迭代双线性融合。同样,TF-C [32] 和 STFNets [33] 通过将同一样本的时域和频域表征相互推近,同时将它们与其他信号的表征分开来学习表征。

现有的方法要么使用时间特征,要么使用全局特征。与此不同的是,我们在跨视图时间和上下文对比模块中同时使用了这两种类型的特征。这些模块依赖于输入数据的不同视图,我们通过特定的时间序列增强来提供这些数据。

2.3 时间序列的半监督学习

在半监督学习中,模型是在部分标注的数据集上训练的,即数据集中的一些样本已被标注,而标注数据集中的所有示例可能很昂贵或很耗时。时间序列半监督学习有不同的方法。

第一种方法是应用通用正则化,如集合和重构。例如,TEBLSTM [34] 应用了基于 LSTM 输出特性的时间集合。它集合了两种损失,即标注数据上的监督损失和基于当前预测与之前集合输出的距离的非监督损失。此外,REG-GAN[35] 使用生成对抗网络(GAN),通过重新生成整个数据的信号,并对标注部分应用监督回归损失来学习表征。

第二种方法是自我训练,即为未标记的样本分配伪标签。例如,SUCCESS [36] 对数据进行聚类,然后根据动态时间扭曲(DTW)距离分配伪标签。此外,SelfMatch [37] 采用高斯噪声信号来指导对同一信号的增强视图的预测。它还利用在输出层获得的知识指导特征提取器的低层区块,从而实现自我蒸馏。最后,SemiTime [38] 将信号分为两部分,即过去和未来。接着,它采用对比损失法将信号的过去推向未来,同时将其与其他信号的未来部分拉开。

3 方法

本节将详细介绍建议框架的各个组成部分。从 TS-TCC 开始,我们首先根据强增强和弱增强对输入数据生成两种不同但相关的视图。然后,我们提出了一个时间对比模块,利用两个自回归模型来探索数据的时间特征。这些模型利用一个视图的过去预测另一个视图的未来,从而完成艰难的跨视图预测任务。通过上下文对比模块,我们进一步最大限度地提高了自回归模型上下文之间的一致性。这些组件如图 1 所示。对于半监督设置,我们提出的 CA-TCC 从 TSTCC 预训练阶段开始,包括另外三个阶段来完成半监督训练,如图 3 所示。在接下来的小节中,我们将详细介绍各个组成部分。

图 1:拟议 TS-TCC 的整体架构。时间对比模块通过艰难的跨视图预测任务学习稳健的时间特征。上下文对比模块通过最大化同一样本上下文之间的相似性,同时最小化其与迷你批次中其他样本的相似性来学习判别特征。

图 3:CA-TCC 半监督训练的四个阶段。在第 1 阶段,TS-TCC 使用完全未标记的数据进行训练。接下来,在第 2 阶段,我们使用可用的少量标签样本对预训练编码器进行微调。然后,在第 3 阶段,我们使用微调后的 TS-TCC 编码器为无标签数据生成伪标签。最后,第 4 阶段包括在半监督训练中部署伪标签数据。

3.1 时间序列数据增强

数据增强是对比学习方法成功的关键部分 [4], [22]。对比学习方法试图最大化同一样本不同视图之间的相似性,同时最小化其与其他样本的相似性。因此,为对比学习设计适当的数据增强是很重要的。通常,对比学习方法会使用同一增强的两种(随机)变体 [4], [9]。具体来说,在给定一个样本 x 的情况下,它们会从同一个增强族 T 中产生两个视图 x1 和 x2,即 x1 ∼ T 和 x2 ∼ T。不过,我们认为,从不同的增强库中生成视图可以提高所学表征的鲁棒性。因此,我们提出了两种不同的增强方法,一种是弱增强,另一种是强增强。

我们的框架使用强增强来实现下一个模块中艰难的跨视图预测任务,这有助于学习有关数据的稳健表征。弱增强的目的是在不影响信号特征或使其形状发生重大变化的情况下,为信号添加一些微小的变化。我们采用这两种增强方式来引入数据变化,从而提高模型的泛化能力,使其在未见过的测试集中表现出色。我们将在第 5.6 节中讨论有关增强选择的更多细节。

形式上,对于每个输入样本 x,我们用 xs 表示其强增强视图,用 xw 表示其弱增强视图,其中 xs ∼ Ts,xw ∼ Tw。然后将这些视图传递给编码器,以提取它们的高维潜在表示。具体来说,编码器采用 3 块卷积结构,如文献[39]中提出的那样。对于输入 x,编码器将 x 映射为高维潜在表示 z = fenc(x)。我们定义 z = [z1, z2, ... zT],其中 T 是总的时间步数,zi ∈ Rd,其中 d 是特征长度。这样,我们就得到了强增强视图的 zs 和弱增强视图的 zw,然后将它们输入时间对比模块。

3.2 时间对比

时间对比模块利用对比损失(contrastive loss),通过自回归模型提取潜在空间中的时间特征。给定潜表征 z,自回归模型 far 将所有 z≤t 汇总为上下文向量 ct = far(z≤t),ct∈Rh,其中 h 是 far 的隐藏维度。然后用上下文向量 ct 预测从 zt+1 到 zt+k 的时间步(1 < k ≤ K)。为了预测未来的时间步长,我们使用一个对数双线性模型来保留输入 xt+k 和 ct 之间的交互信息,即 fk(xt+k,ct)=exp((Wk(ct))Tzt+k),其中 Wk 是一个线性函数,它将 ct 映射回与 z 相同的维度,即 Wk:Rh→d。

在我们的方法中,强增强生成 cs t,弱增强生成 cw t。我们提出了一个艰难的跨视图预测任务,利用强增强 cs t 的上下文来预测弱增强 zw t+k 的未来时间步,反之亦然。对比损失试图最大化预测表示与同一样本真实表示之间的点积,同时最小化与迷你批次中其他样本 Nt,k 之间的点积。因此,我们计算两种损失 Ls TC 和 Lw TC 的方法如下:

我们使用 Transformer 作为自回归模型,因为它效率高、速度快[40]。Transformer 模型的结构如图 2 所示。它主要由多头注意力(MHA)和多层感知器(MLP)模块组成。MLP 模块由两个全连接层组成,中间带有非线性 ReLU 函数和dropout。预归一化残差连接(“Pre-norm” 表示在块的计算之前应用归一化。因此,这是一种在残差连接中提前应用归一化的方法。)可产生更稳定的梯度[41],我们的Transformer采用了这种连接。我们将 L 个相同的层堆叠起来,生成最终特征。受 BERT 模型[42]的启发,我们在输入中添加了一个token c∈ Rh,其状态在输出中充当了代表性上下文向量。Transformer的操作首先是将特征 z≤t 应用于线性投影 WTran 层,该层将特征映射到隐藏维度,即 WTran : Rd→h。然后,线性投影的输出被发送到Transformer,即 z˜ = WTran(z≤t),z˜∈Rh。接下来,我们将上下文向量附加到特征向量 ˜z 中,这样输入特征就变成了 ψ0 = [c;˜z],其中下标 0 表示是第一层的输入。接下来,我们将 ψ0 通过Transformer层,如下式所示:

最后,我们从最终输出中重新连接上下文向量,使 ct = ψ0 L。

图 2:时空对比模块中使用的Transformer模型结构。我们首先将分类标记 c 附加到输入中,然后将其通过不同的 Transformer 模型层。最后,我们将标记从输出修改后的特征中分离出来,并将其用于下一个上下文对比模块。

3.3 上下文对比

我们还提出了一个上下文对比模块,旨在学习更具区分性的表征。该模块首先使用非线性投影头(总体来说,非线性投影头是神经网络结构中的一个部分,用于将网络学到的中间表示映射到最终的输出空间,通常通过非线性操作来增强网络的表达能力。)对上下文进行非线性转换,如文献[4]所述。投影头将上下文映射到应用上下文对比的空间中。

给定一批 N 个输入样本,我们将从每个样本的两个增强视图中得到两个上下文,从而得到 2N 个上下文。对于一个上下文 ci ci+ t,我们将 t 标记为 ci t 的正向样本,该样本来自同一输入的另一个增强视图,因此 (ci t, ci+ t ) 被视为一对正样本。同时,同一批次中来自其他输入的其余 (2N - 2) 个上下文被视为 ci t 的负样本,即 ci t 可以与其负样本形成 (2N-2) 对负样本。因此,我们可以推导出一个上下文对比损失,使样本与其正对样本之间的相似度最大化,同时使其与迷你批次中负样本之间的相似度最小化。因此,最终的表征具有区分性。

公式 6 定义了上下文对比损失函数 LCC。给定一个上下文 ci 正样本 ci+ t,我们将其与 t 的相似度除以其与所有其他 (2N - 1) 个样本(包括正样本对和 (2N - 2) 个负样本对)的相似度,从而对损失进行归一化处理。

其中,sim(u, v) = uTv/∥u∥v∥ 表示经过 ℓ2 归一化处理的 u 和 v 之间的点积(即余弦相似度),1[m̸=i] ∈ {0, 1} 是一个指标函数,如果 m ̸= i 则赋值为 1,τ 是一个温度参数。

总体自监督损失是两个时间对比损失和上下文对比损失的组合,具体如下。

其中,λ1 和 λ2 是固定的标量超参数,表示每种损失的相对权重。

3.4 分类感知 TS-TCC

我们提出了框架的第二个变体,称为分类感知 TS-TCC (CA-TCC),用于半监督环境。在这一变体中,我们试图利用可用的少量标记数据来进一步改进 TS-TCC 学习到的表示。如图 3 所示,我们的半监督学习框架分为四个阶段。在第 1 阶段,我们从随机初始化的编码器开始,并将其用于 TS-TCC 自监督预训练。在第 2 阶段,我们使用少量标注数据对预训练编码器进行微调。在第 3 阶段,我们使用微调后的编码器为整个无标签数据集创建伪标签。最后,在第 4 阶段,我们使用伪标签训练类感知半监督框架,即 CA-TCC。

在分类感知半监督训练中,我们用监督上下文对比模块取代了无监督上下文对比模块。该模块利用伪标签数据来训练有监督的对比损失[43]。这种损失将具有相同类别标签的样本视为正对,而将不同类别的样本视为负对。这与无监督对比损失不同,无监督对比损失只从样本的增强视图中形成正对,如图 4 所示。这种差异会影响模型的性能,因为无监督对比损失可能会将具有相似类别的样本视为负对。

图 4:(a)无监督对比与(b)有监督对比。无监督对比仅从样本的增强视图中形成正对,这可能会降低性能。相比之下,有监督对比会考虑数据的语义,并在具有相同类别标签的所有样本中形成正对。在 CA-TCC 中,我们使用伪标签数据在半监督训练中应用监督对比。

从形式上看,假设数据集由 N 个标注样本 {xk, yk}k=1...N 组成,那么在应用增强后,数据集将由 2N 个样本组成,即 {ˆxl, ˆyl}l=1...2N ,其中 ˆx2k 和 ˆx2k-1 是 xk 的两个视图,类似地,yk = ˆy2k = ˆy2k-1。同时假设 i∈ I ≡ {1 . 2N} 表示任意增强样本的索引,且 A(i) ≡ I \ {i},则有监督的上下文对比损失可表示为:

其中,P(i) 是与批次中的样本 ˆxi 具有相同类别的所有样本的索引集合,因此对于任意 p∈P(i) 的 (i, p) 是一对正样本对。|P(i)| 是 P(i) 的基数。因此,总体损失可表示为:

其中,λ3 和 λ4 是固定的标量超参数,表示每种损失的相对权重。

4 实验设置

4.1 数据集

为了全面评估我们提出的模型,我们采用了十个公开的真实世界数据集,这些数据集涵盖了不同的时间序列应用。此外,我们还在故障诊断数据集上研究了所学特征的可移植性。

4.1.1 人类活动识别

我们采用了 UCI HAR 数据集1 [44],其中包含 30 名受试者在进行 6 种活动(即行走、上楼、下楼、站立、坐和躺下)时的传感器读数。数据由安装在用户腰部的三星 Galaxy S2 设备采集,采样率为 50 Hz。

4.1.2 睡眠阶段分类

我们采用了 Sleep-EDF 数据集2 [45],其中包括 20 名受试者的整夜多导睡眠图(PSG)睡眠记录。其中,每个记录包含两个脑电图(EEG)通道,即 Fpz-Cz 和 Pz-Oz,采样率为 100 Hz。在这项工作中,我们沿用了之前的研究[46]、[47],使用了单个脑电图通道(即 Fpz-Cz)。睡眠阶段分类是指将输入的脑电信号分为五个等级: 清醒(W)、非快速眼动(N1、N2、N3)和快速眼动(REM)。

4.1.3 癫痫发作预测

癫痫发作识别数据集3 [48]由 500 名受试者的脑电图记录组成,每个受试者的大脑活动记录时间为 23.6 秒。原始数据集标注了五个类别,但由于其中四个类别不包括癫痫发作,我们将它们合并为一个类别,并将其视为二元分类问题。

4.1.4 故障诊断(FD)

故障诊断数据集4 [49]是从轴承机器在四种不同工作条件下的传感器读数中收集的。每个工况都可视为一个单独的域,因为它具有不同于其他工况(如转速和负载扭矩)的特性 [50]。每个域有三个类别:两个故障类别(即内部故障和外部故障)和一个健康类别。我们仅使用该数据集进行迁移性实验,并展示我们的方法在迁移学习场景中的有效性。

4.1.5 UCR 数据库数据集

我们在实验中使用了七个 UCR 数据集5 。所选数据集适合我们的少量标签实验,并且满足在训练阶段有 1%的样本允许所有类别出现的条件。这些数据集包括 Wafer、FordA、FordB、PhalangesOutlinesCorrect (POC)、ProximalPhalanxOutlineCorrect (PPOC)、StarLightCurves 和 ElectricDevices。我们在补充材料中对每个数据集进行了详细讨论。

表 1 总结了每个数据集的统计细节,即训练样本数(# Train)和测试样本数(# Test)、样本长度、传感器通道数(# Channel)和类别数(# Class)。

表 1: 实验中使用的 10 个数据集的简要说明。对于 FD 数据集,我们只提及一种工作条件的设置,因为四种工作条件的设置是相同的。

4.2 实现细节

我们将数据分为 60%、20% 和 20%,分别用于训练、验证和测试,并考虑对睡眠-EDF 数据集进行按主题划分,以避免过度拟合。我们用 5 个不同的种子重复了 5 次实验,并用平均值和标准偏差报告了实验结果。预训练和下游任务进行了 40 个epochs,因为我们注意到随着训练的深入,性能并没有提高。我们使用的批次大小为 128(在标签数据较少的实验中,由于数据大小可能小于 128,因此批次大小有所减小)。我们使用了学习率为 3e-4、权重衰减为 3e-4、β1 = 0.9 和 β2 = 0.99 的 Adam 优化器。在强增强中,我们将片段数 M 设为 MEp=12,MEDF=20,其他数据集的片段数 M=10(见第 5.6 节),而在弱增强中,我们将缩放比设为 2。 在 TS-TCC 中,我们将 λ1 设为 1,而当λ2 在 1 左右时,我们取得了良好的性能。对于 CA-TCC,我们设置了 λ3 = 0.01 和 λ4 = 0.7(见第 5.5 节)。我们调整了 h∈ {32, 50, 64, 100, 128, 200, 256},并为所有其他数据集设置了 hEDF=64 和 h=100。我们还将其 dropout 设为 0.1。在上下文对比中,我们设置 τ = 0.2。最后,我们使用 PyTorch 1.7 构建了模型,并在 NVIDIA GeForce RTX 2080 Ti GPU 上进行了训练。

5 实验结果

我们进行了多项实验来证明我们提出的 TS-TCC 和 CA-TCC 模型的有效性。我们使用两个指标来衡量性能,即准确率和宏观平均 F1 分数 (MF1),以更好地验证在不平衡数据集上的性能。这些指标定义如下。

其中 Precisioni = TPi+FPi ,Recalli = TPi+FNi TPi TPi。TPi、FPi 和 FNi 分别表示第 i 个类别的 "真阳性"、"假阳性 "和 "假阴性",N 是样本总数,K 是数据集中的类别数。虽然这两个等式的结果预计会在 0 到 1 的范围内,但我们在本文中还是以百分比的形式进行了报告。

5.1 自监督 TS-TCC 模型的结果

5.1.1 与基线方法的比较

我们将提议的 TS-TCC 与以下基线方法进行比较。

  1) 随机初始化:在冻结和随机初始化编码器的基础上训练线性分类器,这代表下限。

  2) 监督:对编码器和分类器进行监督训练。

  3) SSL-ECG [26]:一种基于辅助的自监督学习算法,以信号变换分类为基础。

  4) CPC [21]:一种对比式自监督学习方法,可预测嵌入空间中的未来时间步。 

  5) SimCLR [4]:一种对比式自监督学习方法,基于数据增强部署无监督对比性损失。

值得注意的是,由于 SimCLR 最初是为图像而设计的,因此我们使用特定于时间序列的增强数据对其进行预训练。

为了评估 SSL-ECG、CPC、SimCLR 和 TS-TCC 的性能,我们首先使用完全未标记的数据对它们进行预训练,然后使用部分标记数据来评估它们的性能。我们采用标准的线性评估方案 [4]、[21],即在冻结的自监督预训练编码器模型上训练一个线性分类器(单个全连接层)。

表 2 显示了我们的方法与基线方法的线性评估结果,分别使用了 1% 和 5% 的标注数据。结果表明,在所有 10 个数据集中,TS-TCC 在 1%和 5%标签场景下都取得了最佳的整体性能。具体来说,TS-TCC 在六个数据集上表现最佳,在两个数据集上表现第二,仅以微弱优势落后于最佳方法。这表明我们提出的跨视图预测任务可以有效改善各种时间序列数据集的表示学习。值得注意的是,对比方法(如 CPC、SimCLR 和我们的 TS-TCC)通常比基于借口的方法(即 SSL-ECG)取得更好的结果,这反映了对比方法学习到的不变特征的强大功能。此外,CPC 显示出比 SimCLR 更好的结果,在一个数据集上是最好的,在五个数据集上是第二好的。这凸显了学习时间序列数据中的时间依赖性对于更好地进行自监督表征学习的重要性,CPC 和 TS-TCC 实现了这一点。

表 2: 使用 1% 和 5% 标签对 SELF-SUPERVISED 预训练模型进行微调的结果。每行的最佳结果以粗体表示,次佳结果以下划线表示。

5.1.2 不同标签预算下的性能

我们使用训练数据中随机选择的 1%、5%、10%、50% 和 75% 的实例对预训练模型进行微调,以此考察 TS-TCC 在不同标签比例下的性能。图 5 显示了微调后的 TS-TCC 以及上述设置下的监督训练在三个数据集上的结果。由于 Sleep-EDF 数据集存在不平衡性,我们使用 MF1 对性能进行了评估。其中,TS-TCC 微调(即图 5 中的红色曲线)意味着我们使用少量标记样本对预训练编码器进行微调。

我们观察到,在有限的标注数据下,监督训练的效果很差,而我们的 TS-TCC 微调效果明显优于监督训练。例如,在只有 1% 标记数据的情况下,TSTCC 微调仍能在 HAR 和癫痫数据集上分别取得 69.5% 和 89.2% 的成绩,而在相同数据集上,监督训练的成绩分别为 47.6% 和 74.8%。此外,在三个数据集中,经过微调的 TS-TCC 只需 10%的标注数据,就能达到与 100%标注数据的监督训练相当的性能,这证明了它在不同半监督设置下的有效性。

如图 5 所示,经过微调的 TS-TCC 能够在只有少量标注数据的情况下取得令人印象深刻的性能。因此,TSTCC有望在图3中生成高质量的伪标签,这促使我们提出了变体CA-TCC。

图 5:监督训练与 TS-TCC 微调在三个数据集上的比较,这三个数据集的 MF1 分数不尽相同。

5.2 半监督 CA-TCC 模型的结果

5.2.1 与基准方法的比较

为了检验 CA-TCC 在半监督环境中的有效性,我们将其与以下半监督学习基准方法进行了比较。

  1) Mean-Teacher [51]:它由两个模型组成。第一个是学生模型,也就是基本的常规模型。第二个是教师模型,即在训练步骤中使用指数移动平均法(EMA)对学生模型权重进行平均。

  2) DivideMix [52]:它摒弃了训练中可能存在噪声的标签,并将其作为无标签数据加以利用,以正则化模型,防止过拟合。

  3) SemiTime [38]:它通过将信号分割成过去未来对,然后将一个样本的过去与另一个样本的两个未来分割进行对比,来学习未标记数据中的时间关系。

  4) FixMatch [24]:它为信号的弱增强视图生成伪标签,并在弱增强视图超过置信度阈值时,用它为强增强视图生成伪标签。

值得注意的是,这四种基线都会对样本的标注部分进行交叉熵损失训练。此外,对于 FixMatch,我们采用了我们提出的弱增强和强增强方法进行训练。

表 4 比较了 CA-TCC 与半监督基线在 10 个不同数据集上的性能。总体而言,我们的 CA-TCC 在 10 个数据集上的平均 F1 分数超过了表现第二好的半监督基线的平均 F1 分数,在 1%和 5%的标签中分别为 3.8% 和 4.9%。具体来说,我们的 CA-TCC 在七个数据集中排名第一,在另外两个数据集中排名第二。我们的 CA-TCC 在不同数据集和标签预算中始终保持优异的性能,这证明了它在半监督设置中最大限度地利用标签数据的有效性。

表 4: 使用 1%和 5%标签的不同半监督基线的结果。每行的最佳结果以粗体表示,次佳结果以下划线表示。

5.2.2 CA-TCC 模型分析

我们将讨论 CA-TCC 性能提高的各个方面。具体来说,我们认为 CA-TCC 性能的提高主要归功于两个因素。首先是 TS-TCC 在第一阶段学习到的有效表征,它可以生成高质量的伪标签。表 2 显示了这一点,TS-TCC 的表现优于其他自监督学习基线。因此,我们预计经过微调的 TS-TCC 编码器在用于生成伪标签时应该更胜一筹。第二个因素是 CA-TCC 中的监督对比损失,它使用伪标签数据在对比损失中包含更多的正对。不过,我们的 CA-TCC 架构灵活,可以在不同阶段预测不同的模型。接下来,我们将尝试验证上述因素并支持我们的结论。

5.2.2.1 伪标签的质量: 为了研究伪标签的影响,我们比较了各基线生成的伪标签的质量。具体来说,我们用 SSL-ECG、SimCLR 和 CPC 替换了 TS-TCC(第 1 阶段)。然后,针对每种基线,我们对编码器进行微调,并用它生成伪标签(第 2 和第 3 阶段),然后进行半监督训练。图 6 显示了生成的伪标签(在第 3 阶段生成)与真实标签相比的准确性。我们发现,TS-TCC 生成的伪标签比其他基线生成的伪标签更准确。此外,表 5 报告了不同基线(在第 1 阶段部署)的性能,同时固定了 CA-TCC(在第 4 阶段),用于两个不同规模的数据集,即 HAR 和 Sleep-EDF。我们发现,在两个阶段中使用 TS-TCC 都能获得最佳性能,这支持了我们的结论,也证明了性能提高的第一个原因。

图 6:应用于 HAR 和 Sleep-EDF 数据集的不同自我监督学习方法生成的伪标签的准确性。第 2 阶段的微调以 1%的标签进行。

表 5: 我们框架中第一和第二预训练阶段的不同组合。第一阶段的预训练是完全无监督的,而第二阶段则是类别感知的(TS-TCC 或 SimCLR),并通过对 1%的标签进行微调生成伪标签。

 5.2.2.2 有监督对比损失的效果: 在本实验中,我们比较了半监督训练(第 4 阶段)中使用有监督对比损失和无监督对比损失时的性能。有监督对比损失将具有相同类别标签的样本视为正对,将来自不同类别的样本视为负对。相比之下,无监督对比损失只从样本的增强视图中形成正对,而迷你批次中的所有其他样本都被视为负对。这种差异会影响模型的性能,因为无监督对比损失可能会将具有相似类别的样本视为负对。(没看懂这句话。)

图 7 比较了无监督对比损失和有监督对比损失在 HAR 和 Sleep-EDF 数据集上的准确率和 F1 分数。结果表明,有监督的对比度损失包含了更多的正对,因此在这两个数据集上的性能和表征学习效果都有所提高。

图 7:半监督训练(第 4 阶段)中有监督对比损失和无监督对比损失的性能对比。

5.2.2.3 不同的 CA-TCC 模型结构: 在本节中,我们将评估第 1 阶段和第 4 阶段中不同自监督学习算法组合的性能。具体来说,我们在第 1 阶段使用了不同的自监督算法,而在第 4 阶段,我们只部署了两个可以使用监督对比损失的基线,即 SimCLR 和 TS-TCC。实验在 HAR 和 Sleep-EDF 数据集上进行,使用了 1% 的标签。

表 5 中显示的结果表明,在第 1 阶段使用任何基线进行半监督训练时,使用类别感知的 TS-TCC 在这两个数据集上的表现始终优于类别感知的 SimCLR。TSTCC 之所以能取得如此优异的成绩,是因为它既能学习时间序列数据中的时间关系,又能从监督对比中获益,而不像类感知 SimCLR 只通过正负对对比来学习。

总之,我们的框架非常灵活,可以在不同的训练阶段使用不同的模型。不过,我们选择只使用 TS-TCC,因为它是基线中表现最好的自监督学习模型,而且能够在半监督设置中处理类感知训练。

5.3 迁移学习实验

我们通过设计一个迁移学习实验来进一步检验所学特征的可迁移性。我们使用故障诊断(FD)数据集进行迁移学习设置下的评估。回顾一下,FD 数据集有四个工作条件,被视为四个域(表示为域 A、B、C 和 D)。在此,我们在一个条件(即源域)的数据上训练模型,并在另一个条件(即目标域)的数据上测试模型。我们在源域上采用了三种训练方案,即 (1) 监督训练、(2) TS-TCC 微调和 (3) CATCC 微调。在 TS-TCC 和 CA-TCC 微调中,我们使用源域中的标注数据对预训练编码器进行微调。

表 3 显示了三种训练方案在 12 个跨域场景下的性能。显然,在 12 个跨域场景中的 8 个场景中,我们预训练的 TS-TCC 模型始终优于监督预训练。 同样,在每个源域中只有 1% 的标签用于训练的情况下,我们发现 CA-TCC 模型在 12 个跨域场景中的 9 个场景中都优于监督预训练。我们发现,TS-TCC 模型在 8 个获胜场景中的 7 个场景(D→B 场景除外)至少能实现 ∼7% 的改进。同样,CA-TCC 模型在 9 个获胜方案中的 7 个方案中至少提高了 8%。总体而言,我们提出的两种方法在准确率方面分别比监督训练提高了 4% 和 6%。

表 3:在故障诊断数据集上进行的跨域迁移学习实验。域 A、B、C 和 D 代表四种工作条件。对于监督训练,我们在源域上进行训练,然后直接在目标域上进行测试。对于 TS-TCC,我们使用未标记的源域数据对模型进行预训练,然后使用少量标签对模型进行微调,最后在目标域上进行测试。CA-TCC 也是如此,只是我们在训练中加入了 1% 的标签数据。结果按准确率报告。最佳结果用粗体表示,次佳结果用下划线表示。

5.4 消融研究

我们研究了所提出的 CA-TCC 模型中每个组成部分的有效性。具体来说,我们将得出不同的模型变体,并进行如下比较。首先,我们在不进行跨视图预测任务的情况下训练时间对比(TC)模块,其中每个分支预测同一增强视图的未来时间步。这一变体被称为 "仅 TC"。其次,我们在训练 TC 模块时增加了跨视图预测任务,称为 "TC + X-Aug"。第三,我们训练建议的 TS-TCC 模型,即 "TC + X-Aug + CC"。最后,我们训练建议的 CA-TCC 模型,即 "TC + X-Aug + SCC"。我们还研究了使用单一增强系列对 TS-TCC 和 CA-TCC 性能的影响。具体而言,对于输入 x,我们使用相同的增强类型生成两个不同的视图 x1 和 x2,即在使用弱增强或强增强时,x1 ∼ Tw 和 x2 ∼ Tw。我们以准确率和宏观 F1 分数(整个实验中仅占 5%)来显示线性评估结果。

表 6 显示了对三个数据集的消融研究。显然,所提出的跨视图预测任务生成了稳健的特征,因此在 HAR 数据集上提高了 6% 以上的准确率,在 SleepEDF 和癫痫数据集上提高了 2%。此外,上下文对比模块也进一步提高了性能,因为它有助于提高特征的区分度。通过在 CA-TCC 中使用有监督的上下文对比,性能得到了进一步提高,这证明了考虑来自同一类别的更多正样本以生成更具区分性特征的重要性。通过研究增强对 TS-TCC 的影响,我们发现从相同的增强类型中生成不同的视图对 HAR 和 Sleep-EDF 数据集没有帮助。对于这些复杂的数据集,仅使用弱增强可能无法完成艰难的跨视图预测任务,导致结果与 "仅 TC "变体接近。与之相对应的是,只使用强增强会使模型在测试时偏离对原始数据的识别。然而,在不太复杂的癫痫数据集上,只使用一个增强项仍能达到相当的性能。对于 CA-TCC,我们发现它的性能一直优于 TS-TCC,这表明它能有效地利用现有的少量标记样本来改进表征。例如,我们发现在 HAR 和 Sleep-EDF 数据集中,CA-TCC 高度改善了仅使用弱增强或强增强的性能。

表 6: 对 TS-TCC 和 CA-TCC 模型中不同成分效果的消融研究。我们还显示了使用两种弱增强或两种强增强对其性能的影响。很明显,使用弱增强和强增强的组合能产生最佳性能。这些结果是在三个数据集上对 5% 的标注数据进行线性评估实验后得出的。

5.5 敏感性分析

我们对 HAR 数据集进行了敏感性分析,研究了五个参数,即时间对比模块中预测的未来时间步数 K、公式 7 中的λ1 和 λ2,以及公式 10 中的λ3 和 λ4。具体来说,我们使用全标签线性评估实验来评估性能。图 8a 显示了 K 对 TS-TCC 和 CA-TCC 整体性能的影响,其中 x 轴为 K/d 百分比,d 为特征长度。显然,增加预测未来时间步的百分比可以提高性能。但是,百分比越大,用于训练自回归模型的过去数据量就越少,因此会对性能造成损害。我们观察到,预测总特征长度的 40% 效果最好,因此我们在实验中将 K 设为 d×40%。对于我们框架的两个变体,可以得出相同的结论。图 8b 显示了 TS-TCC(公式 7)中的 λ1 和 λ2 分别在 0.001 和 1000 之间变化的结果。我们首先固定 λ1 = 1,然后改变 λ2 的值。我们发现,当 λ2 ≈ 1 时,我们的模型性能良好,其中 λ2 = 0.7 时模型性能最佳。因此,我们固定 λ2 = 0.7,并调整 λ1 的值,如图 8b 所示,我们发现当 λ1 = 1 时,我们的模型达到了最佳性能。我们还发现,当 λ1 < 10 时,我们的模型对其值不太敏感,而对λ2 的不同值则更加敏感。我们还以类似的方式在相同的范围内对 CA-TCC(公式 10)中的 λ3 和 λ4 的值进行了灵敏度分析,如图 8c 所示。我们还使用 1%的标签生成伪标签。因此,我们选择了 λ3 = 0.01 和 λ4 = 0.7 的值。

图 8:HAR 数据集的灵敏度分析实验。图(a)显示了改变预测的未来时间步百分比的效果,我们注意到这两种变体的性能非常接近。图 (b) 显示了 λ1 和 λ2 的不同组合对 TS-TCC 性能的影响。最后,图 (c) 显示了 λ3 和 λ4 的不同组合对 CA-TCC 性能的影响。

5.6 增强选择

增强的正确选择对对比学习技术至关重要,因为对比方法对增强的选择非常敏感[4]。许多研究表明,对于图像数据来说,将多种数据增强操作组合在一起可以获得更好的性能[4],[43]。然而,如何选择合适的增强操作来很好地匹配时间序列数据,目前还没有太多研究,仍是一个悬而未决的问题 [53](又是一个可以填的坑)。在此,我们旨在研究如何为对比学习问题选择合适的增强操作。

我们将弱增强定义为对原始信号的形状进行有限改变的增强,如图 9 第二行所示。弱增强的例子包括缩放和时移。另一方面,强增强在保留部分时间信息的情况下,对信号的形状进行了强烈的扰动,如置换。如图 9 第三行所示。置换包括将信号分成 M 个块,并改变它们的顺序。值得注意的是,一些增强措施,如抖动(即添加随机噪声),根据所添加的噪声水平,既可被视为强增强措施,也可被视为弱增强措施。为了证明我们提出的增强技术的合理性,我们对 TS-TCC 中每个视图应用几种不同数据增强技术的影响进行了系统研究(图 1)。结果见表 7。

我们首先只对一个视图应用弱增强,即缩放,而不对另一个视图应用任何增强,结果如表 7 所示,准确率仅为 46.12%。然而,通过将抖动与缩放结合起来,我们可以观察到性能有了很大的提高。同时,我们也只应用了强增强,而没有对其他视图进行增强。在这种情况下,准确率为 62.07%,远高于只应用弱增强的准确率。此外,我们注意到,在排列中添加抖动可以进一步提高准确率,达到 72.35%。

我们还测试了在使用强增强的同时使用另一种对信号特性影响不大的弱增强。我们可以发现,使用时移作为弱增强可以获得相对较好的性能,即 71.57% 的准确率。同样,我们可以发现,在时移的基础上添加抖动会进一步提高准确率,达到 74.69%。用缩放代替时移也能获得类似的结果。此外,如表 6 所示,只对两个视图应用弱增强或强增强会导致性能下降。此时,我们发现对一个视图采用弱增强,而对其他视图采用强增强的效果最好,准确率达到 77.58%。如图 9 所示,弱增强对原始信号形状的改变有限,这有助于模型在测试数据上的良好表现。

通过观察图 9 中三个不同样本在信号幅度和采样率方面的不同特征,我们得出结论:选择适当的增强参数(如抖动和缩放比)会因数据集而异。因此,参数选择的范围在很大程度上取决于每个时间序列数据的特征。因此,我们建议将信号归一化作为框架中的预处理步骤,以改进参数选择。例如,在弱增强中对信号进行归一化处理后,增加的抖动值应小于在强增强中增加的抖动值。在实验中,我们发现最佳做法是在 0 和 1 之间对数据进行归一化,并将弱抖动设置在 [0, 0.1] 范围内,将强抖动设置在 [0.1, 1] 范围内。同样,对于任何时间序列信号的弱增强,缩放比为 2 就足够了。

同样,对于强增强,正确选择块数 M 也很重要,在序列较长的时间序列数据中,M 的值应大于序列较短的数据。我们发现,在三个时间序列数据集中,选择总特征大小的 40% 能达到最佳性能(见第 5.5 节)。

图 9:每个采用的数据集经过规范化处理后的样本及其弱增强视图和强增强视图。第一行为原始样本,第二行为弱增强视图,第三行为强增强视图。

表 7: 对 TS-TCC 线性评估性能的研究,在使用不同的弱增强和强增强时,使用 5% 的标注 HAR 数据。

6 结论

本文提出了两种时间序列数据表示学习框架。第一个框架,即 TS-TCC,用于从无标注数据中进行自监督学习;第二个框架,即 CA-TCC,用于在只有少量标注样本时进行半监督学习。我们特别提出了针对特定时间序列的弱增强和强增强,并对这些增强的选择进行了系统研究。我们利用这些增强技术,通过我们在 TS-TCC 中提出的时间和上下文对比模块来学习变换不变表征。通过在 TS-TCC 学习到的表征基础上训练带有少量标签的线性分类器,TS-TCC 取得了与完全监督训练相当的性能。此外,TS-TCC 在不同的标签预算下都有明显改善,10% 的标签数据可以达到接近全标签数据监督训练的性能。我们将 TS-TCC 扩展到了半监督设置,并提出了 CA-TCC,它利用微调后的 TS-TCC 模型生成的伪标签来训练分类感知的监督对比度损失。在不同的数据集上进行测试时,CA-TCC 只需使用 1% 的标记数据,就能进一步提高性能。此外,这两种变体都能提高表征在现实世界迁移学习场景中的可迁移性。

现在是2023年11月28日,17:31,摸鱼摸完了,还有个补充材料没看,晚一会再看。

现在是2023年11月29日,18:01,彻底又过了一遍,看的差不多了,再瞅瞅今晚就把PPT做出来。(PS: 感觉我好像发烧了。)

CA-TCC: 半监督时间序列分类的自监督对比表征学习《Self-supervised Contrastive Representation Learning for Semi-supervised Time-Series Classification》(时间序列、时序表征、时间和上下文对比、对比学习、自监督学习、半监督学习、TS-TCC的扩展版)的更多相关文章

  1. Python自然语言处理笔记【一】文本分类之监督式分类

    一.分类问题 分类是为了给那些已经给定的输入选择正确的标签. 在基本的分类任务中,每个输入都被认为与其他的输入是隔离的.每个类别的标签集是预先定义好的(只有把类别划分好了,才能给输入划分类别). 分类 ...

  2. C-Lodop的https扩展版,火狐下添加例外

    LODOP综合版里的c-lodop是标准版,没有https和广域网打印功能,如果使用了标准版,调试JS的时候会提示,,loaded over HTTPS,,,the content must be s ...

  3. SCI、SSCI、EI、北大中文核心期刊、CSCD、CSSC、SCD、CSSCI 扩展版、计算机软件著作权

    https://zhidao.baidu.com/question/308484724.html SCI(科学引文索引).EI(工程索引).ISTP(科技会议录索引)是世界著名的三大科技文献检索系统, ...

  4. 监督学习&非监督学习

    监督学习 1 - 3 - Supervised Learning  在监督学习中,数据集中的每个例子,算法将预测得到例子的""正确答案"",像房子的价格,或者溜 ...

  5. Python自然语言处理笔记【二】文本分类之监督式分类的细节问题

    一.选择正确的特征 1.建立分类器的工作中如何选择相关特征,并且为其编码来表示这些特征是首要问题. 2.特征提取,要避免过拟合或者欠拟合 过拟合,是提供的特征太多,使得算法高度依赖训练数据的特性,而对 ...

  6. 用PC浏览器模拟手机浏览器(一):无扩展版

    想浏览手机版,打开对应网址却跳转到PC版?怎么办? 下面咱们来说下在只是安装了浏览器,无需其他安装操作的情况下来怎么用PC浏览器模拟手机浏览器,然后访问手机站点. 浏览器众多,IE系列的咱就不考虑了, ...

  7. Time-series Storage Layer Time Series Databases 时间序列

    w 关于时间序列数据库的思考-CSDN.NET  http://www.csdn.net/article/2015-07-13/2825192  存储和处理时间序列数据(“Time Series Da ...

  8. 关于查询扩展版ESI高被引论文的说明

    https://yunpan.cn/ckk5RFV5Emvee 访问密码 e3f7

  9. 在线的代码托管平台 coding.net ===中国扩展版github

    coding.net 是国内新兴的一个项目管理平台,功能主要包括:代码托管.在线运行环境.监控代码质量,兼有一定的社交功能. 在线运行环境支持Java.Ruby.Node.js.PHP.Python. ...

  10. substr扩展版:支持中文字符串截取

    function d_substr($str, $start=0, $length, $charset="utf-8", $suffix=true) { if(function_e ...

随机推荐

  1. redis-sort排序

    sort命令可以对列表(lpush rpush).集合(sadd srem).有序集合(zadd)进行排序 1.复习一下三种数据结构(1)列表 lpush  key val1 val2 val3 .. ...

  2. [oeasy]python0083_[趣味拓展]字体样式_正常_加亮_变暗_控制序列

    字体样式 回忆上次内容 上次了解了 一个新的转义模式 \033 逃逸控制字符 esc   esc 让输出 退出 标准输出流 进行 控制信息的设置 可以 清屏 也可以 设置光标输出的位置     还能做 ...

  3. [oeasy]python0016_编码_encode_编号_字节_计算机

    ​ 编码(encode) 回忆上次内容 上次找到了字符和字节状态之间的映射对应关系 字符对应着二进制字节 二进制字节也对应着字符 这种字节状态是用2位16进制数来表示的 hex(n)可以把数字转化为 ...

  4. MiniAuth 一个轻量 ASP.NET Core Identity Web 后台管理中间插件

    MiniAuth 一个轻量 ASP.NET Core Identity Web 后台管理中间插件 「一行代码」为「新.旧项目」 添加 Identity 系统跟用户.权限管理网页后台系统 开箱即用,避免 ...

  5. OpenGL book note

    OpenGL Shading language 4.0vertex shader geometry shader: 格式解释 https://blog.csdn.net/hankern/article ...

  6. java开发环境安装IDEA+jdk1.8

    一. 需要得安装包 (1)IDEA破解版.zip (2)jdk1.8.0_25.7z 获取方式(免费): (1)       登录-注册:http://resources.kittytiger.cn/ ...

  7. 【MongoDB】Re02 文档CRUD

    三.文档操作(行记录) 不管comment集合是否存在,直接在comment集合中创建一份文档 > db.comment.insert({"articleid":" ...

  8. 【XML】Extensible Markup Language 可扩展标记语言

    Extensible Markup Language 可扩展标记语言[XML] 视频资料参考自:https://www.bilibili.com/video/BV1B441117Lu?p=186 其他 ...

  9. 【Uni-App】底部栏踩坑

    一.Page.json一定要注册这个页面 Uni-App通过page.json找到,解析不到这个页面文件是没用的 二.配置tabBar属性 "tabBar":{ "col ...

  10. 【Redis】02 Redis 搭建与操作

    Redis的安装及启动停止 官网地址: https://redis.io/download 使用wget命令下载redis wget 下载地址 下载: [root@VM-0-7-centos ~]# ...