GAN(Generative Adversarial Nets) 对抗生成网络

论文http://papers.nips.cc/paper/5423-generative-adversarial-nets.pdf

摘要:论文提出了一种网络结构,该网络结构通过对抗学习,有两个模型:(1)生成模型G,生成模型捕捉数据的分布(2)分辨模型D,D评估从训练集而不是G中采样的概率。训练生成模型G用于最大化分辨模型D犯错的概率。在随机的生成模型G和鉴别模型D中,存在一个独一无二的解决办法,生成模型G恢复训练数据的的分布,鉴别模型D在任何地方都等于1/2. 生成模型G和鉴别模型D通过多层感知机进行定义,整个系统通过反向传播算法进行训练。论文在训练和生成时,不需要马尔科夫链或者没有展开的近似逼近推断网络。

对抗网络:对抗模型使用的都是多层感知机,为了学习到生成器在 x 的分布GAN(Generative Adversarial Nets) 对抗生成网络,定义一个输入先验噪声变量GAN(Generative Adversarial Nets) 对抗生成网络,代表生成模型的映射。定义第二个多层感知机GAN(Generative Adversarial Nets) 对抗生成网络,输出是一个单一的评价标准,代表 x 来自数据中而不是生成器GAN(Generative Adversarial Nets) 对抗生成网络中的概率。论文训练最大化 D 的值,训练 G 最小化GAN(Generative Adversarial Nets) 对抗生成网络。生成器 G 和 鉴别器 D 在做一个博弈游戏,值函数如下:

GAN(Generative Adversarial Nets) 对抗生成网络

论文选择对鉴别器 D 优化 k 步和对生成器 G 优化一步,在学习的开始阶段,生成器 G 数据匮乏(训练的不好),鉴别器 D 能够忽视很多样本 ,GAN(Generative Adversarial Nets) 对抗生成网络饱和,可以使得在开始训练时梯度下降更快(学习更快)。

伪代码:

GAN(Generative Adversarial Nets) 对抗生成网络

在训练中,设定 k 步,k 表示鉴别器 D 进行 k 步,生成器 G 进行一步,从噪声先验GAN(Generative Adversarial Nets) 对抗生成网络中采样 m 个样本,在生成的数据GAN(Generative Adversarial Nets) 对抗生成网络采样 m 个样本,根据公式GAN(Generative Adversarial Nets) 对抗生成网络梯度更新鉴别器 D。k 步结束后,从噪声先验GAN(Generative Adversarial Nets) 对抗生成网络中采样根据公式GAN(Generative Adversarial Nets) 对抗生成网络梯度更新生成器 G。

实现最佳性:

鉴别器 D :

GAN(Generative Adversarial Nets) 对抗生成网络

GAN(Generative Adversarial Nets) 对抗生成网络

鉴别器 D 的训练标准是给定任何生成器 G,最大化上述值函数GAN(Generative Adversarial Nets) 对抗生成网络,由于存在公式GAN(Generative Adversarial Nets) 对抗生成网络,它的最大化值是GAN(Generative Adversarial Nets) 对抗生成网络,所以论文中此值函数的最大值为 D/(G+D),经过优化可以得到如下公式:

GAN(Generative Adversarial Nets) 对抗生成网络

实现收敛性:

GAN(Generative Adversarial Nets) 对抗生成网络,最后生成模型生成分布GAN(Generative Adversarial Nets) 对抗生成网络将收敛于实际数据的分布GAN(Generative Adversarial Nets) 对抗生成网络

训练技巧:生成网络混合使用矫正的线性**函数、sigmoid**函数,鉴别网络使用 maxout **函数。在训练鉴别网络时,使用了 Dropout,在生成网络最底层使用噪声作为输入,中间层使用 dropout 和噪声,使用高斯分布评估生成器 G 的概率。参数GAN(Generative Adversarial Nets) 对抗生成网络使用交叉验证。

优势与不足:不足:没有GAN(Generative Adversarial Nets) 对抗生成网络明确的表示分布,鉴别器 D 和生成器 G 必须同时训练(在没有更新 D 时,不能将 G 训练过多,否则 G 会崩溃,因为有过多的 z 对应同一个 x )。优势:不需要马尔科夫链,只需要反向传播算法来更新梯度,学习过程中不需要 inference 并且可以包含吸收很多函数。不直接更新梯度而是与鉴别器配合,并且可以表示尖锐的,不规则的分布。