• GAN详解


    前言

    GAN是当今作为火热的生成式算法,由Ian Goodfellow,Yoshua Bengio等人在2014年提出的,Yan LeCun表示道GAN是“adversarial training is the coolest thing since sliced bread”。它使用两个神经网络,将一个神经网络与另一个神经网络进行对抗,通过GAN我们可以生成足以以假乱真的图像,GAN被广泛的应用在图像生成,语音生成等场景中。例如经典的换脸应用DeepFakes背后的技术便是GAN.

    一个神经网咯与另一个神经网络进行对抗

    判别式算法和生成式算法

    在了解GAN之前,我们有必要先了解什么是判别式算法和生成式算法。判别式算法是指给定实例的一些特征,我们根据这些特征来判断器所属类别,它建模时特征和标签之间的关系。例如在MNIST数据集上,我们需要判断一个图片是哪一个数字,我们可以用后验概率来建模判别算法。假定一个数据特征是 x x x,它的标签是 y y y,判别算法指的是在给定 x x x的前提下,标签是 y y y的概率。
    表示为 P ( y ∣ x ) P(y|x) P(yx),生成算法并不关系数据标签是什么,其关系的是能否生成和数据 x x x同一个分布的特征。

    GAN详解

    逻辑基础

    GAN是一个由两个模型组成的系统判别器( D D D )和生成器( G G G。判别器的任务是判断输入图像是源自数据集中还是由机器生成的。判别器一般使用二分类的神经网络来构建,一般将取自数据集的样本视为正样本,而生成的样本标注为负样本。生成器的任务是接收随机噪声,然后使用反卷积网络来创建一个图像。生成器的随机输入可以看做一个种子,相同的种子会得到相同的生成图像,不同的种子则得到的图像不同,大量种子的作用是保证生成图像的多样性。在最原始的GAN论文中,它都是使用了MLP搭建生成模型和判别模型。

    • 判别器的任务是:判断输入图像时源自数据集中还是由机器生成的。一般使用二分类神经网络来构建,将取自数据集的样本视为正样本,生成的样本视为负样本
    • 生成器的任务是:接收随机噪声,然后使用反卷积神经网络创建一个图像。
    • 生成器的随机输入可以看做一个种子。
    • 相同的种子会得到相同的生成图像
    • 不同的种子则得到的图像不同,大量种子的作用是保证生成图像的多样性。
      • 在原始的GAN论文中,其都是使用NLP搭建了生成模型和判别模型

    GAN的双系统,目的是让生成器尽量的去迷惑判别器。同时,让判别器尽可能的对输入图像的来源进行判断。两个模型之间是互相对抗的关系,它们都通过试图击败对方来使自己变得更好,生成器可以通过判别器得到其生成的图像和数据集图像分布是否一致的反馈。而判别模型则可以通过生成器得到更多的训练样本

    在这里插入图片描述

    GAN训练

    GAN生成器和判别器可以通过博弈的手段不断的对两个模型进行迭代优化。其基本流程如下:

    • 初始判别器参数为 θ D \theta_D θD和生成器参数 θ G \theta_G θG
    • 从分布为 p d a t a ( x ) p_{data}(x) pdata(x)数据集中采样 m m m个真实样本,
    • { x 1 , ⋯   , x m x^{1},\cdots,x^{m} x1,,xm},并且使用生成器获得 m m m个生成样本。
    • $在这里插入图片描述
      $
      *m个真实样本,m个噪声样本。生成样本。
    • 固定生成器,使用梯度上升策略训练判别器,使其能够更好的判断样本是否为真实样本还是生成样本
      在这里插入图片描述
    • 循环多次对判别器训练后,我们使用较小的学习率来对生成器进行优化,生成器使用梯度下降策略进行优化。如式2所示:
    • 在这里插入图片描述
      • 多次更新之后,我们的理想状态是生成器生成一个判别器无法分辨得样本,即最终判别器得分类准确率为0.5

    这里只所以先循环多次优化判别器,在优化生成器,是因为,我们想要先拥有一个有一定效果得判别器。其能够比较正确得区分真实样本和生成样本,这样,我们才能够根据判别函数得反馈来对生成器进行优化。如图2所示:
    在这里插入图片描述
    GAN在训练过程中判别器和生成器的分布变化。
    图2中的黑色虚线是真实样本的分布情况,绿色实线是生成样本的分布蓝色虚线是判别器判别概率的分布情况。 是噪声, 到 的变化是生成器将噪音数据映射到生成数据的过程。从图2中可以看出,(a)是出于初始状态,此时生成样本和真实样本的差距比较大,而且判别器也不能对它们进行很好的区分,因此我们需要先对判别器进行优化。在对判别器优化了若干个Epoch后,来到了(b)状态,此时判别器已能够很好的区分真实样本和生成样本。此时生成样本和真实样本的分布差异还是非常明显的,因此我们需要对生成器进行优化。经过训练后真实样本和生成样本的差异缩小了很多,也就是状态©。经过若干轮的对判别器很生成器的训练后,我们希望生成样本和真实样本的分布已经完全一致,而此时判别器也无法再区分它们了。

    GAN的损失函数

    GAN的一个难点是其损失函数以及其背后的数学原理,对于这一部分内容中介绍的并不是非常清楚,现在很多技术在推导论文公式时,其都犯了一个重要的错误,即假设生成器 G G G是可逆的,然而这个假设并不成立,因此,其证明是存在漏洞的,我们这里将给出GAN的正确证明方式。
    GAN的目标是让生成器生成足以欺骗判别式的样本,从数学角度将,我们希望生成样本与真实样本拥有相同的概率分布。也可以说生成样本和真实样本拥有相同的密度函数,即:
    P G ( x ) = p d a t a ( x ) P_{G}(x) = p_{data}(x) PG(x)=pdata(x).
    这个结论很重要,因为其是GAN的理论基础,也是我们之后要讨论的GAN的证明策略,即定义了一个优化问题。我们寻找一个
    G G G满足 P G ( x ) = P d a t a ( x ) P_{G}(x) = P_{data}(x) PG(x)=Pdata(x),如果我们知道生成样本是否满足这个关系,那么我们便可以使用 S G D SGD SGD G G G进行优化。
    GAN的损失函数源自于二分类对数似然函数的交叉熵损失函数,其表示为式3,其中第一项作用是用来使正样本识别结果尽量为 1 1 1,第二项的作用是使得负样本的预测尽量为0
    L = − 1 N i [ y i l o g p i + ( 1 − y i ) ] l o g ( 1 − p i ) L =-\frac{1}{N_i}[y_ilogp_i + (1 - y_i)]log(1 - p_i) L=Ni1[yilogpi+(1yi)]log(1pi)
    根据前面介绍的GAN定理,首先,我们要求判别器D能够满足 p d a t a ( x ) p_{data}(x) pdata(x)能够满足分布的样本识别为正样本,因此有上式为:
    其中 E E E表示期望,这一项取自于对数似然函数正类,最大化这一项能偶使判别器将真实样本 x x x预测为1,
    x   P d a t a ( x ) x ~ P_{data}(x) x Pdata(x)时,我们有 D ( x ) = 1 D(x) = 1 D(x)=1
    在这里插入图片描述
    损失函数是另一项与生成器有关的,这一项来自于对数似然函数的负类,表示式子为5.,通过最大化5式子,我们可以使用 D ( G ( z ) ) D(G(z)) D(G(z))的值趋近于0,也就是希望判别式能够将生成式样本预测为负类
    在这里插入图片描述
    判别器优化目标便是最大化两项之和,表示为 V ( G , D ) V(G,D) V(G,D),因为,我们有:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    理论证明

    为证明GAN最终收敛的结果是我们需要的,我们必须证明 G A N GAN GAN满足两个性质:

    • 对于任意给定的 G G G,我们可以找到最优的判别器 D G ∗ D_G^{*} DG;
    • 对于全局最优的 G ∗ G^{*} G 我们希望生成数据分布与真实数据分布一致,即 p G = p d a t a p_{G} = p_{data} pG=pdata

    最优判别器

    • 推论1: 对于任意的固定生成器 G G G,最优判别器 D G ∗ D_G^{*} DG满足式:
    • D G ∗ = P d a t a P d a t a + P G D_G^{*} = \frac{P_{data}}{P_{data} + P_G} DG=Pdata+PGPdata
      证明,对于式6的期望形式,我们将其改变为积分形式,表示方式如下:
      在这里插入图片描述
      根据LOTUS定理,我们可以得到 V ( G , D ) V(G,D) V(G,D)的另一种表达形式:
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      为了找到最大值,我们对上式进行求导,并得到导数等于0的点:
      在这里插入图片描述
      如果 a + b ≠ 0 a + b \not= 0 a+b=0 我们继续球上式的二阶导数。
      在这里插入图片描述
      在这里插入图片描述

    最优生成器

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

    总结

    GAN是深度学习领域最主要的生成模型之一,GAN对深度学习的贡献,可以从三点出发,生成(G)、对抗(A)、网络(N)
    G:机器学习大直可以分为生成模型和判别模型两类,在之前的深度学习中,判别模型得到了充分的发展,例如在CV领域中的物体分离,人脸识别、NLP领域中的机器翻译,文本分类等。它们都是经典的判别模型,对于判别模型,损失函数是非常好构建的,我们以损失函数为目标,模型优化起来也不是那么困难,而对于生成模型而言,器目标构建起来就非常困难,因为衡量生成样本的质量不能其与训练集的某个数值关系。一个高质量的生成样本必然从各个角度上都是非常优秀的,例如,我们要生成一只猫,其从整体上的轮廓到具体的毛发细节,每一个环节都非常重要,而要做到这一点,GAN正式采用了对抗思想

    • A:我们对一个生成样本的质量评估,往往是一个很难量化的指标,但是这种无法量化任务的深度学习就无能为了 吗。GAN给出了否定的答案,GAN提出了把评估生成样本的质量和任务也交给一个模型去做,这个模型都是判别器,这个判别器和生成样本的生成器都通过对抗的方式不断的通过对方的反馈来提升自己,这种及是敌人**,又是友的关系正式GAN最具创新的地方。
      N:GAN的理论基础是生成对抗,那GAN的容量基础则是神经网络,比起传统方法,GAN拥有更强的建模能力,尤其是在处理非结构化数据上
      更是远胜于传统机器学习方法**。正如依赖于GAN的强大建模能力,其生成器和判别器才能通过不断的迭代无限逼近全局最优解
      在2014年**,GAN迎来了蓬勃的发展,在CV领域,诞生了BigGAN.
      CycleGAN.等经典算法,也诞生了AI换脸。高请重建,黑白电影上色等重要应用。此外
      GAN在NLP和语音领域也取得了比较重要的成果,例如NLP领域的SeqGAN,NDG,语音领域的WaveGAN**等。

    总结

    慢慢的将各种模型啥的都研究透彻,各种模型啥的都好好研究一波,争取在把模型的精髓都学习一遍。全部都将其搞定都行啦的回事与打算。

  • 相关阅读:
    Oracle SQL执行计划(2)
    java基于微信小程序的竞赛报名管理系统
    解决WPF+Avalonia在openKylin系统下默认字体问题
    负载均衡性能参数如何测评?
    大数据面试之hive重点(二)
    C#中密封类和密封方法
    windows定时对指定文件夹压缩然后存放在指定的文件夹下
    C#如何批量创建类
    【Java面试】Spring 里面的事务和分布式事务的使用如何区分,以及这两个事务之间有什么关联?
    【手写数字识别】基于matlab GUI欧拉数和二维矩阵相关系数手写数字识别【含Matlab源码 1896期】
  • 原文地址:https://blog.csdn.net/kuxingseng123/article/details/128054702