Transformer入门实战(上 )| 使用 Transformers 进行概率时间序列预测

每日算法讲解(一):基于Transformer的时间序列预测 Transformer模型最初由Vaswani等人在2017年的论文《Attention is All You Need》中提出。与传统的RNN模型不同,Transformer模型完全基于注意力机制(Attention Mechanism),可以并行处理数据,具有更高的效率和更强的长程依赖捕捉能力。Transformer模型由编码器(Encoder)和解码器(Decoder)组成。编码器负责将输入序列编码为隐藏表示,解码器根据这些隐藏表示生成输出序列。在时间序列预测中,我们通常只使用编码器部分。 阅读详情

介绍

时间序列预测是一个重要的科学和商业问题,因此最近通过使用基于深度学习 而不是经典方法的模型也涌现出诸多创新。ARIMA 等经典方法与新颖的深度学习方法之间的一个重要区别如下。

  • 关于基于深度学习进行时间序列预测的论文:
    https://dl.acm.org/doi/abs/10.1145/3533382
  • 《预测: 方法与实践》在线课本的中文版:
    https://otexts.com/fppcn/

概率预测

通常,经典方法针对数据集中的每个时间序列单独拟合。这些通常被称为“单一”或“局部”方法。然而,当处理某些应用程序的大量时间序列时,在所有可用时间序列上训练一个“全局”模型是有益的,这使模型能够从许多不同的来源学习潜在的表示。

一些经典方法是点值的 (point-valued)(意思是每个时间步只输出一个值),并且通过最小化关于基本事实数据的 L2 或 L1 类型的损失来训练模型。然而,由于预测经常用于实际决策流程中,甚至在循环中有人的干预,让模型同时也提供预测的不确定性更加有益。这也称为“概率预测”,而不是“点预测”。这需要对可以采样的概率分布进行建模。

所以简而言之,我们希望训练全局概率模型,而不是训练局部点预测模型。深度学习非常适合这一点,因为神经网络可以从几个相关的时间序列中学习表示,并对数据的不确定性进行建模。

在概率设定中学习某些选定参数分布的未来参数很常见,例如高斯分布 (Gaussian) 或 Student-T,或者学习条件分位数函数 (conditional quantile function),或使用适应时间序列设置的共型预测 (Conformal Prediction) 框架。方法的选择不会影响到建模,因此通常可以将其视为另一个超参数。通过采用经验均值或中值,人们总是可以将概率模型转变为点预测模型。

时间序列 Transformer

正如人们所想象的那样,在对本来就连续的时间序列数据建模方面,研究人员提出了使用循环神经网络 (RNN) (如 LSTM 或 GRU) 或卷积网络 (CNN) 的模型,或利用最近兴起的基于 Transformer 的训练方法,都很自然地适合时间序列预测场景。

在这篇博文中,我们将利用传统 vanilla Transformer (参考 Vaswani 等 2017 年发表的论文) 进行单变量概率预测 (univariate probabilistic forecasting) 任务 (即预测每个时间序列的一维分布) 。 由于 Encoder-Decoder Transformer 很好地封装了几个归纳偏差,所以它成为了我们预测的自然选择。

  • 传统 vanilla Transformer 论文链接:
    https://arxiv.org/abs/1706.03762

首先,使用 Encoder-Decoder 架构在推理时很有帮助。通常对于一些记录的数据,我们希望提前预知未来的一些预测步骤。可以认为这个过程类似于文本生成任务,即给定上下文,采样下一个词元 (token) 并将其传回解码器 (也称为“自回归生成”) 。类似地,我们也可以在给定某种分布类型的情况下,从中抽样以提供预测,直到我们期望的预测范围。这被称为贪婪采样 (Greedy Sampling)/搜索,此处 有一篇关于 NLP 场景预测的精彩博文。
https://hf.co/blog/how-to-generate

其次,Transformer 帮助我们训练可能包含成千上万个时间点的时间序列数据。由于注意力机制的时间和内存限制,一次性将 所有 时间序列的完整历史输入模型或许不太可行。因此,在为随机梯度下降 (SGD) 构建批次时,可以考虑适当的上下文窗口大小,并从训练数据中对该窗口和后续预测长度大小的窗口进行采样。可以将调整过大小的上下文窗口传递给编码器、预测窗口传递给 causal-masked 解码器。这样一来,解码器在学习下一个值时只能查看之前的时间步。这相当于人们训练用于机器翻译的 vanilla Transformer 的过程,称为“教师强制 (Teacher Forcing)”。

Transformers 相对于其他架构的另一个好处是,我们可以将缺失值 (这在时间序列场景中很常见) 作为编码器或解码器的额外掩蔽值 (mask),并且仍然可以在不诉诸于填充或插补的情况下进行训练。这相当于 Transformers 库中 BERT 和 GPT-2 等模型的 attention_mask,在注意力矩阵 (attention matrix) 的计算中不包括填充词元。

由于传统 vanilla Transformer 的平方运算和内存要求,Transformer 架构的一个缺点是上下文和预测窗口的大小受到限制。关于这一点,可以参阅 Tay 等人于 2020 年发表的调研报告 。此外,由于 Transformer 是一种强大的架构,与 其他方法 相比,它可能会过拟合或更容易学习虚假相关性。

  • Tay 等 2020 年发表的调研报告地址:
    https://arxiv.org/abs/2009.06732
  • 上述关于其他预测时间线方法的论文地址:
    https://openreview.net/pdf?id=D7YBmfX_VQy

🤗 Transformers 库带有一个普通的概率时间序列 Transformer 模型,简称为 Time Series Transformer。在这篇文章后面的内容中,我们将展示如何在自定义数据集上训练此类模型。

Time Series Transformer 模型文档:
https://hf.co/docs/transformers/model_doc/time_series_transformer

设置环境

首先,让我们安装必要的库: 🤗 Transformers、🤗 Datasets、🤗 Evaluate、🤗 Accelerate 和 GluonTS。

GluonTS 的 GitHub 仓库:
https://github.com/awslabs/gluonts

正如我们将展示的那样,GluonTS 将用于转换数据以创建特征以及创建适当的训练、验证和测试批次。

!pip install -q transformers
!pip install -q datasets
!pip install -q evaluate
!pip install -q accelerate
!pip install -q gluonts ujson

加载数据集

在这篇博文中,我们将使用 Hugging Face Hub 上提供的 tourism_monthly 数据集。该数据集包含澳大利亚 366 个地区的每月旅游流量。

tourism_monthly 数据集地址:
https://hf.co/datasets/monash_tsf

此数据集是 Monash Time Series Forecasting 存储库的一部分,该存储库收纳了是来自多个领域的时间序列数据集。它可以看作是时间序列预测的 GLUE 基准。

Monash Time Series Forecasting 存储库链接:
https://forecastingdata.org/

from datasets import load_dataset
dataset = load_dataset("monash_tsf", "tourism_monthly")

可以看出,数据集包含 3 个片段: 训练、验证和测试。

dataset
>>> DatasetDict({
        train: Dataset({
            features: ['start', 'target', 'feat_static_cat', 'feat_dynamic_real', 'item_id'],
            num_rows: 366
        })
        test: Dataset({
            features: ['start', 'target', 'feat_static_cat', 'feat_dynamic_real', 'item_id'],
            num_rows: 366
        })
        validation: Dataset({
            features: ['start', 'target', 'feat_static_cat', 'feat_dynamic_real', 'item_id'],
            num_rows: 366
        })
    })

每个示例都包含一些键,其中 start 和 target 是最重要的键。让我们看一下数据集中的第一个时间序列:

train_example = dataset['train'][0]
train_example.keys()

>>> dict_keys(['start', 'target', 'feat_static_cat', 'feat_dynamic_real', 'item_id'])

start 仅指示时间序列的开始 (类型为 datetime) ,而 target 包含时间序列的实际值。

start 将有助于将时间相关的特征添加到时间序列值中,作为模型的额外输入 (例如“一年中的月份”) 。因为我们已经知道数据的频率是 每月,所以也能推算第二个值的时间戳为 1979-02-01,等等。

print(train_example['start'])
print(train_example['target'])

>>> 1979-01-01 00:00:00
    [1149.8699951171875, 1053.8001708984375, ..., 5772.876953125]

验证集包含与训练集相同的数据,只是数据时间范围延长了 prediction_length 那么多。这使我们能够根据真实情况验证模型的预测。

与验证集相比,测试集还是比验证集多包含 prediction_length 时间的数据 (或者使用比训练集多出数个 prediction_length 时长数据的测试集,实现在多重滚动窗口上的测试任务)。

validation_example = dataset['validation'][0]
validation_example.keys()

>>> dict_keys(['start', 'target', 'feat_static_cat', 'feat_dynamic_real', 'item_id'])

验证的初始值与相应的训练示例完全相同:

print(validation_example['start'])
print(validation_example['target'])

>>> 1979-01-01 00:00:00
    [1149.8699951171875, 1053.8001708984375, ..., 5985.830078125]

但是,与训练示例相比,此示例具有 prediction_length=24 个额外的数据。让我们验证一下。

freq = "1M"
prediction_length = 24

assert len(train_example['target']) + prediction_length == len(validation_example['target'])

让我们可视化一下:

import matplotlib.pyplot as plt

figure, axes = plt.subplots()
axes.plot(train_example['target'], color="blue") 
axes.plot(validation_example['target'], color="red", alpha=0.5)

plt.show()

图片

下面拆分数据:

train_dataset = dataset["train"]
test_dataset = dataset["test"]

将 start 更新为 pd.Period

我们要做的第一件事是根据数据的 freq 值将每个时间序列的 start 特征转换为 pandas 的 Period 索引:

from functools import lru_cache

import pandas as pd
import numpy as np

@lru_cache(10_000)
def convert_to_pandas_period(date, freq):
    return pd.Period(date, freq)

def transform_start_field(batch, freq):
    batch["start"] = [convert_to_pandas_period(date, freq) for date in batch["start"]]
    return batch

这里我们使用 datasets 的 set_transform 来实现:

set_transform 文档地址:
https://hf.co/docs/datasets/v2.7.0/en/package_reference/main_classes

from functools import partial

train_dataset.set_transform(partial(transform_start_field, freq=freq))
test_dataset.set_transform(partial(transform_start_field, freq=freq))

定义模型

接下来,让我们实例化一个模型。该模型将从头开始训练,因此我们不使用 from_pretrained 方法,而是从 config 中随机初始化模型。

我们为模型指定了几个附加参数:

  • prediction_length (在我们的例子中是 24 个月) : 这是 Transformer 的解码器将学习预测的范围;
  • context_length: 如果未指定 context_length,模型会将 context_length (编码器的输入) 设置为等于 prediction_length;
  • 给定频率的 lags(滞后): 这将决定模型“回头看”的程度,也会作为附加特征。例如对于 Daily 频率,我们可能会考虑回顾 [1, 2, 7, 30, ...],也就是回顾 1、2……天的数据,而对于 Minute数据,我们可能会考虑[1, 30, 60, 60*24, …]` 等;
  • 时间特征的数量: 在我们的例子中设置为 2,因为我们将添加 MonthOfYear 和 Age 特征;
  • 静态类别型特征的数量: 在我们的例子中,这将只是 1,因为我们将添加一个“时间序列 ID”特征;
  • 基数: 将每个静态类别型特征的值的数量构成一个列表,对于本例来说将是 [366],因为我们有 366 个不同的时间序列;
  • 嵌入维度: 每个静态类别型特征的嵌入维度,也是构成列表。例如 [3] 意味着模型将为每个 ``366时间序列 (区域) 学习大小为3` 的嵌入向量。

让我们使用 GluonTS 为给定频率 (“每月”) 提供的默认滞后值:

from gluonts.time_feature import get_lags_for_frequency

lags_sequence = get_lags_for_frequency(freq)
print(lags_sequence)

>>> [1, 2, 3, 4, 5, 6, 7, 11, 12, 13, 23, 24, 25, 35, 36, 37]

这意味着我们每个时间步将回顾长达 37 个月的数据,作为附加特征。

我们还检查 GluonTS 为我们提供的默认时间特征:

from gluonts.time_feature import time_features_from_frequency_str

time_features = time_features_from_frequency_str(freq)
print(time_features)

>>> [<function month_of_year at 0x7fa496d0ca70>]

在这种情况下,只有一个特征,即“一年中的月份”。这意味着对于每个时间步长,我们将添加月份作为标量值 (例如,如果时间戳为 “january”,则为 1;如果时间戳为 “february”,则为 2,等等) 。

我们现在准备好定义模型需要的所有内容了:

from transformers import TimeSeriesTransformerConfig, TimeSeriesTransformerForPrediction

config = TimeSeriesTransformerConfig(
    prediction_length=prediction_length,
    context_length=prediction_length*3, # context length
    lags_sequence=lags_sequence,
    num_time_features=len(time_features) + 1, # we'll add 2 time features ("month of year" and "age", see further)
    num_static_categorical_features=1, # we have a single static categorical feature, namely time series ID
    cardinality=[len(train_dataset)], # it has 366 possible values
    embedding_dimension=[2], # the model will learn an embedding of size 2 for each of the 366 possible values
    encoder_layers=4, 
    decoder_layers=4,
)

model = TimeSeriesTransformerForPrediction(config)

请注意,与 🤗 Transformers 库中的其他模型类似,TimeSeriesTransformerModel 对应于没有任何顶部前置头的编码器-解码器 Transformer,而 TimeSeriesTransformerForPrediction 对应于顶部有一个分布前置头 (distribution head) 的 TimeSeriesTransformerModel。默认情况下,该模型使用 Student-t 分布 (也可以自行配置):

上述两个模型的文档链接:
https://hf.co/docs/transformers/model_doc/time_series_transformer

model.config.distribution_output

>>> student_t

这是具体实现层面与用于 NLP 的 Transformers 的一个重要区别,其中头部通常由一个固定的分类分布组成,实现为 nn.Linear 层。

定义转换

接下来,我们定义数据的转换,尤其是需要基于样本数据集或通用数据集来创建其中的时间特征。

同样,我们用到了 GluonTS 库。这里定义了一个 Chain (有点类似于图像训练的 torchvision.transforms.Compose) 。它允许我们将多个转换组合到一个流水线中。

from gluonts.time_feature import time_features_from_frequency_str, TimeFeature, get_lags_for_frequency
from gluonts.dataset.field_names import FieldName
from gluonts.transform import (
    AddAgeFeature,
    AddObservedValuesIndicator,
    AddTimeFeatures,
    AsNumpyArray,
    Chain,
    ExpectedNumInstanceSampler,
    InstanceSplitter,
    RemoveFields,
    SelectFields,
    SetField,
    TestSplitSampler,
    Transformation,
    ValidationSplitSampler,
    VstackFeatures,
    RenameFields,
)

下面的转换代码带有注释供大家查看具体的操作步骤。从全局来说,我们将迭代数据集的各个时间序列并添加、删除某些字段或特征:

from transformers import PretrainedConfig

def create_transformation(freq: str, config: PretrainedConfig) -> Transformation:
    remove_field_names = []
    if config.num_static_real_features == 0:
        remove_field_names.append(FieldName.FEAT_STATIC_REAL)
    if config.num_dynamic_real_features == 0:
        remove_field_names.append(FieldName.FEAT_DYNAMIC_REAL)

    # 类似 torchvision.transforms.Compose
    return Chain(
        # 步骤 1: 如果静态或动态字段没有特殊声明,则将它们移除
        [RemoveFields(field_names=remove_field_names)]
        # 步骤 2: 如果静态特征存在,就直接使用,否则添加一些虚拟值
        + (
            [SetField(output_field=FieldName.FEAT_STATIC_CAT, value=[0])]
            if not config.num_static_categorical_features > 0
            else []
        )
        + (
            [SetField(output_field=FieldName.FEAT_STATIC_REAL, value=[0.0])]
            if not config.num_static_real_features > 0
            else []
        )
        # 步骤 3: 将数据转换为 NumPy 格式 (应该用不上)
        + [
            AsNumpyArray(
                field=FieldName.FEAT_STATIC_CAT,
                expected_ndim=1,
                dtype=int,
            ),
            AsNumpyArray(
                field=FieldName.FEAT_STATIC_REAL,
                expected_ndim=1,
            ),
            AsNumpyArray(
                field=FieldName.TARGET,
                # 接下来一行我们为时间维度的数据加上 1
                expected_ndim=1 if config.input_size==1 else 2,
            ),
            # 步骤 4: 目标值遇到 NaN 时,用 0 填充
            # 然后返回观察值的掩蔽值
            # 存在观察值时为 true,NaN 时为 false
            # 解码器会使用这些掩蔽值 (遇到非观察值时不会产生损失值)
            # 具体可以查看 xxxForPrediction 模型的 loss_weights 说明
            AddObservedValuesIndicator(
                target_field=FieldName.TARGET,
                output_field=FieldName.OBSERVED_VALUES,
            ),
            # 步骤 5: 根据数据集的 freq 字段添加暂存值
            # 也就是这里的“一年中的月份”
            # 这些暂存值将作为定位编码使用
            AddTimeFeatures(
                start_field=FieldName.START,
                target_field=FieldName.TARGET,
                output_field=FieldName.FEAT_TIME,
                time_features=time_features_from_frequency_str(freq),
                pred_length=config.prediction_length,
            ),
            # 步骤 6: 添加另一个暂存值 (一个单一数字)
            # 用于让模型知道当前值在时间序列中的位置
            # 类似于一个步进计数器
            AddAgeFeature(
                target_field=FieldName.TARGET,
                output_field=FieldName.FEAT_AGE,
                pred_length=config.prediction_length,
                log_scale=True,
            ),
            # 步骤 7: 将所有暂存特征值纵向堆叠
            VstackFeatures(
                output_field=FieldName.FEAT_TIME,
                input_fields=[FieldName.FEAT_TIME, FieldName.FEAT_AGE]
                + ([FieldName.FEAT_DYNAMIC_REAL] if config.num_dynamic_real_features > 0 else []),
            ),
            # 步骤 8: 建立字段名和 Hugging Face 惯用字段名之间的映射
            RenameFields(
                mapping={
                    FieldName.FEAT_STATIC_CAT: "static_categorical_features",
                    FieldName.FEAT_STATIC_REAL: "static_real_features",
                    FieldName.FEAT_TIME: "time_features",
                    FieldName.TARGET: "values",
                    FieldName.OBSERVED_VALUES: "observed_mask",
                }
            ),
        ]
    )

定义 InstanceSplitter

对于训练、验证、测试步骤,接下来我们创建一个 InstanceSplitter,用于从数据集中对窗口进行采样 (因为由于时间和内存限制,我们无法将整个历史值传递给 Transformer)。

实例拆分器从数据中随机采样大小为 context_length 和后续大小为 prediction_length 的窗口,并将 past_ 或 future_ 键附加到各个窗口的任何临时键。这确保了 values 被拆分为 past_values 和后续的 future_values 键,它们将分别用作编码器和解码器的输入。同样我们还需要修改 time_series_fields 参数中的所有键:

from gluonts.transform.sampler import InstanceSampler
from typing import Optional

def create_instance_splitter(config: PretrainedConfig, mode: str, train_sampler: Optional[InstanceSampler] = None,
    validation_sampler: Optional[InstanceSampler] = None,) -> Transformation:
    assert mode in ["train", "validation", "test"]

    instance_sampler = {
        "train": train_sampler or ExpectedNumInstanceSampler(
            num_instances=1.0, min_future=config.prediction_length
        ),
        "validation":  validation_sampler or ValidationSplitSampler(
            min_future=config.prediction_length
        ),
        "test": TestSplitSampler(),
    }[mode]

    return InstanceSplitter(
        target_field="values",
        is_pad_field=FieldName.IS_PAD,
        start_field=FieldName.START,
        forecast_start_field=FieldName.FORECAST_START,
        instance_sampler=instance_sampler,
        past_length=config.context_length + max(config.lags_sequence),
        future_length=config.prediction_length,
        time_series_fields=[
            "time_features",
            "observed_mask",
        ],
    )

以上是《使用 🤗 Transformers 进行概率时间序列预测》的第一部分,我们在这部分中为大家介绍了传统时间序列预测和基于 Transformers 的方法,也一步步准备好了训练所需的数据集并定义了环境、模型、转换和 InstanceSplitter。在下一部分里,我们会开始训练,并采用可视化的方法评估模型预测的效果。请关注我们的内容,不要错过后续精彩。

如何学习AI大模型?

大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 “AI会取代那些行业?”“谁的饭碗又将不保了?”等问题热议不断。

不如成为「掌握AI工具的技术人」,毕竟AI时代,谁先尝试,谁就能占得先机!

想正式转到一些新兴的 AI 行业,不仅需要系统的学习AI大模型。同时也要跟已有的技能结合,辅助编程提效,或上手实操应用,增加自己的职场竞争力。

但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高

那么我作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,希望可以帮助到更多学习大模型的人!至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费】

👉 福利来袭优快云大礼包:《2025最全AI大模型学习资源包》免费分享,安全可点 👈

全套AGI大模型学习大纲+路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

👉 福利来袭优快云大礼包:《2025最全AI大模型学习资源包》免费分享,安全可点 👈

img

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费】

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

Transformer长期时序预测 transformer主要对输入特征进行编码、解码等,在这里原理并不过多的介绍,我们通过实例来完成transformer在时间序列上的预测应用。transformer预测的结果并不是单一的值,而是一个集合,预测出在该时间序列的可能值,然后再根据具体的业务需求完成最后的值,下图展示了结果中的某一样本的预测值。我们使用的是某一零件的耗用量,预测未来半年的该零件的耗用情况,时间维度是月,数据的示意图如下图所示。如上图所示,蓝色部分为训练数据,红色为测试部分。紧接着搭建训练样本、测试样本以及验证样本的数据加载器。 阅读详情

相关推荐

Transformer实现时间序列预测

然而,Transformer模型不仅可以用于处理文本数据,还可以应用于其他领域,例如时间序列预测。然而,Transformer模型通过引入自注意力机制,能够更好地捕捉序列之间的依赖关系,从而在时间序列预测任务中展现出优势。Transformer模型的引入使得时间序列预测更加灵活和准确,为实际应用提供了新的可能性。下面,我们将使用Python和PyTorch库来实现一个简单的Transformer模型,用于时间序列预测。最后,我们可以使用定义好的Transformer模型进行时间序列预测。

ZksProlog的博客 2313

【时间序列】Transformer for TimeSeries时序预测算法详解

2017年,Google的一篇为我们带来了Transformer,其在NLP领域的重大成功展示了它对时序数据的强大建模能力,自然有人想要把Transformer应用到时序数据预测上。在Transformer的基础上构建时序预测能力可以突破以往的诸多限制,最明显的一个增益点是,Transformer for TS可以基于Multi-head Attention结构具备同时建模长期和短期时序特征的能力。

weixin_64338372的博客 8991

使用 AMD GPUs 进行基于 Transformers 的时间序列预测

Transformer 架构在时间序列预测中的应用已成为替代传统统计模型(如自回归积分滑动平均(ARIMA)或指数平滑(ETS))的一个重要选择。Transformers 能够捕捉复杂的时间依赖关系,并且能够处理不同类型的输入数据,如文本、音频、图像和时间序列数据。基于 Transformer 的模型是一种神经网络架构,设计用于处理序列数据和捕捉长程依赖性。Transformers 最早在论文中被提出。

数字人生 1150

学习笔记:基于Transformer的时间序列预测模型

基于Transformer的时间序列预测

xxt228的博客 3万+

Claude Code+Cursor+Claude 4三剑合璧!5步搞定Magentic-UI的OAuth2.0集成,开发效率飙升500%,新手秒变全栈工程师

本文详细介绍了如何利用Claude Code、Cursor和Claude 4三款AI工具高效集成Magentic-UI的OAuth2.0认证系统。通过5个步骤的实战演练,开发者可快速完成从环境搭建、项目分析、代码生成到前端集成的全过程,显著提升开发效率。文章还提供了JWT令牌管理、安全配置及常见问题解决方案。

weixin_29234509的博客 458

PyCharm配置及使用Git教程

平时习惯在Windows下开发,但是我们又需要实时将远方仓库的代码clone到本地,也需要将自己修改的代码push到远端服务器。

酒酿小圆子呀~ 4万+

深度学习实战案例:使用 Transformers 进行概率时间序列预测实战

接下来,让我们实例化一个模型。该模型将从头开始训练,因此我们不使用 from_pretrained 方法,而是从 config 中随机初始化模型。我们为模型指定了几个附加参数:prediction_length (在我们的例子中是 24 个月) : 这是 Transformer 的解码器将学习预测的范围;context_length: 如果未指定 context_length,模型会将 context_length (编码器的输入) 设置为等于 prediction_length;

Python学习与数据挖掘 1473

NVIDIA NCCL 源码解析:从XML拓扑到高性能通信图的构建

本文深入解析了NVIDIA NCCL如何将XML硬件拓扑文件转化为高性能通信图的核心过程。详细阐述了从创建CPU、GPU、NIC等节点,到建立PCIe、NVLink连接,再到计算链路带宽并进行关键排序的完整建图流程。该图是NCCL实现最优通信路径规划、充分发挥NVLink等高速互联性能的基石,直接影响分布式深度学习训练的效率。

convnet3designer的博客 309

动手实战 | 使用 Transformers 包进行概率时间序列预测

正如时间序列研究人员所知,人们对“将基于 Transformer 的模型应用于时间序列”问题很感兴趣。传统 vanilla Transformer 只是众多基于注意力 (Attention) 的模型之一,因此需要向库中补充更多模型。目前没有什么能妨碍我们继续探索对多变量时间序列进行建模,但是为此需要使用多变量分布头来实例化模型。目前已经支持了对角独立分布,后续会增加其他多元分布支持。请继续关注未来的博客文章以及其中的教程。

Python数据挖掘 4324

从零开始:如何用PSINS工具箱构建你的第一个IMU误差模型

本文详细介绍了如何使用严恭敏教授开发的PSINS工具箱构建IMU误差模型,涵盖从基础参数设置到高级误差建模的全过程。通过imuerrset函数配置陀螺零偏、随机游走等核心参数,并结合实战案例展示消费级MEMS器件的误差建模方法,帮助用户提升惯性导航系统的精度与可靠性。

weixin_29284885的博客 323

华为od 面试八股文_前端_03_含答案

华为od 面试八股文_前端_03_含答案

MISAYAONE的博客 2131

使用 Transformers 进行概率时间序列预测实战

接下来,让我们实例化一个模型。该模型将从头开始训练,因此我们不使用 from_pretrained 方法,而是从 config 中随机初始化模型。我们为模型指定了几个附加参数:prediction_length (在我们的例子中是 24 个月) : 这是 Transformer 的解码器将学习预测的范围;context_length: 如果未指定 context_length,模型会将 context_length (编码器的输入) 设置为等于 prediction_length;

xxue345678的博客 1427

SKUA-GOCAD入门教程-第四节

本文介绍了软件界面中的几个关键功能模块。控制菜单允许用户通过按钮添加视图、对象窗口、工作流平台等工具到任务栏,并支持快速搜索。页面布局以任务为导向,包含3D、2D视图、工具栏等,用户可自定义页面和布局。对象窗口用于浏览和处理数据,如钻孔、断层等,支持显示、隐藏、分组和过滤数据。3D查看器的数据浏览器对象窗口包含列表、对象等,建模数据通常位于未分配对象窗口中。本文旨在帮助用户熟悉软件界面,特别是3D视图窗口和对象管理窗口,以便更高效地进行数据导入和建模操作。

江洋大葱的博客 1060

上篇 | 使用 Transformers 进行概率时间序列预测

介绍时间序列预测是一个重要的科学和商业问题,因此最近通过使用基于深度学习 而不是经典方法的模型也涌现出诸多创新。ARIMA 等经典方法与新颖的深度学习方法之间的一个重要区别如下。关于基于深度学习进行时间序列预测的论文:https://dl.acm.org/doi/abs/10.1145/3533382《预测: 方法与实践》在线课本的中文版:https://otexts.com/fppcn/概率预测...

Hugging Face 1214

Matlab 轴承信号仿真+分析

文章目录项目说明1、信号仿真1.1 仿真公式1.2 信号参数设置1.3 代码实现2、仿真信号分析2.1 小波变换2.2 快速谱峭度 项目说明 本文主要解决两个问题: 1、仿真包含周期性冲击信号、随机干扰冲击信号、调制干扰信号以及随机噪声四个成分的故障轴承信号; 2、使用小波变换以及快速谱峭度对该仿真信号进行分析。 1、信号仿真 1.1 仿真公式 这里的仿真信号公式主要参考了包文杰学者的硕士论文《加权谱峭度故障诊断方法研究与应用》,列举公式如下: 周期性冲击信号仿真 随机干扰冲击信号仿真 调制

cocofisher的博客 9270

第2节:cesium 0基础发布在线地图(含源码+视频)

cesium vue 0基础发布在线地图

qq_29384639的博客 1345

下篇 | 使用 Transformers 进行概率时间序列预测

在《使用 ???? Transformers 进行概率时间序列预测》的第一部分里,我们为大家介绍了传统时间序列预测和基于 Transformers 的方法,也一步步准备好了训练所需的数据集并定义了环境、模型、转换和 InstanceSplitter。本篇内容将包含从数据加载器,到前向传播、训练、推理和展望未来发展等精彩内容。创建 PyTorch 数据加载器有了数据,下一步需要创建 PyTorch Dat...

Hugging Face 898

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

概率时间序列预测与Transformer架构实战解析

时间序列预测是数据分析中的核心任务,其核心原理是通过历史数据建模未来趋势。与传统点预测不同,概率预测通过建模数据分布特性,提供包含不确定性的预测区间,这对商业决策和风险评估至关重要。Transformer架构凭借其全局建模能力和自注意力机制,能有效捕获时间序列中的长期依赖和周期性模式。在工程实践中,通过滞后特征、时间特征工程以及编码器-解码器结构优化,可以显著提升预测精度。典型应用场景包括旅游需求预测、销量预测等需要量化不确定性的领域,其中概率预测能提供"80%可能落在5000-6000区间"等可解释结论。

weixin_30820077的博客 343

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

用 Python 轻松实现时间序列预测:Darts 时序融合Transformer Temporal Fusion Transformer

Darts 是一个 Python 库,用于对时间序列进行用户友好型预测和异常检测。它包含多种模型,从 ARIMA 等经典模型到深度神经网络。

船长Q的博客 1319

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

遥遥领先!基于transformer变体的时间序列预测新SOTA!

目前,已经超越了传统机器学习算法,。这其中,基于Transformer架构的模型在时间序列预测中取得了丰硕的成果。Transformer模型因其强大的序列建模能力,很适合时间序列这种也是序列类型的数据结构。但与文本序列相比,时间序列具有很多独特的特征,比如自相关性、周期性以及长周期性预测,这些特性给Transformer在时间序列预测场景中的应用带来了新的挑战。为了克服这些挑战,满足预测任务的高效率和高精度需求,研究者对原始的Transformer结构进行了改造,比如本文介绍。

学姐带你玩AI的博客 5429

Moirai:Unified Training of Universal Time Series Forecasting Transformers——统一训练通用时间序列预测 Transformer

Moirai:Unified Training of Universal Time Series Forecasting Transformers——统一训练通用时间序列预测 Transformer

Together_CZ的博客 2414

基于Transformer变体的时间序列预测

目前,这其中,基于Transformer架构的模型在时间序列预测中取得了丰硕的成果。Transformer模型因其强大的序列建模能力,很适合时间序列这种也是序列类型的数据结构。但与文本序列相比,时间序列具有很多独特的特征,比如自相关性、周期性以及长周期性预测,这些特性给Transformer在时间序列预测场景中的应用带来了新的挑战。

酒酿小圆子呀~ 1066

时空预测Transformer完整指南:time-series-transformers-review中Earthformer等模型解析

想要掌握最前沿的时空预测技术吗?time-series-transformers-review项目为你提供了最全面的Transformer时间序列资源集合!这个专业整理的知识库收录了论文、代码、数据等宝贵资源,是了解时间序列Transformer模型的最佳起点。🚀 ## 什么是时间序列Transformer? 时间序列Transformer是专门为处理时序数据而优化的深度学习模型。与传统的R

gitblog_00062的博客 1119

如何用PatchTST-FM-r1实现精准时间序列预测?新手入门指南

PatchTST-FM-r1是一款基于Transformer架构的时间序列基础模型,能够实现高精度的时间序列预测任务。本文将为新手用户提供一份简单易懂的入门指南,帮助你快速掌握使用PatchTST-FM-r1进行时间序列预测的方法。 ## 什么是PatchTST-FM-r1? PatchTST-FM-r1(Patched Time-Series Transformer-based Founda

gitblog_00821的博客 958
上一篇: 这本AI入门书不懂技术也能读,从大模型入门到精通,大模型初学者必看!
下一篇: 大模型神书《从零构建大模型》分享,尚未发布,GitHub标星22k!!
冻感糕人~
博客等级 码龄3年 8926粉丝 2393原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值