首页 > 其他分享 >LSTM+transformer+稀疏注意力机制(ASSA)时间序列预测(pytorch框架)

LSTM+transformer+稀疏注意力机制(ASSA)时间序列预测(pytorch框架)

时间:2024-09-04 09:57:24浏览次数:6  
标签:Transformer 模型 ASSA transformer 注意力 pytorch 序列 configs LSTM

LSTM+transformer+稀疏注意力机制


transformer,LSTM,ASSA注意力
首发原创!纯个人手打代码,自己研究的创新点,超级新。可以发刊,先发先的,高精度代码。
需知:好的创新性模型可以事半功倍。目前太多流水paper,都是旧模型,老师已经审美疲劳,很难发好一点的刊,这种模型很新,让paper审核老师眼睛一亮,老师就会觉得你有水平,关注顶会前沿热点,非常好中稿。上限下限都非常高,适合高等级的同学(继续优化)和没有经验的小白(直接用就行了)。
python代码,pytorch架构

  急需毕业,论文创新点,小论文,大论文的同学可以直接使用。或者需要缝合模型,设计模型可以催更联系。

1.LSTM

LSTM(Long Short-Term Memory,长短期记忆网络)是一种特殊的递归神经网络(RNN),设计用于解决标准RNN在处理长序列时的梯度消失和梯度爆炸问题。LSTM通过引入记忆单元和门控机制,可以在长时间跨度内保持和更新关键信息,从而在许多序列数据任务中表现出色。

LSTM的结构

LSTM的基本单元包括以下三个主要组件:

  1. 细胞状态(Cell State)

    • 细胞状态是LSTM的核心部分,贯穿整个序列的数据流。它相当于一个直通通道,允许信息以最少的修改通过时间步长传播。细胞状态通过加法和乘法操作来控制信息的传递和遗忘,避免了梯度消失问题。
  2. 门控机制(Gates): LSTM通过三个门控来调节信息的流动:

    • 遗忘门(Forget Gate):决定细胞状态中哪些信息需要被遗忘。它接受前一时间步长的隐藏状态和当前输入,通过一个Sigmoid激活函数输出一个0到1之间的值,控制信息是否被丢弃。
    • 输入门(Input Gate):决定当前时间步长的新信息对细胞状态的更新程度。输入门与当前输入和前一隐藏状态结合,通过Sigmoid激活函数输出控制信号。
    • 输出门(Output Gate):决定细胞状态中的哪些部分将作为隐藏状态输出,并传递到下一时间步长。输出门通过Sigmoid激活函数,结合当前输入和前一隐藏状态,生成下一步的隐藏状态。
  3. 隐藏状态(Hidden State)

    • 隐藏状态是LSTM输出的主要内容,也是传递到下一个时间步长的信息。它包含了LSTM单元对当前时间步长输入和细胞状态的理解。

                                  

2.Transformer

Transformer是一种深度学习模型,最早由Vaswani等人在2017年的论文《Attention is All You Need》中提出。它最初用于自然语言处理任务,但由于其出色的性能和高度的并行性,迅速被应用于各种领域,如图像处理、时间序列预测等。Transformer的核心是自注意力机制,它能够直接建模序列中的全局依赖关系。

Transformer的基本结构

Transformer模型由编码器(Encoder)和解码器(Decoder)两部分组成,这两部分由若干层堆叠而成。每一层由以下几个关键组件组成:

  1. 自注意力机制(Self-Attention Mechanism)

    • 自注意力机制是Transformer的核心。它允许模型在处理序列的每个元素时,同时关注序列中的其他元素,从而捕捉全局信息。
    • 计算步骤
      1. 输入嵌入(Input Embedding):首先,将输入序列中的每个元素嵌入为一个向量。
      2. 生成查询、键、值向量(Query, Key, Value Vectors):通过线性变换,将每个嵌入生成查询(Q)、键(K)、值(V)向量。
      3. 计算注意力得分:通过点积计算查询向量与键向量之间的相似度,并除以缩放因子(通常是向量维度的平方根)以避免数值不稳定性。然后应用Softmax函数,将其转换为概率分布。
      4. 加权求和:将得到的注意力得分与值向量相乘,得到输出向量。
      5. 多头注意力(Multi-Head Attention):为了让模型从多个角度捕捉信息,自注意力机制通常会被扩展为多个“头”(head),每个头独立计算注意力并进行并行处理,最后将结果拼接并通过线性层投影。
  2. 前馈神经网络(Feed-Forward Neural Network)

    • 每个注意力层之后接一个前馈神经网络,通常由两个线性变换层组成,中间通过ReLU激活函数。这一层为每个时间步独立地处理输入,并进一步对信息进行非线性变换。
  3. 层归一化(Layer Normalization)

    • 每个子层(注意力层和前馈网络层)之后,Transformer使用层归一化来稳定和加速训练过程。
  4. 残差连接(Residual Connection)

    • Transformer使用残差连接来缓解深层网络中的梯度消失问题。这意味着子层的输入将直接添加到子层的输出,帮助模型更好地学习。
  5. 位置编码(Positional Encoding)

    • 由于Transformer没有内在的序列处理顺序(不像RNN和LSTM那样按时间步处理数据),模型通过位置编码引入序列的位置信息。位置编码通常是固定的正弦和余弦函数,也可以是可学习的参数。

Transformer的工作流程

  1. 编码阶段

    • 输入序列经过嵌入层后,被加上位置编码,然后通过多个编码器层。每个编码器层由一个多头自注意力机制和一个前馈神经网络组成。编码器的输出是高维表示,其中包含了整个序列的信息。
  2. 解码阶段

    • 解码器类似于编码器,但在自注意力机制后增加了一个与编码器输出交互的注意力层(通常称为“编码器-解码器注意力”)。解码器的输入通常是目标序列的偏移版本(如翻译任务中的已经翻译部分),解码器逐步生成输出。

                                                       

Transformer的优点

  1. 并行计算:由于不需要像RNN那样按时间步处理数据,Transformer能够同时处理序列中的所有元素,这使得训练速度大幅提升,特别是在GPU上。

  2. 捕捉全局依赖关系:自注意力机制使得Transformer能够直接建模序列中的长距离依赖关系,无论元素之间的距离有多远。

  3. 适应多种任务:Transformer不仅在自然语言处理任务(如机器翻译、文本生成)中表现出色,还被广泛应用于图像处理、时间序列预测、语音识别等领域。

  4. 更好的性能:在许多任务上,Transformer优于传统的RNN和LSTM模型,尤其是在处理大规模数据时。

3.ASSA

ASSA是2024年发布的一个注意力机制,很新可以做创新点。

ASSA提出了一种自适应稀疏变压器 (AST) 来减轻不相关区域的噪声相互作用,并消除空间域和通道域中的特征冗余。AST 包括两个核心设计,即自适应稀疏自注意力 (ASSA) 模块和功能精炼前馈网络 (FRFN)。具体来说,ASSA 是使用双分支范式自适应计算的,其中引入稀疏分支以消除低查询键匹配分数对聚合特征的负面影响,而密集分支则确保有足够的信息流通过网络来学习判别性表示。同时,FRFN em 采用了一种增强和简化方案来消除通道中的特征密度,通过ASSA机制和LSTM处理后的特征输入到transformer网络预测,可以进一步提高预测的准确性和效率。在顶刊ETTh开源数据集达到一个很不错的效果。

                                            

实验代码

class Model(nn.Module):
    """
    Vanilla Transformer
    with O(L^2) complexity
    Paper link: https://proceedings.neurips.cc/paper/2017/file/3f5ee243547dee91fbd053c1c4a845aa-Paper.pdf
    """

    def __init__(self, configs):
        super(Model, self).__init__()
        self.pred_len = configs.pred_len
        self.output_attention = configs.output_attention

        self.lstm = LSTM(input_size=configs.enc_in, hidden_size=configs.d_model, num_layers=3,
                         batch_size=configs.batch_size)
        # Embedding
        self.enc_embedding = DataEmbedding(configs.enc_in, configs.d_model, configs.embed, configs.freq,
                                           configs.dropout)
        # Encoder
        self.encoder = Encoder(
            [
                EncoderLayer(
                    AttentionLayer(
                        FullAttention(False, configs.factor, attention_dropout=configs.dropout,
                                      output_attention=configs.output_attention), configs.d_model, configs.n_heads),
                    configs.d_model,
                    configs.d_ff,
                    dropout=configs.dropout,
                    activation=configs.activation
                ) for l in range(configs.e_layers)
            ],
            norm_layer=torch.nn.LayerNorm(configs.d_model)
        )
        # Decoder

        self.dec_embedding = DataEmbedding(configs.dec_in, configs.d_model, configs.embed, configs.freq,
                                           configs.dropout)
        self.decoder = Decoder(
            [
                DecoderLayer(
                    AttentionLayer(
                        FullAttention(True, configs.factor, attention_dropout=configs.dropout,
                                      output_attention=False),
                        configs.d_model, configs.n_heads),
                    AttentionLayer(
                        FullAttention(False, configs.factor, attention_dropout=configs.dropout,
                                      output_attention=False),
                        configs.d_model, configs.n_heads),
                    configs.d_model,
                    configs.d_ff,
                    dropout=configs.dropout,
                    activation=configs.activation,
                )
                for l in range(configs.d_layers)
            ],
            norm_layer=torch.nn.LayerNorm(configs.d_model),
            projection=nn.Linear(configs.d_model, configs.c_out, bias=True)
        )

数据集

数据集都可以,只要是时间序列格式,不限领域,类似功率预测,风电光伏预测,负荷预测,流量预测,浓度预测,机械领域预测等等各种时间序列直接预测。可以做验证模型,对比模型。格式类似顶刊ETTH的时间序列格式即可。

这里是时间列+7列影响特征+1列预测特征

实验结果

这里我按照训练集80%测试集20%进行训练。

 图中表明LSTM-Transformer模型在时间序列预测任务中表现出色,能够准确预测大多数时间点的值,尽管在一些极端波动或拐点处仍有一定的误差。总体而言,该模型是有效的,但可能需要进一步优化以减少在某些极端情况下的误差。

4.功能如下


1.多变量输入,单变量输出/可改多输出
2.多时间步预测,单时间步预测
3.评价指标:R方  RMSE  MAE  MAPE 对比图
4.数据从excel/csv文件中读取,直接替换即可。
5.结果保存到文本中,可以后续处理。
代码带数据,注释清晰,直接一键运行即可,适合新手小白。
接运行,主页还有其他优质模型,或者需要在此基础缝合模型或者其他模型要求,直接发要求给博主就行。

5.补充

创新性非常高,保底3区以上完全够用,效果也不错。代码里也有pdf理论知识和注释方便理解,代码是在顶会源码的基础上解决了大量报错,删除多余部分并且添加功能,适合小白,注释清楚,没学过都能看懂。

继续改进:LSTM也可以改为其他创新卷积或者提取特征模块,例如可将LSTM改为TCN,CNN或者其他提取特征的方式,transformer也可以替换为其他主预测模型,另外也可以改其他优化算法,继续提升创新。比如SSA,多元宇宙,VMd等等其他优化算法。如果需要也可以发要求私信博主。

模型预测效果优秀。结合其他模型或者其他效果都很不错。

6.源码地址

https://m.tb.cn/h.goBiCfO?tk=YPsE3gBsNBj





 

标签:Transformer,模型,ASSA,transformer,注意力,pytorch,序列,configs,LSTM
From: https://blog.csdn.net/lxh1244607107/article/details/141871070

相关文章

  • 高创新 | Matlab实现Transformer-GRU-SVM多变量时间序列预测
    高创新|Matlab实现Transformer-GRU-SVM多变量时间序列预测目录高创新|Matlab实现Transformer-GRU-SVM多变量时间序列预测效果一览基本介绍程序设计参考资料效果一览基本介绍1.Matlab实现Transformer-GRU-SVM多变量时间序列预测,Transformer+门控循环单......
  • pyro ExponentialLR 如何设置优化器 optimizer的学习率 pytorch 深度神经网络 bnn,
     第一。pyro不支持“ReduceLROnPlateau”,因为需要Loss作为输入数值,计算量大pytorch的学习率调整视频看这个博主的视频05-01-学习率调整策略_哔哩哔哩_bilibili第二,svi支持 scheduler注意点,属于 pyro.optim.PyroOptim的有三个AdagradRMSPropClippedAdamDC......
  • 基于Seriall-LSTM-Transformer的自行车租赁数量预测研究(Matlab代码实现)
                            ......
  • PyTorch:Python深度学习框架使用详解
    PyTorch是一个开源的机器学习库,广泛用于计算机视觉和自然语言处理领域。它由Facebook的AI研究团队开发,因其动态计算图、易用性以及与Python的紧密集成而受到开发者的青睐。PyTorch的主要特点动态计算图:PyTorch的计算图在运行时构建,使得模型的修改和调试更加灵活。自动微分......
  • 这样图解Transformer应该没人看不懂了吧——Transformer工作原理
    前言本文将深入剖析Transformer的内部工作原理,详细研究其运作细节。我们将通过实际的矩阵表示和形状,观察数据如何在系统中流动,并理解每个阶段进行的计算。本文目标不仅是理解Transformer是如何工作的,更要探究它为何如此工作。架构概览正如我们在第一部分中看到的,Transformer架构的......
  • 小琳AI课堂:Transformer模型
    大家好,这里是小琳AI课堂!今天我们来聊聊一个在自然语言处理(NLP)领域取得了革命性进展的深度学习架构——Transformer模型!......
  • 神经网络与Transformer模型在智能驾驶中的应用
    前言为什么展示模块是高质能量,而硅控模块是比较低智能呢?因为在感知环节中,具体它是一辆货车还是小轿车,我们并不需要雇佣5000名程序员去写识别的规则,比如说长宽高是多少以上的,满足条件之后才会判定为货车或者满足什么条件才是轿车,而是完全不需要代码去实现感知功能。通过一个合理的神......
  • 搞懂Transformer结构,看这篇PyTorch实现就够了
    前言下面分享一篇实验室翻译的来自哈佛大学一篇关于Transformer的详细博文。“AttentionisAllYouNeed”[1]一文中提出的Transformer网络结构最近引起了很多人的关注。Transformer不仅能够明显地提升翻译质量,还为许多NLP任务提供了新的结构。虽然原文写得很清楚,但实际上大家普......
  • 《BERT基础教程:Transformer大模型实战》一本相见恨晚的大模型入门书(附PDF)
    前言随着chatgpt的火热,大模型成为业界新的热点。而未来每个人,不仅仅是人工智能或者计算机行业从业者,未来的工作或多或少可能都会被大模型的影响。所以了解transformer为基础的大模型(Bert,gpt)就很有必要了。本书聚焦谷歌公司开发的BERT自然语言处理模型,由浅入深地介绍了BERT的工......
  • 【论文】OmniVec2:一种基于Transformer的新型大规模网络多模态多任务学习
    前言《OmniVec2:ANovelTransformerbasedNetworkforLargeScaleMultimodalandMultitaskLearning》研究背景研究问题:这篇文章提出了一种新的多模态多任务网络及其相关的训练算法,旨在处理来自约12种不同模态的数据,包括图像、视频、音频、文本、深度、点云、时间序列、表格、图......