[论文分享]TimeMAE:解耦掩码自编码器时间序列的自监督表示

news2024/11/24 22:29:33

在这里插入图片描述

论文题目:TimeMAE: Self-Supervised Representations of Time Series with Decoupled Masked Autoencoders

论文地址:https://arxiv.org/abs/2303.00320

代码地址:https://github.com/Mingyue-Cheng/TimeMAE

1 摘要

利用自监督预训练增强基于深度学习的时间序列模型的表达能力在时间序列分类中越来越流行。尽管已经投入了大量的努力来开发时间序列数据的自监督模型,但我们认为目前的方法还不足以学习最佳的时间序列表示,因为在稀疏的点方向输入单元上只有单向编码。在这项工作中,我们提出了TimeMAE,这是一种新的自监督范式,用于学习基于变压器网络的可转移时间序列表示。TimeMAE的独特之处在于通过窗口切片分割将每个时间序列处理成一系列不重叠的子序列,然后对局部子序列的语义单元进行随机屏蔽策略。这样一个简单而有效的设置可以帮助我们实现一石三鸟的目标,即:(1)使用双向编码方案学习时间序列的丰富上下文表示;(2)增加基本语义单位的信息密度;(3)利用变压器网络对时间序列进行高效编码。然而,在这样一种新的公式化建模范式上执行重构任务是一件非常重要的事情。

为了解决新注入的掩码嵌入所带来的差异问题,我们设计了一种解耦的自编码器架构,该架构分别使用两个不同的编码器模块学习可见(未掩码)位置和掩码位置的表示

此外,我们构建了两类信息目标来完成相应的托辞任务。一种方法是创建一个标记器模块,该模块为每个掩码区域分配一个码字,从而允许有效地完成掩码字分类(MCC)任务。另一种是采用连体网络结构对每个屏蔽输入单元生成目标表示,目的是进行屏蔽表示回归(MRR)优化。经过全面的预训练,我们的模型可以有效地学习可转移的时间序列表示,从而有利于时间序列的分类。我们在五个基准数据集上进行了大量实验,以验证TimeMAE的有效性。实验结果表明,TimeMAE能够显著超越以往的竞争基线。此外,我们还通过迁移学习实验证明了学习表征的普遍性。为了我们结果的可重复性,我们公开了我们的实验代码,以促进时间序列的自监督表示:https://github.com/Mingyue-Cheng/TimeMAE。

2 背景

2.1 Transformer

Transformer 在 NLP 和 CV 领域被广泛应用,但是 Transformer 进行时间序列分类可能无法获得令人满意的结果。部分原因为:注释数据有限,因为 Transformer 架构严重依赖于大量的训练标签。虽然先进的传感器设备使得收集时间序列数据变得非常容易,但在一些现实场景中,获得大量准确的带注释的时间序列数据是耗时的,容易出错的,甚至是不可行的。

2.2 自监督学习

这一困难激发了一系列致力于挖掘未标记时间序列数据的工作。自监督学习已经成为从未标记数据中学习可转移模型参数的一种有吸引力的方法,在语言和视觉领域取得了巨大成功。该方法的基本方案是首先获得预训练模型,根据原始未标记数据构建的自监督训练信号,通过制定借口任务进行优化。然后,通过表征特征或完全微调的方式,将预训练好的模型作为目标任务模型的一部分。

目前的研究主要遵循重构和判别两种范式。重建方法的思想试图通过依赖于自编码器来恢复完整的输入。例如,TimeNet首先利用编码器将时间序列转换为低维向量,然后利用解码器基于递归神经网络重构原始时间序列。另一种代表性的重构方法是TST,其主要思想是通过基于变压器架构的去噪自编码器来恢复这些被屏蔽的时间序列点。然而,重构优化是在逐点水平上建模的,导致非常昂贵的计算消耗和有限的可泛化性。

判别法的计算量较少,其主要解决方法是将正例拉到一起,将负例推到一边,即对比学习的范式。这些方法的一个共同的基本主题是,它们都使用数据增强策略学习表征,然后使用连体网络架构最大化正例的相似性。关键的工作是通过各种负抽样策略求解平凡常数解。

例如,在T-Loss中,同时使用了基于时间的三重损耗负采样。TNC利用时间序列信号的局部平滑性,将子序列邻域视为正例,将非邻域视为负例。TS-TCC使用点级和实例级对比优化目标来对齐相应的表示。TS2Vec的显著特点是在多个尺度上分层地进行对比优化。

尽管它们的有效性和普遍性,但不变性假设可能并不总是适用于现实世界的场景。此外,它会在制定数据增强策略时带来过多的归纳偏差,并在负抽样中产生额外的偏差。这些方法本质上是采用单向编码器的方案来学习时间序列的表示,这在很大程度上限制了上下文表示的提取。

2.3 掩码自编码器

掩码自编码器可以很好地克服上述限制,其主要原理是将掩码式损坏的输入编码到潜在空间,然后通过编码器和解码器恢复原始输入。但是将成熟的用于语言方面的模型用于时间序列,泛化性能较差,推测原因在于忽略了时间序列的性质。

首先,与语言数据不同,时间序列是具有时间冗余的自然序列信号,即每个时间步可以很容易地从相邻点推断出来。

其次,由于时间序列中的判别模式通常以子序列的形式出现,每个单点值只能携带非常稀疏的语义信息。

最后,由于采用掩蔽策略,也会导致自监督预训练与目标任务优化之间的差异。也就是说,一定比例的位置被掩码嵌入取代,而这些人工符号在微调阶段通常是不存在的。

3 本文方法

提出了一种新的掩膜自编码器架构,称为TimeMAE,用于学习基于变压器网络的可转移时间序列表示。具体来说,我们建议使用窗口切片操作将每个时间序列拆分为一系列不重叠的子序列,而不是单独对每个时间步进行建模。该策略不仅提高了掩码语义单元的信息密度,而且由于序列长度较短,大大节省了计算成本和内存消耗。在窗口切片之后,我们对这些重新定义的语义单元执行屏蔽操作,目标是对时间序列表示进行双向编码。特别地,我们发现具有非常高的60%比例的简单随机屏蔽策略与时间序列的最优表示匹配得很好。

然而,这种窗口切片操作和屏蔽策略也容易带来一些挑战。因此,为了解决被屏蔽位置引起的差异,我们设计了一种解耦的自编码器架构,其中可见(未被屏蔽)和被屏蔽区域的上下文表示分别由两个不同的编码器模块提取。为了完成恢复任务,我们形式化了两个借口任务来指导预训练过程。一种是掩码字分类(MCC)任务,即为每个掩码区域分配自己的离散码字,这是由另外设计的标记器模块产生的。另一种是掩蔽表示回归(MRR)任务,旨在将掩蔽位置的预测表示与提取的目标表示对齐。

在这里插入图片描述

4 创新点

  • 提出了一个概念简单但非常有效的时间序列表示自监督范式,该范式将基本语义元素从点粒度提升到局部子序列粒度,并同时促进从单向到双向的上下文信息提取

  • 提出了一个端到端解耦的时间序列表示自编码器架构,其中(1)我们解耦了屏蔽和可见输入的学习,以消除屏蔽策略引起的差异问题;(2)基于可见输入,形式化了分类(MCC)和回归(MRR)任务

  • 我们在五个公开可用的数据集上进行了广泛的实验,以验证TimeMAE的有效性。实验结果很明显验证了新提出的自监督范式和解耦自编码器结构的有效性。

5 整体框架

5.1 模型结构

  1. 首先,将输入序列投影到潜在表示中,然后采用掩蔽策略将整个输入分为可见(未掩蔽)输入和掩蔽子序列。

  2. 然后,采用解耦的自编码器架构来学习两个对应编码器的可见位置和掩码位置的表示。

    2.1 在编码器层面,我们使用一组普通的变压器编码器块来提取可见输入的上下文表示,同时利用基于交叉注意的变压器编码器网络的几层来学习屏蔽位置的表示。在解码器级别,利用两种新构建的目标信号,通过基于可见输入预测所有缺失部分来执行重建任务

    2.2 添加了一个标记器模块,为每个掩码区域分配自己的码字,从而可以训练码字分类任务。采用连体网络架构生成连续的目标表示信号,旨在执行目标表示回归任务

在这里插入图片描述

5.2 特征编码

5.2.1 窗口切分策略

逐点建模限制了自监督学习能力:相邻点之间存在冗余,每个掩蔽点可以很容易地从相邻点中推断出来,而不需要太大的挑战;重建过程中,预训练的编码器只能携带有限的信息。

本文利用时间序列的局部模式属性,允许子序列作为基本建模元素,而不是逐点输入。因此,每个时间序列可以被处理成一系列子序列单元,其中每个局部子序列区域保留了更丰富的语义信息,可以保证重构任务的挑战性。

使用切片窗口操作将原始时间序列分割成连续的非重叠子序列,执行零填充操作以确保固定的序列长度,确保可见区域不包含有关重建区域的信息,数据被切分为多个 patch 。

在对 patch 进行建模之前,我们需要通过特征编码器将每个元素编码为潜在表示。在这里,我们使用一维卷积层来提取跨通道的局部模式特征。需要注意的是,不同的子系列在特征编码器层共享相同的参数

5.2.2 掩蔽策略

采用随机掩蔽策略来形成损坏的输入。这意味着在构造自监督信号时,每个子序列单元被屏蔽的概率是相同的,这种策略有利于保证在重构优化过程中充分提高每个输入位置的表示质量,对每个预训练epoch的随机时间序列进行动态掩码,以进一步增加训练信号的多样性。

除了随机掩蔽操作外,在 TimeMAE 中还保留较高的掩蔽比。这是因为掩蔽比在决定恢复任务是否具有足够的挑战性以帮助编码器携带更多信息方面起着至关重要的作用。一般来说,较高的掩蔽比意味着依赖于这些可见邻近区域的恢复任务更难解决。

窗口切片和掩蔽策略都对时间序列输入不可知,这不会像对比学习中的数据增强那样带来太多的归纳偏置。

5.3 时间序列表征学习

TimeMAE 设计的关键是使用两个不同的编码器模块来分别学习可见位置和掩码位置的表示。这种解耦设置有利于缓解预训练优化和微调训练之间额外掩蔽嵌入所造成的差异问题。

5.3.1 可见位置表示

在 TimeMAE 中,采用由多头注意层和前馈网络层组成的普通Transformer架构来学习输入在可见区域的上下文表示。

在这种架构下,每个输入单元的表示可以通过自注意计算机制获得所有其他位置的语义关系。窗口切片操作在很大程度上缓解了利用自关注架构进行长序列输入的瓶颈。

Transformer 最后一层的输出表示可见位置的全局上下文表示。与以前的工作不同,我们只将可见区域的表示馈送到编码器网络中,同时去除被屏蔽位置的表示。这样就不需要使用掩码嵌入来训练编码器网络,从而很大程度上缓解了因掩码令牌输入而产生的预训练和微调任务之间的差异。

5.3.2 掩蔽位置表示

为了获得被屏蔽输入单元的表示,进一步用交叉注意替换普通 Transformer 中的自注意,形成解耦编码器模块,它表示可见输入和被屏蔽输入之间的表示学习解耦。

具体来说,我们将可见位置表示发送到解耦编码器中,以便表示屏蔽位置的输入单元。在掩码位置的嵌入被替换为一个新初始化的向量,同时保持相应的位置嵌入不变。在解耦编码器的表示学习过程中,我们将屏蔽位置的表示视为查询嵌入,同时将可见位置的转换嵌入视为输入,以帮助形成键和值。形式上,掩码查询的模型参数对于所有掩码查询都是相同的。可见键和值的投影参数也与可见输入共享。解耦编码器的输出掩码位置变换后的上下文表示。

解耦模块仅对掩码位置的嵌入进行预测,同时保持可见位置的嵌入未更新。主要原因是我们希望这样的操作可以帮助缓解后通的不符问题。通过这种分割操作,可见输入的表示角色仅由之前的编码器负责。同时,解耦编码器主要关注掩码位置的表示。此外,解耦模块的另一个优点是防止解码器预测层对可见位置进行表示学习,从而使编码器模块可以携带更多有意义的信息。

5.4 损失定义

计算损失的过程可以看作完成两个任务的过程:回归任务和分类任务

5.4.1 掩码字分类-分类任务

通过窗口切片操作,将每个时间序列重新表述为子序列序列,可以表现出更丰富的语义。受积量化的启发,用一种新的离散视图来表示这种重新表述的级数,即为每个局部子级数分配自己的“码字”。然后,这些指定的码字作为缺失部件的替代监督信号。

目前大多数的产品量化方法,其主要思想是基于聚类运算,用由聚类索引组成的短码对每个密集向量进行编码,其中所有索引构成码本词汇。虽然它的近似误差很低,但它实际上是一个两阶段的方法,即独立地分配聚类索引来提取学习到的特征。码本的表示能力可能与从变压器编码器和解耦网络中提取的特征不兼容。

这种不兼容性将直接影响自监督训练的性能。因此,本文开发了一个标记器模块,以端到端的方式将掩码位置的连续嵌入转换为离散的码字,我们将这种重构任务命名为掩码字分类(MCC)

假设标记器是一个码本矩阵,其关键思想是通过相似性计算为每个子序列分配最接近的码字。使用内积来估计标记器中的相关分数,因为可以很容易地防止范数倒数引起的梯度爆炸,也可以减轻解码器能力过强对下游任务的影响。通过这种方式,每个局部子序列都可以分配自己的离散码字,表示固有的时间模式。将码字分配给每个输入单元后,将嵌入矩阵传递给解码器层,得到码字预测分布p,从而进行MCC任务,采用交叉熵损失计算分类任务损失。

在这里插入图片描述

其中,q 表示码字分配中最大选择得到的 one-hot 编码。方程中的优化目标等于在给定屏蔽输入嵌入的情况下,最大化正确码字的对数似然。然而,据报道,这种码字最大选择算子容易导致两个方面的问题:(1)容易导致崩溃结果,即只选择很少比例的码字;(2)使上式的优化损失不可微,使得反向传播算法不能应用于梯度计算。

为了解决这些问题,我们通过调和softmax和先验分布相结合来放宽最大值。采用Gumbel先验分布放宽softmax,用概率分布的近似抽样代替了最大值的选择,从而大大缓解了崩溃问题。选择第k个码字的概率可以描述为

在这里插入图片描述

为了解决不可微问题,我们遵循直通式估计器(Straight-Through Estimator, STE)的技巧,通过重写bj来模拟梯度更新,将梯度不变地传递到码本矩阵的嵌入空间,即解决了不可微问题。

5.4.2 掩码表示回归-回归任务

对在潜在表示空间中直接执行回归优化感兴趣。我们将这种任务称为掩模表示回归(MRR)优化

使用 siamese 网络架构,典型的对比优化不同,MRR任务在训练过程中没有利用负面实例

目标编码器模块,与 普通 Transformer 保持相同的超参数设置。为了便于理解,我们将普通Transformer 和解耦Transformer 的组合命名为在线编码器,其中生成对齐表示。依靠这种连体网络架构,目标编码器和在线编码器可以分别产生屏蔽子序列表示的不同视图。因此,对齐两个不同视图的相应表示,自然形成MRR任务的目标。采用均方误差(MSE)损失来形成具体的优化目标。

在这里插入图片描述

然而,由于在 siamese 网络架构中省略了负例,因此很容易产生崩溃解。为了防止模型崩溃的结果,我们可以遵循两个网络不同更新的规则:执行一个随机优化步骤,只最小化在线编码器的参数,同时以动量移动平均的方式更新目标编码器

5.4.3 多任务合并

在预训练阶段,TimeMAE以多任务的方式进行训练,将MCC和MRR任务结合在一起。

准确地说,预训练模型的整体自监督优化目标可以写成

在这里插入图片描述

其中α, β是调谐的超参数,控制两个损失的权值。

随机梯度优化结合小批量训练算法可以优化上述联合损失。将掩码令牌建模和目标表示对齐任务耦合在一起,可以使预训练模型在目标下游任务中获得更好的泛化性能。通过联合自监督优化,可以有效地学习可转移的预训练模型,从而有利于目标任务。

5 实验

5.1 实验设置

数据集:

在五个公开可用的数据集上进行了实验,包括人类活动识别(HAR)、PhonemeSpectra (PS)、ArabicDigits (AD)、Uwave和Epilepsy。这五个数据集涵盖了广泛的变化:不同的通道数量、不同的时间序列长度、不同的采样率、不同的场景和不同类型的时间序列信号。

在这里插入图片描述

对比方法:

FineZero(vanilla Transformer),TST, TNC, TS-TCC, TS2Vec

FineZero+:用新设计的窗口切片策略代替训练编码器中的逐点输入处理

微调方式:

FineLast - 线性评估:前一种方式意味着冻结预训练编码器的参数,而根据目标任务的标签只调整新初始化的分类器层

FineAll - 微调评估:预训练的编码器和新初始化的分类器层的参数在没有任何冻结操作的情况下进行了调整。

5.2 实验结果

5.2.1 一对一的预训练评估

FineAll的结果会比fineLast的结果更好。作者认为FineAll的评估可以强迫整个模型参数适应于目标任务。

在大多数情况下,与其他基线相比,TimeMAE实现了实质性的性能改进。特别是在HAR和PS数据集上,取得结果较好

稀疏基本语义单元在时间序列处理中的逐点方式。这样的论点也可以从FineZero和FineZero+的比较结果中得到证明。

在这里插入图片描述

5.2.2 迁移学习评价

自监督预训练是通过只使用一个数据,然后分别微调多个不同的目标数据集来完成的。

在五个数据集中,HAR数据集的示例数量最多。因此,在HAR数据集上执行自监督预训练,并在剩下的四个数据集(包括PS、AD、Uwave和Epilepsy)上分别微调训练良好的模型。

one-to-many的方式比one-to-one的效果差,这也是合理的.

在这里插入图片描述

5.2.3 用不同比例的训练集进行微调

预训练模型最有价值的特征之一是在处理标签稀疏场景时具有更强的泛化能力。我们通过不同训练集比例{3%,5%,10%,25%,50%,75%,100%},来研究TimeMAE模型的有效性。

当使用较低比例的训练数据时,性能会大幅下降。

与随机初始化模型相比,TimeMAE可以获得更好的分类性能,特别是在Epilepsy数据集中。

在这里插入图片描述

5.2.4 模型尺寸的可扩展性分析

通过缩放预训练编码器的尺度或更长时间的训练可以训练出更强的泛化模型。

更大的模型尺寸和更长的预训练时间确实可以进一步在HAR和Epilepsy数据集上产生更优的表征和更好的泛化能力。相比之下,较大的模型在PS数据集上获得了显著的性能增益。

这可能是因为与其他两个数据集相比,PS数据集上的预训练集更少。毕竟,更大的模型需要与更多的训练集匹配,才能满足网络的表达能力。

在这里插入图片描述

5.2.5 预训练集的变比例分析

随着预训练集的增加,所提出的模型是否会出现饱和现象。如果预训练方法遇到这样的饱和,那么随着训练集的增加,它将无法为自监督学习带来有意义的性能。

在两个不同版本的训练集(100%,70%)上对HAR数据集进行了广泛的实验,以微调预训练模型,分别命名为case1和case2。

随着预训练集的增加,目标任务的分类结果可以得到进一步的改善,特别是对于线性评价方式的指标。这样的结果对于实际应用是有意义的,因为收集无监督时间序列数据的成本要低得多,因为省去了领域专家的注释工作。

在这里插入图片描述

5.2.6 掩蔽策略研究

研究了窗口切片大小和掩蔽比对表示泛化的影响。前一个因素表示基本语义元素中涉及多少语义。后一个因素意味着恢复任务的挑战性程度。

在HAR数据集上,TimeMAE模型对掩蔽比更敏感,反映了数据集之间的巨大差异。

在这里插入图片描述

5.2.7 消融实验

联合利用两个借口任务可以迫使编码器在目标任务上达到更优的泛化性能。

当丢弃解耦设置时,目标任务的分类性能会显著下降,这表明解耦在可见集和屏蔽集上的表示的重要性。

主要原因:带有自监督优化的预训练编码器涉及掩码嵌入,而这些嵌入通常在微调阶段不存在。因此,它容易在自监督预训练和微调阶段之间产生很大的差异,从而严重影响编码器的表示能力。

在这里插入图片描述

5.2.8 可视化

(a)提供了随机初始化编码器衍生的特征的可视化,(b)描述了未经预训练增强的监督训练后的特征可视化,©和(d)显示了TimeMAE中冻结预训练编码器和微调编码器提取特征的可视化结果。

从调整后的TimeMAE和FineZero+中可以很好地分离提取的特征,微调后的TimeMAE分离效果较好。

在这里插入图片描述

5.2.9 端到端微调评估

TimeMAE进行预训练在准确性和收敛速度方面大大优于随机初始化基线

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mqPQf7iA-1685625297619)(C:\Users\zhou\AppData\Roaming\Typora\typora-user-images\image-20230601210856656.png)]

6 总结

TimeMAE 技术点:

1、宏观层面,采用两种任务结合,模拟了分类任务和回归任务

2、具体操作上,采用切分patch、随机mask、动量编码器、解耦自编码器、CodeBook等操作

展望:

1、跨域的迁移学习

2、预测和异常检测任务

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/599561.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Flume和Kafka的组合使用

一.安装Kafka 1.1下载安装包 通过百度网盘分享的文件:复制链接打开「百度网盘APP 即可获取」 链接:https://pan.baidu.com/s/1vC6Di3Pml6k1KMbnK0OE1Q?pwdhuan 提取码:huan 也可以访问官网,下载kafka2.4.0的安装文件 1.2解…

Hadoop3.1.3安装(单机、伪分布)

系列文章目录 Ubuntu常见基本问题 Hadoop3.1.3安装(单机、伪分布) Hadoop集群搭建 文章目录 系列文章目录一、环境1、创建hadoop用户 二、更新apt三、安装SSH、配置SSH无密码登陆四、安装Java环境五、安装 Hadoop3.1.3六、Hadoop单机配置(非分布式)七、…

chatgpt赋能python:Python为什么被吹得这么神?

Python为什么被吹得这么神? Python是一个开源、跨平台的高级编程语言,由Guido van Rossum于1989年在荷兰创造。Python在近几年因其方便易用、高效稳定和丰富的生态体系而备受欢迎。Python被广泛应用于数据科学、人工智能、机器学习、Web开发、自动化测试…

启动虚拟机并安装Linux系统

我们刚刚新建的虚拟机相当于一个裸机,还没有安装操作系统在里面,下面我们来看一下怎么进行Linux系统的安装。 在VMware Workstation工具的主界面选择虚拟机Spark01,单击鼠标右键在弹出的菜单中选择“设置”打开“虚拟机设置”对话框。如下图…

程序设计综合实习(C语言):学生成绩文件管理

一、目的 1.掌握文件指针的概念和运用 2.掌握文件的相关操作:打开、读、写、关闭 3.掌握文件的定位操作 二、实习环境 Visual Stdio 2022 三、实习内容与步骤 1.定义一个结构体数组,存放10个学生的学号&a…

ABB Drive Composer Pro 2.8.1 Crack

Drive Composer 是 ABB 通用架构驱动器的启动和维护工具。该工具用于查看和设置驱动器参数,以及监控和调整过程性能。 Drive Composer入门版提供了设置参数、基本监控、从 PC 对驱动器进行本地控制以及事件记录器处理等基本功能。 Drive Composer pro是成熟的调试和…

蓝桥杯ABC组 数论知识合集

Note Of Note 同余方程中是可以正常进行分数的约分和去分母的 e x g c d exgcd exgcd 在使用时要保证 a , b a,b a,b 都是非负数 a a a 与 b b b 互质不代表 a , b a,b a,b 都为质数( 4 4 4 和 5 5 5 互质,但是 4 4 4 不是质数)两个相邻…

第3章“程序的机器级表示”:控制

文章目录 3.6 控制3.6.1 条件码3.6.2 访问条件码3.6.3 跳转指令及其编码3.6.4 翻译条件分支3.6.5 循环do-while 循环while循环for循环 3.6.6 switch 语句 3.6 控制 截止目前,考虑了 访问数据和 操作数据 的方法。程序执行的另一个很重要的部分就是控制被执行操作的…

Maven高级5-私服

1. 简介 一台独立的服务器,用于解决团队内部的资源共享与资源同步问题(模拟了中央服务器); https://help.sonatype.com/repomanager3/download 命令行启动服务器 在nexus.exe目录(bin目录)下启动cmd&#…

【认知提升思维篇】之 反刍思维--恶性思考的根源

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:普本…

代码随想录算法训练营第五十一天 | 力扣 309.最佳买卖股票时机含冷冻期, 714.买卖股票的最佳时机含手续费

309.最佳买卖股票时机含冷冻期 题目 309. 最佳买卖股票时机含冷冻期 给定一个整数数组prices,其中第 prices[i] 表示第 i 天的股票价格 。​ 设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一…

Vulnhub | 实战靶场渗透测试 - PRIME: 1

0x00 免责声明 本文仅限于学习讨论与技术知识的分享,不得违反当地国家的法律法规。对于传播、利用文章中提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,本文作者不为此承担任何责任,一旦造成后果请自行承担…

“本草”大模型开源,ChatGPT时代,连AI私人医生都出现了?

大家好,我是千与千寻,也可以叫我千寻,今天给大家分享的ChatGPT新应用项目,是ChatGPT模型在医学领域的应用,什么,医学领域? 是的,没错,是医学领域的ChatGPT应用,我们都知道ChatGPT是OpenAI开源的一个智能对话式引擎,今天给大家分享的项目叫“本草”。 “本草”模型是…

IIC协议与OLED

1.认识OLED 1、OLED概述: OLED(Organic Light-Emitting Diode,有机发光二极管)是一种显示技术,利用有机材料的发光特性来产生光。OLED显示器由一系列有机材料层组成,当电流通过时,这些材料会发…

【性能调优】真实体验 “系统调用是重开销”

实践背景是开发云原生背景下的指纹识别插件,主要针对的是镜像、容器等云时代的软件资产。 信息安全语境下的 指纹识别 指的是定位软件的特征,如名称、版本号、开源许可证等,就像指纹是人的独特生物凭证,这些特征是软件的独特电子凭…

六一儿童节 全网最全的微服务+Outh2套餐,你确定不来试一试?(入门到精通,附源码)满足你的味蕾需要(二)

咱们废话不多说,直接开干!!! 目录 一、项目目录 二、Token 三、授权服务器oauth 1.pom 2.application 3.OauthApp启动类 4.DiyUserDetails 5.MyUserDetailService 6.KeyPairController 7.TokenConfig 8.WebSecurityCo…

LNMP架构

LNMP架构 一、LNMP架构原理二、LNMP部署1、安装 Nginx 服务1.安装依赖包2.创建运行用户3.编译安装4.优化路径5.添加 Nginx 系统服务 2、安装 MySQL 服务1.安装Mysql环境依赖包2.创建运行用户3.编译安装4.修改mysql 配置文件5.更改mysql安装目录和配置文件的属主属组6.设置路径环…

电子模块|压力传感器模块HX711---硬件介绍

电子模块|压力传感器模块HX711---硬件介绍与C51&&STM32驱动 实物照片模块简介模块特点 硬件模拟输入供电电源时钟选择串口通讯复位和断电HX711相关部分的 PCB 设计 实物照片 模块简介 HX711是一款专为高精度称重传感器而设计的24位A/D转换器芯片。与同类型其它芯片相比…

后端接口调式工具

后端接口调式工具 目录概述需求: 设计思路实现思路分析1.Postman2.Swagger 文档测试工具3.Sniff 文档测试工具4.APIpost 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardne…

【SCADA】启动KingSCADA运行系统,提示加载报警库服务失败?

大家好,我是雷工! 今天启动KingSCADA时,发现无法运行,提示“加载 报警库服务 失败”,现将问题排查及解决问题的过程记录如下。 一、问题描述: 1、提示如下图: 2、信息窗口提示: …