精华内容
下载资源
问答
  • 图解 生成对抗网络GAN 原理 超详解

    千次阅读 多人点赞 2020-03-29 14:00:30
    生成对抗网络 一.背景 一般而言,深度学习模型可以分为判别式模型与生成式模型。由于反向传播(Back propagation, BP)、Dropout等算法的发明,判别式模型得到了迅速发展。然而,由于生成式模型建模较为困难,因此...

    生成对抗网络

    一.背景

    一般而言,深度学习模型可以分为判别式模型与生成式模型。由于反向传播(Back propagation, BP)、Dropout等算法的发明,判别式模型得到了迅速发展。然而,由于生成式模型建模较为困难,因此发展缓慢,直到近年来最成功的生成模型——生成式对抗网络的发明,这一领域才焕发新的生机。
    在这里插入图片描述
    生成式对抗网络(Generative adversarial network, GAN)自Ian Goodfellow[1]等人提出后,就越来越受到学术界和工业界的重视。而随着GAN在理论与模型上的高速发展,它在计算机视觉、自然语言处理、人机交互等领域有着越来越深入的应用,并不断向着其它领域继续延伸。

    二.简介

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

    三 .GAN算法流程原理

    3.1 判别模型和生成模型

    机器学习的模型可大体分为两类,生成模型(Generative Model)和判别模型(Discriminative Model)。判别模型需要输入变量 ,通过某种模型来预测 。生成模型是给定某种隐含信息,来随机产生观测数据。举个简单的例子,

    • 判别模型:给定一张图,判定图中的动物是什么类别
    • 生成模型:给一系列猫的图片,生成一张新的猫咪

    3.2 GAN 原理

    在这里插入图片描述
    GAN的基本原理其实非常简单,这里以生成图片为例进行说明。假设我们有两个网络,G(Generator)和D(Discriminator)。正如它的名字所暗示的那样,它们的功能分别是:
    G是一个生成图片的网络,它接收一个随机的噪声z,通过这个噪声生成图片,记做G(z)。
    D是一个判别网络,判别一张图片是不是“真实的”。它的输入参数是x,x代表一张图片,输出D(x)代表x为真实图片的概率,如果为1,就代表100%是真实的图片,而输出为0,就代表不可能是真实的图片。在这里插入图片描述
    在训练过程中,生成网络G的目标就是尽量生成真实的图片去欺骗判别网络D。而D的目标就是尽量把G生成的图片和真实的图片分别开来。这样,G和D构成了一个动态的“博弈过程”。

    二人零和博弈思想(two-player game)

    GAN 的思想是一种二人零和博弈思想(two-player game)博弈双方的利益之和是一个常数,比如两个人掰手腕,假设总的空间是一定的,你的力气大一点,那你就得到的空间多一点,相应的我的空间就少一点,相反我力气大我就得到的多一点,但有一点是确定的就是,我两的总空间是一定的,这就是二人博弈,但是呢总利益是一定的。
    在GAN中就是可以看成,GAN中有两个这样的博弈者,一个人名字是生成模型(G),另一个人名字是判别模型(D)。他们各自有各自的功能。

    两者的相同点

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

    不同点

    • 生成模型功能:比作是一个样本生成器,输入一个噪声/样本,然后把它包装成一个逼真的样本,也就是输出。
    • 判别模型:比作一个二分类器(如同0-1分类器),来判断输入的样本是真是假。(就是输出值大于0.5还是小于0.5)

    如下图所示:
    在这里插入图片描述

    3.3 GAN 算法中的生成器

    对于生成器,输入需要一个n维度向量,输出为图片像素大小的图片。因而首先我们需要得到输入的向量。

    这里的生成器可以是任意可以输出图片的模型,比如最简单的全连接神经网络,又或者是反卷积网络等。
    这里输入的向量我们将其视为携带输出的某些信息,比如说手写数字为数字几,手写的潦草程度等等。由于这里我们对于输出数字的具体信息不做要求,只要求其能够最大程度与真实手写数字相似(能骗过判别器)即可。所以我们使用随机生成的向量来作为输入即可,这里面的随机输入最好是满足常见分布比如均值分布,高斯分布等。

    假如我们后面需要获得具体的输出数字等信息的时候,我们可以对输入向量产生的输出进行分析,获取到哪些维度是用于控制数字编号等信息的即可以得到具体的输出。而在训练之前往往不会去规定它。
    在这里插入图片描述

    3.4 GAN算法中的判别器

    对于判别器不用多说,往往是常见的判别器,输入为图片,输出为图片的真伪标签。
    在这里插入图片描述
    同理,判别器与生成器一样,可以是任意的判别器模型,比如全连接网络,或者是包含卷积的网络等等。

    四.GAN 的训练

    在这里插入图片描述

    1.在噪声数据分布中随机采样,输入生成模型,得到一组假数据,记为D(z)
    2.在真实数据分布中随机采样,作为真实数据,记做x;
    将前两步中某一步产生的数据作为判别网络的输入(因此判别模型的输入为两类数据,真/假),判别网络的输出值为该输入属于真实数据的概率,real为1,fake为0.
    3.然后根据得到的概率值计算损失函数;
    4.根据判别模型和生成模型的损失函数,可以利用反向传播算法,更新模型的参数。(先更新判别模型的参数,然后通过再采样得到的噪声数据更新生成器的参数)

    在这里插入图片描述

    这里需要注意的是:生成模型与对抗模型是完全独立的两个模型,他们之间没有什么联系。那么训练采用的大原则是单独交替迭代训练。

    GAN强大之处在于能自动学习原始真实样本集的数据分布,不管这个分布多么的复杂,只要训练的足够好就可以学出来。

    传统的机器学习方法,一般会先定义一个模型,再让数据去学习。
    比如知道原始数据属于高斯分布,但不知道高斯分布的参数,这时定义高斯分布,然后利用数据去学习高斯分布的参数,得到最终的模型。
    再比如定义一个分类器(如SVM),然后强行让数据进行各种高维映射,最后变成一个简单的分布,SVM可以很轻易的进行二分类(虽然SVM放松了这种映射关系,但也给了一个模型,即核映射),其实也是事先知道让数据该如何映射,只是映射的参数可以学习。
    以上这些方法都在直接或间接的告诉数据该如何映射,只是不同的映射方法能力不一样。

    而GAN的生成模型最后可以通过噪声生成一个完整的真实数据(比如人脸),说明生成模型掌握了从随机噪声到人脸数据的分布规律。GAN一开始并不知道这个规律是什么样,也就是说GAN是通过一次次训练后学习到的真实样本集的数据分布。
    在这里插入图片描述

    五.GAN 的损失函数

    在这里插入图片描述
    在这里插入图片描述
    判别器在这里是一种分类器,用于区分样本的真伪,因此我们常常使用交叉熵(cross entropy)来进行判别分布的相似性,交叉熵公式如下图所示:在这里插入图片描述
    公式中 [公式][公式] 为真实的样本分布和生成器的生成分布。
    在当前模型的情况下,判别器为一个二分类问题,因此可以对基本交叉熵进行更具体地展开如下图所示:
    在这里插入图片描述
    上式推广到N个样本后,将N个样本相加得到对应的公式如下:

    在这里插入图片描述

    GAN损失函数期望形式

    在这里插入图片描述
    在这里插入图片描述

    六.GAN 算法的不足

    在这里插入图片描述

    1. 可解释性差,生成模型的分布 Pg(G)没有显式的表达
    2. 比较难训练,D与G之间需要很好的同步(例如D更新k次而G更新一次),GAN模型被定义为极小极大问题,没有损失函数,在训练过程中很难区分是否正在取得进展。GAN的学习过程可能发生崩溃问题(collapse problem),生成器开始退化,总是生成同样的样本点,无法继续学习。当生成模型崩溃时,判别模型也会对相似的样本点指向相似的方向,训练无法继续。
    3. 网络难以收敛,目前所有的理论都认为GAN应该在纳什均衡上有很好的表现,但梯度下降只有在凸函数的情况下才能保证实现纳什均衡。
    4. 训练GAN需要达到纳什均衡,有时候可以用梯度下降法做到,有时候做不到.还没有找到很好的达到纳什均衡的方法,所以训练GAN相比VAE或者PixelRNN是不稳定的,但在实践中它还是比训练玻尔兹曼机稳定的多
    5. 它很难去学习生成离散的数据,就像文本
    6. 相比玻尔兹曼机,GANs很难根据一个像素值去猜测另外一个像素值,GANs天生就是做一件事的,那就是一次产生所有像素, 你可以用BiGAN来修正这个特性,它能让你像使用玻尔兹曼机一样去使用Gibbs采样来猜测缺失值

    参考:
    复旦大学 《深度学习》

    展开全文
  • 这篇文章是李宏毅老师Generative Adversarial Network(GAN)的一篇笔记,对生成对抗网络感兴趣的同学,非常推荐去看李宏毅老师的专题 https://www.youtube.com/watch?v=DQNNMiAP5lw&list=PLJV_el3uVTsMq6JEFPW35...

    9ca0c0ecf10380d3c1a156b3c140ea5e.png

    这篇文章是李宏毅老师Generative Adversarial Network(GAN)的一篇笔记,对生成对抗网络感兴趣的同学,非常推荐去看李宏毅老师的专题 https://www.youtube.com/watch?v=DQNNMiAP5lw&list=PLJV_el3uVTsMq6JEFPW35BCiOQTsoqwNw

    另外一直有在持续更新GAN的相关内容,大家有兴趣的可以继续阅读~

    王希玺:生成对抗网络GAN(二):Conditional Generation 条件生成网络的理解与算法流程

    Unsupervised Conditional Generation无监督条件生成网络

    这篇文章主要是介绍GAN的基本理念和算法流程,可以看做是GAN的入门。只介绍了算法的直观印象,有关GAN的数学原理,可以参考这篇 生成对抗网络(GAN) 背后的数学理论

    GAN的基本概念

    GAN有两个部分,生成器和判别器:

    生成器

    生成器的基本概念其实很简单,输入一个向量,通过一个NN,输出一个高维向量(可以是图片,文字...)通常Input向量的每一个维度都代表着一些特征。

    18c88a3bf848679dfd64024de487303a.png

    判别器

    同时呢GAN还有一个部分,叫做“discriminator”(判别器),它的输入是你想产生的东西(其实就是生成器产生的output),比如一张图片,或者一段语音...它的输出是一个标量,这个标量代表的是这个Input的质量如何,这个数字越大,表示这个输入越真实。

    59c89a39cc48622dda95ac42c2df306a.png

    生成器和判别器的关系

    其实就是生成器生成一个东西,输入到判别器中,然后由判别器来判断这个输入是真实的数据还是机器生成的,如果没有骗过判别器,那么生成器继续进化,输出第二代Output,再输入判别器,判别器同时也在进化,对生成器的output有了更严格的要求。这样生成器和判别器不断进化,他们的关系有点像一个竞争的关系,所以有了“生成对抗网络(adversarial)”的名字的由来。

    下面讲一下GAN的操作:

    GAN算法流程简述

    1. 初始化generator和discriminator
    2. 每一次迭代过程中:
      1. 固定generator, 只更新discriminator的参数。从你准备的数据集中随机选择一些,再从generator的output中选择一些,现在等于discriminator有两种input。接下来, discriminator的学习目标是, 如果输入是来自于真实数据集,则给高分;如果是generator产生的数据,则给低分,可以把它当做一个回归问题。
      2. 接下来,固定住discriminator的参数, 更新generator。将一个向量输入generator, 得到一个output, 将output扔进discriminator, 然后会得到一个分数,这一阶段discriminator的参数已经固定住了,generator需要调整自己的参数使得这个output的分数越大越好。

    按这个过程听起来好像有两个网络,而实际过程中,generator和discriminator是同一个网络,只不过网络中间的某一层hidden-layer的输出是一个图片(或者语音,取决于你的数据集)。在训练的时候也是固定一部分hidden-layer,调其余的hidden-layer。当然这里的目标是让output越大越好,所以做的不是常规的梯度下降,而是gradient ascent, 当然其实是类似的。

    GAN算法-具体操作

    上面用通俗的语言解释了GAN的算法流程,现在将其正式化:

    初始化

    for D( discriminator) ,
    for G( generator)

    在每次迭代中:

    1. 从数据集
      中sample出m个样本点
      ,这个m也是一个超参数,需要自己去调
    2. 从一个分布(可以是高斯,正态..., 这个不重要)中sample出m个向量
    3. 将第2步中的z作为输入,获得m个生成的数据
    4. 更新discriminator的参数
      来最大化
      , 我们要使得
      越大越好,那么下式中就要使得
      越小越好,也就是去压低generator的分数,会发现discriminator其实就是一个二元分类器:
    • (
      也是超参数,需要自己调)

    1~4步是在训练discriminator, 通常discriminator的参数可以多更新几次

    5. 从一个分布中sample出m个向量

    注意这些sample不需要和步骤2中的保持一致。

    6. 更新generator的参数

    来最小化:

    5~6步是在训练generator,通常在训练generator的过程中,generator的参数最好不要变化得太大,可以少update几次

    展开全文
  • 本文会从头介绍生成对抗网络的一些内容,从生成式模型开始说起,到GAN的基本原理,InfoGAN,AC-GAN的基本科普,如果有任何有错误的地方,请随时喷,我刚开始研究GAN这块的内容,希望和大家一起学习。 生成式模型 ...

    前言

    本文会从头介绍生成对抗式网络的一些内容,从生成式模型开始说起,到GAN的基本原理,InfoGAN,AC-GAN的基本科普,如果有任何有错误的地方,请随时喷,我刚开始研究GAN这块的内容,希望和大家一起学习。

    生成式模型

    何为生成式模型?在很多machine learning的教程或者公开课上,通常会把machine learning的算法分为两类: 生成式模型、判别式模型;其区别在于: 对于输入x,类别标签y,在生成式模型中估计其联合概率分布,而判别式模型估计其属于某类的条件概率分布。 常见的判别式模型包括:LogisticRegression, SVM, Neural Network等等,生成式模型包括:Naive Bayes, GMM, Bayesian Network, MRF 等等

    研究生成式模型的意义

    生成式模型的特性主要包括以下几个方面:

    • 在应用数学和工程方面,生成式模型能够有效地表征高维数据分布;

    • 生成式模型能够作为一种技术手段辅助强化学习,能够有效表征强化学习模型中的state状态(这里不扩展,后面会跟RL的学习笔记);

    • 对semi-supervised learning也有比较好的效果,能够在miss data下训练模型,并在miss data下给出相应地输出;

    • 在对于一个输入伴随多个输出的场景下,生成式模型也能够有效工作,而传统的机器学习方法通过最小化模型输出和期望输出的某个object function的值 无法训练单输入多输出的模型,而生成式模型,尤其是GAN能够hold住这种场景,一个典型的应用是通过场景预测video的下一帧。

    生成式模型一些典型的应用:

    生成式模型族谱

    GAN的理解与TensorFlow的实现

    上图涵盖了基本的生成式模型的方法,主要按是否需要定义概率密度函数分为:

    Explicit density models

    explicit density models 又分为tractable explicit models和逼近的explicit model,怎么理解呢,tractable explicit model通常可以直接通过数学方法来建模求解,而基于逼近的explicit model通常无法直接对数据分布进行建模,可以利用数学里的一些近似方法来做数据建模, 通常基于逼近的explicit model分为确定性(变分方法:如VAE的lower bound)和随机性的方法(马尔科夫链蒙特卡洛方法)。

    • VAE lower bound:

    GAN的理解与TensorFlow的实现

    马尔科夫链蒙特卡洛方法(MCMC),一种经典的基于马尔科夫链的抽样方法,通过多次来拟合分布。比较好的教程:A Beginner’s Guide to Monte Carlo Markov Chain MCMC AnalysisAn Introduction to MCMC for Machine Learning.

    Implicit density models

    无需定义明确的概率密度函数,代表方法包括马尔科夫链、生成对抗式网络(GAN),该系列方法无需定义数据分布的描述函数。

    生成对抗式网络与其他生成式网络对比

    生成对抗式网络(GAN)能够有效地解决很多生成式方法的缺点,主要包括:

    • 并行产生samples;

    • 生成式函数的限制少,如无需合适马尔科夫采样的数据分布(Boltzmann machines),生成式函数无需可逆、latent code需与sample同维度(nonlinear ICA);

    • 无需马尔科夫链的方法(Boltzmann machines, GSNs);

    • 相对于VAE的方法,无需variational bound;

    • GAN比其他方法一般来说性能更好。

    GAN工作原理

    GAN主要由两部分构成:generator和discriminator,generator主要是从训练数据中产生相同分布的samples,而discriminator 则是判断输入是真实数据还是generator生成的数据,discriminator采用传统的监督学习的方法。这里我们可以这样类比,generator 是一个伪造假币的专业人士,discriminator是警察,generator的目的是制造出尽可能以假乱真的假钞,而discriminator是为了能 鉴别是否为假钞,最终整个gan会达到所谓的纳什均衡,Goodfellow在他的paperGAN的理解与TF的实现-小石头的码疯窝中有严格的数学证明,当$p_G$==$p_{data}$时达到 全局最优:

    GAN的理解与TensorFlow的实现

    另一个比较明显看得懂的图如下:

    GAN的理解与TensorFlow的实现

    图中黑色点线为真实数据分布$p_{data}$,绿色线为generator生成的数据分布$p_{G}$,而Discriminator就是蓝色点线,其目的是为了将$p_{data}$和$p_{G}$ 区分,(a)中是初始状态,然后会更新Discriminator中的参数,若干次step之后,Discriminator有了较大的判断力即到了(b)的状态,之后会更新G的模型使其生成的数据分布(绿色线)更加趋近与真实数据分布, 若干次G和D的模型参数更新后,理论上最终会达到(d)的状态即G能够产生和真实数据完全一致的分布(证明见上一张图),如从随机数据分布生成人脸像。

    如何训练GAN

    因为GAN结构的不同,和常规训练一个dl model方法不同, 这里采用simultaneous SGD,每一个step中,会有两个两个梯度优化的 过程,一个是更新discriminator的参数来最小化$J_{(D)}$,一个是更新generator的参数来最小$J_{(G)}$,通常会选用Adam来作为最优化的优化器, 也有人建议可以不等次数地更新generator和discriminator(有相关工作提出,1:1的在实际中更有效:Adam: A Method for Stochastic Optimization) 如何训练GAN,在Goodfellow的GAN的tutorial还有一些代码中有更多的描述包括不同的cost function, 这里我就不详细展开了。

    DCGAN

    GAN出来后很多相关的应用和方法都是基于DCGAN的结构,DCGAN即”Deep Convolution GAN”,通常会有一些约定俗成的规则:

    GAN的理解与TensorFlow的实现

    • 在Discriminator和generator中大部分层都使用batch normalization,而在最后一层时通常不会使用batch normalizaiton,目的 是为了保证模型能够学习到数据的正确的均值和方差;

    • 因为会从random的分布生成图像,所以一般做需要增大图像的空间维度时如77->1414, 一般会使用strdie为2的deconv(transposed convolution);

    • 通常在DCGAN中会使用Adam优化算法而不是SGD。

    各种GANGAN的理解与TensorFlow的实现

    这里有个大神把各种gan的paper都做了一个统计AdversarialNetsPapers

    这里大家有更多的兴趣可以直接去看对应的paper,我接下来会尽我所能描述下infogan和AC-GAN这两块的内容

    InfoGAN

    InfoGAN是一种能够学习disentangled representation的GAN,何为disentangled representation?比如人脸数据集中有各种不同的属性特点,如脸部表情、是否带眼睛、头发的风格眼珠的颜色等等,这些很明显的相关表示, InfoGAN能够在完全无监督信息(是否带眼睛等等)下能够学习出这些disentangled representation,而相对于传统的GAN,只需修改loss来最大化GAN的input的noise(部分fixed的子集)和最终输出之间的互信息。

    原理

    为了达到上面提到的效果,InfoGAN必须在input的noise来做一些文章,将noise vector划分为两部分:

    • z: 和原始的GAN input作用一致;

    • c: latent code,能够在之后表示数据分布中的disentangled representation

    那么如何从latent code中学到相应的disentangled representation呢? 在原始的GAN中,忽略了c这部分的影响,即GAN产生的数据分布满足$P_{G}(x|C)=P(x)$,为了保证能够利用c这部分信息, 作者提出这样一个假设:c与generator的输出相关程度应该很大,而在信息论中,两个数据分布的相关程度即互信息, 即generator的输出和input的c的$I(c;G(z,c))$应该会大。 所以,InfoGAN就变成如下的优化问题:

    GAN的理解与TensorFlow的实现

    因为互信息的计算需要后验概率的分布(下图红线部分),在实际中很难直接使用,因此,在实际训练中一般不会直接最大化$I(c;G(z,c))$

    GAN的理解与TensorFlow的实现

    这里作者采用和VAE类似的方法,增加一个辅助的数据分布为后验概率的low bound: 所以,这里互信息的计算如下:

    GAN的理解与TensorFlow的实现

    这里相关的证明就不深入了,有兴趣的可以去看看paper。

    实验

    我写的一版基于TensorFlow的Info-GAN实现:Info-GANburness/tensorflow-101 random的label信息,和对应生成的图像:

    GAN的理解与TensorFlow的实现

    GAN的理解与TensorFlow的实现

    不同random变量控制产生同一class下的不同输出:

    GAN的理解与TensorFlow的实现

    AC-GAN

    AC-GAN即auxiliary classifier GAN,对应的paper:[1610.09585] Conditional Image Synthesis With Auxiliary Classifier GANs, 如前面的示意图中所示,AC-GAN的Discriminator中会输出相应的class label的概率,然后更改loss fuction,增加class预测正确的概率, ac-gan是一个tensorflow相关的实现,基于作者自己开发的sugartensor,感觉和paper里面在loss函数的定义上差异,看源码的时候注意下,我这里有参考写了一个基于原生tensorflow的版本AC-GAN.

    实验

    各位有兴趣的可以拿代码在其他的数据集上也跑一跑,AC-GAN能够有效利用class label的信息,不仅可以在G时指定需要生成的image的label,同事该class label也能在Discriminator用来扩展loss函数,增加整个对抗网络的性能。 random的label信息,和对应生成的图像:

    GAN的理解与TensorFlow的实现

    GAN的理解与TensorFlow的实现

    不同random变量控制产生同一class下的不同输出:

    GAN的理解与TensorFlow的实现

    总结

    照例总结一下,本文中,我基本介绍了下生成式模型方法的各个族系派别,到GAN的基本内容,到InfoGAN、AC-GAN,大部分的工作都来自于阅读相关的paper,自己相关的工作就是 tensorflow下参考sugartensor的内容重现了InfoGAN、AC-GAN的相关内容。

     当然,本人菜鸟一枚,难免有很多理解不到位的地方,写出来更多的是作为分享,让更多人了解GAN这块的内容,如果任何错误或不合适的地方,敬请在评论中指出,我们一起讨论一起学习 另外我的所有相关的代码都在github上:GAN,相信读一下无论是对TensorFlow的理解还是GAN的理解都会 有一些帮助,简单地参考mnist.py修改下可以很快的应用到你的数据集上,如果有小伙伴在其他数据集上做出有意思的实验效果的,欢迎分享。

     

    原文地址: http://www.leiphone.com/news/201702/GZsIbIb9V9AUGmb6.html

    展开全文
  • 生成对抗网络 GAN 的数学原理

    千次阅读 多人点赞 2019-01-20 23:08:11
    本文从概率分布及参数估计说起, 通过介绍极大似然估计, KL 散度, JS 散度, 详细的介绍了 GAN 生成对抗网络的数学原理. 相关 系列文章索引 : https://blog.csdn.net/oBrightLamp/article/details/85067981 ...

    摘要

    本文从概率分布及参数估计说起, 通过介绍极大似然估计, KL 散度, JS 散度, 详细的介绍了 GAN 生成对抗网络的数学原理.

    相关

    系列文章索引 :

    https://blog.csdn.net/oBrightLamp/article/details/85067981

    正文

    无论是黑白图片或彩色图片, 都是使用 0 ~ 255 的数值表示像素. 将所有的像素值除以 255 我们就可以将一张图片转化为 0 ~ 1 的概率分布, 而且这种转化是可逆的, 乘以 255 就可以还原.

    从某种意义上来讲, GAN 图片生成任务就是生成概率分布. 因此, 我们有必要结合概率分布来理解 GAN 生成对抗网络的原理.

    1. 概率分布及参数估计

    假设一个抽奖盒子里有45个球, 其编号是 1~9 共9个数字. 每个编号的球拥有的数量是:

    编号123456789
    数量246897531
    占比0.0440.0880.1330.1780.2000.1560.1110.0660.022

    占比是指用每个编号的数量除以所有编号的总数量, 在数理统计学中, 在不引起误会的情况下, 这里的占比也可以被称为 概率/频率.

    使用向量 q q q 表示上述的概率分布 :

    q = ( 2 , 4 , 6 , 8 , 9 , 7 , 5 , 3 , 1 ) / 45    = ( 0.044 , 0.088 , 0.133 , 0.178 , 0.200 , 0.156 , 0.111 , 0.066 , 0.022 ) q = (2,4,6,8,9,7,5,3,1)/45 \;\\ =(0.044, 0.088, 0.133, 0.178, 0.200, 0.156, 0.111, 0.066, 0.022) q=(2,4,6,8,9,7,5,3,1)/45=(0.044,0.088,0.133,0.178,0.200,0.156,0.111,0.066,0.022)

    将上述分布使用图像绘制如下 :

    在这里插入图片描述

    现在我们希望构建一个函数 p = p ( x ; θ ) p = p(x;\theta) p=p(x;θ), 以 x x x 为编号作为输入数据, 输出编号 x x x 的概率. θ \theta θ 是参与构建这个函数的参数, 一经选定就不再变化.

    假设上述概率分布服从二次抛物线函数 :
    p = p ( x ; θ ) = θ 1 ( x + θ 2 ) 2 + θ 3    x = ( 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ) p=p(x;\theta)=\theta_1 (x+\theta_2)^2+\theta_3\\ \;\\ x = (1,2,3,4,5,6,7,8,9) p=p(x;θ)=θ1(x+θ2)2+θ3x=(1,2,3,4,5,6,7,8,9)

    使用 L2 误差作为评价拟合效果的损失函数, 总误差值为 error (标量 e) :
    e = ∑ i = 1 9 ( p i − q i ) 2 e = \sum_{i=1}^{9}(p_i-q_i)^2 e=i=19(piqi)2
    我们希望求得一个 θ ∗ \theta^* θ, 使得 e e e 的值越小越好, 使用数学公式表达是这样子的 :
    θ ∗ = a r g m i n θ ( e ) \theta^* = \underset{\theta}{argmin}(e) θ=θargmin(e)
    argmin 是 argument minimum 的缩写.

    如何求 θ ∗ \theta^* θ 不是本文的重点, 这是生成对抗网络的任务. 为了帮助理解, 取其中一个可能的数值作为示例 :

    θ ∗ = ( θ 1 , θ 2 , θ 3 ) = ( − 0.01 , − 5.0 , 0.2 )    p = p ( x ; θ ) = − 0.01 ( x − 5.0 ) 2 + 0.2 \theta^* = (\theta_1,\theta_2,\theta_3)=(-0.01,-5.0,0.2)\\ \;\\ p=p(x;\theta)=-0.01 (x-5.0)^2+0.2 θ=(θ1,θ2,θ3)=(0.01,5.0,0.2)p=p(x;θ)=0.01(x5.0)2+0.2
    绘制函数图像如下 :

    在这里插入图片描述

    在生成对抗网络中, 本例的估计函数 p ( x ; θ ) p(x;\theta) p(x;θ) 相当于生成模型 (generator), 损失函数相当于鉴别模型 (discriminator).

    2. 极大似然估计

    在上例中, 我们很幸运的知道了所有可能的概率分布, 并让求解最优的概率分布估计函数 p ( x ; θ ) p(x;\theta) p(x;θ) 成为可能.

    如果上例的抽奖盒子 (简称样本) 中的 45 个球是从更大的抽奖池 (简称总体) 中选择出来的, 而我们不知道抽奖池中所有球的数量及其编号. 那么, 我们如何根据现有的 45 个球来估计抽奖池的概率分布呢? 我们当然可以直接用上例求得的样本估计函数来代表抽奖池的概率分布, 但本例会介绍一种更常用的估计方法.

    假设 p ( x ) = p ( x ; θ ) p(x)=p(x;\theta) p(x)=p(x;θ) 是总体的概率分布函数. 则编号 x = ( x 1 , x 2 , x 3 , ⋯   , x n ) x = (x_1,x_2,x_3,\cdots,x_n) x=(x1,x2,x3,,xn) 出现的概率为 :
    p = p ( x 1 ) , p ( x 2 ) , p ( x 3 ) , ⋯   , p ( x n ) p = p(x_1),p(x_2),p(x_3),\cdots,p(x_n) p=p(x1),p(x2),p(x3),,p(xn)
    在本例中, n = 9 n = 9 n=9, 即共 9 个编号.

    d = ( d 1 , d 2 , d 3 , d 3 ⋯   , d m ) d=(d_1,d_2,d_3,d_3\cdots,d_m) d=(d1,d2,d3,d3,dm) 是所有的抽样的编号. 在本例中, m = 45 m = 45 m=45, 即样本中共有 45 个抽样. 假设所有的样本和抽样都是独立的, 则样本出现的概率为 :
    ρ = p ( d 1 ) × p ( d 2 ) × p ( d 3 ) × ⋯ × p ( d m ) = ∏ i = 1 m p ( d i ) \rho= p(d_1)\times p(d_2)\times p(d_3)\times\cdots\times p(d_m)=\prod_{i=1}^{m}p(d_i) ρ=p(d1)×p(d2)×p(d3)××p(dm)=i=1mp(di)
    p ( x ) = p ( x ; θ ) p(x)=p(x;\theta) p(x)=p(x;θ) 的函数结构是人为按经验选取的, 比如线性函数, 多元二次函数, 更复杂的非线性函数等, 一经选取则不再改变. 现在我们需要求解一个参数集 θ ∗ \theta^* θ, 使得 ρ \rho ρ 的值越大越好. 即
    θ ∗ = a r g m a x θ ( ρ ) = a r g m a x θ ∏ i = 1 m p ( d i ; θ ) \theta^* = \underset{\theta}{argmax}(\rho)=\underset{\theta}{argmax}\prod_{i=1}^{m}p(d_i;\theta) θ=θargmax(ρ)=θargmaxi=1mp(di;θ)
    argmax 是 argument maximum 的缩写.

    通俗来讲, 因为样本是实际已发生的事实, 在函数结构已确定的情况下, 我们需要尽量优化参数, 使得样本的理论估计概率越大越好.

    这里有一个前提, 就是人为选定的函数结构应当能够有效评估样本分布. 反之, 如果使用线性函数去拟合正态概率分布 (normal distribution), 则无论如何选择参数都无法得到满意的效果.

    连乘运算不方便, 将之改为求和运算. 由于 l o g log log 对数函数的单调性, 上面的式子等价于 :
    θ ∗ = a r g m a x θ    l o g ∏ i = 1 m p ( d i ; θ ) = a r g m a x θ ∑ i = 1 m l o g    p ( d i ; θ ) \theta^* =\underset{\theta}{argmax}\;log\prod_{i=1}^{m}p(d_i;\theta)=\underset{\theta}{argmax}\sum_{i=1}^{m}log\;p(d_i;\theta) θ=θargmaxlogi=1mp(di;θ)=θargmaxi=1mlogp(di;θ)
    设样本分布为 q ( x ) q(x) q(x), 对于给定样本, 这个分布是已知的, 可以通过统计抽样的计算得出. 将上式转化成期望公式 :
    θ ∗ = a r g m a x θ ∑ i = 1 m l o g    p ( d i ; θ ) = a r g m a x θ ∑ i = 1 n q ( x i )    l o g    p ( x i ; θ ) \theta^* =\underset{\theta}{argmax}\sum_{i=1}^{m}log\;p(d_i;\theta) =\underset{\theta}{argmax}\sum_{i=1}^{n}q(x_i)\;log\;p(x_i;\theta) θ=θargmaxi=1mlogp(di;θ)=θargmaxi=1nq(xi)logp(xi;θ)
    注意上式中的两个求和符号, m m m 变成了 n n n. 在大多数情况下, 编号数量会比抽样数量少, 转为期望公式可以显著减少计算量.

    在一些教材中, 上式的写法是:
    θ ∗ = a r g m a x θ    E x − q ( x ) l o g    p ( x ; θ ) = a r g m a x θ ∫ q ( x )    l o g    p ( x ; θ ) d x \theta^*=\underset{\theta}{argmax}\; E_{x-q(x)}log\;p(x;\theta) =\underset{\theta}{argmax}\int q(x)\;log\;p(x;\theta)dx θ=θargmaxExq(x)logp(x;θ)=θargmaxq(x)logp(x;θ)dx
    E x − q ( x ) E_{x-q(x)} Exq(x) 表示按 q ( x ) q(x) q(x) 的分布对 x x x 求期望. 因为积分表达式比较简洁, 书写方便, 下文开始将主要使用积分表达式.

    以上就是极大似然估计(Maximum Likelihood Estimation) 的理论和推导过程. 和上例的参数估计方法相比, 极大似然估计的方法, 因为无需设计损失函数, 降低了模型的复杂度, 扩大了适用范围.

    本例中的估计函数 p ( x ; θ ) p(x;\theta) p(x;θ) 相当于生成对抗网络的生成模型, 样本分布 q ( x ) q(x) q(x) 相当于训练数据.

    3. KL散度

    结合上例, 在样本已知的情况下, q ( x ) q(x) q(x) 是一个已知且确定的分布. 则 ∫ q ( x )    l o g    q ( x ) d x \int q(x)\;log\;q(x)dx q(x)logq(x)dx 是一个常数项, 不影响 θ ∗ \theta^* θ 求解的结果.

    θ ∗ = a r g m a x θ ( ∫ q ( x )    l o g    p ( x ; θ ) d x − ∫ q ( x )    l o g    q ( x ) d x )    = a r g m a x θ ∫ q ( x )    ( l o g    p ( x ; θ ) − l o g    q ( x ) ) d x    = a r g m a x θ ∫ q ( x )    l o g    p ( x ; θ ) q ( x ) d x \theta^*=\underset{\theta}{argmax}(\int q(x)\;log\;p(x;\theta)dx-\int q(x)\;log\;q(x)dx)\\ \;\\ =\underset{\theta}{argmax}\int q(x)\;(log\;p(x;\theta)-log\;q(x))dx\\ \;\\ =\underset{\theta}{argmax}\int q(x)\;log\;\frac{p(x;\theta)}{q(x)}dx\\ θ=θargmax(q(x)logp(x;θ)dxq(x)logq(x)dx)=θargmaxq(x)(logp(x;θ)logq(x))dx=θargmaxq(x)logq(x)p(x;θ)dx
    也可以写成这样 :
    θ ∗ = a r g m i n θ ( − ∫ q ( x )    l o g    p ( x ; θ ) d x + ∫ q ( x )    l o g    q ( x ) d x )    = a r g m i n θ ∫ q ( x )    l o g    q ( x ) p ( x ; θ ) d x \theta^*=\underset{\theta}{argmin}(-\int q(x)\;log\;p(x;\theta)dx+\int q(x)\;log\;q(x)dx)\\ \;\\ =\underset{\theta}{argmin}\int q(x)\;log\;\frac{q(x)}{p(x;\theta)}dx\\ θ=θargmin(q(x)logp(x;θ)dx+q(x)logq(x)dx)=θargminq(x)logp(x;θ)q(x)dx

    KL 散度 ( Kullback–Leibler divergence ) 是一种衡量两个概率分布的匹配程度的指标, 两个分布差异越大, KL散度越大. 它还有很多名字, 比如: relative entropy, relative information.

    其定义如下 :
    D K L ( q ∣ ∣ p ) = ∫ q ( x )    l o g    q ( x ) p ( x ) d x D_{KL}(q||p)=\int q(x)\;log\;\frac{q(x)}{p(x)}dx DKL(qp)=q(x)logp(x)q(x)dx
    p ( x ) ≡ q ( x ) p(x)\equiv q(x) p(x)q(x) 时取得最小值 D K L ( q ∣ ∣ p ) = 0 D_{KL}(q||p) = 0 DKL(qp)=0.

    我们可以将上面的公式简化为 :
    θ ∗ = a r g m i n θ    D K L ( q ∣ ∣ p ( x ; θ ) ) \theta^*=\underset{\theta}{argmin}\;D_{KL}(q||p(x;\theta)) θ=θargminDKL(qp(x;θ))

    4. JS 散度

    KL 散度是非对称的,即 D K L ( q ∣ ∣ p ) D_{KL}(q||p) DKL(qp) 不一定等于 D K L ( p ∣ ∣ q ) D_{KL}(p||q) DKL(pq). 为了解决这个问题, 需要引入 JS 散度.

    JS 散度 ( Jensen–Shannon divergence ) 的定义如下 :
    m = 1 2 ( p + q )    D J S = 1 2 D K L ( p ∣ ∣ m ) + 1 2 D K L ( q ∣ ∣ m ) m =\frac{1}{2}(p + q) \\ \;\\ D_{JS}=\frac{1}{2}D_{KL}(p||m) + \frac{1}{2}D_{KL}(q||m) m=21(p+q)DJS=21DKL(pm)+21DKL(qm)
    JS 的值域是对称的, 有界的, 范围是 [0,1].

    如果 p, q 完全相同, 则 JS = 0, 如果完全不相同, 则 JS = 1.

    注意, KL 散度和 JS 散度作为差异度量的时候, 有一个问题:

    如果两个分配 p, q 离得很远, 完全没有重叠的时候, 那么 KL 散度值是没有意义的, 而 JS 散度值是一个常数. 这在学习算法中是比较致命的, 这就意味这这一点的梯度为0, 梯度消失了.

    参考上例, 对 JS 散度进行反推:
    D J S ( q ∣ ∣ p ) = 1 2 D K L ( q ∣ ∣ m ) + 1 2 D K L ( p ∣ ∣ m )    = 1 2 ∫ q ( x )    l o g    q ( x ) q ( x ) + p ( x ; θ ) 2 d x + 1 2 ∫ p ( x ; θ )    l o g    p ( x ; θ ) p ( x ; θ ) + q ( x ) 2 d x    = 1 2 ∫ q ( x )    l o g    2 q ( x ) q ( x ) + p ( x ; θ ) d x + 1 2 ∫ p ( x ; θ )    l o g    2 p ( x ; θ ) p ( x ; θ ) + q ( x ) d x D_{JS}(q||p)=\frac{1}{2}D_{KL}(q||m)+\frac{1}{2}D_{KL}(p||m)\\ \;\\ =\frac{1}{2}\int q(x)\;log\;\frac{q(x)}{\frac{q(x)+p(x;\theta)}{2}}dx+ \frac{1}{2}\int p(x;\theta)\;log\;\frac{p(x;\theta)}{\frac{p(x;\theta)+q(x)}{2}}dx\\ \;\\ =\frac{1}{2}\int q(x)\;log\;\frac{2q(x)}{q(x)+p(x;\theta)}dx+ \frac{1}{2}\int p(x;\theta)\;log\;\frac{2p(x;\theta)}{p(x;\theta)+q(x)}dx DJS(qp)=21DKL(qm)+21DKL(pm)=21q(x)log2q(x)+p(x;θ)q(x)dx+21p(x;θ)log2p(x;θ)+q(x)p(x;θ)dx=21q(x)logq(x)+p(x;θ)2q(x)dx+21p(x;θ)logp(x;θ)+q(x)2p(x;θ)dx
    由于 :
    ∫ q ( x )    l o g    2 q ( x ) q ( x ) + p ( x ; θ ) d x    = ∫ q ( x )    ( l o g    q ( x ) q ( x ) + p ( x ; θ ) + l o g 2 ) d x    = ∫ q ( x )    l o g    q ( x ) q ( x ) + p ( x ; θ ) d x + ∫ q ( x ) ( l o g 2 ) d x    = ∫ q ( x )    l o g    q ( x ) q ( x ) + p ( x ; θ ) d x + l o g 2 \int q(x)\;log\;\frac{2q(x)}{q(x)+p(x;\theta)}dx\\ \;\\ =\int q(x)\;(log\;\frac{q(x)}{q(x)+p(x;\theta)}+log2)dx\\ \;\\ =\int q(x)\;log\;\frac{q(x)}{q(x)+p(x;\theta)}dx+\int q(x)(log2)dx\\ \;\\ =\int q(x)\;log\;\frac{q(x)}{q(x)+p(x;\theta)}dx+log2 q(x)logq(x)+p(x;θ)2q(x)dx=q(x)(logq(x)+p(x;θ)q(x)+log2)dx=q(x)logq(x)+p(x;θ)q(x)dx+q(x)(log2)dx=q(x)logq(x)+p(x;θ)q(x)dx+log2
    同理可得 :
    D J S ( q ∣ ∣ p ) = 1 2 ∫ q ( x )    l o g    q ( x ) q ( x ) + p ( x ; θ ) d x + 1 2 ∫ p ( x ; θ )    l o g    p ( x ; θ ) p ( x ; θ ) + q ( x ) d x + l o g 2 D_{JS}(q||p)=\frac{1}{2}\int q(x)\;log\;\frac{q(x)}{q(x)+p(x;\theta)}dx+ \frac{1}{2}\int p(x;\theta)\;log\;\frac{p(x;\theta)}{p(x;\theta)+q(x)}dx+log2 DJS(qp)=21q(x)logq(x)+p(x;θ)q(x)dx+21p(x;θ)logp(x;θ)+q(x)p(x;θ)dx+log2
    令 :
    d ( x ; θ ) = q ( x ) q ( x ) + p ( x ; θ ) d(x;\theta)=\frac{q(x)}{q(x)+p(x;\theta)} d(x;θ)=q(x)+p(x;θ)q(x)
    则 :
    1 − d ( x ; θ ) = p ( x ; θ ) q ( x ) + p ( x ; θ ) 1-d(x;\theta)=\frac{p(x;\theta)}{q(x)+p(x;\theta)} 1d(x;θ)=q(x)+p(x;θ)p(x;θ)
    即 :
    D J S ( q ∣ ∣ p ) = 1 2 ∫ q ( x )    l o g    d ( x ; θ ) d x + 1 2 ∫ p ( x ; θ )    l o g    ( 1 − d ( x ; θ ) ) d x + l o g 2 D_{JS}(q||p)=\frac{1}{2}\int q(x)\;log\;d(x;\theta)dx+ \frac{1}{2}\int p(x;\theta)\;log\;(1-d(x;\theta))dx+log2 DJS(qp)=21q(x)logd(x;θ)dx+21p(x;θ)log(1d(x;θ))dx+log2
    令 :
    V ( x ; θ ) = ∫ q ( x )    l o g    d ( x ; θ ) d x + ∫ p ( x ; θ )    l o g    ( 1 − d ( x ; θ ) ) d x V(x;\theta) =\int q(x)\;log\;d(x;\theta)dx+ \int p(x;\theta)\;log\;(1-d(x;\theta))dx V(x;θ)=q(x)logd(x;θ)dx+p(x;θ)log(1d(x;θ))dx
    则 :
    D J S ( q ∣ ∣ p ) = 1 2 V ( x ; θ ) + l o g 2 D_{JS}(q||p)=\frac{1}{2}V(x;\theta)+log2 DJS(qp)=21V(x;θ)+log2
    即 :
    θ ∗ = a r g m i n θ    D J S ( q ∣ ∣ p ) = a r g m i n θ    V ( x ; θ ) \theta^*=\underset{\theta}{argmin}\;D_{JS}(q||p)=\underset{\theta}{argmin}\;V(x;\theta) θ=θargminDJS(qp)=θargminV(x;θ)
    此时, θ ∗ \theta^* θ 是令 p ( x ; θ ) p(x;\theta) p(x;θ) q ( x ) q(x) q(x) 差异最小的参数. 同样亦可通过 V ( x ; θ ) V(x;\theta) V(x;θ) 求差异最大的参数.

    5. JS 散度参数求解的两步走迭代方法

    从上例的讨论我们知道, 我们需要求得一个参数 θ ∗ \theta^* θ, 使得
    θ ∗ = a r g m i n θ D J S ( q ∣ ∣ p ) = a r g m i n θ V ( x ; θ ) \theta^*=\underset{\theta}{argmin}D_{JS}(q||p)=\underset{\theta}{argmin} V(x;\theta) θ=θargminDJS(qp)=θargminV(x;θ)
    然而, 因为涉及多重嵌套和积分, 使用起来并不方便.

    首先, 我们假设 p ( x ; θ ) = p g ( x ) p(x;\theta) = p_g(x) p(x;θ)=pg(x) 为已知条件, 同时令 D = d ( x ; θ ) D=d(x;\theta) D=d(x;θ), 考虑这个式子:
    W ( x ; θ ) = q ( x )    l o g    d ( x ; θ ) d x + p ( x ; θ )    l o g    ( 1 − d ( x ; θ ) )    W ( x ; D ) = q ( x )    l o g    D + p g ( x )    l o g    ( 1 − D )    V ( x ; θ ) = V ( x ; D ) = ∫ W ( x ; D ) d x W(x;\theta)=q(x)\;log\;d(x;\theta)dx+ p(x;\theta)\;log\;(1-d(x;\theta))\\ \;\\ W(x;D)=q(x)\;log\;D+p_g(x)\;log\;(1-D)\\ \;\\ V(x;\theta)=V(x;D)=\int W(x;D)dx W(x;θ)=q(x)logd(x;θ)dx+p(x;θ)log(1d(x;θ))W(x;D)=q(x)logD+pg(x)log(1D)V(x;θ)=V(x;D)=W(x;D)dx

    x x x 已经确定的情况下, 我们关注 D D D.
    W ′ = d W d D = q ( x ) 1 D − p g ( x ) 1 1 − D    W ′ ′ = d W ′ d D = − q ( x ) 1 D 2 − p g ( x ) 1 ( 1 − D ) 2 W'=\frac{dW}{dD}=q(x)\frac{1}{D}-p_g(x)\frac{1}{1-D}\\ \;\\ W''=\frac{dW'}{dD}=-q(x)\frac{1}{D^2}-p_g(x)\frac{1}{(1-D)^2} W=dDdW=q(x)D1pg(x)1D1W=dDdW=q(x)D21pg(x)(1D)21

    因为 W ′ ′ &lt; 0 W&#x27;&#x27; &lt; 0 W<0, 当 W ′ = 0 W&#x27;=0 W=0 时, W W W 取得极大值 :
    W ′ = q ( x ) 1 D − p g ( x ) 1 1 − D = 0 &ThickSpace; D = q ( x ) q ( x ) + p g ( x ) W&#x27;=q(x)\frac{1}{D}-p_g(x)\frac{1}{1-D}=0\\ \;\\ D = \frac{q(x)}{q(x)+p_g(x)} W=q(x)D1pg(x)1D1=0D=q(x)+pg(x)q(x)
    因为 :
    D &lt; q ( x ) q ( x ) + p g ( x ) , &ThickSpace;&ThickSpace; W ′ &gt; 0 &ThickSpace; D &gt; q ( x ) q ( x ) + p g ( x ) , &ThickSpace;&ThickSpace; W ′ &lt; 0 D &lt; \frac{q(x)}{q(x)+p_g(x)},\;\;W&#x27;&gt;0\\ \;\\ D &gt; \frac{q(x)}{q(x)+p_g(x)},\;\;W&#x27;&lt;0 D<q(x)+pg(x)q(x),W>0D>q(x)+pg(x)q(x),W<0
    这表明, 当 D D D 的函数按 W ′ = 0 W&#x27;=0 W=0 取值时, W W W x x x 的每个取样点均获得最大值, 积分后的面积获得最大值, 即 :
    D ∗ = q ( x ) q ( x ) + p g ( x ) = a r g m a x D ∫ W ( x ; D ) d x = a r g m a x D V ( x ; D ) D^*=\frac{q(x)}{q(x)+p_g(x)}=\underset{D}{argmax}\int W(x;D)dx=\underset{D}{argmax}V(x;D) D=q(x)+pg(x)q(x)=DargmaxW(x;D)dx=DargmaxV(x;D)
    m a x D &ThickSpace; V ( x ; D ) = ∫ q ( x ) &ThickSpace; l o g &ThickSpace; D ∗ ( x ) d x + ∫ p g ( x ) &ThickSpace; l o g &ThickSpace; ( 1 − D ∗ ( x ) ) d x \underset{D}{max}\;V(x;D)=\int q(x)\;log\;D^*(x)dx+\int p_g(x)\;log\;(1-D^*(x))dx DmaxV(x;D)=q(x)logD(x)dx+pg(x)log(1D(x))dx

    在得到 V ( x ; D ) V(x;D) V(x;D) 的最大值表达式后, 我们固定 D ∗ D^* D, 接着对 p ( x ; θ ) = p g ( x ) p(x;\theta) = p_g(x) p(x;θ)=pg(x) 将这个最大值的按最小方向优化 :
    V ( x ; θ ; D ∗ ) = ∫ q ( x ) &ThickSpace; l o g &ThickSpace; D ∗ ( x ) &ThickSpace; d x + ∫ p ( x ; θ ) &ThickSpace; l o g &ThickSpace; ( 1 − D ∗ ( x ) ) d x &ThickSpace; θ ∗ = a r g m i n θ &ThickSpace; V ( x ; θ ∗ ; D ∗ ) V(x;\theta;D^*)=\int q(x)\;log\;D^*(x)\;dx+\int p(x;\theta)\;log\;(1-D^*(x))dx\\ \;\\ \theta^*=\underset{\theta}{argmin}\;V(x;\theta^*;D^*) V(x;θ;D)=q(x)logD(x)dx+p(x;θ)log(1D(x))dxθ=θargminV(x;θ;D)
    由此, 通过两步走的方法, 经过多次先后迭代求解 D ∗ D^* D θ ∗ \theta^* θ, 我们可以逐渐得到一个趋近于 q ( x ) q(x) q(x) p ( x ; θ ∗ ) p(x;\theta^*) p(x;θ).

    6. 生成对抗网络

    从上面的讨论方法可知, 我们可以得到一个和 q ( x ) q(x) q(x) 非常接近的分布函数 p ( x ; θ ) p(x;\theta) p(x;θ). 这个分布函数的构建是为了寻找已知样本数据的内在规律.

    然而我们往往并不关心这个分布函数. 我们希望无中生有的构建一批数据 x ′ x&#x27; x, 使得 p ( x ′ ; θ ) p(x&#x27;;\theta) p(x;θ) 趋近于 q ( x ) q(x) q(x).

    我们设计一个输出 x ′ x&#x27; x 的生成器 x ′ = G ( z ; β ) x&#x27;=G(z;\beta) x=G(z;β), 从随机概率分布中接收 z z z 作为输入, x ′ x&#x27; x 的概率分布为 p g ( x ′ ) p_g(x&#x27;) pg(x).

    第一步, 我们固定 p g ( x ′ ) p_g(x&#x27;) pg(x) D ∗ D^* D.
    V ( x , x ′ ; D ) = ∫ q ( x ) &ThickSpace; l o g &ThickSpace; D ( x ) &ThickSpace; d x + ∫ p g ( x ′ ) &ThickSpace; l o g &ThickSpace; ( 1 − D ( x ′ ) ) d x &ThickSpace; D ∗ = a r g m a x D V ( x ; D ) V(x,x&#x27;;D)=\int q(x)\;log\;D(x)\;dx+\int p_g(x&#x27;)\;log\;(1-D(x&#x27;))dx\\ \;\\ D^*=\underset{D}{argmax}V(x;D) V(x,x;D)=q(x)logD(x)dx+pg(x)log(1D(x))dxD=DargmaxV(x;D)

    第二步, 我们固定 D ∗ D^* D p g ( x ′ ; θ ∗ ) p_g(x&#x27;;\theta^*) pg(x;θ).
    V ( x , x ′ , D ∗ ; θ ) = ∫ q ( x ) &ThickSpace; l o g &ThickSpace; D ∗ ( x ) &ThickSpace; d x + ∫ p g ( x ′ ; θ ) &ThickSpace; l o g &ThickSpace; ( 1 − D ∗ ( x ′ ) ) d x &ThickSpace; θ ∗ = a r g m i n θ &ThickSpace; V ( x , D ∗ ; θ ∗ ) V(x,x&#x27;,D^*;\theta)=\int q(x)\;log\;D^*(x)\;dx+\int p_g(x&#x27;;\theta)\;log\;(1-D^*(x&#x27;))dx\\ \;\\ \theta^*=\underset{\theta}{argmin}\;V(x,D^*;\theta^*) V(x,x,D;θ)=q(x)logD(x)dx+pg(x;θ)log(1D(x))dxθ=θargminV(x,D;θ)

    然后进行多次循环迭代, 使得 p g ( x ′ ; θ ∗ ) p_g(x&#x27;;\theta^*) pg(x;θ) 趋近于 q ( x ) q(x) q(x).

    读者可以发现, 这里求解过程和上例的是一样, 只是输入的数据并不一致.

    在实际任务中, 我们并不关心 p g ( x ′ ; θ ) p_g(x&#x27;;\theta) pg(x;θ), 仅关注生成器 x ′ = G ( z ; β ) x&#x27;=G(z;\beta) x=G(z;β) 的优化.

    由此我们将算法改编如下 :

    第一步, 我们固定 x ′ = G ( z ; β ) x&#x27;=G(z;\beta) x=G(z;β) D ∗ D^* D.
    V ( x , z ; D ) = ∫ q ( x ) &ThickSpace; l o g &ThickSpace; D ( x ) &ThickSpace; d x + ∫ q ( z ) &ThickSpace; l o g &ThickSpace; ( 1 − D ( G ( z ) ) ) d z &ThickSpace; D ∗ = a r g m a x D V ( x , z ; D ) V(x,z;D)=\int q(x)\;log\;D(x)\;dx+\int q(z)\;log\;(1-D(G(z)))dz\\ \;\\ D^*=\underset{D}{argmax}V(x,z;D) V(x,z;D)=q(x)logD(x)dx+q(z)log(1D(G(z)))dzD=DargmaxV(x,z;D)

    第二步, 我们固定 D ∗ D^* D G ( z ; β ∗ ) G(z;\beta^*) G(z;β).
    V ( x , z , D ∗ ; β ) = ∫ q ( x ) &ThickSpace; l o g &ThickSpace; D ∗ ( x ) &ThickSpace; d x + ∫ q ( z ) &ThickSpace; l o g &ThickSpace; ( 1 − D ∗ ( G ( z ; β ) ) ) d z &ThickSpace; β ∗ = a r g m i n β &ThickSpace; V ( x , z , D ∗ ; β ) V(x,z,D^*;\beta)=\int q(x)\;log\;D^*(x)\;dx+\int q(z)\;log\;(1-D^*(G(z;\beta)))dz\\ \;\\ \beta^*=\underset{\beta}{argmin}\;V(x,z,D^*;\beta) V(x,z,D;β)=q(x)logD(x)dx+q(z)log(1D(G(z;β)))dzβ=βargminV(x,z,D;β)

    注意, 本例的两个算法都没有给出严格的收敛证明.

    由于求解形式和上例的 JS 散度的参数求解算法非常一致, 我们可以期待这种算法能够起到作用.

    为简单起见, 我们记 :
    V ( G , D ) = ∫ q ( x ) &ThickSpace; l o g &ThickSpace; D ( x ) &ThickSpace; d x + ∫ q ( z ) &ThickSpace; l o g &ThickSpace; ( 1 − D ( G ( z ) ) ) d z &ThickSpace; G ∗ = a r g m i n G &ThickSpace; ( &ThickSpace; m a x D &ThickSpace; V ( G , D ) &ThickSpace; ) V(G,D)=\int q(x)\;log\;D(x)\;dx+\int q(z)\;log\;(1-D(G(z)))dz\\ \;\\ G^*=\underset{G}{argmin}\;(\;\underset{D}{max}\;V(G,D)\;) V(G,D)=q(x)logD(x)dx+q(z)log(1D(G(z)))dzG=Gargmin(DmaxV(G,D))
    这就是 GAN 生成对抗网络相关文献中常见的求解表达式.

    在 Ian J. Goodfellow 的论文 Generative Adversarial Networks 中, 作者先给出了 V ( G , D ) V(G,D) V(G,D) 的表达式, 然后再通过 JS 散度的理论来证明其收敛性. 有兴趣的读者可以参考阅读.

    本文认为, 如果先介绍 JS 散度, 再进行反推, 可以更容易的理解 GAN 概念, 理解 GAN 为什么要用这么复杂的损失函数.

    7. 生成对抗网络的工程实践

    在工程实践中, 我们遇到的一般是离散的数据. 我们可以使用随机采样的方法来逼近期望值.

    首先我们从前置的随机分布 p z ( z ) p_z(z) pz(z) 中取出 m m m 个随机数 z = ( z 1 , z 2 , z 3 , ⋯ &ThinSpace; , z m ) z=(z_1,z_2,z_3,\cdots,z_m) z=(z1,z2,z3,,zm), 其次我们在从真实数据分布 p ( x ) p(x) p(x) 中取出 m m m 个真实样本 p = ( x 1 , x 2 , x 3 , ⋯ &ThinSpace; , x m ) p=(x_1,x_2,x_3,\cdots,x_m) p=(x1,x2,x3,,xm).

    由于我们的数据是随机选取的, 概率越大就越有机会被选中. 抽取的样本就隐含了自身的期望. 因此我们可以使用平均数代替上式中的期望, 公式改写如下.
    V ( G , D ) = ∫ q ( x ) &ThickSpace; l o g &ThickSpace; D ( x ) &ThickSpace; d x + ∫ q ( z ) &ThickSpace; l o g &ThickSpace; ( 1 − D ( G ( z ) ) ) &ThickSpace; d z &ThickSpace; = 1 m ∑ i = 1 m l o g &ThickSpace; D ( x i ) + 1 m ∑ i = 1 m l o g &ThickSpace; ( 1 − D ( G ( z i ) ) ) V(G,D)=\int q(x)\;log\;D(x)\;dx+\int q(z)\;log\;(1-D(G(z)))\;dz\\ \;\\ =\frac{1}{m}\sum_{i=1}^{m}log\;D(x_i) + \frac{1}{m}\sum_{i=1}^{m}log\;(1-D(G(z_i))) V(G,D)=q(x)logD(x)dx+q(z)log(1D(G(z)))dz=m1i=1mlogD(xi)+m1i=1mlog(1D(G(zi)))

    我们可以直接用上式训练鉴别器 D ( x ) ​ D(x)​ D(x).

    在训练生成器时, 因为前半部分和 z z z 无关, 我们可以只使用后半部分.

    全文完.

    展开全文
  • # 深度学习-52:生成对抗网络GAN(原理、模型和演进)。GAN模型演化出WGAN、WGAN GP、LS GAN、DRAGAN、BEGAN等GAN模型变体。Goodfellow认为正确使用数据的方式,先对数据集的特征信息有insight之后,再干活。在2014年...
  • GAN原理 GAN是如何生成图片?GAN有两个网络,一个是generator(生成图片的网络),还有一个是discriminator(判别网络)。 在我们训练过程当中,生成网络G的目标就是尽量生成真实的图片去"欺骗"网络D。 网络D的目标...
  • 生成对抗网络 GAN 原理 详情阅读:生成对抗网络 GAN 原理
  • 个人博客:... ... 生成对抗网络GAN, Generative Adversarial Networks )是一种深度学习模型,是近年来复杂分布上无监督学习最具前景的方法之一。论文《Generative Adversarial Nets》首次提出GAN...
  • 深度学习----GAN生成对抗神经网络原理解析

    万次阅读 多人点赞 2018-08-08 19:54:26
    1.1、 GAN原理: 1.2、架构 1.3、 GAN 的特点及优缺点: 二、为什么GAN中的优化器不常用SGD 三、为什么GAN不适合处理文本数据 四、训练GAN的一些技巧 五、GAN的广泛应用 一、原理...
  • 这篇主要讲解GAN原理。下一篇会动手在minist数据集上实现一个GAN。 一个例子 现在有一批国宝,一个造假专家和一个鉴赏专家。造假专家通过观察国宝,然后仿造工艺品,鉴赏专家通过判断一个工艺品是国宝还是造假专家...
  • 生成模型与判别模型区别 判别模型: 直接求P(Y|X) 生成模型: 通过P(X,Y) / P(X) 求 P(Y|X) ,eg:隐马尔可夫链 为什么要用生成模型 对高维数据和样本分布问题有很好的检测 模拟强化学习(RL) 数据缺失,半监督学习...
  • 1. GAN究竟在做什么? 学习样本集的数据分布 A.学习数据分布有什么用? (1) 学习到高维抽象的分布函数 (2) 模拟预测未来数据 (3) 处理缺省数据问题:如半监督学习 (4) 生产真实样本 建立模型,分析...
  • 一文详解生成对抗网络(GAN)的原理,通俗易懂

    千次阅读 多人点赞 2018-05-06 00:00:00
    ‍‍作者 | 我i智能(ID:AInewworld)来源 | 我i智能(CSDN博客)前言GAN网络是近两年深度学习领域的新秀,火的不行,本文旨在浅显理解传统GAN,分享...
  • 这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、...
  • 一、什么是生成对抗网络 通俗的讲: 对抗网络有一个生成器(Generator),还有一个判别器 (Discriminator); 生成器从随机噪声中生成图片,由于这些图片都是生成器臆想出来的,所以我们称之为 Fake Image; ...
  • 一个 GAN 框架,最少(但不限于)拥有两个组成部分,一个是生成模型 G,一个是判别模型 D。在训练过程中,会把生成模型生成的样本和真实样本随机地传送一张(或者一个 batch)给判别模型 D。判别模型 D 的目标是尽...
  • 生成对抗网络(Generative Adversarial Networks,GAN) 是一种深度学习模型,是近年来复杂分布上无监督学习最具前景的方法之一。生成对抗网络模型主要包括两部分:生成模型(Generator) 和 判别模型(Discriminator) ...
  • 生成对抗网络GAN详细推导

    千次阅读 2019-07-21 13:35:52
    生成对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成对抗网络最最直接的应用是数据的生成,而数据质量的好坏则是评判GAN成功与否的关键...
  • 使用生成对抗网络(GAN)生成数据 本文主要内容 介绍了自动编码器的基本原理 比较了生成模型与自动编码器的区别 描述了GAN模型的网络结构 分析了GAN模型的目标核函数以及训练过程 介绍了利用Google Colab...
  • 点击上方“机器学习与生成对抗网络”,关注"星标"获取有趣、好玩的前沿干货!以最大似然估计的方式来获得生成图像模型的方法,这种方法是可行的,但有比较大的约束,即模型不能太复...
  • 简单理解与实验生成对抗网络GAN

    万次阅读 多人点赞 2017-05-26 21:31:49
    现有GAN网络大多数代码实现使用python、torch等语言,这里,后面用matlab搭建一个简单的GAN网络,便于理解GAN原理。GAN的鼻祖之作是2014年NIPS一篇文章:Generative Adversarial Net,可以细细品味。 分享一个目前...
  • 本文详细介绍了生成对抗网络GAN)的知识,并用其变换人脸,并探寻如何利用StyleGAN生成不同属性(如年龄、微笑等)的人脸。 概述 直到最近,我才开始探索深度学习的全部内容,并在计算机视觉中遇到了这些...
  • Generative Adversarial Network简称GAN网络,是一种通过训练,使判别器(Generator)和生成器(Discriminator)达到一种平衡状态。 下面通过具体的网络结构,介绍GAN网络的训练过程。 如图所示为一个基因...
  • GAN
  • 基本去噪自编码器 import tensorflow as tf import matplotlib.pyplot as plt import numpy as np # 显存自适应分配 gpus = tf.config.experimental.list_physical_devices(device_type='GPU') ...
  • 生成对抗网络 – Generative Adversarial Networks | GAN文章目录GAN的设计初衷生成对抗网络 GAN 的基本原理GAN的优缺点10大典型的GAN算法GAN 的13种实际应用百度百科+维基百科扩展阅读生成对抗网络GAN 是最近2...
  • 生成对抗网络——GAN(一)

    万次阅读 多人点赞 2018-07-30 23:38:08
    Generative adversarial network 据有关媒体统计:CVPR2018的论文里,有三分之一的论文与GAN有关!...生成对抗网络GAN,是当今的一大热门研究方向。在2014年,被Goodfellow大神提出来,当时的G...
  • 当地时间 10月 22 日到10月29日,两年一度的计算机视觉国际顶级会议International Conference on Computer ... Goodfellow在会上作为主题为《生成对抗网络(Generative Adversarial Networks)》的Tutorial最新演讲,
  • 《PyTorch生成对抗网络编程》思维导图和配套素材免费版,畅销书《Python神经网络编程》作者最新力作;...阅读本书,读者将了解 PyTorch和生成对抗网络的基本原理,学会使用PyTorch构建自己的生成对抗网络,生成手写数
  • 生成对抗网络GAN)的数学原理全解

    千次阅读 多人点赞 2020-10-04 18:35:48
    ©PaperWeekly 原创 ·作者|孙裕道学校|北京邮电大学博士生研究方向|GAN图像生成、情绪对抗样本生成论文标题:A Mathematical Introduction to ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,250
精华内容 2,100
关键字:

生成对抗网络gan原理