生成式对抗网络Generative Adversarial Networks(GANs)

1. 前言
2. 参考资料
3. 研究背景
4. GAN的框架
4.1 对抗框架(Adeversarial Nets)
*关于“无监督学习”的说明
4.2 Minimax two-player game(Loss)
4.3 Training procedure
5. GAN的应用
6. 结语
1. 前言
GAN(Generative Adversarial Networks),是生成对抗网络于2014年由Ian Good fellow在他的论文Generative Adversarial Nets提出。
在GAN被提出之后,立刻在机器学习领域得到了巨大反响,并且被科学工作者们应用在许多领域,且取得了令人印象深刻的成果。在2016NIPS会议上,Goodfellow对GAN做了一次长达2个小时的报告,将GAN的原理,训练tips,以及一些影响比较大的GAN变体等等综合在一起,信息量比较大。

2. 参考资料
Paper: Generative Adversarial Nets.
Slide:”Generative Adversarial Networks,” NIPS 2016 tutorial.
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的框架
论文提出了一个新的网络,通过一个对抗的过程来估计生成模型。在这个过程中会同时训练两个模型:一个生成模型GG用于估计数据分布,一个判别模型DD来预测一个样本是来自训练集(真实数据集)而非GG的概率。对于GG来说训练过程就是要使DD判断错误的可能性最大化。
形象一点说,生成模型GG是一个造假币的人,而辨别模型DD是一个鉴别真假币的人,GG的目标是造出能够以假乱真的假币,而DD的目标是正确判别真假,俩人最开始都是新手,DD鉴别能力如果变强,则GG的造假能力也必须变强才能蒙蔽DD的双眼;GG造假能力变强之后,DD也必须提高自己的鉴别能力才能做一个合格的鉴别师。于是DD和GG在相互博弈的过程当中不断提高各自的能力,理论上来说,最终GG则能够造出接近和真币一样的假币。

4.1 对抗框架(Adeversarial Nets)
将这个框架应用到图像生成上,就有了下面这个框架:

同样,框架中涉及到两个网络GG和DD,对这俩网络参数进行更加详细的解释:
xfake=G(z;θ(G))xfake=G(z;θ(G)):表示GG的输入是噪声zz(符合特定分布),输出xx,即假的图片,而θ(G)θ(G)则是生成器GG里的待训练权重集合;
D(x;θ(D))∈[0,1]D(x;θ(D))∈[0,1]:表示DD的输入是xx(分为xfakexfake和xrealxreal),DD会对输入的图片xx做一个判断,得到xx是真的概率,由此输出一个范围在[0,1][0,1]之间的数,θ(D)θ(D)则是辨别器DD里的待训练参数集合。

上图中的工作流程解释:
从符合特定分布的噪声中采样一定数目的点zz输入生成器,生成假造的数据xfakexfake向DD输入,另外向DD同时输入的还有真实数据xrealxreal。按照DD和GG各自的目标:DD希望辨别真假的能力强,则希望相应的D(xreal)D(xreal)接近1,而D(xfake)D(xfake)(即D(G(z))D(G(z)))接近0;而GG的任务是希望D(xfake)D(xfake)(即D(G(z))D(G(z)))接近1。
上述的”1”和”0”其实可以看作是对输入打上的标签,那么GG和DD的矛盾点在于,对于输入DD中的G(z)G(z),DD希望D(G(z))D(G(z))能对应标签0,而GG希望它对应标签1。

*关于“无监督学习”的说明
GAN还很吸引人的一点是,它是无监督学习,也就是说输入数据时是不需要输入标签的,那就让人很好奇了,要同时训练新手GG和新手DD,GG由DD引导学习,那没有标签的情况下谁来引导DD学习呢?
所以这里要说明的一点是,确实我们不需要向DD输入标签,但不代表在训练的时候没有标签。上图有表明,xx的数据来源有两个,一个是输入的training data,一个是G(z)G(z),这就是说只要是输入的数据一定是real,而生成的数据一定是fake,由此根据数据来源不同就可以确定样本是real还是fake,在程序中就可以根据数据来源给数据打上相应标签”1”或者”0”。所以DD在训练的时候是有标签的,training data(real)的标签是”1”,generated data(fake)的标签是”0”,所以其实DD就是一个普通的判别器,在训练的时候既有数据又有标签,利用标签和DD输出的loss利用随机梯度下降的方法(STD)来求解DD中的参数θ(D)θ(D)。

4.2 Minimax two-player game(Loss)
前文已经到DD和GG的各自目标,以及两者在数据G(z)G(z)上的矛盾。将这个矛盾以数学公式的形式表示出来如下:

这个公式就叫做GG和DD之间的Minimax two-player game。
以下从GG和DD的角度对这个公式进行分析:
1. DD的角度:
上述公式左边部分表示DD希望V(D,G)V(D,G)的值尽量大。
公式右边前半部分

————————————————
版权声明:本文为CSDN博主「yucicheung」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yucicheung/article/details/77950324

你可能感兴趣的:(scholarship,深度学习,pytorch,神经网络)