生成对抗网络(Generative Adversarial Networks, GANs)是无监督学习的一个比较新的分支,由Ian Goodfellow等于2014年提出,其优秀的性能很快获得了学界的普遍关注。

该模型包含两个神经网络,一个是生成式模型,一个是判别式模型。生成式模型类似于一个“仿制者”,需要生成能尽量不被判别式模型识破的假样本;判别式模型则类似于“警察”,需要将假的样本探测出来。这两者之间的博弈和竞争使得两个模型的能力都同时增强,直到生成式模型生成的假样本无法和真实样本区分为止。

生成对抗网络(GANs)

本部分对该模型进行更细致的描述。首先,我们考虑一个简单的分布$ p_z $(例如,-1到1之间的均匀分布)。我们把“从$ p_z $这个分布中取样一个值$ z $”的操作定义为$ z \sim p_z $。

然后,我们定义一个函数(生成式模型)$ G(z) $,将我们从$ p_z $取样得到的$ z $映射为一个“假样本”。这里的$ G(z) $往往使用深度神经网络实现。

有了$ G(z) $之后,我们将$ G(z) $(此处$ z \sim p_z $)看做是在从一个分布中取样,并把这个分布记做$ p_g $。同时,我们将原始样本数据的(未知)分布定义为$ p_{data} $。最终,我们希望$ p_g = p_{data} $。

现在,我们考虑另一个函数(判别式模型)$ D(x) $,将某个数据样本作为输入,并给出“这个样本是取样自$ p_{data} $”的概率。如果这个概率接近于1,说明该样本很大可能是取自原始样本数据的分布$ p_{data} $。若接近于0,则说明该样本为“假样本”。这里的$ D(z) $也往往使用深度神经网络实现。

于是,我们对于判别式模型$ D $的训练目标是:

  • 对于$ x \sim p_{data} $,$ D(x) $都尽量大。可以表示为$ \max_D \mathbb{E}_{x \sim p_{data}} \log D(x) $;
  • 对于$ x \not\sim p_{data}$(或者说,$ x \sim p_g $),$ D(x) $尽量小。可以表示为$ \min_D \mathbb{E}_{x \sim p_g} \log D(x) \Leftrightarrow \min_D \mathbb{E}_{x \sim p_z} \log D(G(x)) \Leftrightarrow \max_D \mathbb{E}_{x \sim p_g} \log(1 - D(G(x))) $(作为概率值,$ D(x) $的取值范围在0至1)。

由此,对于$ D(x) $,我们需要:

\begin{equation} \max_D \mathbb{E}_{x \sim p_{data}} \log D(x) + \mathbb{E}_{x \sim p_g} \log(1 - D(G(x))) \label{eq-D} \end{equation}

而对于生成式模型$ G(x) $,我们的训练目标是让$ x \sim p_g $时$ D(G(x)) $都尽量大。可以表示为$ \max_G \mathbb{E}_{x \sim p_g} \log D(x) \Leftrightarrow \max_G \mathbb{E}_{x \sim p_z} \log D(G(x)) \Leftrightarrow \min_G \mathbb{E}_{x \sim p_g} \log(1 - D(G(x))) $。

由此,对于$ G(x) $,我们需要:

\begin{equation} \min_G \mathbb{E}_{x \sim p_g} \log(1 - D(G(x))) \label{eq-G} \end{equation}

结合上面两式,我们可以得到下面统一的表达式:

\begin{equation} \min_G \max_D \mathbb{E}_{x \sim p_{data}} \log D(x) + \mathbb{E}_{x \sim p_g} \log(1 - D(G(x))) \label{eq-GAN} \end{equation}

具体算法如下:

其中,$ \theta_d $是判别式模型$ D(x) $的参数,$ \theta_g $是生成式模型$ G(z) $的参数。$ k $是一个超参数,控制更新多少次判别式模型后才更新一次生成式模型。

深度卷积生成对抗网络(DCGANs)

深度卷积生成对抗网络(Deep Convolutional Generative Adversarial Networks, DCGANs)由Alec Radford等于2015年提出。在了解GANs的架构后,我们可以较为容易地了解DCGAN的原理。

在DCGAN中,生成式模型$ G(z) $使用一个比较特殊的深度卷积网络来实现,如下图所示。


DCGAN中生成式模型$ G(x) $的示意图。

而判别式模型$ D(x) $则仍是一个传统的深度卷积网络,如下图所示。


DCGAN中判别式模型$ D(x) $的示意图。

从图中可以看出,DCGAN的生成式模型$ G(z) $中出现了上采样(upsampling)。卷积神经网络的下采样很好理解,加入polling层即可,然而这里的上采样要如何实现呢?这里,DCGAN通过“微步幅卷积”(fractionally-strided convolution)进行上采样。假设有一个$ 3 \times 3 $的输入,希望输出的尺寸比这要大,那么可以把这个$ 3 \times 3 $的输入通过在像素之间插入0的方式来进行扩展,如下图所示。当扩展到$ 7 \times 7 $的尺寸后,再进行卷积,就可以得到尺寸比原来大的输出。


通过“微步幅卷积”(fractionally-strided convolution)进行上采样的示意图。

参考