GAN(生成对抗网络)在合成时间序列数据中的应用

本文介绍了TimeGAN,一种结合监督学习和无监督学习的时间序列生成对抗网络,旨在捕捉时间上的相关性。TimeGAN通过自编码器学习特征和时间的动力学,然后在潜在空间中进行操作,生成的数据质量高,适用于合成时间序列数据。
摘要由CSDN通过智能技术生成

GAN(生成对抗网络)在合成时间序列数据中的应用

(本文基本是对Jansen 的《Machine Learning for Algorithmic Trading》第二版的第21章进行翻译、学习和梳理,此项为课程作业,以此形式进行记录和自我学习)

利用GAN生成合成时间序列数据,所面临的挑战要大于利用GAN生成合成图片。除了要学习每个给定点分布(如某个时间戳上股票价格的分布),GAN还需要学习时间动力学——这种动力学是两个序列相关性背后的驱动力。

Yoon等人在2019年12月介绍了一种新颖的时间序列生成对抗网络(TimeGAN)框架,这种框架同时结合了监督学习和无监督学习,以解释时间上的相关性。这个模型在学习时间序列的内在空间(a time-series embedding space)时,同时对监督学习和对抗训练这两个目标进行优化。这能够使模型能够在对历史数据采样的同时,也能观测到其中的动力学(dynamics observed)。模型的作者将许多时间序列(如股票价格)用于测试模型,结果发现合成数据的质量要好于许多其他的数据。

本文在于展示TimeGAN的工作方式以及关键的实施步骤。

1. TimeGAN文章的摘要与介绍

在Yoon等人的研究发表之前,将GAN作为生成序列数据的方法的研究,都没有对“时间上的动力学”(temporal dynamics,即序列的自相关性)给予足够的重视,而一般的作为解决预测问题的监督学习算法,则天然具有确定性(inherently deterministic)。因此对两种框架取其精华弃其糟粕,则是Yoon等人创新的地方。在文章中,Yoon等人结合了非监督学习的范式灵活的特点和监督学习对于训练过程控制力强的性质,让TimeGAN模型能够把“时间上的动力学”考虑进模型中。

具体而言,序列相关性作为时间序列数据的一种内在性质,对以生成时间序列为目的生成模型提出了一个很大的挑战。一个好的生成模型不仅应该学习到每个时间戳上的特征分布(distributiions of features within each time point),而且还应该学习到不同时点之间变量间的潜在复杂关系(potentially complex dynamics of those variables across time)。用数学的语言表达,就是说如果现在需要对一个序列数据 X 1 : T = ( X 1 , ⋯   , X T ) \textbf{X}_{1:T} = (\textbf{X}_1,\cdots,\textbf{X}_T) X1:T=(X1,,XT)进行建模,那么我们希望模型能够准确地学习到 p ( X t ∣ X 1 : t − 1 ) p(\textbf{X}_t|\textbf{X}_{1:t-1}) p(XtX1:t1)这一条件分布,而且随着时间的流逝,模型也应该保持优秀的学习能力。

一方面,有大量的工作专注于使用自回归模型去拟合“时间上的动力学”。虽说自回归模型明确地将序列的分布划入了条件分布的乘积( ∏ t p ( X t ∣ X 1 : T ) \prod_tp(X_t|X_{1:T}) tp(XtX1:T))中,而且在解决预测问题上,自相关模型也算有用。但是,归根到底,自相关模型是天然确定性(fundamentally deterministic)的,而且自相关模型并不具备生成性,因为自相关模型的输入是有条件的,它的输入必须是有意义的真实数据。而一个好的生成模型,必须要能够做到自己动手丰衣足食,即使输入是随机噪声,生成模型也能够生成高质量的合成数据。

另一方面,许多研究致力于将GAN的框架直接用于序列数据的生成,这些研究的想法多是以RGANs作为生成器和判别器。然而,这些GAN的对抗训练,仅仅在于直接对 p ( X 1 : T ) p(\textbf{X}_{1:T}) p(X1:T)建模,而不考虑“时间上的动力学”。总之,RGANs的做法是每个时点的特征分布建模,相应的,其loss也仅仅是简单的将每个时点的loss相加,这种训练方法是不足以捕获序列相关性的。

在文章中,Yoon等人结合了上述两条技术路线的优点,并在此基础上提出了一个包含“时间上的动力学”的生成模型——TimeGAN。这个模型的特点:

  1. 除了基于真实和合成数据的无监督学习的对抗loss之外,作者引入了步进的(stepwise)、基于真实数据的监督学习的loss,因此模型捕获“时间上的动力学”的这一目标便变得十分明确。因为真实数据的信息是1+1>2的效果,整个数据序列所具有的信息要比单个数据具有的信息之和更大,使用基于真实数据的loss能够有效利用潜藏于真实数据序列下的信息。
  2. 这个模型引入了一个“内在网络”(embedding network)以提供特征(features)和潜在模式(latent representations)之间的可逆映射,这使得对抗训练需要学习的参数空间的维度得到削减(降维处理)。这个降维的思路来自于这个事实——尽管系统,也就是时间戳上单个特征的分布,可能是十分复杂的,但序列相关性的复杂程度可能远远低于系统的复杂程度(原文为“‘时间上的动力学’背后的驱动因子的空间维度可能并不高”)。而模型中监督学习的loss最小化是同时基于内在网络和生成网络的训练的,因此隐藏空间(latent space)的任务就不仅仅是提升参数的有效性,它同时也肩负着督促生成器学习序列相关性这一使命。

在定性上,这一模型利用t-SNE和PCA分析,将生成数据对原始数据分布的模拟程度进行可视化,用以在定性上评价模型的好坏。在定量上,作者利用post-hoc(事后检验)对合成数据和真实数据进行区分以验证模型好坏。文章的最后,作者还用利用TSTR(train on synthetic,test on real)的框架,用以评价生成数据的质量。结论是,TimeGAN在生成时间序列数据这一领域达到了顶级水平。

2. 让模型学习如何通过特征和时间生成数据

2.1 TIMEGAN的结构

TimeGAN的关键组成部分是生成器和内在网络,两者都直接关系到loss的最小化过程。而loss则用以衡量模型在学习动力学关系上达到了多“好”的程度。因此,模型会以促进生成器学习序列相关性为条件去学习潜在空间(latent space,也就是真实数据背后的驱动力)。

在这里插入图片描述

上图阐明了TimeGAN的两个网络及其所包含的四个部分

  1. 自编码器:含有内在和复现网络(embedding and recovery networks)
  2. 对抗网络:包含序列生成器和序列判别器

TimeGAN的训练是独特的,因为它是一种联合训练,即依靠三个不同的loss function对自编码器和对抗网络进行训练。Reconstruction Loss用于自编码器参数的优化,Unsupervised Loss用于对抗网络参数的优化,而Supervised Loss则是针对于生成器对“时间动力学”的学习。具体来说,自编码器的embedding network致力于创造出潜在空间,而对抗网络则在潜在空间里进行操作,最后Supervised Loss则要让合成数据的“时间上的动力学”尽可能地向真实数据的“时间上的动力学”靠拢。

自编码器实现的是特征空间和潜在空间之间的可逆映射,它的作用就是让对抗网络能够在更小维度的空间中学习“时间上的动力学”。

而TimeGAN中对抗网络不同于DCGANs的地方有两个

  1. TimeGAN的对抗网络所需要生成的是时间序列数据,而不是图片。
  2. 对抗网络要学习的对象——潜在空间不是静止的,而是随着学习过程动态变化的,因为潜在空间是由自编码器的内在网络生成的,随着合成序列的生成,自编码器也在学习,故它所创造的潜在空间也会变化。

2.2 自编码器和对抗网络的联合训练

具体来说,三个loss的具体工作是

  • Reconstruction Loss是自编码器的Loss,我们知道,自编码器是对输入数据进行表示学习(representation learning),因此Reconstruction Loss实际上是表示自编码器对输入数据的内在模式的掌握程度,也就是自编码器编的码到底有多好。
  • Unsupervised Loss反映的是生成器和判别器的竞争对抗互动。
  • Supervised Loss反映的是生成器生成的数据能够在多大程度上逼近真实数据经过自编码编码后的数据。

因此训练的进行要有三个阶段

  1. 利用真实时间序列数据训练自编码器以优化重构过程。
  2. 利用真实时间序列数据优化supervised loss以捕获历史数据中的“时间上的动力学”
  3. 联合训练

3. 利用Tensorflow实现TimeGAN

构建和训练TimeGAN需要以下几个步骤:

  1. 选择并准备真实的时间序列输入和随机的时间序列输入
  2. 创建TimeGAN模型的关键组成部分
  3. 定义用于训练阶段的loss function和训练步骤
  4. 执行训练循环,并储存结果
  5. 利用训练好的模型生成合成时间序列数据并评估输出的结果

Original code author: Jinsung Yoon

初始阶段

import warnings
warnings.filterwarnings('ignore'
  • 12
    点赞
  • 94
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值