从受限玻尔兹曼机生成数据
Generating data from restricted Boltzmann machine
我的理解是,要在 RBM 中生成新数据,我需要传入真实数据。
有没有办法在没有真实数据的情况下获取生成的数据?就像 VAE 和 GAN 如何从先验分布中采样潜在变量来生成数据。
如果是这样,对于像 MNIST 这样的标记数据集,我如何从特定的 class 生成数据?我需要为每个数字训练 10 个不同的 RBM 模型吗?
My understanding is that to generate new data in RBM I would need to pass in real data. Is there a way to get generated data without real data? Like how VAE and GAN samples latent variable from prior distribution to generate data.
当然可以。这实际上是在训练的消极阶段发生的过程。您正在从联合分布中抽样,因此让网络“梦想”它所接受的训练。
我想这取决于您的实现,但我已经能够通过将输入初始化为零和 运行 Gibbs 采样进行几次迭代来做到这一点。结果,正如我所解释的那样,我应该在可见节点中看到“看起来像数字的东西”,而不一定是数据集中的数字。
这是我喜欢的示例,在 MNIST 上训练,并且在没有任何节点限制的情况下进行采样:
关于你的第二个问题:
If so, in the case of labeled dataset like MNIST, how can I generate data from a specific class? Do I need to train 10 different RBM models for each digit?
在使用标记数据时,您可以做的是将您的标签用作额外的可见节点。
检查 "Training Restricted Boltzmann Machines: An Introduction" 图 2.
此外,对于这两种情况,我认为使用其他逐渐降低采样温度的采样技术(例如模拟退火)会给您带来更好的结果。
我的理解是,要在 RBM 中生成新数据,我需要传入真实数据。 有没有办法在没有真实数据的情况下获取生成的数据?就像 VAE 和 GAN 如何从先验分布中采样潜在变量来生成数据。
如果是这样,对于像 MNIST 这样的标记数据集,我如何从特定的 class 生成数据?我需要为每个数字训练 10 个不同的 RBM 模型吗?
My understanding is that to generate new data in RBM I would need to pass in real data. Is there a way to get generated data without real data? Like how VAE and GAN samples latent variable from prior distribution to generate data.
当然可以。这实际上是在训练的消极阶段发生的过程。您正在从联合分布中抽样,因此让网络“梦想”它所接受的训练。 我想这取决于您的实现,但我已经能够通过将输入初始化为零和 运行 Gibbs 采样进行几次迭代来做到这一点。结果,正如我所解释的那样,我应该在可见节点中看到“看起来像数字的东西”,而不一定是数据集中的数字。
这是我喜欢的示例,在 MNIST 上训练,并且在没有任何节点限制的情况下进行采样:
关于你的第二个问题:
If so, in the case of labeled dataset like MNIST, how can I generate data from a specific class? Do I need to train 10 different RBM models for each digit?
在使用标记数据时,您可以做的是将您的标签用作额外的可见节点。 检查 "Training Restricted Boltzmann Machines: An Introduction" 图 2.
此外,对于这两种情况,我认为使用其他逐渐降低采样温度的采样技术(例如模拟退火)会给您带来更好的结果。