最近参加了PaddleGAN的生成对抗网络七日打卡营,感觉收货颇丰。对于刚刚入门的我来说可能还不能将所有的知识消化吸收,但是还是可以从最基本的原理开始入手。我对GAN的基本原理理解如下:
我们有两个网络,G(Generator)和D(Discriminator)。它们的功能分别是:
- G是一个生成图片的网络,它接收一个随机的噪声z,通过这个噪声生成图片,记做G(z)。
- D是一个判别网络,判别一张图片是不是“真实的”。它的输入参数是x,x代表一张图片,输出D(x)代表x为真实图片的概率,概率介于0-1之间,越接近1代表越真实,越接近0代表越可能是假的。
生成对抗网络的损失函数如下:
在训练过程中,生成器G的目标就是尽量生成真实的图片去欺骗判别网络D。而D的目标就是尽量把G生成的图片和真实的图片分别开来。训练是交替进行的,训练生成网络模块时,生成器希望loss越小越好,在训练过程中生成图片的标签为1;训练判别模块时,判别器希望loss越大越好,在训练过程中生成图片的标签为0。训练生成器的时候会把判别器的权重固定,训练判别器的时候会吧生成器的权重固定。训练生成器的时候不需要损失函数中的第一项。在训练的时候求出梯度后对参数的调整一个是加,一个是减。
最后希望训练的结果就是生成器能生成看起来足够真实的图片。