1.为什么GAN难以训练?
GAN网络包含有:生成模型和判别模型两种。
我们之前一直有在用判别模型,(分类、回归)都是在判别模型。
而对于生成模型:往往比判别模型更加困难。就像是识别莫奈的绘画要比模仿莫奈的绘画更容易。
个人理解生成模型是在创造数据,判别模型只是在处理数据。
对于生成模型:GAN采用标准或均匀分布来提供噪声z,并利用深度网络生成模型G来创建图像x(x=G(z))。用一张图来表现就是如下:(类似于无中生有,但并不是完全的无中生有)
在GAN中,我们增加了判别器(Discriminator)来区分判别器(Discriminator)的输入是来自于真实数据还是生成的数据。输出值D(x)来估计是真的概率。大致过程也用一张图来说:
对抗神经网络是先生成一个加有噪声的图片,然后去判别(和真样本作比较),然后减小与真样本的差距,增大与真样本的(相似度),说的稍微正式点是学习原始真实样本集的数据分布,生成网络G的目标就是尽量生成真实的图片去欺骗判别网络D。而D的目标就是尽量把G生成的图片和真实的图片分别开来。这样,G和D构成了一个动态的“博弈过程”。
但是在生成与判别相互博弈的过程中也会出现一方过强的情况,导致训练困难,。举个例子:判别器如果太成功了,就会造成生成器梯度消失,什么也学不到。
除此之外,导致GAN难以训练的还有模型的损失函数(目标函数),因为对抗神经网络采用的是最大最小化目标函数,
x表示真实图片,z表示输入G网络的噪声,而G(z)表示G网络生成的图片。
D(x)表示D网络判断真实图片是否真实的概率(因为x就是真实的,所以对于D来说,这个值越接近1越好)。
D(G(z))是D网络判断G生成的图片的是否真实的概率。
对于判别器:
D的能力越强,D(x)应该越大,D(G(x))应该越小。这时V(D,G)会变大。因此式子对于D来说是求最大(max_D),因此优化D的公式的第一项,使的真样本x输入的时候,得到的结果越大越好,可以理解,因为需要真样本的预测结果越接近于1越好嘛。对于假样本,需要优化是的其结果越小越好,也就是D(G(z))越小越好,因为它的标签为0。但是呢第一项是越大,第二项是越小,这不矛盾了,所以呢把第二项改成1-D(G(z)),这样就是越大越好,两者合起来就是越大越好。
那对于生成器G(Generator):
我就希望我生成的图片越真越好,也就是对应公式:D(G(z))越大越好,但是对于公式整体要求是min_G(最小化值),也就是要求V(D, G)会变小。在优化G的时候,这个时候没有真样本什么事,所以把第一项直接却掉了。这个时候只有假样本,但是我们说这个时候是希望假样本的标签是1的,所以是D(G(z))越大越好,但是呢为了统一成1-D(G(z))的形式,那么只能是最小化1-D(G(z)),本质上没有区别,只是为了形式的统一。之后这两个优化模型可以合并起来写,就变成了最开始的那个最大最小目标函数了。
第一步我们训练D,D是希望V(G, D)越大越好,所以是加上梯度(ascending)。第二步训练G时,V(G, D)越小越好,所以是减去梯度(descending)。整个训练过程交替进行。
因为分开的两个目标函数之间相互关联性较大,在整个学习的过程中会出现损失函数不收敛,模型参数震荡。
还会出现生成器和辨别器不平衡导致过拟合,以及高度敏感的超参选择。所以我们给的学习率都很小,如果我们增加学习率或者训练模型的长度,我们发现参数非常不稳定。其实在训练过程中很难达到一定的纳什平衡,而判别模型和生成模型达到了纳什均衡时GAN模型收敛。大多深度模型的训练都使用优化算法寻找损失函数比较低的值。优化算法通常是个可靠的“下山”过程。生成对抗神经网络要求双方在博弈的过程中达到势均力敌(均衡)。每个模型在更新的过程中(比如生成器)成功的“下山”,但同样的更新可能会造成博弈的另一个模型(比如判别器)“上山”。甚至有时候博弈双方虽然最终达到了均衡,但双方在不断的抵消对方的进步并没有使双方同时达到一个有用的地方。对所有模型同时梯度下降使得某些模型收敛但不是所有模型都达到收敛最优。
为什么GAN中模式会崩溃?
别人的知识点
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:GAN对抗生成网络 - Python技术站