GAN论文笔记

本文深入探讨了生成对抗网络(GAN)的工作原理,包括生成模型和判别模型的角色。文章详细介绍了训练过程,以及如何通过多层感知器构建生成器和判别器。通过图示和理论分析,解释了GAN如何最小化生成器和判别器之间的Jensen-Shannon散度,以逼近原始数据分布。最后,提供了关键的TensorFlow代码片段和进一步的学习资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作者指出,深度学习的目的旨在建立能够表示人造的具体应用中的数据分布的模型。为了避免极大似然估计和相关策略中的可能性计算逼近问题,提出GAN:由生成模型和判别模型组成,其中生成模型负责伪造数据,而判别模型负责检测样本服从模型分布还是原始数据分布。

本文主要研究生成模型通过多层感知器传输随机噪声来生成样本,判别模型也是多层感知器的情况。

Adversarial nets

为了学习生成器在数据x上产生的分布p_{g},对输入噪声变量定义一个先验函数p_{z}(z),再定义一个到数据空间的映射G(z;\Theta _{g}),其中G表示一个带有参数\Theta _{g}的多层感知器表示的可微函数。同时定义一个多层感知器D(x;\Theta _{d})输出一个单一标量。D(x)表示x来源于数据而不是生成器产生的分布p_{g}。我们训练D以最大化对训练样本和G的生成样本同时分配正确标签的可能性。同时训练生成器G以最小化log(1-D(G(z))),即:

训练时采用对判别网络D进行K次优化然后对生成网络G进行一次优化的迭代过程。训练早期时,G比较弱,因此D能轻易判别出G的生成样本,因此log(1-D(G(z)))趋于饱和,而G更偏向于最大化log(D(G(z)))。这样的形式使得在早期也有较大的梯度。

原文给出了图例直观说明:

黑点是数据原始分布,绿线是生成器G生成的数据,蓝线是判别器D输出分布

图a是生成数据和原始数据分布相似但判别器D不够准确的情况;图b在a基础上D收敛后的效果;图c是在b基础上G收敛后的情况;图d是最终训练结束后的情况。

以下给出理论说明

对于固定的生成器G,最优判别器D可以达到:

对此的证明

对于给出的生成器G,D的训练准则时最大化V(G,D):

而对于任意(a,b)\epsilon \mathbb{R}^{2},函数在[0,1]区间内在a/(a+b)取得最大值(可以用简单的求导证明)

而对于训练判别网络D的目的可以解释为最大化条件概率P(Y=y|x),Y表示x来自p_{data}(y=1)或者p_{g}(y=0),这样先前的公式可以表示为:

p_{g}=p_{data}时,C(G)达到最小值-log4。

因此写成:

的相对熵形式,其中KL(Kullback–Leiblerdivergence)是相对熵函数:

而用JS散度(Jensen–Shannon divergence)表示:

其中

而两个分布之间的JS散度非负(当且仅当同分布取0),因此C(G)全局最小取值-log4。

而当判别器D训练过后,根据最大化准则

训练G使得p_{g}p_{data}收敛。

对于具体loss计算,关键代码段如下(来源https://github.com/wiseodd/generative-models/blob/master/GAN/vanilla_gan/gan_tensorflow.py):

D_loss_real = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=D_logit_real, labels=tf.ones_like(D_logit_real)))

D_loss_fake = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=D_logit_fake, labels=tf.zeros_like(D_logit_fake)))

D_loss = D_loss_real + D_loss_fake

G_loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=D_logit_fake, labels=tf.ones_like(D_logit_fake)))

其中D_logit_real和D_logit_fake分别是输入样本(真实手写数字)和生成的假样本(代码中输入是在-1与1之间的均匀分布)的logits

对于具体实现见以下代码解析:

https://blog.youkuaiyun.com/jiongnima/article/details/80033169

至于更多解释见http://m.sohu.com/n/478052180/

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值