时序特征提取论文解读|TSLANet: 重新思考用于时间序列表示学习的Transformers

论文题目:TSLANet: Rethinking Transformers for Time Series Representation Learning

论文地址:https://arxiv.org/pdf/2404.08472

代码地址:https://github.com/emadeldeen24/TSLANet/tree/main

一、论文简介

背景:

Transformer在处理那些较小数据集的任务时,由于其较大的参数大小,这可能导致过拟合和计算效率低下的问题。自注意力机制对数据的噪声也敏感,同时不能很好的保存时间信息,因此在时间序列预测方面,单个线性层的表现惊人地优于复杂的Transformer架构。但是这样的线性层可能无法处理复杂的、有噪声的时间序列。

论文从多层感知器(MLPs)和Transformer转向挖掘CNN操作在时间序列分析中的潜力。

利用CNN进行多时间序列任务的一个值得注意的尝试是TimesNet模型,该模型利用多周期性在二维空间内合并周期内和周期间的变化,增强了时间模式的表示。然而,TimesNet可能无法完全解决缺乏明确周期性的非平稳数据集所带来的挑战。

主要贡献:

1.提出一种叫时间序列轻量级自适应网络(Time Series Lightweight Adaptive
Network ,TSLANet)。包含自适应频谱块(Adaptive Spectral Block ,ASB) 和交互卷积块(Interactive Convolution Block ,ICB)两部分。

2.TSLANet在分类、预测和异常检测的任务中优于最先进的模型。

二、模型结构

论文提出的TSLANet的结构。将输入时间序列分割成patches,并添加位置嵌入。接下来,输出嵌入通过TSLANet层,其中每层由两个主要组件组成。
在这里插入图片描述

第一个是自适应频谱块ASB,它利用频域表示进行鲁棒特征提取,并采用自适应阈值来减轻噪声。第二个是交互式卷积块ICB,它通过卷积操作捕获复杂的时间模式。

2.1 Adaptive Spectral Block(ASB)
  1. FFT
    F = F [ S P E ] ∈ C C × L ′ F=\mathcal{F}[S_{PE}]\in C^{C×L^′} F=F[SPE]CC×L
    对时间序列的每个通道进行独立FFT变换,得到一个综合的频域表示F,它封装了原始时间序列在所有通道上的频谱特征。

  2. 高频噪声的自适应去除
    高频分量通常代表偏离潜在趋势或信号的快速波动,使它们看起来更加随机且难以解释。因此,提出了一种自适应局部滤波器,允许模型根据数据集特征动态调整滤波水平,并去除这些高频噪声成分。在处理频谱可能随时间变化的非平稳数据时,这一点至关重要。该滤波器自适应地为每个特定的时间序列数据设置合适的频率阈值。
    首先计算F的功率谱,这有助于识别主导频率成分: P = ∣ F ∣ 2 P=|F|^2 P=F2
    通过一个可训练的阈值θ来实现这一点,该阈值根据数据的光谱特征进行调整。这个阈值θ被设置为一个可学习的参数
    F f i l t e r e d = F ⊙ ( P > θ ) F_{filtered}=F\odot(P>θ) Ffiltered=

### 基于Transformer架构的特征提取模块 为了实现基于Transformer架构的特征提取模块,可以考虑采用两种主要方法:一种是通过引入反向重构CNN变体(RRCV)模块来增强局部特征提取;另一种则是利用交叉编码器融合(CEF)模块结合局部和全局特征。 #### 反向重构CNN变体(RRCV)模块 该模块旨在将卷积神经网络(CNN)的操作集成到Transformer架构中,从而提升模型对于图像或其他数据类型的局部特征捕捉能力。具体来说,在设计此类模块时,可以在自注意力机制之前或者之后加入若干个标准的二维卷积层[^1]: ```python import torch.nn as nn class RRCVModule(nn.Module): def __init__(self, in_channels, out_channels): super(RRCVModule, self).__init__() self.conv = nn.Conv2d(in_channels=in_channels, out_channels=out_channels, kernel_size=3, stride=1, padding=1) def forward(self, x): return self.conv(x) ``` 此代码片段展示了如何定义一个简单的`RRCVModule`类,它接受输入通道数(`in_channels`)和输出通道数(`out_channels`)作为参数,并实现了基本的二维卷积操作。 #### 交叉编码器融合(CEF)模块 这一部分专注于创建一个轻量级层次结构——即CEF模块,其目的是有效地组合由CNN获取到的局部特性以及由Transformers得到的整体上下文信息。这有助于改善最终表示的质量,尤其是在处理具有复杂模式的数据集上表现尤为明显[^2]: ```python from transformers import BertModel class CEFModule(nn.Module): def __init__(self, cnn_features_dim, transformer_hidden_dim): super(CEFModule, self).__init__() # 加载预训练好的BERT模型作为transformer组件 self.transformer = BertModel.from_pretrained('bert-base-uncased') self.fc = nn.Linear(cnn_features_dim + transformer_hidden_dim, transformer_hidden_dim) def forward(self, cnn_features, token_ids): transformer_output = self.transformer(input_ids=token_ids)[0][:, 0, :] combined_features = torch.cat((cnn_features, transformer_output), dim=-1) fused_representation = self.fc(combined_features) return fused_representation ``` 上述Python脚本说明了怎样构建一个名为`CEFModule`的新类别,其中包含了两个核心组成部分:一个是用来接收来自CNN层的信息流;另一个是从预先训练过的BERT模型抽取文本序列中的语义含义。这两个分支随后被连接起来并通过全连接层进一步加工成统一的形式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值