VAE输入数据缩放

时间:2019-03-20 20:15:51

标签: artificial-intelligence scaling autoencoder gradients

可变自动编码器(VAE)本身就是一个非常笨拙的概念。毫不奇怪,大多数文章,评论和教程都侧重于理论和体系结构,但是大多数也未能解决数据缩放的问题。在尝试VAE时,我遇到了一个(对我来说)令人惊讶的读取标志,即将数据缩放为VAE的方式非常重要,我无法理解。

要可视化描述以下问题,请在此处访问笔记本:https://github.com/mobias17/VAE-Input-Scaling/blob/master/VAE%20Input%20Scaling.ipynb

让我们假设目标是通过VAE重建正弦波(例如声波)。当我通过模型输入标准化数据时,它只能近似介于-1和1之间的值。显然,快速的答案是将数据标准化。尽管如此,这仍然导致以下问题:

1)VAE只能近似于-1和1之间的值是什么原因? (是高斯重新参数化,梯度消失了吗?)

2)有没有办法克服这个边界(模型更改)?

3)为VAE缩放数据的最佳实践是什么?数据是否应该通过std dev进行标准化?

Results showing Sutputs are between -1 & 1

1 个答案:

答案 0 :(得分:0)

可变自动编码器可以近似任何范围内的值。这里的问题在于该特定模型的体系结构。

此VAE的解码器使用keras.layers.LSTM作为最后一层。 This layer's default activation function is tanh,和tanh函数输出(-1,1)范围内的值。这就是为什么模型无法生成超出该范围的值的原因。

但是,如果我们将激活函数更改为线性替换,则

decoder_mean = LSTM(input_dim, return_sequences=True)

使用

decoder_mean = LSTM(input_dim, return_sequences=True, activation=None)

VAE现在可以近似数据了。这是我训练100个时期后得到的结果。 enter image description here

通常的建议是通过缩放数据或选择更具表现力的函数,确保尝试近似的数据位于用于近似的函数的范围内。