GAN的实现和一些问题

GAN的学习是一个二人博弈问题,最终目标是达到纳什平衡。对抗指的是生成网络和判别网络的互相对抗。生成网络尽可能生成逼真样本,判别网络则尽可能去判别该样本是真实样本,还是生成的假样本。示意图如下:

生成器尽量去生成一种合理的数据分布,可以理解为真实的数据, 从而让判别器无法判别样本究竟来自何方, 两者的训练, 一般来说, 是交替进行的, 生成器的loss通过其生成的数据输入D来进行评估, 一般就是交叉熵 0or1, 0表示判别器识别出了这个样本来自假样本, 另一方面, 判别器也要尽量的去学习, 去分辨真假样本,GAN的目标也是优化2个分布的JS散度

原始GAN的目标优化函数如下:

\[\min\limits_{G} \max\limits_{D}=E_{x\sim p_{data(x)}}\quad[\log(D(X))]+E_{z-p_{z}}[1-\log(D(G(z))] \]

目标是最小化G,最大化D:

For D:

\[\max\limits_{D}=E_{x\sim p_{data(x)}}\quad [\log(D(X))]+E_{z-p_{z}}[1-\log(D(G(z))] \]

D最大话意味着:D要尽可能的识别真样本D(X)和假样本D(G(z)), 即将真样本识别为1,假样本识别为0,否则第一部分的公式将趋于负无穷,第二部分也将趋于负无穷:

\[D(X)\uparrow\space\Rightarrow\space\log(D(X))\uparrow \]

\[D(G(z))\downarrow\space\Rightarrow\space\log(D(G(z)))\downarrow\space\Rightarrow\space 1-\log D(G(z))\downarrow \]

For G:

\[\min\limits_{G}=E_{x\sim p_{data(x)}}\quad [\log(D(X))]+E_{z-p_{z}}[1-\log(D(G(z))] \]

因为第一项是没有用的(D部分),所以等价于
=>\(\max\limits_{G}=E_{z-p_{z}}[\log(D(G(z))]\)

GAN的最优情况:

For D:

\[D_{G}=\frac{P_{data}}{P_{data}+P_{fake}} \]

此处也解释了为什么当D的loss为0.5是认为是最优的D

For G:

G的目标就是生成和真实数据一样的分,故G的最优情况为:

\[P_{data} = \frac{P_{data}+P_{G}}{2} \]

\[P_{data}=P_{fake} \]

GAN的一些问题

    1. GAN为什么难以训练?
      大多深度模型的训练都使用优化算法寻找损失函数比较低的值。优化算法通常是个可靠的“下山”过程。生成对抗神经网络要求双方在博弈的过程中达到势均力敌(均衡)。每个模型在更新的过程中(比如生成器)成功的“下山”,但同样的更新可能会造成博弈的另一个模型(比如判别器)“上山”。甚至有时候博弈双方虽然最终达到了均衡,但双方在不断的抵消对方的进步并没有使双方同时达到一个有用的地方。对所有模型同时梯度下降使得某些模型收敛但不是所有模型都达到收敛最优。
    1. 生成器梯度消失问题
      生成器梯度消失问题:当判别器非常准确时,判别器的损失很快收敛到0,从而无法提供可靠的路径使生成器的梯度继续更新,造成生成器梯度消失。GAN的训练因为一开始随机噪声分布,与真实数据分布相差距离太远,两个分布之间几乎没有任何重叠的部分,这时候判别器能够很快的学习把真实数据和生成的假数据区分开来达到判别器的最优,造成生成器的梯度无法继续更新甚至梯度消失.
    1. 模型坍塌
      模型坍塌是指生成器坍塌到了一个极狭小的分布内,生成的样本不在变化。通俗来说就是生成器在某种情况下重复生成完全一致的图像。这就与博弈论中的启动相关了。如果在生成器最小化之前,判别器已经完全最大化(这里的最小化和最大化是指生成网络和鉴别网络是同一个损失函数,但是他们的目标不同,生成网络需要最小化损失函数,鉴别网络需要最大化损失函数),这样所有工作还能进行;但是如果先最小化了生成器,接下来再尝试最大化鉴别器,这样网络是训练不成功的。原因在于若刚开始变保持鉴别器落后于生成器,鉴别器会错误的将空间中某些点标记为最有可能是真的而不是 假的,这样生成器就会选择将所有噪声输入映射到最可能为真的点.

tf2代码连接

posted @ 2020-04-02 21:25  real-zhouyc  阅读(758)  评论(0编辑  收藏  举报