Transformers documentation
Informer
该模型于 2020-12-14 在 HF papers 上发表,并于 2023-03-08 贡献至 Hugging Face Transformers。
Informer
概述
Informer 模型由 Haoyi Zhou、Shanghang Zhang、Jieqi Peng、Shuai Zhang、Jianxin Li、Hui Xiong 和 Wancai Zhang 在 Informer: Beyond Efficient Transformer for Long Sequence Time-Series Forecasting 中提出。
该方法引入了一种概率注意力机制,用于选择“活跃”查询而非“惰性”查询,从而提供稀疏 Transformer,缓解了标准注意力机制的二次方计算和内存需求。
该论文的摘要如下:
许多实际应用需要对长序列时间序列进行预测,例如电力消耗规划。长序列时间序列预测(LSTF)要求模型具备高预测能力,即高效地捕捉输出与输入之间精确的长程依赖耦合。近期研究表明,Transformer 在提升预测能力方面具有潜力。然而,Transformer 存在若干严重问题,使其无法直接应用于 LSTF,包括二次时间复杂度、高内存占用以及编码器-解码器架构的固有局限性。为解决这些问题,我们设计了一种用于 LSTF 的高效基于 Transformer 的模型,命名为 Informer,它具有三个显著特点:(i) ProbSparse 自注意力机制,在时间复杂度和内存占用上均达到 O(L logL),并且在序列依赖对齐方面具有可比的性能。(ii) 自注意力蒸馏通过级联层输入减半来突出主导注意力,从而高效处理极长的输入序列。(iii) 生成式解码器在概念上很简单,但通过一次前向操作而非逐步方式预测长时间序列,从而大幅提升了长序列预测的推理速度。在四个大规模数据集上的大量实验表明,Informer 显著优于现有方法,并为 LSTF 问题提供了一种新的解决方案。
该模型由 elisim 和 kashif 贡献。 原始代码可在此处找到。
资源
以下是来自 Hugging Face 官方和社区(以 🌎 标识)的资源列表,可帮助你快速上手。如果你希望提交资源以收录在此处,欢迎随时发起 Pull Request,我们将进行审查!该资源最好能展示一些新内容,而不是重复现有资源。
- 查看 HuggingFace 博客上的 Informer 博文:使用 Informer 进行多元概率时间序列预测
InformerConfig
class transformers.InformerConfig
< source >( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0id2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Noneis_encoder_decoder: bool = Trueprediction_length: int | None = Nonecontext_length: int | None = Nonedistribution_output: str = 'student_t'loss: str = 'nll'input_size: int = 1lags_sequence: list[int] | None = Nonescaling: str | bool | None = 'mean'num_dynamic_real_features: int = 0num_static_real_features: int = 0num_static_categorical_features: int = 0num_time_features: int = 0cardinality: list[int] | None = Noneembedding_dimension: list[int] | None = Noned_model: int = 64encoder_ffn_dim: int = 32decoder_ffn_dim: int = 32encoder_attention_heads: int = 2decoder_attention_heads: int = 2encoder_layers: int = 2decoder_layers: int = 2activation_function: str = 'gelu'dropout: float | int = 0.05encoder_layerdrop: float | int = 0.1decoder_layerdrop: float | int = 0.1attention_dropout: float | int = 0.1activation_dropout: float | int = 0.1num_parallel_samples: int = 100init_std: float = 0.02use_cache: bool = Trueattention_type: str = 'prob'sampling_factor: int = 5distil: bool = True )
参数
- is_encoder_decoder (
bool,可选,默认为True) — 指示该模型是否用作编码器/解码器。 - prediction_length (
int, 可选) — 解码器的预测长度。换句话说,即模型的预测范围。该值通常由数据集决定,我们建议将其设置为合适的值。 - context_length (
int,可选,默认为prediction_length) — 编码器的上下文长度。如果为None,则上下文长度与prediction_length相同。 - distribution_output (
string,可选,默认为"student_t") — 模型的分布发射头。可以是 “student_t”、“normal” 或 “negative_binomial”。 - loss (
string,可选,默认为"nll") — 与distribution_output头对应的模型的损失函数。对于参数化分布,它是负对数似然(nll)——目前这是唯一支持的损失函数。 - input_size (
int,可选,默认为 1) — 目标变量的大小,对于单变量目标,默认值为 1。对于多变量目标,该值将 > 1。 - lags_sequence (
list[int],可选,默认为[1, 2, 3, 4, 5, 6, 7]) — 作为协变量的输入时间序列的滞后项,通常由数据的频率决定。默认为[1, 2, 3, 4, 5, 6, 7],但我们建议根据数据集进行适当调整。 - scaling(
string或bool,可选,默认为"mean")— 是否通过“mean”缩放器、“std”缩放器对输入目标进行缩放,若为None则不进行缩放。若为True,则缩放器设置为“mean”。 - num_dynamic_real_features (
int,可选,默认为 0) — 动态实值特征的数量。 - num_static_real_features (
int,可选,默认为 0) — 静态实值特征的数量。 - num_static_categorical_features (
int,可选,默认为 0) — 静态分类特征的数量。 - num_time_features (
int,可选,默认为 0) — 输入时间序列中时间特征的数量。 - cardinality (
list[int],可选) — 每个静态分类特征的基数(不同取值的数量)。应为整数列表,其长度与num_static_categorical_features相同。如果num_static_categorical_features> 0,则不能为None。 - embedding_dimension (
list[int], 可选) — 每个静态分类特征的嵌入维度。应为整数列表,其长度与num_static_categorical_features相同。如果num_static_categorical_features> 0,则不能为None。 - d_model (
int,可选,默认为64) — 编码器层和池化层的维度。 - encoder_ffn_dim (
int,可选,默认为32) — 编码器中“中间”(通常称为前馈)层的维度。 - decoder_ffn_dim (
int,可选,默认为32) — 解码器中“中间”(通常称为前馈)层的维度。 - encoder_attention_heads (
int, 可选,默认为2) — Transformer 编码器中每个注意力层的注意力头数量。 - decoder_attention_heads (
int,可选,默认为2) — Transformer 解码器中每个注意力层的注意力头数量。 - encoder_layers (
int,可选,默认为2) — Transformer 编码器中的隐藏层数量。如果未设置,将使用与num_layers相同的值。 - decoder_layers (
int, 可选,默认为2) — Transformer 解码器中的隐藏层数量。如果未设置,将使用与num_layers相同的值。 - activation_function (
str,可选,默认为gelu) — 解码器中的非线性激活函数(函数或字符串)。例如,"gelu"、"relu"、"silu"等。 - dropout (
Union[float, int],可选,默认为0.05) — 所有 dropout 层的比率。 - encoder_layerdrop (
Union[float, int],可选,默认值为0.1) — 编码器的 LayerDrop 概率。有关更多详细信息,请参阅 [LayerDrop 论文](参见 https://huggingface.co/papers/1909.11556)。 - decoder_layerdrop (
Union[float, int],可选,默认值为0.1) — 解码器的 LayerDrop 概率。有关更多详细信息,请参阅 [LayerDrop 论文](参见 https://huggingface.co/papers/1909.11556)。 - attention_dropout (
Union[float, int],可选,默认为0.1) — 注意力概率的 dropout 比率。 - activation_dropout (
float,可选,默认为 0.1) — 前馈网络两层之间使用的 dropout 概率。 - num_parallel_samples (
int,可选,默认值为 100) — 推理过程中每个时间步并行生成的样本数量。 - init_std (
float,可选,默认为0.02) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。 - use_cache (
bool,可选,默认为True) — 模型是否应返回最后一次键/值注意力(并非所有模型都使用)。仅当config.is_decoder=True或模型为仅解码器生成式模型时相关。 - attention_type (
str, 可选,默认为 “prob”) — 编码器中使用的注意力机制。可以设置为 “prob”(Informer 的 ProbAttention)或 “full”(标准 Transformer 的常规自注意力)。 - sampling_factor (
int,可选,默认为 5) — ProbSparse 采样因子(仅在attention_type=“prob” 时生效)。用于控制缩减后的查询矩阵(Q_reduce)的输入长度。 - distil (
bool,可选,默认为True) — 是否在编码器中使用蒸馏。
这是用于存储 InformerModel 配置的类。它根据指定的参数实例化 Informer 模型,并定义模型架构。使用默认值实例化配置,将得到与 huggingface/informer-tourism-monthly 类似的配置。
配置对象继承自 PreTrainedConfig,可用于控制模型输出。有关更多信息,请参阅 PreTrainedConfig 的文档。
示例:
>>> from transformers import InformerConfig, InformerModel
>>> # Initializing an Informer configuration with 12 time steps for prediction
>>> configuration = InformerConfig(prediction_length=12)
>>> # Randomly initializing a model (with random weights) from the configuration
>>> model = InformerModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configInformerModel
class transformers.InformerModel
< source >( config: InformerConfig )
参数
- config (InformerConfig) — 模型的配置类,包含模型的所有参数。使用配置文件进行初始化时,不会加载与模型关联的权重,仅加载配置。请查看 from_pretrained() 方法以加载模型权重。
未附加任何特定头部的裸 Informer 模型,直接输出原始隐藏状态。
该模型继承自 PreTrainedModel。请查阅父类文档,了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头等)。
该模型也是 PyTorch torch.nn.Module 的子类。 请将其作为常规的 PyTorch Module 使用,有关通用用法和行为的所有事项,请参阅 PyTorch 文档。
forward
< source >( past_values: Tensorpast_time_features: Tensorpast_observed_mask: Tensorstatic_categorical_features: typing.Optional[torch.Tensor] = Nonestatic_real_features: typing.Optional[torch.Tensor] = Nonefuture_values: typing.Optional[torch.Tensor] = Nonefuture_time_features: typing.Optional[torch.Tensor] = Nonedecoder_attention_mask: typing.Optional[torch.LongTensor] = Noneencoder_outputs: list[torch.Tensor] | None = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneuse_cache: bool | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → Seq2SeqTSModelOutput or tuple(torch.Tensor)
参数
- past_values (
torch.Tensor形状为(batch_size, sequence_length)或(batch_size, sequence_length, input_size)) — 时间序列的过去值,作为上下文用于预测未来。该张量的序列大小必须大于模型的context_length,因为模型将使用较大的大小来构建滞后特征,即从过去添加的额外值,用作“额外上下文”。此处的
sequence_length等于config.context_length+max(config.lags_sequence)。如果未配置lags_sequence,则其等于config.context_length+ 7(因为默认情况下,config.lags_sequence中最大的回看索引为 7)。属性_past_length返回过去的实际长度。past_values是 Transformer 编码器接收的输入(可包含额外的特征,例如static_categorical_features、static_real_features、past_time_features以及滞后项)。可选地,缺失值需要用零进行填充,并通过
past_observed_mask进行指示。对于多元时间序列,
input_size> 1 维度是必需的,它对应于每个时间步中时间序列的变量数量。 - past_time_features (
torch.Tensor形状为(batch_size, sequence_length, num_features)) — 必需的时间特征,模型内部会将其添加到past_values. 这些特征可以是“月份”、“日期”等,以向量形式编码(例如作为傅里叶特征)。它们也可以是所谓的“年龄”特征,基本上帮助模型了解时间序列处于“生命周期的哪个阶段”。年龄特征在较远的时间步上值较小,并随着接近当前时间步而单调递增。节假日特征也是时间特征的一个很好的例子。这些特征充当输入的“位置编码”。因此,与 BERT 等模型不同(其位置编码是作为模型参数从零开始内部学习的),Time Series Transformer 需要提供额外的时间特征。Time Series Transformer 仅为
static_categorical_features学习额外的嵌入。可以将额外的动态真实协变量拼接到此张量中,但需注意这些特征在预测时必须是已知的。
这里的
num_features等于config.num_time_features+config.num_dynamic_real_features`。 - past_observed_mask (
torch.BoolTensor形状为(batch_size, sequence_length)或(batch_size, sequence_length, input_size), 可选) — 布尔掩码,用于指示哪些past_values已被观测到,哪些缺失。掩码值取自[0, 1]:- 对于已观测的值,
- 对于值为 缺失(即被零替换的 NaN)的情况,值为 0。
- static_categorical_features (
torch.LongTensor形状为(batch_size, number of static categorical features), 可选) — 可选的静态类别特征,模型将为其学习嵌入,并将其加到时间序列的值上。静态类别特征是指在所有时间步上取值都相同的特征(即随时间保持静态)。
静态类别特征的一个典型示例是时间序列 ID。
- static_real_features (
torch.Tensor形状为(batch_size, number of static real features), 可选) — 可选的静态实值特征,模型会将其添加到时间序列的值中。静态实值特征是指在所有时间步上具有相同值的特征(随时间保持静态)。静态实值特征的一个典型示例是促销信息。静态实值特征是那些在所有时间步上具有相同值(即随时间保持静态)的特征。
静态真实特征的一个典型示例是促销信息。
- future_values (
torch.Tensor形状为(batch_size, prediction_length)或(batch_size, prediction_length, input_size), 可选) — 时间序列的未来值,用作模型的标签。future_values是 Transformer 在训练期间需要学习输出的内容,其输入为past_values.此处的序列长度等于
prediction_length。有关详细信息,请参阅演示笔记本和代码片段。
可选地,在训练过程中,任何缺失值都需要用零进行替换,并通过
future_observed_mask进行指示。对于多元时间序列,
input_size> 1 维度是必需的,它对应于每个时间步中时间序列的变量数量。 - future_time_features (
torch.Tensor形状为(batch_size, prediction_length, num_features)) — 预测窗口所需的时间特征,模型内部会将其添加到future_values. 这些特征可以是“一年中的月份”、“一个月中的日期”等,以向量形式编码(例如作为傅里叶特征)。它们也可以是所谓的“年龄”特征,基本上帮助模型了解时间序列处于“生命周期的哪个阶段”。年龄特征在遥远的过去时间步具有较小的值,并随着我们接近当前时间步而单调递增。节假日特征也是时间特征的一个很好的例子。这些特征充当输入的“位置编码”。因此,与 BERT 等模型不同(其位置编码是作为模型参数从零开始内部学习的),Time Series Transformer 需要提供额外的时间特征。Time Series Transformer 仅为
static_categorical_features学习额外的嵌入。可以将额外的动态真实协变量拼接到此张量中,但需注意这些特征在预测时必须是已知的。
此处的
num_features等于config.num_time_features+config.num_dynamic_real_features。 - decoder_attention_mask(形状为
(batch_size, target_sequence_length)的torch.LongTensor,可选) — 用于避免对特定 token 索引执行注意力的掩码。默认情况下,会使用因果掩码,以确保模型只能查看之前的输入来预测未来。 - encoder_outputs (
tuple(tuple(torch.Tensor), optional) — 元组由last_hidden_state、hidden_states(optional)和attentions(optional)组成last_hidden_state的形状为(batch_size, sequence_length, hidden_size)(optional),是编码器最后一层输出的隐藏状态序列。用于解码器的交叉注意力。 - past_key_values (
~cache_utils.Cache, 可选) — 预计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加速顺序解码。这通常由past_key_values在解码的先前阶段返回,当use_cache=True或config.use_cache=True.仅允许将 Cache 实例作为输入,请参阅我们的 kv cache 指南。 如果未传入
past_key_values,则默认会初始化 DynamicCache。模型将输出与输入相同的缓存格式。
如果使用了
past_key_values,用户应仅输入未处理的input_ids(即未向该模型提供其过去键值状态的那些),其形状为(batch_size, unprocessed_length),而不是形状为(batch_size, sequence_length)的全部input_ids。 - use_cache (
bool,可选) — 如果设置为True,则会返回past_key_values键值状态,可用于加速解码(参见past_key_values)。
返回值
Seq2SeqTSModelOutput 或 tuple(torch.Tensor)
一个 Seq2SeqTSModelOutput 或 torch.Tensor 元组(如果传入了 return_dict=False 或 config.return_dict=False),其包含的元素取决于配置(InformerConfig)和输入。
InformerModel 的 forward 方法重写了 __call__ 特殊方法。
尽管前向传播的实现需要在此函数中定义,但之后应调用
Module实例,而不是直接调用此函数,因为前者会负责执行预处理和后处理步骤,而后者则会静默地忽略这些步骤。
last_hidden_state(形状为
(batch_size, sequence_length, hidden_size)的torch.Tensor)— 模型解码器最后一层输出的隐藏状态序列。如果使用了
past_key_values,则仅输出形状为(batch_size, 1, hidden_size)的序列的最后一个隐藏状态。past_key_values(
EncoderDecoderCache,可选,在传入use_cache=True或config.use_cache=True时返回)—— 它是一个 EncoderDecoderCache 实例。更多详情,请参阅我们的 kv cache 指南。包含预计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于(参见
past_key_values输入)加速顺序解码。decoder_hidden_states (
tuple(torch.Tensor),可选,在传入output_hidden_states=True或config.output_hidden_states=True时返回) — 一个torch.Tensor元组(如果模型具有嵌入层,则包含嵌入层输出的一个张量,以及每个层输出的一个张量),形状为(batch_size, sequence_length, hidden_size)。解码器在每一层输出处的隐藏状态,以及可选的初始嵌入输出。
decoder_attentions (
tuple(torch.Tensor),可选,在传入output_attentions=True或config.output_attentions=True时返回) — 一个torch.Tensor元组(每层一个),形状为(batch_size, num_heads, sequence_length, sequence_length)。解码器在注意力 softmax 之后的注意力权重,用于在自注意力头中计算加权平均值。
cross_attentions (
tuple(torch.Tensor),可选,在传入output_attentions=True或config.output_attentions=True时返回) — 一个torch.Tensor元组(每层一个),形状为(batch_size, num_heads, sequence_length, sequence_length)。解码器交叉注意力层在注意力 softmax 之后的注意力权重,用于在交叉注意力头中计算加权平均值。
encoder_last_hidden_state(形状为
(batch_size, sequence_length, hidden_size)的torch.Tensor,可选)— 模型编码器最后一层输出的隐藏状态序列。encoder_hidden_states (
tuple(torch.Tensor),可选,在传入output_hidden_states=True或config.output_hidden_states=True时返回) — 一个torch.Tensor元组(如果模型具有嵌入层,则包含嵌入层输出的一个张量,以及每个层输出的一个张量),形状为(batch_size, sequence_length, hidden_size)。编码器每层输出处的隐藏状态,以及可选的初始嵌入输出。
encoder_attentions(
tuple(torch.Tensor),可选,在传入output_attentions=True或config.output_attentions=True时返回)—— 一个torch.Tensor元组(每层一个),形状为(batch_size, num_heads, sequence_length, sequence_length)。编码器在注意力 softmax 之后的注意力权重,用于在自注意力头中计算加权平均值。
loc(形状为
torch.Tensor的(batch_size,)或(batch_size, input_size),可选)—— 用于平移每个时间序列上下文窗口的值,使模型输入具有相同的量级,随后再平移回原始量级。scale(形状为
torch.Tensor的(batch_size,)或(batch_size, input_size),可选)— 用于缩放每个时间序列上下文窗口的值,以便为模型提供具有相同量级的输入,随后再将其缩放回原始量级。static_features (
torch.Tensor,形状为(batch_size, feature size),可选) — 批次中每个时间序列的静态特征,在推理时会被复制到协变量中。
示例:
>>> from huggingface_hub import hf_hub_download
>>> import torch
>>> from transformers import InformerModel
>>> file = hf_hub_download(
... repo_id="hf-internal-testing/tourism-monthly-batch", filename="train-batch.pt", repo_type="dataset"
... )
>>> batch = torch.load(file)
>>> model = InformerModel.from_pretrained("huggingface/informer-tourism-monthly")
>>> # during training, one provides both past and future values
>>> # as well as possible additional features
>>> outputs = model(
... past_values=batch["past_values"],
... past_time_features=batch["past_time_features"],
... past_observed_mask=batch["past_observed_mask"],
... static_categorical_features=batch["static_categorical_features"],
... static_real_features=batch["static_real_features"],
... future_values=batch["future_values"],
... future_time_features=batch["future_time_features"],
... )
>>> last_hidden_state = outputs.last_hidden_stateInformerForPrediction
class transformers.InformerForPrediction
< source >( config: InformerConfig )
参数
- config (InformerConfig) — 模型的配置类,包含模型的所有参数。使用配置文件进行初始化时,不会加载与模型关联的权重,仅加载配置。请查看 from_pretrained() 方法以加载模型权重。
用于时间序列预测的 Informer 模型,其顶部带有分布头。
该模型继承自 PreTrainedModel。请查阅父类文档,了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头等)。
该模型也是 PyTorch torch.nn.Module 的子类。 请将其作为常规的 PyTorch Module 使用,有关通用用法和行为的所有事项,请参阅 PyTorch 文档。
forward
< source >( past_values: Tensorpast_time_features: Tensorpast_observed_mask: Tensorstatic_categorical_features: typing.Optional[torch.Tensor] = Nonestatic_real_features: typing.Optional[torch.Tensor] = Nonefuture_values: typing.Optional[torch.Tensor] = Nonefuture_time_features: typing.Optional[torch.Tensor] = Nonefuture_observed_mask: typing.Optional[torch.Tensor] = Nonedecoder_attention_mask: typing.Optional[torch.LongTensor] = Noneencoder_outputs: list[torch.Tensor] | None = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneuse_cache: bool | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → Seq2SeqTSModelOutput or tuple(torch.Tensor)
参数
- past_values (
torch.Tensor形状为(batch_size, sequence_length)或(batch_size, sequence_length, input_size)) — 时间序列的过去值,作为上下文用于预测未来。该张量的序列大小必须大于模型的context_length,因为模型将使用较大的大小来构建滞后特征,即从过去添加的额外值,用作“额外上下文”。此处的
sequence_length等于config.context_length+max(config.lags_sequence)。如果未配置lags_sequence,则其等于config.context_length+ 7(因为默认情况下,config.lags_sequence中最大的回看索引为 7)。属性_past_length返回过去的实际长度。past_values是 Transformer 编码器接收的输入(可包含额外的特征,例如static_categorical_features、static_real_features、past_time_features以及滞后项)。可选地,缺失值需要用零进行填充,并通过
past_observed_mask进行指示。对于多元时间序列,
input_size> 1 维度是必需的,它对应于每个时间步中时间序列的变量数量。 - past_time_features (
torch.Tensor形状为(batch_size, sequence_length, num_features)) — 必需的时间特征,模型内部会将其添加到past_values. 这些特征可以是“月份”、“日期”等,以向量形式编码(例如作为傅里叶特征)。它们也可以是所谓的“年龄”特征,基本上帮助模型了解时间序列处于“生命周期的哪个阶段”。年龄特征在较远的时间步上值较小,并随着接近当前时间步而单调递增。节假日特征也是时间特征的一个很好的例子。这些特征充当输入的“位置编码”。因此,与 BERT 等模型不同(其位置编码是作为模型参数从零开始内部学习的),Time Series Transformer 需要提供额外的时间特征。Time Series Transformer 仅为
static_categorical_features学习额外的嵌入。可以将额外的动态真实协变量拼接到此张量中,但需注意这些特征在预测时必须是已知的。
这里的
num_features等于config.num_time_features+config.num_dynamic_real_features`。 - past_observed_mask (
torch.BoolTensor形状为(batch_size, sequence_length)或(batch_size, sequence_length, input_size), 可选) — 布尔掩码,用于指示哪些past_values已被观测到,哪些缺失。掩码值取自[0, 1]:- 对于已观测的值,
- 对于值为 缺失(即被零替换的 NaN)的情况,值为 0。
- static_categorical_features (
torch.LongTensor形状为(batch_size, number of static categorical features), 可选) — 可选的静态类别特征,模型将为其学习嵌入,并将其加到时间序列的值上。静态类别特征是指在所有时间步上取值都相同的特征(即随时间保持静态)。
静态类别特征的一个典型示例是时间序列 ID。
- static_real_features (
torch.Tensor形状为(batch_size, number of static real features), 可选) — 可选的静态实值特征,模型会将其添加到时间序列的值中。静态实值特征是指在所有时间步上具有相同值的特征(随时间保持静态)。静态实值特征的一个典型示例是促销信息。静态实值特征是那些在所有时间步上具有相同值(即随时间保持静态)的特征。
静态真实特征的一个典型示例是促销信息。
- future_values (
torch.Tensor形状为(batch_size, prediction_length)或(batch_size, prediction_length, input_size), 可选) — 时间序列的未来值,用作模型的标签。future_values是 Transformer 在训练期间需要学习输出的内容,其输入为past_values.此处的序列长度等于
prediction_length。有关详细信息,请参阅演示笔记本和代码片段。
可选地,在训练过程中,任何缺失值都需要用零进行替换,并通过
future_observed_mask进行指示。对于多元时间序列,
input_size> 1 维度是必需的,它对应于每个时间步中时间序列的变量数量。 - future_time_features (
torch.Tensor形状为(batch_size, prediction_length, num_features)) — 预测窗口所需的时间特征,模型内部会将其添加到future_values. 这些特征可以是“一年中的月份”、“一个月中的日期”等,以向量形式编码(例如作为傅里叶特征)。它们也可以是所谓的“年龄”特征,基本上帮助模型了解时间序列处于“生命周期的哪个阶段”。年龄特征在遥远的过去时间步具有较小的值,并随着我们接近当前时间步而单调递增。节假日特征也是时间特征的一个很好的例子。这些特征充当输入的“位置编码”。因此,与 BERT 等模型不同(其位置编码是作为模型参数从零开始内部学习的),Time Series Transformer 需要提供额外的时间特征。Time Series Transformer 仅为
static_categorical_features学习额外的嵌入。可以将额外的动态真实协变量拼接到此张量中,但需注意这些特征在预测时必须是已知的。
此处的
num_features等于config.num_time_features+config.num_dynamic_real_features。 - future_observed_mask (
torch.BoolTensor形状为(batch_size, sequence_length)或(batch_size, sequence_length, input_size), 可选) — 布尔掩码,用于指示哪些future_values是被观测到的,哪些是缺失的。掩码值取自 区间[0, 1]:- 对于已观测的值,
- 对于值为 缺失(即被零替换的 NaN)的情况,值为 0。
此掩码用于在最终损失计算中过滤掉缺失值。
- decoder_attention_mask(形状为
(batch_size, target_sequence_length)的torch.LongTensor,可选) — 用于避免对特定 token 索引执行注意力的掩码。默认情况下,会使用因果掩码,以确保模型只能查看之前的输入来预测未来。 - encoder_outputs (
tuple(tuple(torch.Tensor), optional) — 元组由last_hidden_state、hidden_states(optional)和attentions(optional)组成last_hidden_state的形状为(batch_size, sequence_length, hidden_size)(optional),是编码器最后一层输出的隐藏状态序列。用于解码器的交叉注意力。 - past_key_values (
~cache_utils.Cache, 可选) — 预计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加速顺序解码。这通常由past_key_values在解码的先前阶段返回,当use_cache=True或config.use_cache=True.仅允许将 Cache 实例作为输入,请参阅我们的 kv cache 指南。 如果未传入
past_key_values,则默认会初始化 DynamicCache。模型将输出与输入相同的缓存格式。
如果使用了
past_key_values,用户应仅输入未处理的input_ids(即未向该模型提供其过去键值状态的那些),其形状为(batch_size, unprocessed_length),而不是形状为(batch_size, sequence_length)的全部input_ids。 - use_cache (
bool,可选) — 如果设置为True,则会返回past_key_values键值状态,可用于加速解码(参见past_key_values)。
返回值
Seq2SeqTSModelOutput 或 tuple(torch.Tensor)
一个 Seq2SeqTSModelOutput 或 torch.Tensor 元组(如果传入了 return_dict=False 或 config.return_dict=False),其包含的元素取决于配置(InformerConfig)和输入。
InformerForPrediction 的 forward 方法重写了 __call__ 特殊方法。
尽管前向传播的实现需要在此函数中定义,但之后应调用
Module实例,而不是直接调用此函数,因为前者会负责执行预处理和后处理步骤,而后者则会静默地忽略这些步骤。
last_hidden_state(形状为
(batch_size, sequence_length, hidden_size)的torch.Tensor)— 模型解码器最后一层输出的隐藏状态序列。如果使用了
past_key_values,则仅输出形状为(batch_size, 1, hidden_size)的序列的最后一个隐藏状态。past_key_values(
EncoderDecoderCache,可选,在传入use_cache=True或config.use_cache=True时返回)—— 它是一个 EncoderDecoderCache 实例。更多详情,请参阅我们的 kv cache 指南。包含预计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于(参见
past_key_values输入)加速顺序解码。decoder_hidden_states (
tuple(torch.Tensor),可选,在传入output_hidden_states=True或config.output_hidden_states=True时返回) — 一个torch.Tensor元组(如果模型具有嵌入层,则包含嵌入层输出的一个张量,以及每个层输出的一个张量),形状为(batch_size, sequence_length, hidden_size)。解码器在每一层输出处的隐藏状态,以及可选的初始嵌入输出。
decoder_attentions (
tuple(torch.Tensor),可选,在传入output_attentions=True或config.output_attentions=True时返回) — 一个torch.Tensor元组(每层一个),形状为(batch_size, num_heads, sequence_length, sequence_length)。解码器在注意力 softmax 之后的注意力权重,用于在自注意力头中计算加权平均值。
cross_attentions (
tuple(torch.Tensor),可选,在传入output_attentions=True或config.output_attentions=True时返回) — 一个torch.Tensor元组(每层一个),形状为(batch_size, num_heads, sequence_length, sequence_length)。解码器交叉注意力层在注意力 softmax 之后的注意力权重,用于在交叉注意力头中计算加权平均值。
encoder_last_hidden_state(形状为
(batch_size, sequence_length, hidden_size)的torch.Tensor,可选)— 模型编码器最后一层输出的隐藏状态序列。encoder_hidden_states (
tuple(torch.Tensor),可选,在传入output_hidden_states=True或config.output_hidden_states=True时返回) — 一个torch.Tensor元组(如果模型具有嵌入层,则包含嵌入层输出的一个张量,以及每个层输出的一个张量),形状为(batch_size, sequence_length, hidden_size)。编码器每层输出处的隐藏状态,以及可选的初始嵌入输出。
encoder_attentions(
tuple(torch.Tensor),可选,在传入output_attentions=True或config.output_attentions=True时返回)—— 一个torch.Tensor元组(每层一个),形状为(batch_size, num_heads, sequence_length, sequence_length)。编码器在注意力 softmax 之后的注意力权重,用于在自注意力头中计算加权平均值。
loc(形状为
torch.Tensor的(batch_size,)或(batch_size, input_size),可选)—— 用于平移每个时间序列上下文窗口的值,使模型输入具有相同的量级,随后再平移回原始量级。scale(形状为
torch.Tensor的(batch_size,)或(batch_size, input_size),可选)— 用于缩放每个时间序列上下文窗口的值,以便为模型提供具有相同量级的输入,随后再将其缩放回原始量级。static_features (
torch.Tensor,形状为(batch_size, feature size),可选) — 批次中每个时间序列的静态特征,在推理时会被复制到协变量中。
示例:
>>> from huggingface_hub import hf_hub_download
>>> import torch
>>> from transformers import InformerForPrediction
>>> file = hf_hub_download(
... repo_id="hf-internal-testing/tourism-monthly-batch", filename="train-batch.pt", repo_type="dataset"
... )
>>> batch = torch.load(file)
>>> model = InformerForPrediction.from_pretrained(
... "huggingface/informer-tourism-monthly"
... )
>>> # during training, one provides both past and future values
>>> # as well as possible additional features
>>> outputs = model(
... past_values=batch["past_values"],
... past_time_features=batch["past_time_features"],
... past_observed_mask=batch["past_observed_mask"],
... static_categorical_features=batch["static_categorical_features"],
... static_real_features=batch["static_real_features"],
... future_values=batch["future_values"],
... future_time_features=batch["future_time_features"],
... )
>>> loss = outputs.loss
>>> loss.backward()
>>> # during inference, one only provides past values
>>> # as well as possible additional features
>>> # the model autoregressively generates future values
>>> outputs = model.generate(
... past_values=batch["past_values"],
... past_time_features=batch["past_time_features"],
... past_observed_mask=batch["past_observed_mask"],
... static_categorical_features=batch["static_categorical_features"],
... static_real_features=batch["static_real_features"],
... future_time_features=batch["future_time_features"],
... )
>>> mean_prediction = outputs.sequences.mean(dim=1)