1. 前言
GAN(Generative Adversarial Networks),是生成对抗网络于2014年由Ian Good fellow在他的论文Generative Adversarial Nets提出。
在GAN被提出之后,立刻在机器学习领域得到了巨大反响,并且被科学工作者们应用在许多领域,且取得了令人印象深刻的成果。在2016NIPS会议上,Goodfellow对GAN做了一次长达2个小时的报告,将GAN的原理,训练tips,以及一些影响比较大的GAN变体等等综合在一起,信息量比较大。
2. 参考资料
3. 研究背景
其实在机器学习中主要分为两类模型:
1. 判别模型(Discriminative model)
实现高维的、人可以感知的信息(如声音、图片等)到一个标签(可以是语义,类别)的映射,如上图,我们向判别模型输入一张猫的图片,就能输出”cat”的标签。
2. 生成模型(Generative model)
学习的是真实数据的概率分布,并且模拟真实数据的生成。对大家来说可能较为常见的例子就是自动编码器(Autoencoder)和反卷积(Transposed convolution),对这两者我稍微解释一下。
- 自动编码器:见上图,自动编码器分为encoder(编码器)和decoder(解码器)。将图片输入自动编码器时,编码器首先对图像进行编码,然后通过解码器恢复成原图。在整个网络训练好以后,如果我们将编码器去掉,留下从code通过解码器的一个结构,那这个就是生成真实数据的过程,因此code通过decoder这部分结构这属于一种生成模型。
- 反卷积:卷积实际上会对图片进行下采样,而反卷积的过程会对图像进行上采样,这个上采样的过程也是一种生成的过程,因此也属于生成模型。在讨论的时候,学长提到反卷积可以被归为自动编码器,因为卷积和反卷积的kernel是互为转置的关系,与解码器与编码器之间的关系一致,但是我表示不同意啦,因为在训练时,自动编码器的编码器和解码器是一起训练的,但是反卷积的核是利用训练好的卷积核进行变换的,即不是联合训练得到的。(Update:17.9.14,还没研究过反卷积,日后可能需要修改。)
生成模型的任务是学习概率密度并且生成数据,但在求解真实数据的概率密度分布的过程中有很大难度,常用的方法有最大似然估计(Maximum likelihood estimation)等,要求解概率几乎无法进行。
而Goodfellow就想到一种超奇妙的方法,利用判别网络(D)和生成网络(G)两个网络一起训练,成功绕开以上的难点,模拟真实数据的生成。
4. GAN的框架
论文提出了一个新的网络,通过一个对抗的过程来估计生成模型。在这个过程中会同时训练两个模型:一个生成模型
G
G
用于估计数据分布,一个判别模型来预测一个样本是来自训练集(真实数据集)而非
G
G
的概率。对于来说训练过程就是要使
D
D
判断错误的可能性最大化。
形象一点说,生成模型是一个造假币的人,而辨别模型
D
D
是一个鉴别真假币的人,的目标是造出能够以假乱真的假币,而
D
D
的目标是正确判别真假,俩人最开始都是新手,鉴别能力如果变强,则
G
G
的造假能力也必须变强才能蒙蔽的双眼;
G
G
造假能力变强之后,也必须提高自己的鉴别能力才能做一个合格的鉴别师。于是
D
D
和在相互博弈的过程当中不断提高各自的能力,理论上来说,最终
G
G
则能够造出接近和真币一样的假币。
4.1 对抗框架(Adeversarial Nets)
将这个框架应用到图像生成上,就有了下面这个框架:
同样,框架中涉及到两个网络和
D
D
,对这俩网络参数进行更加详细的解释:
:表示
G
G
的输入是噪声(符合特定分布),输出
x
x
,即假的图片,而则是生成器
G
G
里的待训练权重集合;
:表示
D
D
的输入是(分为
xfake
x
f
a
k
e
和
xreal
x
r
e
a
l
),
D
D
会对输入的图片做一个判断,得到
x
x
是真的概率,由此输出一个范围在之间的数,
θ(D)
θ
(
D
)
则是辨别器
D
D
里的待训练参数集合。
上图中的工作流程解释:
从符合特定分布的噪声中采样一定数目的点输入生成器,生成假造的数据
xfake
x
f
a
k
e
向
D
D
输入,另外向同时输入的还有真实数据
xreal
x
r
e
a
l
。按照
D
D
和各自的目标:
D
D
希望辨别真假的能力强,则希望相应的接近1,而
D(xfake)
D
(
x
f
a
k
e
)
(即
D(G(z))
D
(
G
(
z
)
)
)接近0;而
G
G
的任务是希望(即
D(G(z))
D
(
G
(
z
)
)
)接近1。
上述的”1”和”0”其实可以看作是对输入打上的标签,那么
G
G
和的矛盾点在于,对于输入
D
D
中的,
D
D
希望能对应标签0,而
G
G
希望它对应标签1。
*关于“无监督学习”的说明
GAN还很吸引人的一点是,它是无监督学习,也就是说输入数据时是不需要输入标签的,那就让人很好奇了,要同时训练新手和新手
D
D
,由
D
D
引导学习,那没有标签的情况下谁来引导学习呢?
所以这里要说明的一点是,确实我们不需要向
D
D
输入标签,但不代表在训练的时候没有标签。上图有表明,的数据来源有两个,一个是输入的training data,一个是
G(z)
G
(
z
)
,这就是说只要是输入的数据一定是real,而生成的数据一定是fake,由此根据数据来源不同就可以确定样本是real还是fake,在程序中就可以根据数据来源给数据打上相应标签”1”或者”0”。所以
D
D
在训练的时候是有标签的,training data(real)的标签是”1”,generated data(fake)的标签是”0”,所以其实就是一个普通的判别器,在训练的时候既有数据又有标签,利用标签和
D
D
输出的loss利用随机梯度下降的方法(STD)来求解中的参数
θ(D)
θ
(
D
)
。
4.2 Minimax two-player game(Loss)
前文已经到
D
D
和的各自目标,以及两者在数据
G(z)
G
(
z
)
上的矛盾。将这个矛盾以数学公式的形式表示出来如下:
这个公式就叫做
G
G
和之间的Minimax two-player game。
以下从
G
G
和的角度对这个公式进行分析:
1.
D
D
的角度:
上述公式左边部分表示希望
V(D,G)
V
(
D
,
G
)
的值尽量大。
公式右边前半部分