GAN:固定训练好的判别器网络,去指导训练生成器为什么不可以?

2024-03-12

以DCGAN为例,我先正常训练完毕,得到G和D。但是当我将训练好的D拿出来去重新训练G的时候,G的损失会迅速为0,也就是G的图片为一堆噪声的情况下竟然能使之前训练好的D判别为真!为什么呢?

谢邀。

这个情况其实我在另外一个相似的问题上做过解答。

生成对抗网络GAN如果只训练一个网络会有效果么?

偷个懒,就把答案搬过来吧。

这其实是一个很有趣的问题。在实践过程中,如果把判别器(Discriminator)训练得太好了,看似能够在对抗中更加有效的拒绝生成器(Generator)生成的假样本,但是其实一样会产生诸多问题。

判别器最主要的作用就是为生成器提供下降梯度。如果判别器太差,则无法提供有效的梯度,同时判别器越好,生成器梯度消失越严重。

回顾一下,原始GAN中判别器要最小化如下损失函数,尽可能把真实样本分为正例,生成样本分为负例:

-\\mathbb{E}_{x\\sim P_r}[\\log D(x)]- \\mathbb{E}_{x\\sim P_g}[\\log(1-D(x))] (公式1)

其中P_r是真实样本分布,P_g是由生成器产生的样本分布。

假设我们如果要学习得到一个最优网络,必然上式求导等于0,则会得到:

D^*(x)=\\frac{P_r(x)}{P_r(x) + P_g(x)}(公式2)

从公式上就不难看出,此时最优的判别器,就是判断为真实图像概率对于判断为真和假的概率和的比值。当P_r(x)=0P_g(x) \
eq 0,最优判别器就应该非常自信地给出概率0;如果P_r(x)=P_g(x),说明该样本是真是假的可能性刚好一半一半,此时最优判别器也应该给出概率0.5。

在极端情况——判别器最优时,生成器的损失函数变成什么。给损失函数加上一个不依赖于生成器的项,使之变成

\\mathbb{E}_{x\\sim P_r}[\\log D(x)]+ \\mathbb{E}_{x\\sim P_g}[\\log(1-D(x))](公式3)

注意,它刚好是判别器损失函数的反。代入最优判别器即公式2,再进行简单的变换可以得到

\\mathbb{E}_{x \\sim P_r}\\log \\frac{P_r(x)}{\\frac{1}{2}[P_r(x) + P_g(x)]}+ \\mathbb{E}_{x \\sim P_g}\\log \\frac{P_g(x)}{\\frac{1}{2}[P_r(x) + P_g(x)]}- 2\\log 2(公式4)

变换成这个样子是为了引入Kullback–Leibler divergence(简称KL散度)和Jensen-Shannon divergence(简称JS散度)这两个重要的相似度衡量指标。

KL散度和JS散度:

KL(P_1||P_2)=\\mathbb{E}_{x \\sim P_1}\\log \\frac{P_1}{P_2}(公式5:KL散度)

JS(P_1 || P_2)=\\frac{1}{2}KL(P_1||\\frac{P_1 + P_2}{2}) + \\frac{1}{2}KL(P_2||\\frac{P_1 + P_2}{2})(公式6:JS散度)

于是公式4就可以继续写成

2JS(P_r || P_g) - 2\\log 2(公式7)

根据原始GAN定义的判别器loss,我们可以得到最优判别器的形式;而在最优判别器的下,我们可以把原始GAN定义的生成器loss等价变换为最小化真实分布P_r与生成分布P_g之间的JS散度。我们越训练判别器,它就越接近最优,最小化生成器的loss也就会越近似于最小化P_rP_g之间的JS散度。

问题就出在这个JS散度上。我们会希望如果两个分布之间越接近它们的JS散度越小,我们通过优化JS散度就能将P_g“拉向”P_r,最终以假乱真。这个希望在两个分布有所重叠的时候是成立的,但是如果两个分布完全没有重叠的部分,或者它们重叠的部分可忽略,它们的JS散度是多少呢?

答案是\\log 2,因为对于任意一个x只有四种可能:

P_1(x)=0P_2(x)=0

P_1(x) \
eq 0P_2(x) \
eq 0

P_1(x)=0P_2(x) \
eq 0

P_1(x) \
eq 0P_2(x)=0

第一种对计算JS散度无贡献,第二种情况由于重叠部分可忽略所以贡献也为0,第三种情况对公式7右边第一个项的贡献是\\log \\frac{P_2}{\\frac{1}{2}(P_2 + 0)}=\\log 2,第四种情况与之类似,所以最终:JS(P_1||P_2)=\\log 2

换句话说,无论P_rP_g 是远在天边,还是近在眼前,只要它们俩没有一点重叠或者重叠部分可忽略,JS散度就固定是常数\\log 2而这对于梯度下降方法意味着——梯度为0!此时对于最优判别器来说,生成器肯定是得不到一丁点梯度信息的;即使对于接近最优的判别器来说,生成器也有很大机会面临梯度消失的问题。

但是P_rP_g不重叠或重叠部分可忽略的可能性有多大?不严谨的答案是:非常大。比较严谨的答案是:P_rP_g的支撑集(support)是高维空间中的低维流形(manifold)时,P_rP_g重叠部分测度(measure)为0的概率为1。

所以其实在实践过程中,用一个很优的判别器去训练好一个网络的概率其实很小。

不然还有什么对抗的意义呢,对吧。

ヾ(≧?≦*)ゝ

参考:
郑华滨:令人拍案叫绝的Wasserstein GAN

泻药

只看问题,可以一言以蔽之。

如果我怎么做都是错的,那还怎么进步。

但加上问题描述,就可以稍微深入的思考一下。

尽管D全面否定了G,但是梯度还是会传递下来,而且很大,G就会顺着梯度猛冲,然后搁浅。

如何搁浅呢,主要是激活函数的功劳,激活函数引入了非线性,非线性简单来说就是一个滤波器,用一个阈值来选择抑制或放行当前神经元。

如果是正数轴方向的梯度还好,反之神经元就会被打入冷宫,如果所有的x都不能把这个神经元捞出来,那就是白绫赐死。

很显然G这种只会无脑输出的神经元统统要被赐死,一个不留。

然后y=ax+b就变成了y=b,改一下b让loss等于0就行了。

D:计划通。

所以梯度悠着给,幸福你我他。

题主读读wgan的论文QwQ

题主的问题的重点是,当固定D的时候,G可以通过产生类噪声图像通过D的检测判决。这显然首先说明D的判决域本身就是有问题的,也就是说,G大概率的生成了D的某种对抗样本欺骗了D。 D作为在有限样本下训练出来的判决器,其判决域不完美是大概率事件,而且D所确定的目标分布是一个非常小的子空间,所以G从随机配置出发不能抓住这个目标分布空间,从而出现题目所说的现象没有什么不正常的。

当然,相应的反面的问题是,为什么通过G,D的博弈,这个问题似乎可以得到缓解。其实,如果考虑到图像的高维空间特征,D所确定的‘目标图像’分布空间本身就是一个非常小的子空间,而且这个子空间中包含了相当的一部分是不完美的‘错误样本空间’,这使得从随机初始化开始的G生成落入D所限定的‘正确样本’空间的概率会相对很低。如果采用G,D博弈,由于D的训练是逐步缩小目标图像空间,此时,G从随机初始化来生成这个逐步缩小的目标样本的难度是降低了的,这有点类似模拟退火的意思,这个GD的博弈过程是G和D相互制约共同前进,而且由于G生成的所谓‘错误样本’和D的博弈,实际上也在对D的判决域进行对抗性的调整,这个过程中获得的D的鲁棒性相对于没有GD博弈直接训练的D是增强了的。

训练过一些GAN,感受说白了,任何固定的生成器和判别器在锲而不舍的梯度优化的攻击下都是纸老虎(想想分类器的nb,想想对抗样本的nb),因此必须在精巧调配的优化水平的平衡里一起往前走才可以

同样的,如果你仔细看这些GAN的代码,就会发现基本上判别器的模型结构都不会很复杂,更不会使用resnet这样的复杂nb的模型,因为这样生成器会几乎接受不到任何梯度

类比就是,你如果让两个人在互相下棋的对弈中提升自己的水平,但是给一方摆了个柯洁,另一方除了输就是输,站着输坐着输躺着输,开局输中盘输各种莫名其妙的输,那么它将得不到任何有意义的帮助自己提升的信息和经验,整个过程自然是崩溃的。

同理,让两个水平差不多的人通过自我对弈下棋,但你一直只让一个人去反复复盘总结,另一个人却一直不变。时间久了之后,第1个一直复盘的人其实也会走入死胡同,因为他只会根据菜鸡的对手的某些不稳定的特点,学习针对性的招法,而不是普遍的能力提升。

地址:广东省广州市天河区88号 客服热线:400-123-4567 传真:+86-123-4567 QQ:1234567890

Copyright © 2012-2018 首页-多利娱乐-全球注册站琼ICP备xxxxxxxx号

平台注册入口