> 文档中心 > GNA笔记--GAN生成式对抗网络原理以及数学表达式解剖

GNA笔记--GAN生成式对抗网络原理以及数学表达式解剖


一、GAN介绍

      生成式对抗网络(GAN, Generative Adversarial Networks )是一种深度学习模型,是近年来复杂分布上无监督学习最具前景的方法之一。模型通过框架中(至少)两个模块:生成模型(Generative Model)和判别模型(Discriminative Model)的互相博弈学习产生相当好的输出。原始 GAN理论中,并不要求 G 和 D 都是神经网络,只需要是能拟合相应生成和判别的函数即可。但实用中一般均使用深度神经网络作为 G 和 D 。一个优秀的GAN应用需要有良好的训练方法,否则可能由于神经网络模型的自由性而导致输出不理想。(来自百度百科)

咳咳咳!!下面工作原理的介绍是干货,仔细看!

二、GAN工作原理

      生成式对抗网络,顾名思义,既有生成又有对抗(怎么对抗?想象两个人扳手腕)

      GAN主要有生成器神经网络(Generator Nerual Network) 和鉴别器神经网络(Discriminator Neural Network)组成。下文分别简称为生成器鉴别器【有些人也翻译为判别器】

       生成网络采用随机输入,尝试输出数据样本。在上图中,我们可以看到生成器G(z)从p(z)获取了输入z,其中z是来自概率分布p(z)的样本。生成器根据输入的样本数据随机产生一个数据,将其送入鉴别器D(x)。

       鉴别网络的任务是接收真实数据或者生成数据,并尝试预测输入是真实(真的)还是生成(假的)的。它需要一个来自pdata(x)的输入x,其中pdata(x)是我们的真实数据分布。 D(x)然后使用Sigmoid函数解决二元分类问题,并输出0到1的值。

【Sigmoid函数是常用的激活函数,它可以把输入的数据映射到(0,1)区间,对数学不感冒的同学记住它是个工具人就行啦!!】

再来看个头疼的东西,就是它的数学公式表达     

和大家一样,我看到这一长串,心里想:握草!这是个啥玩意。

别担心别担心,其实这就是个纸老虎,看不懂也不影响大家后面的Code。

首先来看加号前面的一项

        E代表的是熵(Entropy),X~Pdata(x)代表是x来自于Pdata【真实数据分布】,D(x):鉴别器

所以第一项想要表示的意思就是来自实际分布的数据通过鉴别器的熵

因为数据是来自真实的数据,所以鉴别器肯定想将其最大化为1

更通俗来讲,第一项的含义就是鉴别器鉴别出真实数据的概率,我们的优化目标是希望这个概率越大越好。也就是说,对于服从Pdata分布的图片x,鉴别器应该给出预测结构D(X)=1

你可以有疑问那这个log是干嘛的?

       数据取对数并不会改变数据间的相对关系,由于log函数的单调性,加上log可以用来放大我们的损失,便于计算和优化。

继续来看第二部分

       这一部分表达的意思就是来自随机输入的数据通过生成器的熵。生成器生成一个假样本,通过鉴别器识别真假。

因为是生成的假样本,鉴别器肯定想把假的都识别出来,所以鉴别器尝试将其最大化为0

还有最后一部分!就大获全胜了

 这个想要表达的意思就是我们GAN名字中的对抗!!

怎么对抗的呢?我们从优化目标来看

       对于生成器G而言,希望鉴别器鉴别生成器的生成数据为真,即:D(G(Z))=1,

也就是希望 越小越好

【比如你是生成器,鉴别器代表老师。你想请假不上课,肯定要编一个理由骗过老师,从你的角度而言,理由编的让老师越信服越好。】

      对于鉴别器D而言,如果其输入的是生成的数据【D(G(Z))】,鉴别器的目标是最小化D(G(Z)),希望它被判定为0,也就是希望 越大越好

【还是你要请假不上课,从老师角度而言肯定要尽可能地识别你的假谎言】

这样看来,生成器和鉴别器的优化目标是相反的,体现在公式中就是

 三、如何训练GAN?

 两个阶段:

       1.训练鉴别器,冻结生成器(冻结不是不训练,神经网络只向前传播,不进行backprogation后向传播)

       2.训练生成器,冻结鉴别器。

四、生成器和判别器的损失问题

       生成器的损失是通过判别器的输出来计算的,而判别器的输出是一个概率值,我们可以通过交叉熵计算。(不用纠结交叉熵到底是什么,记住又是一个工具人,数学是为我们服务工具!)

五、目前存在的缺点

  1. 计数问题:GAN无法区分特定对象在某个位置应该发生的数量(例如一个头上好几双眼睛)
  2. 透视问题:GAN无法适应3D对象,他不理解视角差异
  3. 全局结构问题:GAN不了解整体结构

 六、应用

1. GAN本身是一种生成式模型,所以在数据生成上用的是最普遍的,最常见的是图片生成,常用的有DCGAN WGAN,BEGAN,个人感觉在BEGAN的效果最好而且最简单。

2. GAN本身也是一种无监督学习的典范,因此它在无监督学习,半监督学习领域都有广泛的应用,比较好的论文有Improved Techniques for Training GANs、Bayesian GAN(最新)

3. 不仅在生成领域,GAN在分类领域也占有一席之地,简单来说,就是替换判别器为一个分类器,做多分类任务,而生成器仍然做生成任务,辅助分类器训练。

4. GAN可以和强化学习结合,目前一个比较好的例子就是序列对抗网络Seq GAN。

5. 目前比较有意思的应用就是GAN用在图像风格迁移,图像降噪修复,图像超分辨率了,都有比较好的结果,详见pix2pix GAN 和cycle GAN。但是GAN目前在视频生成上和预测上还不是很好。

6. 目前也有研究者将GAN用在对抗性攻击上,具体就是训练GAN生成对抗文本,有针对或者无针对的欺骗分类器或者检测系统等等,但是目前没有见到很典范的文章。

六、升华一下

      用我们的大白话过一遍GAN。

      以生成图片为例,用真实图片的数据集来训练鉴别器,使得鉴别器的鉴别能力越来越强。用随机的生成数据输入生成器,使得生成器产生一张假图片,把假图片送到鉴别器进行鉴别。从生成器角度来看,肯定希望自己生成的假图片判定为真的,但是从鉴别器而言,鉴别器要把假的都鉴别输出。两者就在这个对抗过程中,不断优化自己!这就是我们的GAN!

实战代码实现:https://blog.csdn.net/m0_62128864/article/details/123853830?spm=1001.2014.3001.5501