生成时间序列的VAE——VRNN与SRNN模型浅析

微信扫一扫,分享到朋友圈

生成时间序列的VAE——VRNN与SRNN模型浅析

时间序列作为一种很常见的数据结构,它的生成、表征以及预测等问题在金融、语音、语言等领域是非常重要的,但是由于时间序列具有依赖性、不确定性等特点,一些传统的生成模型可能并不适合这类数据。而变分自编码器(Variational Auto-Encoders,VAE)作为一种基于 变分贝叶斯推断 的生成式网络,它通过 潜在随机变量 (latent random variables)来实现样本的生成,从而有更好的鲁棒性。这篇文章将会介绍一类专门针对于时间序列生成的VAE模型——VRNN与SRNN,它们将原始的VAE拓展到了时间序列上,实现了对于时间序列的表征与生成。

原始VAE

关于VAE的原理这里就不再多说了,不熟悉的同学可以看下面几篇文章:

PaperWeekly:变分自编码器VAE:原来是这么一回事 | 附开源代码 zhuanlan.zhihu.com
ALme:变分推断与变分自编码器(VAE) zhuanlan.zhihu.com
苏一:一文理解变分自编码器(VAE) zhuanlan.zhihu.com

直接上公式,VAE优化的目标是:

其中 是样本, 是潜变量, 是以 为参数的推断网络得到的近似后验分布(approximate posterior), 是以 为参数的生成网络得到条件生成分布, 是 的先验分布。

简单来看,VAE的流程是:首先输入样本 ,然后利用推断网络 得到潜变量 的 近似后验分布 ,然后从该分布中采样出多个 ,通过生成网络 来计算 条件生成分布 ;对于给定的样本 ,它在条件生成分布中的对数似然 越大表明模型重构的效果越好,同时为了能够让模型生成新样本,我们还要保证近似后验分布 与 一个已知的 先验分布 尽可能地接近,这样在模型训练好了之后,我们就可以直接从先验分布里采样出 ,然后直接通过生成网络得到新样本。

Variational RNN

我们知道其实RNN模型是可以实现时间序列的生成和表征的,因此在介绍VRNN之前,这里先回顾一下传统RNN的建模过程:

对于一个时间序列 ,在时间步 ,RNN读取输入 ,然后更新隐层状态 ,其中 是以 为参数的神经网络(例如LSTM、GRU等);由于RNN是按照从前往后的顺序依次计算的,那么序列 的联合概率分布可以写为:

其中 ,即从 历史隐层状态 中得到 的概率分布, 是以 为参数的函数。为了描述概率分布,通常把 分为两个过程,先通过一个神经网络 得到一个 参数集 ,即 ,然后得到一个用 描述的分布 ,例如先利用神经网络得到高斯分布的均值 和标准差 ,然后得到用 和 描述的高斯分布

可以看出,在传统的RNN建模当中, 对于序列不确定性的建模是通过最后的输出函数 实现的 ,这样简单的方式对于波动大、变化多的序列数据来说是不够的,可能无法很好地分辨信号与噪声,因此VRNN这篇论文就把VAE的方法拓展到了RNN当中, 通过潜在随机变量来实现对多维时间序列的表征 ,下面就来具体介绍。

生成过程

我们先回忆一下原始VAE的生成过程:从一个先验分布 里面采样出一个潜变量 ,然后通过条件生成网络 得到重构样本的分布概率。

现在VRNN想要生成的是一个序列,那么应该在每一个时间步 中都有一个VAE,逐时间步地生成重构样本 ;另外考虑到时间序列的依赖性,那么这里的先验分布 不应该是完全独立的,而是应该 依赖于历史信息 ,我们这里把 当做历史信息(看做是对历史序列 的编码),因此这里的先验分布形式为:

其中 是先验分布的均值和方差,它们依赖于前一时间步的隐层状态

类似地,条件概率分布 同样也要依赖于 ,其形式为:

而隐层状态的更新公式为:

其中 是条件生成分布的均值和方差, 两个网络可以看做是 的特征提取器。

简单分析一下上面的公式,由于 依赖于 ,因此关于 的分布可以写做: 注意 ),那么整个序列的联合概率分布就可以写为:

推断过程

还是类似的思想,加入历史依赖后,后验分布的形式变为:

那么联合分布可以写为:

模型的各个流程可以总结为下图:


目标函数

这样我们就可以写出VRNN的目标函数,还是采用VAE变分下界的形式:

该式与原始VAE的目标函数基本一致,在保证近似后验分布 与先验分布 尽可能接近的同时,令条件生成分布的似然 尽可能大。

实验

论文在两种任务上对VRNN与其它生成模型做了对比,1)语音波形建模;2)手写体生成。下面是在多个数据集上的实验结果:


baseline模型采用的是标准的RNN,-Gauss代表最终的输出函数是服从高斯分布(即网络输出 ),-GMM代表输出函数是服从混合高斯分布(即网络除了输出 以外,还有权重 ),-I 代表先验分布不依赖历史信息(即与隐层状态 无关)

下图模型在语音训练集上生成的样本示例,前3行是全局波形,后3行是局部波形。可以看出相对于RNN-GMM,VRNN-Gauss重建的序列会包含的噪声更小。


下图是在手写体任务中的样本示例对比


Stochastic RNN

接下来介绍SRNN,该模型在VRNN的基础上做了进一步的推广。概括来说,SRNN将RNN与state space model(SSM)结合到了一起,RNN与SSM都是时间序列建模中的常用方法,假设时间序列 可能依赖于 ,下图展示了RNN与SSM的流程。


可以看出RNN与SSM有类似的地方,比如说序列 的信息都会被整合到潜状态 中。对比来看:RNN具有很好的非线性拟合能力,但是其隐状态是确定性的;SSM的随机状态转移更适合不确定性建模,但是推断过程通常比较简单。那么我们能不能令两者的优势互补呢?这就是VRNN的动机,它 使SSM的随机状态转移变为非线性的,同时还保持了RNN的门控激活机制 ,结构如下图所示:


生成模型

先来看生成模型,如上图a所示,其实很直观,就是把RNN与SSM的隐状态结合了起来,这里需要注意的是 随机状态 依赖于确定性状态 ,而反过来就没有依赖性了,这样是为了保证 将确定性状态与随机状态分隔开,使其不会受到随机性的影响

这样生成模型的联合概率分布就可以写为

其中 也类似; 就是一个RNN cell的更新公式。

推断网络

推断网络的结构如上图b所示,我们要做的就是从整个样本序列中得到潜变量 的近似后验分布,因此推断网络的概率分布可以写成:

考虑到确定性状态 只依赖于 ,则有

现在来看 ,我们希望通过所有信息( 包括未来信息 )来估计 的后验分布,由概率图的知识可知

也就是说, 的后验分布 只依赖于 ,为了让 依赖于未来的信息 ,我们在推断过程中再加入一个 反向传播 的状态 ,令其更新公式为 ,其实就是一个 反向的RNN ,这样 就可以代表未来信息了,我们有:

其中 代表两个向量的拼接, 还是用均值和方差网络来表示成一个高斯分布,即

通过这样的推断网络,我们就可以通过全部信息来推断 的后验分布。

目标函数

下面为了讨论方便,认为 ,即 是一个“随机变量”,其概率分布是一个以 为中心的delta函数。

模型需要在每一时间步上计算loss,因此目标函数可以写做

看起来稍微有点复杂,不过其实 还是原始VAE的那两项 ,其中 的边缘概率分布,其计算公式为:

近似后验的改进

另外,论文还在实验中发现了一个问题: 在模型训练的过程中,KL散度项 会很快接近于0。

其实也不难看出原因,只要推断网络中状态 的更新公式 只考虑 项,那么近似后验 就可以很容易地模仿先验 的行为,从而使两者的差别变得非常小。

论文针对于这个问题提出了一个针对于近似后验的改进方法,我们不再直接计算

而是改为如下的残差形式:

其中

改进后的推断网络的算法流程如下图所示


简单来说,我们从包含了未来信息的 中采样 ,然后再通过生成网络 得到 的均值 ,我们认为这样的 已经是生成网络对于 均值的 最好估计 了(因为用到的 是根据未来信息推断出来的);我们再让推断网络 在这个最好的 的基础上进行修正后,最后得到近似后验的均值 。另外,由于新方法在方差上起到效果,因此方差网络保持原来的计算方式不变。

通过这样的改进方式,目标函数中的KL项就不再依赖于 了。

这里可能有点不好理解,具体解释一下:先来看KL项

它衡量的是两个条件分布之间的差别,其实也就是两个 网络之间的差别,即对于同样的输入(条件参数) ,两个网络输出分布的差别。由于两个网络输出的都是一个高斯分布,我们知道两个高斯分布的KL散度可以写为(可以参考这篇文章)

其中 是数据的个数,可以看出两分布均值 在KL散度中出现的形式是 ,由于两个网络输入的是相同的 ,因此这里 ,那么根据近似后验均值的残差形式,可知 ,这样就证明了KL项就不依赖于

可以看出,改进以后的推断网络 学的只是 之间的残差,它只需要学习如何通过使用未来信息去“ 纠正 ”先验分布就行了,这就使得在模型训练期间,推断网络更容易“ 跟踪 ”生成模型的变化。

实验

这篇论文在语音和音乐数据集上对SRNN以及一些baseline模型做了序列重构任务,实验对比结果如下,具体细节可以看论文原文。



其中filt表示推断过程只用当前时间步 的信息,而不用未来信息,即 ,而smooth就是之前设定的 表示采用上文那个改进的残差近似后验;注意到baseline模型中采用了我们前一篇论文中的VRNN模型,符号含义与上文一致。

总结

这篇文章介绍了一类VAE在时间序列上的变体模型——VRNN和SRNN。总的来看,两生成模型的思路是一致的,都是 将VAE融入了RNN当中,利用RNN的隐层状态来建立时间序列的依赖关系,并在此基础上用VAE来对序列建模 。SRNN可以看做是VRNN的改进版本,改进的地方有:

1.生成过程

两模型的在生成过程的结构如下(只看第t步),可以看出,唯一的区别就是随机状态 对确定状态 的作用,VRNN将在这里做了改进,使得随机状态不会影响到确定状态。

左:VRNN 右:SRNN

2.推断过程

其实VRNN相当于是SRNN的filt版本,只用到了当前时间步 的信息,而SRNN的smooth版本在推断过程中又加了一个反向的RNN来捕捉未来信息,从实验证明smooth的效果比filt更好。

3.近似后验分布

SRNN没有直接用一个网络来得到近似后验分布,而是采用了残差的方式,从而避免了训练过程中为了减小KL项的loss,近似后验网络刻意地去“模仿”先验网络,使得推理网络更容易“跟踪”生成模型的变化。

参考资料

[1] A recurrent latent variable model for sequential data

[2] Sequential neural models with stochastic layers

[3] PaperWeekly:变分自编码器VAE:原来是这么一回事 | 附开源代码

[4] ALme:变分推断与变分自编码器(VAE)

[5] 苏一:一文理解变分自编码器(VAE)

[6] 小明:两个多变量高斯分布之间的KL散度

微信扫一扫,分享到朋友圈

生成时间序列的VAE——VRNN与SRNN模型浅析

被禁20年,他的新片还敢这么大胆

上一篇

毕马威:2020年中国银行业调查报告

下一篇

你也可能喜欢

生成时间序列的VAE——VRNN与SRNN模型浅析

长按储存图像,分享给朋友