GAN全称是Generative Adversarial Nets,中文叫做“生成对抗网络”。在GAN中有2个网络,一个网络用于生成数据,叫做“生成器”。另一个网络用于判别生成数据是否接近于真实,叫做“判别器”

对抗网络Gan简介
对抗网络Gan简介
对抗网络Gan简介
对抗网络Gan简介
对抗网络Gan简介
价值函数 Value Function
三、WGAN(使用W距离的GAN)
源码实现:https://github.com/martinarjovsky/WassersteinGAN

WGAN的优点

  1. 进一步提升了训练的稳定性。不需要精心设置G和D一轮一轮的更新。不需要精心设置复杂的网络结构。(原始GAN的价值函数的梯度很可能是0,就没法得到更新。WGAN提出了新的价值函数解决这个问题。)
  2. 几乎解决了mode collapse问题。mode collapse是说生成器生成的内容过于雷同,缺少变化。
  3. 提供了具有意义的价值函数,可以判断判别器和生成器是否已经收敛。(原始GAN中如果D的效果不好,我们不知道是G生成的好,还是D判别的不好)
  4. 提供了理论公式(不过很难理解)。
  5. 在判别器输入中加入噪声,使优化分布成为可能。
  6. 随着真实分布和生成分布的距离越来越小,对噪声进行退火,使噪声越来越小直至消除噪声
  7. 当移除BN后DCGAN无法正常工作,而WGAN仍然可以生成很好的图片。所以WGAN可以使用更简单的网络结构。
  改进的地方:
         判别器最后一层去掉sigmoid
          生成器和判别器的loss不取log
         每次更新判别器的参数之后把它们的值截断到不超过一个固定常数c

         不要用基于动量的优化算法(包括momentum和Adam),推荐RMSProp,SGD也行

四、训练

在训练的过程中固定一方,更新另一方的网络权重,交替迭代(网络中先训练 D 一次,再训练 G 两次),在这个过程中,双方都极力优化自己的网络,从而形成竞争对抗,直到双方达到一个动态的平衡(纳什均衡),此时生成模型 G 恢复了训练数据的分布(造出了和真实数据一模一样的样本),判别模型再也判别不出来结果,准确率为 50%,约等于乱猜。上述过程可以表述为如下公式:

对抗网络Gan简介
当固定生成网络 G 的时候,对于判别网络 D 的优化,可以这样理解:输入来自于真实数据,D 优化网络结构使自己输出 1,输入来自于生成数据,D 优化网络结构使自己输出 0;当固定判别网络 D 的时候,G 优化自己的网络使自己输出尽可能和真实数据一样的样本,并且使得生成的样本经过 D 的判别之后,D 输出高概率。
五、相关论文
1。Conditional Generative Adversarial Nets,给 GAN 加上条件,让生成的样本符合我们的预期,这个条件可以是类别标签(例如 MNIST 手写数据集的类别标签),也可以是其他的多模态信息(例如对图像的描述语言)等。用公式表示就是:
对抗网络Gan简介
式子中的 y 是所加的条件。
2.Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks,简称(DCGAN),在实际中是代码使用率最高的一篇文章,它优化了网络结构,加入了 conv,batch_norm 等层,使得网络更容易训练