Generative Adversarial Nets
Abstract
- 目的:以一种对抗的过程来估计生成式模型(generative models)
这也是为什么题目中并没有 discriminative 的原因。该方法的目的是要以一种新的方式得到好的生成模型 - 同时训练两个模型
- A generative model G - 得到数据分布(data distribution)
- a discriminative model D - 估计一个样本是从训练数据得到而不是由G生成的概率
- A minimax two-player game
- 解决方案(优化目标):G能够恢复训练数据的分布,且D的输出恒为0.5
1 Introduction
- Deep Learning 希望能够发现丰富的分层模型来表示各种数据的概率分布,特别是结构数据(structured data, 例如图像、文字、语音等)
- Discriminative model - map a high-dimension, rich sensory input to a class label 例如分类的问题
- Generative models - 当前的估计方法涉及许多概念的计算,以及难以与分段线性函数整合
- Adversarial nets framework - 例如伪造假钞和警察的关系,双方在竞争中各自改善自己的方法,直到难以警察难以分辨真假(也即生成模型效果达到最佳)
- 在本文提出的方法中,G和D均使用多层感知机模型,G以随机噪声作为输入
[补充] Discriminative model v.s. Generative model
【资料待查待整理】
2 Related work
估计生成模型的一系列算法,是看不懂的内容。
3 Adversarial nets
- 一些符号表示
- data x 的概率分布
- 生成器通过噪声z得到的概率分布
- Discriminator输出表示
- Value function
- 对G的优化 - minmize后面一部分,G生成的数据越真实
- 对D的优化 - maximize整个函数,给真实的数据高分,给G生成的数据低分
- a less formal, more pedagogical explanation
a) 初始情况
b) 对D进行了优化,此时D能够准确分辨真实数据和生成的数据
c) 对G进行了优化,G生成的数据进一步接近真实数据的分布
d) 最后的结果,G生成的数据与真实数据分布一致,D的输出处处为0.5,难以分辨数据真假 - Algorithm
- 在实际的训练过程中,在早期训练过程中,D能很容易地分辨真实数据和G生成的数据,因此难以去训练G。在早期改变G的优化目标:
maximize logD(G(z)) - 先train G还是先train D?重要吗
4 Theoretical Results
…大概是在理论上证明了最优解的存在以及算法的收敛性
5 Experiments
训练的设置以及实验结果
代码阅读
参数中不太懂的部分
- b1, b2
parser.add_argument("--b1", type=float, default=0.5, help="adam: decay of first order momentum of gradient")
parser.add_argument("--b2", type=float, default=0.999, help="adam: decay of first order momentum of gradient")
Adam 里面的两个参数
- latent dimension
parser.add_argument("--latent_dim", type=int, default=100, help="dimensionality of the latent space")
目前主要不明白这里的潜在空间(latent space)指的是什么。generator 的输入 z 的维度。
Generator
class Generator(nn.Module):
def __init__(self):
super(Generator