GAN损失函数的理解:
因为根据对GAN的理解来看,GAN的生成器希望输出的数据分布能够更加的接近真实数据的分布,同时GAN的判别器需要从真实数据和生成器输出的数据之间做出判断,找到真实数据和fake数据。根据GAN的损失函数:
minGmaxDL(D,G)=Exr∼Pr(.)logD(x)+Ez∼Pg(.)log[1−D(G(z))]
\min_G \max_D L(D,G) = E_{x_r\sim P_r(.)}logD(x)+E_{z\sim P_g(.)}log[1-D(G(z))]
GminDmaxL(D,G)=Exr∼Pr(.)logD(x)+Ez∼Pg(.)log[1−D(G(z))]
其中 ,Exr∼Pr(.)E_{x_r\sim P_r(.)}Exr∼Pr(.)和Ez∼Pg(.)E_{z\sim P_g(.)}Ez∼Pg(.) 表示真实数据和生成数据概率。
所以,从损失函数中可以看到损失函数的计算都是在D(判别器)中产生,因为D的输出一般是TRUE/Fake的判断,所以整体上采用的是二进制交叉熵函数。
左边包含了两个部分:minG\min GminG 和maxD\max DmaxD ,所以可以分成两步进行:
首先是对于判别器部分:
maxDL(D,G)=Exr∼Pr(.)logD(x)+Ez∼Pg(.)log[1−D(G(z))]
\max_D L(D,G) = E_{x_r\sim P_r(.)}logD(x)+E_{z\sim P_g(.)}log[1-D(G(z))]
DmaxL(D,G)=Exr∼Pr(.)logD(x)+Ez∼Pg(.)log[1−D(G(z))]
所以,对于1−D(G(z))1-D(G(z))1−D(G(z)) 希望可以尽可能的逼近于1,即使得判别器可以准确的辨别生成图片。对于判别器的训练要保证G(生成器)不变,右式第一项中Exr∼Pr(.)logD(x)E_{x_r\sim P_r(.)}logD(x)Exr∼Pr(.)logD(x) 的输入采样自真实数据,所以期望D(x)D(x)D(x) 趋近于1.
然后是生成器部分:
minGL(D,G)=Exr∼Pr(.)logD(x)+Ez∼Pg(.)log[1−D(G(z))]
\min_G L(D,G) = E_{x_r\sim P_r(.)}logD(x)+E_{z\sim P_g(.)}log[1-D(G(z))]
GminL(D,G)=Exr∼Pr(.)logD(x)+Ez∼Pg(.)log[1−D(G(z))]
同理,对于生成器的训练要保证判别器部分保持不变,此时主要看第二项。因为想要使得生成的数据可以通过判别器的判别,所以就需要使得D(G(z))D(G(z))D(G(z)) 接近于1,即生成的数据通过判别器,所以对于Ez∼Pg(.)log[1−D(G(z))]E_{z\sim P_g(.)}log[1-D(G(z))]Ez∼Pg(.)log[1−D(G(z))] 就要尽可能的小,所以要minG\min GminG 。此时就体现了博弈学习的思想,也就是说,如果判别器判别出来就要对生成器做出一个更新,使得生成器变得更好,如果判别器没有准确判断,那么就要对判别器进行训练。