FEDformer
FEDformer 模型解决了在长周期预测中寻找复杂时间模式可靠依赖关系的挑战。
该架构具有以下独特特点:- 基于移动平均滤波器的内置渐进式趋势和季节成分分解。- 频率增强块(Frequency Enhanced Block)和频率增强注意力(Frequency Enhanced Attention),用于在傅里叶变换等基的稀疏表示上执行注意力。- Vaswani 等人 (2017) 提出的经典编码器-解码器,带有多头注意力机制。
FEDformer 模型采用三部分方法来定义其嵌入:- 它使用从卷积网络获得的编码自回归特征。- 使用从日历特征获得的绝对位置嵌入。
1. 辅助函数
source
AutoCorrelationLayer
自相关层
source
LayerNorm
专门为季节部分设计的 layernorm
source
Decoder
FEDformer 解码器
source
DecoderLayer
具有渐进式分解架构的 FEDformer 解码器层
source
Encoder
FEDformer 编码器
source
EncoderLayer
具有渐进式分解架构的 FEDformer 编码器层
source
FourierCrossAttention
傅里叶交叉注意力层
source
FourierBlock
傅里叶块
source
get_frequency_modes
获取频域模式:‘random’ 用于随机采样,‘else’ 用于采样最低模式;
2. 模型
source
FEDformer
*FEDformer
FEDformer 模型解决了在长周期预测中寻找复杂时间模式可靠依赖关系的挑战。
该架构具有以下独特特点:- 基于移动平均滤波器的内置渐进式趋势和季节成分分解。- 频率增强块(Frequency Enhanced Block)和频率增强注意力(Frequency Enhanced Attention),用于在傅里叶变换等基的稀疏表示上执行注意力。- Vaswani 等人 (2017) 提出的经典编码器-解码器,带有多头注意力机制。
FEDformer 模型采用三部分方法来定义其嵌入:- 它使用从卷积网络获得的编码自回归特征。- 使用从日历特征获得的绝对位置嵌入。
参数
h
: int, 预测范围。
input_size
: int, 用于截断训练反向传播的最大序列长度。
stat_exog_list
: str list, 静态外部变量列。
hist_exog_list
: str list, 历史外部变量列。
futr_exog_list
: str list, 未来外部变量列。
decoder_input_size_multiplier
: float = 0.5, .
version
: str = ‘Fourier’, 模型版本。
modes
: int = 64, 傅里叶块的模式数量。
mode_select
: str = ‘random’, 傅里叶块的模式选择方法。
hidden_size
: int=128, 嵌入和编码器的单元数。
dropout
: float (0, 1), 整个 Autoformer 架构中的 dropout 率。
n_head
: int=8, 控制多头注意力机制的数量。
conv_hidden_size
: int=32, 卷积编码器的通道数。
activation
: str=GELU
, 激活函数,可选值为 [‘ReLU’, ‘Softplus’, ‘Tanh’, ‘SELU’, ‘LeakyReLU’, ‘PReLU’, ‘Sigmoid’, ‘GELU’].
encoder_layers
: int=2, TCN 编码器的层数。
decoder_layers
: int=1, MLP 解码器的层数。
MovingAvg_window
: int=25, 移动平均滤波器的窗口大小。
loss
: PyTorch module, 从 损失函数集合 实例化的训练损失函数类。
valid_loss
: PyTorch module, 从 损失函数集合 实例化的验证损失函数类。
max_steps
: int=1000, 最大训练步数。
learning_rate
: float=1e-3, 学习率,取值范围 (0, 1)。
num_lr_decays
: int=-1, 学习率衰减次数,均匀分布在 max_steps 中。
early_stop_patience_steps
: int=-1, 早停前的验证迭代次数。
val_check_steps
: int=100, 每隔多少训练步检查一次验证损失。
batch_size
: int=32, 每个批次中不同序列的数量。
valid_batch_size
: int=None, 每个验证和测试批次中不同序列的数量,如果为 None 则使用 batch_size。
windows_batch_size
: int=1024, 每个训练批次中抽样的窗口数量,默认为全部。
inference_windows_batch_size
: int=1024, 每个推理批次中抽样的窗口数量。
start_padding_enabled
: bool=False, 如果为 True,模型将在时间序列开头填充零,填充长度由 input size 决定。
step_size
: int=1, 每个时间数据窗口之间的步长。
scaler_type
: str=‘robust’, 时间输入归一化的缩放器类型,参见 时间缩放器。
random_seed
: int=1, 用于 pytorch 初始化器和 numpy 生成器的随机种子。
drop_last_loader
: bool=False, 如果为 True,TimeSeriesDataLoader
会丢弃最后一个非完整批次。
alias
: str, 可选,模型的自定义名称。
optimizer
: Subclass of ‘torch.optim.Optimizer’, 可选,用户指定的优化器,取代默认选择 (Adam)。
optimizer_kwargs
: dict, 可选,用户指定的 optimizer
使用的参数列表。
lr_scheduler
: Subclass of ‘torch.optim.lr_scheduler.LRScheduler’, 可选,用户指定的 lr_scheduler,取代默认选择 (StepLR)。
lr_scheduler_kwargs
: dict, 可选,用户指定的 lr_scheduler
使用的参数列表。
dataloader_kwargs
: dict, 可选,TimeSeriesDataLoader
传递给 PyTorch Lightning dataloader 的参数列表。
**trainer_kwargs
: int, 继承自 PyTorch Lighning 的 trainer 的关键字 trainer 参数。
*
FEDformer.fit
*拟合。
fit
方法使用初始化时定义的参数(learning_rate
, windows_batch_size
等)和 loss
函数来优化神经网络的权重。在 fit
中,我们使用一个 PyTorch Lightning Trainer
,它继承了初始化时的 self.trainer_kwargs
来定制其输入,参见 PL 的 trainer 参数。
该方法设计用于兼容类似 SKLearn 的类,特别是兼容 StatsForecast 库。
默认情况下,model
不保存训练检查点以节省磁盘空间;若要启用,请在 __init__
中将 enable_checkpointing=True
。
参数
dataset
: NeuralForecast 的 TimeSeriesDataset
,参见 文档。
val_size
: int, 用于时间序列交叉验证的验证集大小。
random_seed
: int=None, 用于 pytorch 初始化器和 numpy 生成器的随机种子,会覆盖 model.__init__ 中的设置。
test_size
: int, 用于时间序列交叉验证的测试集大小。
*
FEDformer.predict
*预测。
使用 PL 的 Trainer
执行 predict_step
进行神经网络预测。
参数
dataset
: NeuralForecast 的 TimeSeriesDataset
,参见 文档。
test_size
: int=None, 用于时间序列交叉验证的测试集大小。
step_size
: int=1, 每个窗口之间的步长。
random_seed
: int=None, 用于 pytorch 初始化器和 numpy 生成器的随机种子,会覆盖 model.__init__ 中的设置。
quantiles
: float 列表,可选 (默认=None),要预测的目标分位数。
**data_module_kwargs
: PL 的 TimeSeriesDataModule 参数,参见 文档。*