论文摘要:去噪扩散概率模型 (DDPM) 正在成为生成模型的主要范式。它最近在音频合成、时间序列插补和预测方面取得了突破。在本文中,论文提出了 Diffusion-TS,这是一种新颖的基于扩散的框架,它通过使用具有解纠缠时间表示的编码器-解码器转换器生成高质量的多变量时间序列样本,其中分解技术指导 Diffusion-TS 捕获时间序列的语义含义,而转换器从嘈杂的模型输入中挖掘详细的顺序信息。与现有的基于扩散的方法不同,论文训练模型直接重建样本,而不是每个扩散步骤中的噪声,并结合基于傅里叶的损失项。Diffusion-TS 有望生成同时满足可解释性和真实性的时间序列。此外,结果表明,所提出的 Diffusion-TS 可以很容易地扩展到条件生成任务,例如预测和插补,而无需任何模型更改。这也促使我们进一步探索 Diffusion-TS 在不规则设置下的性能。最后,通过定性和定量实验,结果表明 Diffusion-TS 在时间序列的各种现实分析中取得了最先进的结果。
Diffusion-TS 是一个基于扩散的框架,它可以有条件和无条件地生成一般时间序列样本。如图 1 所示,该框架包含两部分:序列编码器和可解释解码器,后者将时间序列分解为季节性部分和趋势部分。趋势部分包含每个模块输出的多项式回归器和提取的平均值。对于季节性部分,我们重用基于傅里叶级数的三角表示。关于培训、采样和更多详细信息,请参阅在 ICLR 2024 中的论文。
Dataset Preparation数据集准备
All the four real-world datasets (Stocks, ETTh1, Energy and fMRI) can be obtained from Google Drive. Please download dataset.zip , then unzip and copy it to the folder ./Data
in our repository.
所有四个真实世界数据集(Stocks、ETTh1、Energy 和 fMRI)都可以从 Google Drive 获得。请下载 dataset.zip,然后解压缩并将其复制到我们存储库中的 ./Data 文件夹中。
Running the Code运行代码
The code requires conda3 (or miniconda3), and one CUDA capable GPU. The instructions below guide you regarding running the codes in this repository.
该代码需要 conda3(或 miniconda3)和一个支持 CUDA 的 GPU。以下说明将指导您运行此存储库中的代码。
Environment & Libraries环境和库
The full libraries list is provided as a requirements.txt
in this repo. Please create a virtual environment with conda
or venv
and run
完整的库列表在此存储库中作为requirements.txt提供。请使用 conda 或 venv 创建一个虚拟环境并运行
(myenv) $ pip install -r requirements.txt
Training & Sampling培训和采样
For training, you can reproduce the experimental results of all benchmarks by runing对于训练,您可以通过运行
(myenv) $ python main.py --name {name} --config_file {config.yaml} --gpu 0 --train
Note: We also provided the corresponding .yml
files (only stocks, sines, mujoco, etth, energy and fmri) under the folder ./Config
where all possible option can be altered. You may need to change some parameters in the model for different scenarios. For example, we use the whole data to train model for unconditional evaluation, then training_ratio is set to 1 by default. As for conditional generation, we need to divide data set thus it should be changed to a value < 1.
注意: 我们还在文件夹 ./Config
下提供了相应的 .yml
文件(仅 stocks、sines、mujoco、etth、energy 和 fmri),其中可以更改所有可能的选项。您可能需要针对不同的场景更改模型中的某些参数。例如,我们使用整个数据来训练模型进行无条件评估,那么 training_ratio 默认设置为 1。至于条件生成,我们需要对数据集进行划分,因此应该将其更改为 1 <值。
While training, the script will save check points to the results folder after a fixed number of epochs. Once trained, please use the saved model for sampling by running
在训练时,脚本会在固定数量的 epoch 后将检查点保存到 results 文件夹。训练完成后,请使用保存的模型进行采样,方法是运行
Unconstrained自由的
(myenv) $ python main.py --name {name} --config_file {config.yaml} --gpu 0 --sample 0 --milestone {checkpoint_number}
‘’'shell notranslate 位置相对溢出 - auto
(myenv) $ python main.py --name {name} --config_file {config.yaml} --gpu 0 --sample 0 --milestone {checkpoint_number}
#### Imputation归 责[](https://github.com/Y-debug-sys/Diffusion-TS#imputation)```shell notranslate position-relative overflow-auto
(myenv) $ python main.py --name {name} --config_file {config.yaml} --gpu 0 --sample 1 --milestone {checkpoint_number} --mode infill --missing_ratio {missing_ratio}
Forecasting预测
(myenv) $ python main.py --name {dataset_name} --config_file {config.yaml} --gpu 0 --sample 1 --milestone {checkpoint_number} --mode predict --pred_len {pred_len}
Visualization and Evaluation可视化和评估
After sampling, synthetic data and orginal data are stored in .npy
file format under the output folder, which can be directly read to calculate quantitative metrics such as discriminative, predictive, correlational and context-FID score. You can also reproduce the visualization results using t-SNE or kernel plotting, and all of these evaluational codes can be found in the folder ./Utils
. Please refer to .ipynb
tutorial files in this repo for more detailed implementations.
采样后,合成数据和原始数据以 .npy
文件格式存储在输出文件夹下,可以直接读取以计算判别性、预测性、相关性和上下文 FID 分数等定量指标。您还可以使用 t-SNE 或内核绘图来重现可视化结果,所有这些评估代码都可以在文件夹 ./Utils
中找到。有关更详细的实现,请参阅此存储库中的 .ipynb
教程文件。
Note: All the metrics can be found in the ./Experiments
folder. Additionally, by default, for datasets other than the Sine dataset (because it do not need normalization), their normalized forms are saved in {...}_norm_truth.npy
. Therefore, when you run the Jupternotebook for dataset other than Sine, just uncomment and rewrite the corresponding code written at the beginning.
注意: 所有指标都可以在 ./Experiments
文件夹中找到。此外,默认情况下,对于 Sine 数据集以外的数据集(因为它不需要归一化),它们的归一化形式保存在 {...} 中_norm_truth.npy
的因此,当你对 Sine 以外的数据集运行 Jupternotebook 时,只需取消注释并重写开头编写的相应代码即可。
参考代码
https://github.com/Y-debug-sys/Diffusion-TS
https://github.com/lucidrains/denoising-diffusion-pytorch
https://github.com/cientgu/VQ-Diffusion
https://github.com/XiangLi1999/Diffusion-LM
https://github.com/philipperemy/n-beats
https://github.com/salesforce/ETSformer
https://github.com/ermongroup/CSDI
https://github.com/jsyoon0823/TimeGAN