论文笔记-GAN tutorial NIPS 2016

为什么要学习 GAN?

  • High-dimensional probability distributions, 从高维概率分布中训练和采样的生成模型具有很强的能力来表示高维概率分布。

  • Reinforcement learning. 和强化学习结合。

  • Missing data. 生成模型能有效的利用无标签数据,也就是半监督学习 semi-supervised learning。

生成模型如何工作的

Maximum likehood estimation

极大似然估计就是在给定数据集的情况下,通过合理的模型(比如语言模型)计算相应的似然(概率),使得这个概率最大的情况下,估计模型的参数。 \[\sum_i^mp_{\text{model}}(x^{(i)}; \theta)\]

m 是样本数量。

将上诉概率转换到 log 空间(log 函数是单调递增的),可以将乘积转换为相加,简化了计算。

同样的,也可以把上诉似然估计的极大化看做是最小化 KL 散度(或者交叉熵)。这样一来,相当于把无监督问题转换成了有监督问题。(不知理解的是否正确?)

相对熵

熵是信息量 \(log{\dfrac{1}{p(i)}}\) (概率越大信息量越少)。

p 是真实分布, q 是非真实分布。

交叉熵是用 q 分布来估计 p 分布所需要消除的代价 cost: \[H(p,q) = \sum_ip(i)log{\dfrac{1}{q(i)}}\]

用真实分布 p 估计真实分布所需要的 cost: \[H(p) = \sum_ip(i)log{\dfrac{1}{p(i)}}\] 从这里也能看出,当概率 p 为 1 时,所需要的 cost 就为 0 了。

相对熵,又称 KL 散度(Kullback–Leibler divergence),就是指上诉两者所需要消耗的 cost 的差值:

\[D(p||q) = H(p,q)-H(p) = \sum_ip(i)log{\dfrac{p(i)}{q(i)}}\]

GAN 是如何工作的?

GAN 框架

- 判别器 discriminator
- 生成器 gererator

在左边场景,判别器学习如何分别样本是 real or fake. 所以左边的输入是 half real and half fake.

在右边的v场景,判别器和生成器都参与了。G 用来生成 G(z), D 用来判别 G(z) 是 real or fake.

结构化概率模型 Structured Probabilistic Modelsfor Deep Learning

containing latent variables z and observed variables x.
z 是需要学习的隐藏变量,x 是可观察到的变量。

判别器 D 的输入是 x,其需要学习的参数是 \(\theta^{(D)}\). 生成器 G 的输入是 z, 其需要学习的参数是 \(\theta^{(G)}\).

两个玩家都有各自的损失函数。 \(J^{(D)}(\theta^{(D)}, \theta^{(G)})\), 但是 \(J^{(D)}\) 并不影响参数 \(\theta^{(G)}\). 同样的道理,反过来也是 \(J^{(G)}(\theta^{(G)}, \theta^{(D)})\).

每个玩家的损失函数依赖于另一个玩家的参数,但是确不能控制它的参数。所以这是一种 Nash equilibrium 问题。找到这样一个局部最优解 \(tuple(\theta^{(G)}, \theta^{(D)})\) 使得 \(J^{(D)}\) 关于 \(\theta^{(D)}\) 局部最小,\(J^{(G)}\) 关于 \(\theta^{(G)}\) 局部最小。

Generator

differentiable function G, 可微分函数 G. 实际上就是 神经网络。z 来自简单的先验分布,G(z) 通过模型 \(p_{model}\) 生成样本 x. 实践中,对于 G 的输入不一定只在第一层 layer, 也可以在 第二层 等等。总之,生成器的设计很灵活。

Training process

两个 minibatch 的输入: x 来自 training dataset. z 来自先验隐藏变量构成的模型 \(p_\text{model}\)。通过优化算法 SGD/Adam 对两个损失 \(J^{(D)} J^{(G)}\) 通过进行优化。梯度下降一般是同步的,也有人认为两者的迭代步数可以不一样。在这篇 tutorial 的时候,得到的共识是同步的。

cost function

目前大多数 GAN 的损失函数,\(J(D)\) 都是一样的。区别在于 \(J(G)\).

The discriminator’s cost, J (D)

这是个标准的用于二分类的交叉熵损失函数。只不过这里,正分类都来自于训练集,正分类的概率是 \(\dfrac{1}{2}E_{x~d_{data}}\), 负分类来自于生成器,则其概率是 \(\dfrac{1}{2}E_z\)

通过训练判别器,我们可以得到这样一个比例:
\[\dfrac{p_{data}(x)}{p_{\text{model}}(x)}\]

GANs 通过监督学习来获得这个 ratio 的估计,这也是 GANs 不同于 变分自编码 和 波尔兹曼机 (variational autoencoders and Boltzmann machines) 的区别。

但是 GANs 通过监督学习来估计这个 ratio,会向监督学习一样遇到同样的问题:过拟合和欠拟合。但是通过足够的数据和完美的优化可以解决这个问题。

Minimax, zero-sum game

设计 cost function for generator.

前面我们知道,两个玩家 player 或者说 神经网络 G,D 实际上是一种博弈,D 希望能找出 G(z) 是 fake,而 G 希望能让 G(z) 尽可能像 real. 所以最简单的一种方式就是 all player's cost is always zero.

\[J^{(G)} = -J^{(D)}\]

这样 \(J^{(G)}, J^{(D)}\) 都可以用 value function 表示:

\[V(\theta^{(D)}, \theta^{(G)})=-J^{(D)}(\theta^{(D)}, \theta^{(G)})\]

那么整个 game 也就是一个 minmax 游戏:

outer loop 是关于 \(\theta^{(G)}\) 的最小化,inner loop 是关于 \(\theta^{(D)}\) 的最大化。

但是这种 function 在实际中并不能使用,因为其非凸性。
> In practice, the players are represented with deep neural nets and updates are made in parameter space, so these results, which depend on convexity, do not apply

Heuristic, non-saturating game

Minimizing the cross-entropy between a target class and a classifier’s predicted distribution is highly effective because the cost never saturates when the classifier has the wrong output.
对一个分类器,最小化 目标类和预测概率的交叉熵 是一个非常有效的方法,因为当 分类器 存在误分类时,损失函数就永远不可能饱和。

所以,对于生成器的 cost 依旧使用交叉熵,但如果使用和 判别器一模一样的 cost(这里应该就是把正负分类反过来?):

\[J^{(G)}(\theta^{(D)}, \theta^{(G)})=-\dfrac{1}{2}E_zlogD(G(z))-\dfrac{1}{2}E_{x~p_{data}}log(1-D(x))\]

猜想应该是这样,文中没有给出。

不幸的是这样的在是实际中,也并不可行。当 判别器 拒绝一个高置信度(high confidence) 的样本时,生成器会出现梯度消失。

所以,改进之后就是:
\[J^{(G)}(\theta^{(D)}, \theta^{(G)})=-\dfrac{1}{2}E_zlogD(G(z))\]

In the minimax game, the generator minimizes the log-probability of the discriminator being correct. In this game, the generator maximizes the logprobability of the discriminator being mistaken.

在 Minmax,zero-game 中,生成器的目的是最小化 判别器 自认为自己判别对了的 log-probability, 而在 non-saturating game 中,生成器是最大化 判别器判别错误 的 log-probability.

Maximum likelihood game

前面提到极大似然估计是最小化模型与数据之间的 KL 散度。 GANs 使用极大似然估计则是对比不同的模型。

\[J^{(G)}=-\dfrac{1}{2}E_zexp(\sigma^{-1}(D(G(z))))\]

in practice, both stochastic gradient descent on the KL divergence and the GAN training procedure will have some variance around the true expected gradient due to the use of sampling (of x for maximum likelihood and z for GANs) to construct the estimated gradient.
在实践中,由于使用采样(x表示最大似然,z表示GAN)来构建估计的梯度,因此KL散度和GAN训练过程的随机梯度下降都会在真实预期梯度附近产生一些变化。

Is the choice of divergence a distinguishing feature of GANs?

Jensen-Shannon divergence, reverse KL

许多人认为 GANs 能够生成更加清晰、逼真的样本是因为他们最小化的是 Jensen-Shannon divergence. 而 VAEs 生成模糊的样本是因为他们最小化的是 KL divergence between the data and the model.

KL 散度并不是对称的。\(D_{KL}(p_{data}||q_{model})\)\(D_{KL}(p_{model}||q_{data})\) 是不一样的。极大似然估计是前者,最小化 Jensen-Shannon divergence 则更像后者。

比较 \(D_{KL}(p_{data}||q_{model})\)\(D_{KL}(p_{model}||q_{data})\) 区别。在模型能力不足以拟合数据的分布时,表现的尤为明显,如上图。给定的数据是两个高斯分布混合的分布。而模型是一个高斯模型。然后分别用极大似然 Maximum likehood 、reverse KL 散度作为 criterion,也就是 cost.

可以看到前者选择去平均两个模态,并希望在两个模态上都能得到较高的概率。而后者只选择其中一个模态,也有可能是另外一个模态,两个模态对于 reverse KL 都含有局部最优解。

所以,从这个视角来看, Maximum likehood 倾向于给 data 出现的位置更高的概率,而 reverse KL 则倾向于给没有出现 data 的位置较低的概率。所以 \(D_{KL}(p_{model}||q_{data})\) 可以生成更棒的样本,因为模型不会生成不常见的样本,因为数据之间具有欺骗性的模态。

然而,也有一些新的研究表明,Jensen-Shannon divergence 并不是 GANs 能生成更清晰样本的原因。

f-GAN 证明,KL 散度也能生成清晰的sample,并且也只选择少量的modes, 说明 Jensen-Shannon divergence 并不是 GANs 不同于其他模型的特征。

GANs 通常选择少量的 mode 来生成样本,这个少量指的是小于模型的能力。 而 reverse KL 则是选择更可能多的 mode of the data distribution 在模型能力范围内。它通常不会选择更少的 mode. 这也解释了 mode collapse 并不是散度选择的原因。

Altogether, this suggests that GANs choose to generate a small number of modes due to a defect in the training procedure, rather than due to the divergence they aim to minimize.
所以,GANs 选择少量的 mode 是因为训练过程中的其他缺陷,而不是 散度 选择的问题。

Comparison of cost functions

生成对抗网络可以看做一种 reinforcement learning. 但是\(j^{(G)}\) 并没有直接参考 training data,所有关于 training data 的信息都来自于 判别器 的学习。

所以和传统的强化学习是有区别的:

比较不同的 cost function:

\(D(G(z))\) 表示 判别器 给 generate sample 为真的概率。

在左侧,Minimax 和 Maximum likehood 都趋向于饱和。也就是说,当一个样本很明显为 fake 时,cost 接近于 0.

似然估计还有个问题,cost 主要来源于 特别像真 的少部分样本,这也是不好的。需要用到 variance reduction techniques.

Maximum likelihood also suffers from the problem that nearly all of the gradient comes from the right end of the curve, meaning that a very small number of samples dominate the gradient computation for each minibatch. This suggests that variance reduction techniques could be an important research area for improving the performance of GANs, especially GANs based on maximum likelihood.

The DCGAN architecture

DCGAN 的结构。

GAN,NCE, MLE 的对比

相同点:
- MiniMax GAN 和 NCE 的 cost function 相同

不同点:
- 更新策略不一样,GAN 和 MLE 都是梯度下降,而 MLE copies the density model learned inside the discriminator and converts it into a sampler to be used as the generator. NCE never updates the generator; it is just a fixed source of noise.

Tips and Tricks

How to train a GAN: https://github.com/soumith/ganhacks

Research Frontiers

Non-convergence

mode collapse