【论文笔记】SimMTM: A Simple Pre-Training Framework for Masked Time-Series Modeling

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

摘要

时间序列分析被广泛应用于各个领域。近年来,为了降低标签费用,使各种任务受益,自我监督式预训练引起了人们的极大兴趣。一种主流范式是 masked 建模,它通过学习基于未 masked 部分重构 masked 内容来成功地预训练深度模型。然而,由于时间序列的语义信息主要包含在时间变化中,随机 masked 部分时间点的标准方法会严重破坏时间序列重要的时间变化,使得重构任务难以指导表示学习。因此,我们提出了SimMTM,一个用于 masked 时间序列建模的简单预训练框架。通过将 masked 建模与流形学习联系起来,SimMTM提出了通过对流形外的多个邻居进行加权聚集来恢复 masked 时间点的方法,该方法通过将多个 masked 序列中损坏但互补的时间变化组合在一起,从而简化了重建任务。SimMTM进一步学习揭示流形的局部结构,有助于掩模建模。在实验上,SimMTM在两个典型的时间序列分析任务:预测和分类中实现了最先进的微调性能,涵盖了域内和跨域设置。

思路提炼

背景

自监督式预训练在其他领域有较好效果,主流使用的是mask建模的方法,希望将自监督式预训练应用到时间序列分析任务中。

其中,mask建模的方法是:将原始序列中的一部分进行mask屏蔽(一般是直接置0),然后训练模型对mask部分的重构能力,希望模型输出能尽可能地恢复原始序列;使用这种方式训练模型的表示学习能力;该类方法,例如MAE等,在CV领域已经取得了较好结果。

问题提出

与图像和语音数据不同,时间序列数据的语义特征包含在时间变化中,直接对时间序列进行随机屏蔽会严重破坏时间信息,导致重构任务难以指导其表示学习

解决办法

依旧采取随机屏蔽+预训练的训练策略,但是对同一个序列进行多次随机屏蔽,结合流形学习的思想,从多个掩码序列中重构原始数据。

在这里插入图片描述

重构的具体实现是,将随机屏蔽序列视为原始时间序列在流形之外的“邻居”,重构过程就是将被屏蔽序列投影回原始序列的流形。

虽然原始时间序列的时间变化在每个随机屏蔽序列中被部分删除,但多个随机屏蔽序列会相互补充,使得重建过程比直接从单个屏蔽序列重建原始序列容易得多。该过程还将对模型进行预训练,以隐式地揭示时间序列流形的局部结构,从而有利于掩模建模和表示学习。

同时,在损失上,除了重构损失外,还提出了一个约束损失来指导基于时间序列流形邻域假设的序列表示学习。

总结思路

SimMTM作为一种简单而有效的时间序列预训练框架,不是直接从未被屏蔽的部分重建被屏蔽的时间点,而是从多个随机被屏蔽的时间序列中恢复原始时间序列

从技术上讲,SimMTM提出了一种用于重建的邻域聚合设计,即基于在序列表示空间中学习到的相似性对时间序列的逐点表示进行聚合。

创新点

  1. 受掩蔽的流形视角的启发,我们提出了一种新的掩蔽时间序列建模任务,即基于流形外的多个掩蔽序列重构流形上的原始序列。

  2. 从技术上讲,我们将SimMTM作为一个简单但有效的预训练框架,它根据在序列表示空间中学习到的相似性聚合点表示以进行重建。

  3. SimMTM始终如一地在典型的时间序列分析任务中实现最先进的微调性能,包括低级预测和高级分类,涵盖内域和跨域设置。

模型框架

SimMTM首先在序列级表示空间中学习多个时间序列之间的相似性,然后基于预先学习的序列级相似性聚合这些时间序列的逐点级表示。

SimMTM的重构过程包括四个模块:随机屏蔽、表示学习、序列级相似性学习和逐点聚合。原文中框架图如下:
在这里插入图片描述

论文中的框架图看起来略有点复杂,在此笔者绘制了一个简易版,便于理解:

  1. 首先对原始序列进行随机屏蔽,得到模型的输入 X
  2. 经过编码器提取特征 Z
  3. 对提取的特征 Z 经过一个投影层得到 S
  4. 在投影空间中对 S 之间计算相似性,得到一个相似性矩阵 R
  5. 根据相似性矩阵 S ,对特征 Z 进行聚合,得到特征Z’
  6. 经过解码器输出对 X 的重构结果X’
    在这里插入图片描述

随机屏蔽

输入 Xi,表示 batch 大小为 N 中的第 i 个样本,Xi是序列长度为L,包含C个变量的时间序列;

下列公式表示为每个 Xi 生成 M 个随机屏蔽序列。其中,r 表示掩码部分,r 是 0-1 之间的小数,即表示被屏蔽的部分在总数据长度中的占比,被屏蔽部分直接置 0;M 是掩码时间序列数目的超参数,即为每个 Xi 序列生成多少个不同的随机屏蔽序列,j 表示 M 个序列中的第 j 个。

公式如下:
在这里插入图片描述

故对 N 个时间序列进行随机屏蔽后,加上原始序列,共可获得 N *(M+1)个序列
在这里插入图片描述

表示学习

将 X 经过编码器获得 Z ,Z 经过投影层获得 S ; Z 是 X 的特征, S 的作用是学习特征之间的相似性
在这里插入图片描述
文章中使用的编码器 Encoder 是 transformer ,投影层是一个简单的 MLP

Z 和 S 在整体框架中的位置如图中红色部分圈出的位置
在这里插入图片描述

序列级相似性学习

利用序列级表示 S 之间的相似性进行加权聚集,即利用时间序列流形的局部结构。
在这里插入图片描述
在这里插入图片描述

R 为序列表示空间中 (N×(M+1)) 个输入样本的成对相似度矩阵,矩阵大小为 (N×(M+1)) × (N×(M+1)) ,相似性用余弦距离来度量。

逐点聚合

基于学习到的序列相似性,对第 i 个原始时间序列的聚合过程为:
在这里插入图片描述

按公式来看,si 表示第 i 个时间序列的序列级表示,对于 si 与 s’ 之间的相似性 和 si 与除 si 之外其他 s 之间相似性 之间的比值,即为 特征 z’ 的聚合权重;将所有 z’ 按权重相加,得到 聚合之后的特征 zi
#-------------------------------------------------------------------------------------------------
此处存在疑问:
对于一个batch大小为N的原始序列来说,经过随机屏蔽后有 N*(M+1) 个输入X,故对应的也会产生 N*(M+1) 个表示S,可以用 sij 进行区分,i 相同则表示来自同一个原始序列,j 则表示不同的随机屏蔽方式产生的序列。

按照公式来说,只对 i 的层次进行区分,相当于是在不同原始序列的表示间计算相似性,并以此作为权重对特征进行加权聚合。

但是, 按照文章意图来说,应该是对具有相同 i 的表示,在 j 的层次下进行区分,相当于对于同一个原始序列的不同表示之间计算相似性;
同时,若按这种方式计算相似性,应该只计算 M 个随机屏蔽序列与未屏蔽的原始序列之间的相似性,然后对 M 个表示进行聚合,得到对原始序列的一个表示的重构。
#-------------------------------------------------------------------------------------------------
最后,经过解码器后,得到重构的原始时间序列,解码器沿着下面的通道维度被实例化为一个简单的MLP层
在这里插入图片描述

训练方式-自监督预训练

除了上述框架外,SimMTM还提出了一种损失函数设计。
一般的mask重构任务,损失函数为重构与原始之间的MSE,此处记为重构损失
在这里插入图片描述

但是,重建过程直接基于序列相似度,如果在序列表示空间中没有明确的约束,则很难保证模型捕获精确的相似性。因此,SimMTM 添加了一个约束损失,利用时间序列流形的邻域假设来校准序列级表示空间 s 的结构。

假设原始时间序列及其屏蔽序列将呈现紧密的表示,并且与 s 中其他序列的表示距离很远。
在这里插入图片描述
通过上述形式化,将流形约束定义为,即每个表示与其同源表示之间的距离越近越好,与其非同源表示的距离越远越好
在这里插入图片描述

最后定义整体损失如下:目标是最小化重构损失和约束损失,同时采用Kendall等人提出的调谐策略,该策略可以根据每个损失的同方差不确定性自适应地调整超参数λ
在这里插入图片描述

实验

实验总体下游任务为预测和分类,两个任务都进行了域内数据集和跨域数据集的实验,跨域任务对encoder进行了微调。
预测任务的网络模型采用vanilla transformer,分类任务的网络模型采用ResNet。

下图是对两个任务中不同模型进行比较,纵坐标的分类任务F1,越大越好,横坐标是预测任务MSE,越小越好;图中其他模型一般只能在一个任务中有较好性能。
在这里插入图片描述

预测

下游任务损失为L2。
域内数据集实验中,基于重构的模型,如TST,比基于对比预训练的模型表现更好;
跨域数据集实验中,SimMTM如果采用随机初始化,没有预训练过程,结果与TST差不多。

域内

在这里插入图片描述

跨域

在这里插入图片描述

分类

分类下游任务损失为交叉熵。
域内数据集实验中Ts2vec、TF-C模型表现较好;TST和SimMTM随机初始化状态时,效果变差,甚至出现负迁移;
跨域数据集实验中SimMTM在 SllepEEG到EMG 上的效果显著提升。

域内

在这里插入图片描述

跨域

在这里插入图片描述

模型性能实验

消融实验

对比损失的加入,对于模型效果有更大的贡献。
在这里插入图片描述

表征分析

CKA差距越小说明模型表征学习能力越强,
在这里插入图片描述

模型通用性

将其他模型更换到SimMTM框架下,效果均得到提升。
在这里插入图片描述

微调数据比例

即使减少微调的数据,SimMTM在所有模型中表现也最佳。
在这里插入图片描述

屏蔽策略

屏蔽比例越大,生成屏蔽序列个数越少,重构任务的难度就越大。但是不是成正比变化。
在这里插入图片描述

微调和线性探测

SimMTM的微调和线性探测都优于从头开始的完全监督学习
在这里插入图片描述

总结

本文提出了SimMTM,一种用于屏蔽时间序列建模的简单预训练框架。SimMTM提出了一种新的掩模建模任务,即从多个相邻的掩模序列中重建原始序列。具体而言,SimMTM基于序列相似性聚合点表示,这些相似性受到时间序列流形上的邻域假设的严格约束。

SimMTM在mask重构的基础上,改变了重构方式,多个同源数据采用不同的屏蔽方式,但是他们在特征空间也应该具有较大的相似性,将这些特征进行聚合得到的特征最接近原始特征,从而更容易实现对原始数据的重构;
实际上,这种操作相当于在对比学习中构造了大量的正样本,SimMTM在损失计算中也引入了对比损失,在计算重构损失的基础上,也增加了对比约束;
上述两种操作使得SimMTM能够更好的学习到数据的特征表示,在预测和分类的下游任务中都有较好表现。

引用\[2\]:NFS 服务器服务无法从以下错误启动 # systemctl status nfs-server.service nfs-server.service - NFS server and services Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; disabled; vendor preset: disabled) Active: inactive (dead) Sep 16 12:41:22 host01 systemd\[1\]: Dependency failed for NFS server and services. Sep 16 12:41:22 host01 systemd\[1\]: Job nfs-server.service/start failed with result 'dependency'. Sep 16 12:42:00 host01 systemd\[1\]: Dependency failed for NFS server and services. Sep 16 12:42:00 host01 systemd\[1\]: Job nfs-server.service/start failed with result 'dependency'. Sep 16 12:44:23 host01 systemd\[1\]: Dependency failed for NFS server and services. Sep 16 12:44:23 host01 systemd\[1\]: Job nfs-server.service/start failed with result 'dependency'. Sep 16 12:48:12 host01 systemd\[1\]: Dependency failed for NFS server and services. >Sep 16 12:48:12 host01 systemd\[1\]: Job nfs-server.service/start failed with result 'dependency'. 引用\[3\]:ubuntu 10.0开启配置nfs 服务service nfs start时出现: Failed to start nfs.service: Unit nfs.service not found. 原因是ubuntu 10.0以上的版本取消了service nfs start。 改成了sudo service nfs-server start 。这样就完成启动了。 在执行sudo service nfs-server status就可以看到 Loaded: loaded (/lib/systemd/system/nfs-server.service; enabled; vendor prese Active: active (exited) since 六 2016-07-09 06:58:33 CST; 4h 22min ago Process: 866 ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS (code=exited, status=0/ Process: 863 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS Main PID: 866 (code=exited, status=0/SUCCESS) CGroup: /system.slice/nfs-server.service 。 问题:Failed to start nfs-server.service: Unit nfs-server.service is masked. 回答: 当出现"Failed to start nfs-server.service: Unit nfs-server.service is masked"错误时,这意味着nfs-server服务被屏蔽了。这可能是由于系统配置或管理员设置的原因。要解决这个问题,可以尝试使用以下命令来解除屏蔽并启动nfs-server服务: sudo systemctl unmask nfs-server.service sudo systemctl start nfs-server.service 这样就可以解除屏蔽并启动nfs-server服务了。如果仍然遇到问题,建议检查系统配置和管理员设置,以确定是否有其他原因导致nfs-server服务无法启动。 #### 引用[.reference_title] - *1* *2* [Job nfs-server.service/start failed with result ‘dependency’](https://blog.csdn.net/fushengbao/article/details/125608379)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [转载 Unit nfs.service not found.](https://blog.csdn.net/delin11/article/details/120980754)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值