GAN (Generative Adversarial Net)
生成对抗网络主要用于生成一些数据,并且生成的数据能够使得人无法分辨出哪些是GAN生成的,哪些是真实数据。这里我们举一个例子形象说一下GAN大概的工作原理:
我们以我们平常生活中的钱为例:钱有真钱和假钱之分,我们得想办法让这个假钱做的更像真钱。首先我们得有一个做假钱的人,我们假设他为G(生成网络),这个G学习做假钱的过程,也就是X(白纸)经过G之后得到输出Z,我们希望一张白纸经过G后能够出来一张像真钱的纸(Z),也就是一组噪声的数据经过生成网络后,我们希望生成网络输出更像一组真实的分布。有了造假钱的G之后我们还得有一个警察D,用来判别这个钱的真假性,这个D就是判别网络,当真钱输入后,我们希望判别网络D输出1,也就是这张钱是真钱,当假钱输入后,我们希望判别网络输出0,也就是这张钱是假钱。
我们如何来将这两个网络组合在一起来使得他们各自完成他们的目标,也就是造假钱的和判别假钱的人之间的对抗训练呢?最总达到我们无法判别这生成的数据是真的数据还是假的数据,用数学语言来说就是:生成网络生成的数据Z输入到判别网络D中,D的输出结果为0或1的概率各为0.5,也就是D无法判别这是一张真钱还是一张假钱。为了使得造出来的假钱更真实,我们就得使得判别网络有很高的判别水平,不然可能由于判别网络的判别能力很差使得生成网络生成的数据也很假,达不到我们的需求。
其大体的工作流程如上图所示,对于判别网络来说,判别网络希望真实的数据输进来,能够判别出其是真实数据,假的数据输进来,判别网络输出为假。也就是真实图片经过判别网络D后其输出都为1,假的图片输进来其值为0。而对于生成网络来说,希望自己生成的数据经过判别网络后判别网络能够输出为1,也就是骗过判别网络。
损失函数:
我们需要最小化G最大化D:最大化D的区分度,最小化G和真实数据集的数据分布。也就是公式右端的两部分,我们可以将其拆分成两部分:
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:理解GAN生成对抗网络 - Python技术站