为了建模真实的数据分布,生成器学习如何生成实际的数据样本,而鉴别器学习如何确定这些样本是否是真实的。怀着对“理解某事的最终表达能够重现它”的信仰,我们觉得我们的目标似乎是值得的。如果我们能够成功地将我们的GAN训练到平衡状态(不管多么完美的鉴别器也无法将生成的样本与实际样本相区分),我们应该可以将这种获得的对数据的理解应用于几乎任何具有最佳性能的任务中。 问题犹存 GAN也是存在一些缺点的,它难以优化,训练不稳定。因此必须仔细设计网络架构,必须认真维护生成器和鉴别器之间的平衡,以便进行训练。在这种模式上下,dropping在GAN中是很典型的(生成器仅学习真实分布中的一小部分),并且由于近乎无意义的学习曲线,是难以对它们进行调试的。 尽管如此,GAN已经取得了最先进的成果,但实际应用却受到这些问题的限制。 解决方案 训练GAN以最小化生成的数据与真实的数据分布之间的距离。最初,Jensen-Shannon分歧被用作这种距离度量。然而,Wasserstein GAN(wGAN)提供了广泛的理论见解,并以经验证明,最小化EMD距离(Earth Mover's Distance)合理和有效的近似,理论上是解决GAN的主要问题(详见上述描述)的较好的优化方法。为了使EMD近似有效,wGAN对评论者(以前称为Wasserstein的鉴别器)施加了权重限制,导致了一些训练失败。 对Wasserstein GAN进行的改进训练,使得非常稳定的GAN训练可以惩罚评论者的对于梯度的规范,因为他们是基于输入而不是限制权重。这个“梯度惩罚”只是被简单地添加到上面描述的Wasserstein距离的总损失中去。 """ wGAN implemented on top of tensorflow as described in: [Wasserstein GAN](https://arxiv.org/pdf/1701.07875.pdf) with improvements as described in: [Improved Training of Wasserstein GANs](https://arxiv.org/pdf/1704.00028.pdf). """ import tensorflow as tf # # define earth mover distance (wasserstein loss) # defem_loss(y_coefficients, y_pred): return tf.reduce_mean(tf.multiply(y_coefficients, y_pred)) # # construct computation graph for calculating the gradient penalty (improved wGAN) and training the discriminator # # sample a batch of noise (generator input) _z = tf.placeholder(tf.float32, shape=(batch_size, rand_dim)) # sample a batch of real images _x = tf.placeholder(tf.float32, shape=(batch_size, img_height, img_width, img_channels)) # generate a batch of images with the current generator _g_z = generator_model(_z) # calculate `x_hat` (责任编辑:本港台直播) |