GAN系列1:简介
本文内容:
一、什么是GAN——简介
二、基本概念
三、生成器
四、判别器
五、GAN的训练和损失函数
六、GAN训练的难点
七、不同的GAN及其应用
一、什么是GAN——简介
GAN属于深度学习中的生成模型中的一员,属于非监督学习;
GAN可以生成相当真实的图片,如下图:
二、基本概念
GAN包含两部分:生成器和判别器
生成器从一个给定的噪音样本空间中生成假的数据;每次迭代的时候,它都试图生成更加真实的数据;
与此同时,判别器尝试区分生成器生成的图片和真实图片;当训练判别器的时候,我们需要提供真实的图片和生成的图片;当生成器无法区分二者的时候,训练结束了;
图2 GAN的基本架构
三、判别器
判别器尝试区分真实数据和生成的数据;
事实上,判别器也可以视为一个二分类器,可以区分正负样本;
正样本为真实数据(label为1);负样本是生成的数据(label为0);
如果我们以图像数据为例,则判别器就是一个卷积神经网络;
图3 展示了当判别器训练的时候,数据流和反向传播
判别器的训练:
上文提到,判别器在训练的时候输入两个类型的数据;以图像为例,分为真实图像和生成器生成的图像;
重点:判别器在训练的时候,生成器固定;只反向传播判别器的损失值;
问题:如何训练判别器?
1)给定真实数据和生成数据,输入到判别器中;
2)通过对这两类数据进行分类,可以得到判别器损失,如图3所示;
3)如果判别器对数据进行了误分类,则对其进行惩罚;误分类(假的分成真的;真的分成假的);
4)通过误差反向传播更新权重; 重点:在判别器中的误差反向传播作用于整个判别网络;
上述过程中的重点:在判别器训练过程中更新的梯度是不会传递给生成器的;
四、生成器
生成器是从随机噪音(潜在向量)中生成数据;
每次迭代的时候,它都试图生成更加真实的数据;这些生成的数据对于判别器来说是负样本;
同时,负样本的生成过程是从判别器的反馈中得到的;
随着训练持续,生成器最终可以愚弄判别器,使其无法区分真实数据和生成数据;
图4 生成器的训练
生成器的训练:
1)在潜在空间或者噪音空间中随机采样作为输入数据;
2)将输入数据传递给生成器中,使其生成数据;
3)判别器开始工作——判别器试图将生成器生成的图像判别为假;
4)从判别器中得到的输出,作为生成器的反馈;判别器的反馈被用于惩罚生成器;
5)从生成器的输出中得到生成损失;如果生成器不能愚弄判别器,则会被惩罚;
重点:从图4中可以看到,生成器损失,反向传播作用于生成器和判别器,当训练生成器的时候,我们需要通过反向传播作用于生成器,这是理所应当的,但是为什么反向传播也作用于判别器??
即使判别器被冻结了,但是我们仍然需要生成器表现的反馈;判别器参数在这一步虽然不被更新,但是我们需要通过判别器得到生成器的反馈;
这是GAN训练的重点,这也是为什么GAN难以训练的原因。这意味着,对于GAN来说,收敛到一个理想状态是困难的。
五、GAN的训练和损失函数
现在我们已经知道,在GAN训练的时候,我们需要训练两个网络;
迭代训练生成器和判别器——当判别器训练的时候,生成器不工作;当生成器训练的时候,判别器不工作;
同样的训练GAN是困难的;接下来,我们讨论一下GAN的损失函数;
GAN的损失函数:
在GAN训练时,优化上面的损失函数,是两个生成器和判别器的求和游戏;
之所以成为Minmax是因为,判别器尝试最大化Log(D(x))这项,而生成器尝试最小化log(1-D(G(z)));
现在的问题在于,为什么这样的最小化和最大化可以导致GAN训练的收敛??
GAN训练收敛的原因:
在判别器训练的时候,生成器不训练;
D(x)对应的是给定x为真,判别器生成为真概率;因此,当判别器训练的时候,我们需要对真正的数据进行正确的分类,这等价于将D(x)分类为1; D(G(z))是G(z)为真的概率;我们希望在训练生成器的时候,这项最大化;但是同样的,为了最小化整个损失函数,我们需要最小化log(1-D(G(z)));
六、GAN训练的难点
GAN并不好训练,即使迭代了很多次以后,结果也不一定保证收敛;
主要原因:
1)在早期训练阶段,生成器失败;
在早期的时候,生成器效果肯定很差,对于判别器来说,则很容易区分真假数据;这会导致log(1-D(G(z)))达到饱和,但是实际上G没有学到任何东西;为了避免这种情况的发生,我们试图最大化logD(G(z)),这将在早期训练阶段提供更好的梯度,不会导致饱和;
2)模式坍塌
大意是,每次生成器都会在某个特定的采样范围内,生成相似的图片;图片的多样性很低;
3)梯度消失
这个可能是任何神经网络中出现的问题,同样也会出现在GAN中;
七、不同的GAN及其应用
1) 生成新的图片——progressive和conditional GANs
2) 文字-图片合成
可以从文字生成图片;或者从图片生成文字——Stack GAN
3)图片上色以及图片-图片迁移
4)超图分辨率
还有一些其他的应用,诸如:
文字-语音;
生成真实的人脸;
音频预测;
更多内容可以在this amazing post by Jason Brownlee找到;
本文来自于:https://debuggercafe.com/introduction-to-generative-adversarial-networks-gans/