生成对抗网络GAN简单理解

GAN分析问题:

  1、目标函数如何设定?

  2、如何生成图片?

  3、G和D因该如何设置?

       4、如何进行训练?

一、什么是生成对抗网络?

  生成式对抗网络(GAN, Generative Adversarial Networks )是一种深度学习模型,是近年来复杂分布上无监督学习最具前景的方法之一。模型通过框架中(至少)两个模块:生成模型(Generative Model)和判别模型(Discriminative Model)的互相博弈学习产生相当好的输出。博弈双方的利益之和是一个常数,既两者的总空间是一定的。

  GAN生成对抗网络主要由生成器模型(Generative)和判别器模型(Discriminative)两者组成,他们各自有各自的功能。两者的异同主要包括:

  相同点:

   这两个模型都可以看成是一个黑匣子,接受输入然后有一个输出,类似一个函数,一个输入输出映射。

  不同点:

  生成器模型就比作是一个样本生成器,输入一个噪声/样本,然后把它包装成一个逼真的样本,也就是输出。

  判别模型比作一个二分类器,来判断输入的样本是真是假。

生成对抗网络GAN简单理解_第1张图片

二、GAN的两个模型的主要作用

1、判别模型

    判别器直观来看就是一个简单的神经网络结构,输入就是一副图像,输出就是一个概率值,用于判断真假使用,类似于一个二分类的模型,用于判断输入的图片类别,从而进行图片的真假识别。

2、生成模型

   生成模型同样也可以看成是一个神经网络模型,输入是一组噪声或者是随机数Z,输出是一个图像。从而生成所需训练的数据集,以至于输入的图片可以达到以假乱真的效果。

  • 判别器的目的:就是能判别出来属于的一张图它是来自真实样本集还是假样本集。假如输入的是真样本,网络输出就接近1,输入的是假样本,网络输出接近0,那么很完美,达到了很好判别的目的。
  • 生成器的目的:生成网络是造样本的,它的目的就是使得自己造样本的能力尽可能强,强到什么程度呢,你判别网络没法判断我是真样本还是假样本。

三、如何训练

      首先,生成模型与对抗模型可以说是完全独立的两个模型,好比就是完全独立的两个神经网络模型,他们之间没有什么联系。

      因此训练的主要方法是:单独交替迭代训练

训练步骤:

      假设最初拥有假设现在生成网络模型已经存在,然后给一堆噪声或者随机数组,通过生成模型就会得到一堆假的样本集,现在我们人为的定义真假样本集的标签,因为我们希望真样本集的输出尽可能为1,假样本集为0,很明显这里我们就已经默认真样本集所有的类标签都为1,而假样本集的所有类标签都为0。况且我们也知道,原始真样本的label我们是不知道的。回过头来,我们现在有了真样本集以及它们的label(都是1)、假样本集以及它们的label(都是0),这样单就判别网络来说,此时问题就变成了一个再简单不过的有监督的二分类问题了,直接送到神经网络模型中训练即可。

     对于生成网络,我们是生成尽可能逼真的样本。同时在训练生成网络的时候,我们需要联合判别网络一起进行达到训练。因此,我们把生成网络生成的假样本的标签都设置为1,即也就是认为这些假样本在生成网络训练的时候是真样本,但是需要保证判别网络的参数发生变化也就是不让它参数发生更新,只是把误差一直传,传到生成网络那块后更新生成网络的参数。这样就完成了生成网络的训练了。

    在完成生成网络训练好够,我们便可以根据目前新的生成网络再对先前的那些噪声Z生成新的假样本,然后又有了新的真假样本集(其实是新的假样本集),便又可以重复上述过程了。我们把这个过程称作为单独交替训练。设定一个迭代次数,交替迭代到一定次数后停止,完成对生成器的训练。

目标公式:

     D:生成器模型

     G:判别器模型

公式主要含义:

     1、生成器保持不变,判别器希望能将真实样本和训练样本区分开。

     2、判别器保持不变,通过调整生成器希望判别器出现失误,尽可能不让其区分开。

    从公式中可以看到,优化D的时候,与生成网络没有什么联系,后面的G(z)这里就相当于已经得到的假样本。优化D的公式的第一项,使的真样本x输入的时候,得到的结果越大越好,因为需要真样本的预测结果越接近于1越好。对于假样本,需要优化是的其结果越小越好,也就是D(G(z))越小越好,因为它的标签为0。既1-D(G(z))越大越好,两者合起来就是越大越好。 那么同样在优化G的时候,这个时候没有真样本什么事,所以可以把第一项直接去掉。这个时候只有假样本,但是我们说这个时候是希望假样本的标签是1的,所以是D(G(z))越大越好,但是呢为了统一成1-D(G(z))的形式,那么只能是最小化1-D(G(z)),本质上没有区别,只是为了形式的统一。之后这两个优化模型可以合并起来写,即可得到这个最大最小目标函数。

生成对抗网络GAN简单理解_第2张图片

绿线:生成样本的概率分布

黑线:真实样本的概率分布

蓝线:表示判别器如何判别真伪

Z:表示噪声

     这张图表明的是GAN的生成网络如何一步步从均匀分布学习到正太分布的。原始数据x服从正太分布,同时这个过程也没告诉生成网络说你得用正太分布来学习,但是生成网络学习到了。通过不断的训练拟合,使得生成器生成的图像无线接近于真实图片。

GAN网络的改进

    虽然GAN网络很好,但是在训练GAN有很多头疼的问题。例如:GAN的训练对超参数特别敏感,需要精心设计。GAN中关于生成模型和判别模型的迭代也很有问题,按照通常理解,如果判别模型训练地很好,应该对生成的提高有很大作用,但实际中恰恰相反,如果将判别模型训练地很充分,生成模型甚至会变差。问题就出在目标函数的设计上,GAN的本质其实是优化真实样本分布和生成样本分布之间的差异,并最小化这个差异。特别需要指出的是,优化的目标函数是两个分布上的Jensen-Shannon距离,但这个距离有这样一个问题,如果两个分布的样本空间并不完全重合,这个距离是无法定义的。

原始GAN的基本问题

  1、判别器越好,生成器梯度消失越严重

  2、模式容易出现崩塌

  3、出现过生现象

你可能感兴趣的:(计算机视觉,人工智能,pytorch)