tensorflow(九)生成式对抗网络(GAN)上篇----简介与算法原理

一、简介

生成式对抗网络(GAN, Generative Adversarial Networks )是一种深度学习模型,是近年来复杂分布上无监督学习最具前景的方法之一。
模型通过框架中(至少)两个模块:生成模型(Generative Model)和判别模型(Discriminative Model)的互相博弈学习产生相当好的输出。原始 GAN 理论中,并不要求 G 和 D 都是神经网络,只需要是能拟合相应生成和判别的函数即可。但实用中一般均使用深度神经网络作为 G 和 D 。一个优秀的GAN应用需要有良好的训练方法,否则可能由于神经网络模型的自由性而导致输出不理想。
下面是使用GAN生成的可爱的人脸头像。(图片来源于:http://baijiahao.baidu.com/s?id=1568663805038898&wfr=spider&for=pc
这里写图片描述
可以看出生成的图片相似度很高,很有趣。

二、GAN原理

GAN 主要包括了两个部分,即生成器 generator 与判别器 discriminator。生成器主要用来学习真实图像分布从而让自身生成的图像更加真实,以骗过判别器。判别器则需要对接收的图片进行真假判别。在整个过程中,生成器努力地让生成的图像更加真实,而判别器则努力地去识别出图像的真假,这个过程相当于一个二人博弈,随着时间的推移,生成器和判别器在不断地进行对抗,最终两个网络达到了一个动态均衡:生成器生成的图像接近于真实图像分布,而判别器识别不出真假图像,对于给定图像的预测为真的概率基本接近 0.5(相当于随机猜测类别)。

三、GAN的应用

1、图像生成
目前GAN最常使用的地方就是图像生成,如超分辨率任务,语义分割等等。
2、数据增强
用GAN生成的图像来做数据增强,主要解决对于小数据集,数据量不足的情况

四、GAN详解

公式和图片来源于原论文,论文地址为:https://arxiv.org/pdf/1406.2661.pdf

1、GAN最终需要优化的目标函数如下:
这里写图片描述
公式中,x表示真实图片,z表示输入G网络的噪声,而G(z)表示G网络生成的图片。
D(x)表示D网络判断真实图片是否真实的概率(因为x就是真实的,所以对于D来说,这个值越接近1越好)。而D(G(z))是D网络判断G生成的图片的是否真实的概率。
G的目的:D(G(z))是D网络判断G生成的图片是否真实的概率,G应该希望自己生成的图片“越接近真实越好”。也就是说,G希望D(G(z))尽可能得大,这时V(D, G)会变小。因此我们看到式子的最前面的记号是min_G。
D的目的:D的能力越强,D(x)应该越大,D(G(x))应该越小。这时V(D,G)会变大。因此式子对于D来说是求最大,记为max_D。

2、算法流程图如下:
这里写图片描述
3、算法最终实现的结果如下图所示:
这里写图片描述
图中虚线代表真实数据的分布,这里为高斯分布,红色的线代表随机初始化的噪声。GAN的目标便是通过不断的训练D和G网络,最终使红色曲线逐渐拟合虚线,让D网络傻傻分不清楚两条线。即由图一到图四的过程。

五、关于GAN的一些论文

这里写图片描述
这里写图片描述

六、tensorflow实现过程

    问题求解大概步骤:
    1、定义D、G网络的结构,定义输入的shape,把每层的shape和初始化方式定义好,定义D和G两个网络的loss
    2、train训练 传入两组数据,真实的数据x和随机初始化的数据z,并进行迭代优化求解
    3、可视化打印输出

由于篇幅原因,详细代码和注释见下一篇博文。

猜你喜欢

转载自blog.csdn.net/missayaaa/article/details/80251866