TimeGAN_Time-series generative adversarial networks

论文:Time-series generative adversarial networks

代码:https://github.com/jsyoon0823/TimeGAN

现有的时间序列研究中,自回归模型明确地将时间序列模型分解为条件分布的乘积。这种方法在预测中表现优秀,但是无需添加外部条件就能获得新序列信息,作者考虑到这并不是一种“生成”方法。另一方面的研究是使用GAN,这种方法简单地应用标准的loss函数,可能不能捕捉序列之间的逐步依赖关系。

因此作者将上述两种不同实现机制的方法结合在一起——时间序列生成对抗网络(TimeGAN)。首先,除了真实序列和合成序列上的无监督对抗损失之外,还使用原始数据作为监督引入了逐步监督损失。其次,引入了一个嵌入网络以提供特征和潜在表示之间的可逆映射,从而减少了对抗性学习空间的高维性。这利用了这样一个事实。通过联合训练嵌入网络和生成器网络,可以将监督损失最小化。最后,将框架通用化以处理混合数据设置,在该设置中可以同时生成静态数据和时间序列数据。

1. Model

S为静态特征向量, χ \chi χ表示时序特征。目标:
在这里插入图片描述
在这里插入图片描述
TimeGAN由四个网络组件组成:嵌入功能,恢复功能,序列生成器和序列鉴别器。 an embedding function, recovery function, sequence generator, and sequence discriminator. 自动编码组件(前两个)与对抗组件(后两个)一起训练,从而使TimeGAN同时学习了编码特征、生成表示形态并随时间迭代。嵌入网络提供了潜在的空间,对抗网络在该空间内运行,并且真实数据和合成数据的潜在动态通过监督的loss实现同步。

1.1 Embedding and Recovery Functions

H s H_s Hs H χ H_\chi Hχ表示S和 χ \chi χ的潜在向量空间。在模型中,实现静态和时间特征到他们的潜在编码的方法是:
在这里插入图片描述

在这里,编码过程是指静态和时序特征往潜在向量空间过渡的过程,而恢复过程是指从潜在向量往特征恢复的过程。构建这个绕圈圈的过程的目的可能是为了构建可训练的模型。

1.2 Sequence Generator and Discriminator

Z s Z_s Zs Z χ Z_\chi Zχ表示随机向量,以生成 H s H_s Hs H χ H_\chi Hχ。y表示分类信息,即标签。

在这里插入图片描述

在这里插入图片描述

在这部分中,生成器负责通过已定义的向量计算出潜在向量,判别器通过潜在向量计算出静态和动态数据对应的类别信息。

1.3 模型总图

上述四个组件构成如下模型图:

在这里插入图片描述

这里涉及到三类loss计算,详见论文。而loss在训练中发挥作用的部分如下图:

在这里插入图片描述

最优化目标作者在论文中详细地说明了。在最优化过程中,作者引入了超参数来平衡这几个loss。

1.4 实验评估

实验评估中,作者依据原则为:

(1)多样性-应该分发样本以覆盖真实数据;
(2)保真度-样本应与真实数据没有区别;
(3)实用性-当样本用于相同的预测目的(即综合训练,实测)时,样本应与真实数据一样有用。

作者提出两类score(Lower the Better):

  • Discriminative Score :为了量化相似性,我们训练了 post-hoc 序列分类模型来区分原始数据集和生成的数据集。首先,每个原始序列都标记为真实,而每个生成的序列都标记为非真实。然后,训练一个现成的分类器以区分这两个类,以此作为标准的监督任务。然后,在保留的测试集上报告分类错误,从而对保真度进行定量评估。
  • Predictive Score :为了保证实用性,采样数据应继承原始数据的预测特征。此外,作者希望TimeGAN在捕获随时间变化的条件分布方面表现出色。因此,使用合成数据集,作者训练了事后序列预测模型来预测每个输入序列上的下一步时间向量。然后,在原始数据集上评估训练后的模型。性能是根据MAE来衡量的;对于基于事件的数据,将MAE计算为|1-事件发生的估计概率|。

2. 总结

TimeGAN将无监督GAN方法的多功能性与对有监督的自回归模型提供的条件概率原理结合。本论文无论是在模型训练还是模型评测中都大量使用RNN/LSTM模型,但是作者并没有解释为什么。

### TimeGAN Overview Time-series Generative Adversarial Networks (TimeGANs)是一种用于时间序列数据生成的方法,它结合了对抗网络(GAN)和循环神经网络(RNN),旨在捕捉复杂的时间依赖关系并合成逼真的时间序列数据[^4]。 #### 工作原理 TimeGAN通过引入嵌入器(embedder),恢复者(recovery network), 发生器(generator),判别器(discriminator),以及监督损失(supervised loss)来构建模型框架。具体来说: - 嵌入器负责将原始真实样本映射到潜在空间; - 恢复者尝试从潜在表示重建原始输入; - 发生器学习如何基于随机噪声向量创建新的潜在变量轨迹; - 判别器区分来自发生器的数据与实际观测值之间的差异; - 监督损失确保生成的序列不仅看起来像真实的序列而且遵循相同的分布特性。 这种设计使得TimeGAN能够在保持时间动态的同时有效地模拟多维时间序列中的模式[^4]。 #### 实现步骤 以下是TimeGAN的主要实现阶段概述: 1. 数据预处理:标准化或归一化时间序列数据集以便于后续操作。 2. 构建四个核心组件——Embedding Network, Recovery Network, Generator Network 和 Discriminator Network. 3. 训练过程分为两个主要部分: - 更新D和E/R参数以最小化重构误差和分类错误率; - 使用先前训练好的D指导G的学习,最大化其欺骗能力同时最小化预测偏差。 4. 测试/评估阶段验证所学模型的质量。 ```python import tensorflow as tf from tensorflow.keras.layers import Input, LSTM, Dense from tensorflow.keras.models import Model def make_generator_network(seq_len=24, n_features=6): noise_input = Input(shape=(seq_len, n_features)) h_gen = LSTM(units=n_features*2)(noise_input) h_gen = Dense(n_features)(h_gen) model = Model(inputs=[noise_input], outputs=h_gen) return model def make_discriminator_network(timesteps=24, features=6): seq_input = Input(shape=(timesteps, features)) h_dis = LSTM(units=timesteps//2)(seq_input) validity = Dense(1, activation='sigmoid')(h_dis) model = Model(inputs=[seq_input], outputs=validity) return model ``` 上述代码片段展示了简化版的发生器和鉴别器结构定义;完整的TimeGAN还需要加入其他辅助模块如嵌入层等,并调整超参数设置以适应特定应用场景的需求。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值