GAN损失函数的理解:

GAN损失函数的理解:

因为根据对GAN的理解来看,GAN的生成器希望输出的数据分布能够更加的接近真实数据的分布,同时GAN的判别器需要从真实数据和生成器输出的数据之间做出判断,找到真实数据和fake数据。根据GAN的损失函数:
min ⁡ G max ⁡ D L ( D , G ) = E x r ∼ P r ( . ) l o g D ( x ) + E z ∼ P g ( . ) l o g [ 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)=ExrPr(.)logD(x)+EzPg(.)log[1D(G(z))]
其中 , E x r ∼ P r ( . ) E_{x_r\sim P_r(.)} ExrPr(.) E z ∼ P g ( . ) E_{z\sim P_g(.)} EzPg(.) 表示真实数据和生成数据概率。

所以,从损失函数中可以看到损失函数的计算都是在D(判别器)中产生,因为D的输出一般是TRUE/Fake的判断,所以整体上采用的是二进制交叉熵函数。

左边包含了两个部分: min ⁡ G \min G minG max ⁡ D \max D maxD ,所以可以分成两步进行:

首先是对于判别器部分:
max ⁡ D L ( D , G ) = E x r ∼ P r ( . ) l o g D ( x ) + E z ∼ P g ( . ) l o g [ 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)=ExrPr(.)logD(x)+EzPg(.)log[1D(G(z))]
所以,对于 1 − D ( G ( z ) ) 1-D(G(z)) 1D(G(z)) 希望可以尽可能的逼近于1,即使得判别器可以准确的辨别生成图片。对于判别器的训练要保证G(生成器)不变,右式第一项中 E x r ∼ P r ( . ) l o g D ( x ) E_{x_r\sim P_r(.)}logD(x) ExrPr(.)logD(x) 的输入采样自真实数据,所以期望 D ( x ) D(x) D(x) 趋近于1.

然后是生成器部分:
min ⁡ G L ( D , G ) = E x r ∼ P r ( . ) l o g D ( x ) + E z ∼ P g ( . ) l o g [ 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)=ExrPr(.)logD(x)+EzPg(.)log[1D(G(z))]
同理,对于生成器的训练要保证判别器部分保持不变,此时主要看第二项。因为想要使得生成的数据可以通过判别器的判别,所以就需要使得 D ( G ( z ) ) D(G(z)) D(G(z)) 接近于1,即生成的数据通过判别器,所以对于 E z ∼ P g ( . ) l o g [ 1 − D ( G ( z ) ) ] E_{z\sim P_g(.)}log[1-D(G(z))] EzPg(.)log[1D(G(z))] 就要尽可能的小,所以要 min ⁡ G \min G minG 。此时就体现了博弈学习的思想,也就是说,如果判别器判别出来就要对生成器做出一个更新,使得生成器变得更好,如果判别器没有准确判断,那么就要对判别器进行训练。

你可能感兴趣的:(机器学习,深度学习)