Skip to main content

WGAN Summary

WGAN 论文系列

WGAN 系列目前是由三篇论文组成的

  1. Towards Principled Methods for Training Generative Adversarial Networks
    • 这篇主要是对原始 GAN 模型进行了分析,提出了其不足,以及对应的解决方法
    • 我们称之为 WGAN 前作
  2. Wasserstein GAN
    • 这篇主要提出了 Wasserstein / Earth-Mover 距离,以及在模型上的实现
    • 我们称之为 WGAN 本作
  3. Improved Training of Wasserstein GANs
    • 作者 Martin Arjovsky 在文章发布之后不久就意识到 WGAN 有时候还是会存在训练困难、收敛速度较慢的情况 Redit 链接
    • 所以提出了改进方案,我们称之为 WGAN 后作

WGAN 本作对 DCGAN 结构的改进

  1. 判别器最后一层去除 sigmoid
  2. 生成器和判别器的 loss 不使用交叉熵
  3. 判别器每次训练结束都将参数绝对值 crop 到一个固定常数
  4. 不要使用基于动量的优化算法 (比如 momentum 和 Adam 等),推荐 RMSProp, SGD 等

原始 GAN 的问题

原始 GAN 中,判别器的损失函数是

\( d\_loss = -\mathbb{E}_{x \sim P_{r}}[\log D(x)] - \mathbb{E}_{x \sim P_{g}}[\log(1-D(x))] \) (公式 1)

即为把真实样本分为正例,生成样本分为负例的交叉熵。其中, \( P_r \) 是真实分布,\( P_g \) 是生成分布。

对于生成器,Goodfellow 提出了两种形式,分别是:

  1. \(\mathbb{E}_{x \sim P_{g}}[\log(1-D(x))] \) (公式 2)
  2. \(\mathbb{E}_{x \sim P_{g}}[-\log D(x)] \) (公式 3)

判别器越好,生成器梯度消失越严重

比如我们取一个样本 x,它来自真实数据的可能性是 \( P_{r} \) ,来自生成数据的可能性是 \( P_{g} \),那么它对于判别器的损失函数 (公式 1) 的贡献是:

\( -P_{r}(x) \log D(x) - P_{g}(x) \log [1-D(x)] \)

令其等于 0 得到最优的判别器 \( D^{*} \):

\( - \frac{P_{r}(x)}{D(x)} + \frac{P_{g}(x)}{1-D(x)} = 0 \)

化简,得:

\( D^{*} = \frac{P_{r}(x)}{P_{r}(x) + P_{g}(x)} \) (公式 4)

从直观角度来讲, \( D^{*} \) 当发现这个样本极大概率属于真实数据的时候,就会给出接近 1 的回应,极大概率属于生成数据的时候,就会给出接近 0 的回应。 当比较不确定的时候,比如一半一半则会给出 0.5。

大家在训练 GAN 的时候,都知道不能将判别器训练得太好,这样就会发生生成器梯度消失的问题,在 WGAN 前作这里作者给出了详细的解释:

我们考虑最优情况,即判别器在最优的情况下,生成器的损失函数最终会变成什么。我们以公式 2 为例子:

\(\mathbb{E}_{x \sim P_{g}}[\log(1-D(x))] \) (公式 2)

我们在公式 2 上加上一个与生成器无关项:

\(\mathbb{E}_{x \sim P_{r}}[\log D(x)] + \mathbb{E}_{x \sim P_{g}}[\log(1-D(x))]\)

注意,在训练生成器的时候,判别器的参数是固定的,也就是说,\( \mathbb{E}_{x \sim P_{r}}[\log D(x)] \)在面对真实样本的时候,它是与参数无关的常数项。 尤其,在判别器最优时,真实样本的判别结果是 1。

带入最优判别器,即公式 4,进行变换得到:

\begin{equation} \mathbb{E}_{x \sim P_{r}}[\log \frac{P_{r}(x)}{\frac{1}{2} [P_{r}(x) + P_{g}(x)]}] + \mathbb{E}_{x \sim P_{g}}[\log \frac{P_{g}(x)}{\frac{1}{2} [P_{r}(x) + P_{g}(x)]}] - 2 \log 2 \mathrm{(公式 5)} \end{equation}

变换成这个样子是为了引入 Kullback–Leibler divergence(KL 散度)和 Jensen-Shannon divergence(JSD 散度) 这两个重要的相似度衡量指标。

\( KL(P_{1}||P_{2}) = \mathbb{E}_{x \sim P_{1}} \log \frac{P_{1}}{P_{2}} \) (公式 6) \( JSD(P_{1}||P_{2}) = \frac{1}{2} KL(P_{1}||\frac{P_{1}+P_{2}}{2}) + \frac{1}{2} KL(P_{2}||\frac{P_{1}+P_{2}}{2}) \) (公式 7)

于是,公式 5 就可以转化为

\begin{align*} & \mathbb{E}_{x \sim P_{r}}[\log \frac{P_{r}(x)}{\frac{1}{2} [P_{r}(x) + P_{g}(x)]}] + \mathbb{E}_{x \sim P_{g}}[\log \frac{P_{g}(x)}{\frac{1}{2} [P_{r}(x) + P_{g}(x)]}] - 2 \log 2 & \mathrm{(公式 5)} \\ & = KL(P_{r} || \frac{P_{r} + P_{g}}{2}) + KL(P_{g} || \frac{P_{r} + P_{g}}{2}) - 2 \log 2 \\ & = 2 JSD(P_{r}||P_{g}) - 2 \log 2 & \mathrm{(公式 8)} \end{align*}

由此,我们得到的结论是这样的:

根据原始 GAN 定义的判别器 loss,我们可以得到最优判别器的形式; 而在最优判别器的下,我们可以把原始 GAN 定义的生成器 loss 等价变换为最小化真实分布 Pr 与生成分布 Pg 之间的 JSD 散度。 我们越训练判别器,它就越接近最优,最小化生成器的 loss 也就会越近似于最小化 Pr 和 Pg 之间的 JSD 散度。

问题就出在这个 JSD 散度上。我们会希望如果两个分布之间越接近它们的 JSD 散度越小, 我们通过优化 JSD 散度就能将 Pg “拉向” Pr,最终以假乱真。 这个希望在两个分布有所重叠的时候是成立的,但是如果两个分布完全没有重叠的部分,或者它们重叠的部分可忽略(下面解释什么叫可忽略), 它们的 JSD 散度是多少呢?

答案是 \( \log 2 \) ,因为对于任意一个 x 只有四种可能:

  1. Pr(x) = 0 且 Pg(x) = 0
  2. Pr(x) ≠ 0 且 Pg(x) ≠ 0
  3. Pr(x) = 0 且 Pg(x) ≠ 0
  4. Pr(x) ≠ 0 且 Pg(x) = 0

每个相应的问题如下:

  1. 第一种对计算 JSD 散度无贡献
  2. 第二种情况由于重叠部分可忽略所以贡献也为 0
  3. 第三种情况对公式 7 右边第一个项的贡献是 \( \log \frac{P_2}{\frac{1}{2}(P_2 + 0)} = \log 2 \)
  4. 第四种情况与之类似,所以最终 \( JSD(P_1||P_2) = \log 2 \)

Comments