diff --git a/gan/README.md b/gan/README.md index 700004f6905331455f00c99ce8a0aea531765d62..679f1117c27cc4cd79b36bcd202a22163709fdc4 100644 --- a/gan/README.md +++ b/gan/README.md @@ -4,13 +4,13 @@ 之前的几章中,我们主要介绍的深度学习模型都是在有监督学习(supervised learning)条件下的判别式模型(discriminative models)。在这些例子里,训练数据 X 都是带有标签 y 的,如图像识别中的类别标号,或是语音识别中对应的真实文本。模型的输入是 X,输出是 y,训练得到的模型表示从X到y的映射函数 y=f(X)。 -和判别式网络模型相对的一类模型是生成式模型(generative models)。它们通常是通过非监督训练(unsupervised learning)来得到的。这类模型的训练数据里只有 X,没有y。训练的目标是希望模型能蕴含训练数据的统计分布信息,从而可以从训练好的模型里产生出新的、在训练数据里没有出现过的新数据 X'。 +和判别式网络模型相对的一类模型是生成式模型(generative models)。它们通常是通过非监督训练(unsupervised learning)来得到的。这类模型的训练数据里只有 X,没有y。训练的目标是希望模型能挖掘到训练数据的统计分布信息以及内部结构\[[11](#参考文献)\]。 -生成模型在很多方向都有着广泛的应用。在图像处理方向,生成模型可以用来做图像自动生成、图像去噪、和缺失图像补全等应用。在半监督(semi-supervised)学习的条件下,把生成模型生成的数据加入分类器训练当中,能够减少分类器训练对于标记数据数量的要求。真实世界中大量数据都是没有标注的,人为标注数据会耗费大量人力财力,这就使生成模型有了它的用武之地。研究生成模型的另一个动机是,人们认为如果能够生成很好的数据,那么很可能这个生成模型就学习到了这组数据的一个很好的通用表示(representation),随后就可以用这个学到的表示来完成其他的一些任务。 +生成模型在很多方向都有着广泛的应用。在图像处理方向,生成模型可以用来做图像自动生成、图像去噪、和缺失图像补全等应用。研究生成模型的另一个动机是,人们认为如果能够生成很好的数据,那么很可能这个生成模型就学习到了这组数据的一个很好的通用表示(representation),随后就可以用这个学到的表示来完成其他的一些任务。例如在半监督(semi-supervised)学习的条件下,把生成模型生成的数据加入分类器训练当中,能够降低分类器训练对于标记数据数量的要求\[[6](#参考文献)\]。真实世界中大量数据都是没有标注的,人为标注数据会耗费大量人力财力,这就使生成模型有了它的用武之地。 -之前出现的生成模型,一般是直接构造模型$P_{model}(x; \theta)$来模拟真实数据分布$P_{data}(x)$。而这个模拟的过程,通常是由最大似然(Maximum Likelihood)的办法来调节模型参数,使得观测到的真实数据在该模型下概率最大。现在常用的生成模型有以下几种: +之前出现的生成模型,一般是直接构造模型$P_{model}(x; \theta)$来模拟真实数据分布$P_{data}(x)$。而这个模拟的过程,通常是由最大似然(Maximum Likelihood)的办法来调节模型参数,使得观测到的真实数据在该模型下概率最大\[[6](#参考文献)\]。常用的生成模型有以下几种: -1. 深度玻尔兹曼机(Deep Boltzmann Machine)\[[4](#参考文献)\]: 深度玻尔兹曼机是在概率图模型(probabilistc graphical model)的框架下由多个隐层(hidden layer)搭建的无向图模型(Markov random field)。具体的模型结构可参见图1,图中各层之间的是通过受限玻尔兹曼机(restricted Boltzmann machine)的结构来连接的。这类模型参数的学习一般需要通过马尔可夫链-蒙地卡罗(Markov-Chain-Monte-Carlo)的方法来取样本,所以计算量会比较大。 +1. 深度玻尔兹曼机(Deep Boltzmann Machine)\[[4](#参考文献)\]: 深度玻尔兹曼机是在概率图模型(probabilistc graphical model)的框架下由多个隐层(hidden layer)搭建的无向图模型(Markov random field)。具体的模型结构可参见图1,图中各层之间的是通过受限玻尔兹曼机(restricted Boltzmann machine)的结构来连接的。这类模型参数的学习一般需要通过马尔可夫链-蒙地卡罗(Markov-Chain-Monte-Carlo)\[[12](#参考文献)\]的方法来取样本,所以计算量会比较大。 2. 变分自编码器(variational autoencoder)\[[3](#参考文献)\]:它是在概率图模型的框架下搭建的有向图模型,并结合了深度学习和统计推断方法,希望将数据表示在一个隐层空间(z)中,而其中仍用神经网络做非线性映射,具体模型结构可参加图1。这类模型的参数学习用的近似方法是构造一个似然的下限(Likelihood lower-bound),然后用变分的办法来提高这个下限的值,从而达到提高数据似然的目的。这种方法的问题是产生的图片看起来会比较模糊。 3. 像素循环神经网络(Pixel Recurrent Neural Network)\[[2](#参考文献)\]:它是对每个像素相对于周围像素的条件概率进行建模,也就是说根据周围的像素来一个像素一个像素的生成图片。例如图1中红色像素$x_i$的值就是依赖于之前生成的所有蓝色像素。这种方法的问题是对于一个n维的数据,需要n步才能生成,速度较慢。 @@ -19,7 +19,7 @@ 图1. 生成模型概览
-为了解决上面这些模型的问题,人们又提出了本章所要介绍的另一种生成模型,对抗式生成网络(Generative Adversarial Network - GAN)\[[1](#参考文献)\]。它相比于前面提到的方法,具有生成网络结构灵活,产生样本快,生成图像看起来更真实的优点。GAN的核心思想是,为了更好地训练一个生成式神经元网络模型,我们引入一个判别式神经元网络模型来构造优化目标函数。 +为了解决上面这些模型的问题,人们又提出了本章所要介绍的另一种生成模型,对抗式生成网络(Generative Adversarial Network - GAN)\[[1](#参考文献)\]。它相比于前面提到的方法,具有生成网络结构灵活,产生样本快,生成图像看起来更真实的优点。GAN的核心思想是,为了能更好地训练一个生成式神经网络,引入一个与它“对抗”的判别式神经网络来辅助学习,不断激励生成神经网络生成更优质的数据。 ## 效果展示 @@ -32,20 +32,21 @@ ## 模型概览 + ### 对抗式网络结构 -对抗式生成网络的基本结构是将一个已知概率分布的随机变量$z$,通过参数化的概率生成模型(通常是用一个神经网络模型来进行参数化),变换后得到一个生成的概率分布。训练生成模型的过程就是调节生成模型的参数,使得生成的概率分布趋向于真实数据的概率分布。 +对抗式生成网络的基本结构是将一个已知概率分布(如高斯分布)的随机变量$z$输入一个生成模型$G$,得到其生成的概率分布,并用一个分类器$D$判断该样本为真实数据还是$G$生成的数据。训练生成模型的过程就是调节生成模型的参数,使得生成的概率分布趋向于真实数据概率分布的过程。 对抗式生成网络和之前的生成模型最大的创新就在于,用一个判别式神经网络来描述生成的概率分布和真实数据概率分布之间的差别。也就是说,我们用一个判别式模型 D 辅助构造优化目标函数,来训练一个生成式模型 G。G和D在训练时是处在相互对抗的角色下,G的目标是尽量生成和真实数据看起来相似的伪数据,从而使得D无法分别数据的真伪;而D的目标是能尽量分别出哪些是真实数据,哪些是G生成的伪数据。两者在竞争的条件下,能够相互提高各自的能力,最后收敛到一个均衡点:生成器生成的数据分布和真实数据分布完全一样,而判别器完全无法区分数据的真伪。 ### 对抗式训练方法 对抗式训练里,具体训练流程是不断交替执行如下两步(参见图3): -1. 更新判别器D: +1. 训练判别器D(如图3左): 1. 固定G的参数不变,对于一组随机输入,得到一组(产生式)输出,$X_f$,并将其标号(label)设置为"假"。 2. 从训练数据 X 采样一组 $X_r$,并将其标号设置为"真"。 3. 用这两组数据更新模型 D,从而使D能够分辨G产生的数据和真实训练数据。 -2. 更新生成器G: +2. 训练生成器G(如图3右): 1. 把G的输出和D的输入连接起来,得到一个网路。 2. 给G一组随机输入,输出生成数据。 3. 将G生成的数据输入D。在D的输出端,优化目标是通过更新G的参数来最小化D对生成数据的判别结果和“真”的差别。 @@ -62,19 +63,19 @@ $$\min_G \max_D \frac{1}{N}\sum_{i=1}^N[\log D(x^i) + \log(1-D(G(z^i)))]$$ 其中$x$是真实数据,$z$是随机产生的输入,$N$是训练数据的数量。这个损失函数的意思是:真实数据被分类为真的概率加上伪数据被分类为假的概率。因为上述两步交替优化G生成结果的仿真程度(看起来像x),和D分辨真伪数据的能力,所以这个方法被称为对抗(adversarial)方法。 ### 基本GAN模型 -在最早的对抗式生成网络的论文中,生成器和判别器用的都是全连接层。我们在本章实现了一个类似的结构。G和D是由三层全连接层构成,并且在某些全联接层后面加入了批标准化层(batch normalization)。所用网络结构在图5中给出。 +参照\[[1](#参考文献)\]中的实现,我们将G和D都构造为三层全连接组成的网络,并且在某些全联接层后面加入了批标准化层(batch normalization)。所用网络结构在图4中给出。
- 图5. GAN模型结构图
+ 图4. GAN模型结构图
- 图6. DCGAN生成器模型结构
+ 图5. DCGAN生成器模型结构