zoukankan      html  css  js  c++  java
  • 生成式对抗网络

    生成式对抗网络

    GAN

    Generative Adversarial Nets, 生成式对抗网络

    • 生成模型

      • 生成式对抗网络(GAN)的目的是训练这样一个生成模型,生成我们想要的数据

    • GAN框架

      • 判别器(Discriminator):区分真实(real)样本和虚假(fake)样本。对于真实样本,尽可能给
        出高的评分1;对于虚假数据,尽可能给出低个评分0

      • 生成器(Generator):欺骗判别器。生成虚假数据,使得判别器D能够尽可能给出高的评分1

      • 随机噪声z:从一个先验分布(人为定义,一般是均匀分布或者正态分布)中随机采样的向量(输入的向量维度越高,其生成图像的种类越多)

      • 真实样本x:从数据库中采样的样本

      • 合成样本G(z):生成模型G输出的样本

      • 目标函数:

        • 让真实样本的输出值尽可能大,同时让生成样本的输出值尽可能小

        • 所以判别器D最大化的目标函数就是对于真实样本尽可能输出1,对于生成器的生成样本输出0

        • 生成器G最小化目标函数就是让生成样本能够欺骗判别器,让其尽量输出1

    • 训练算法

      • 随机初始化生成器和判别器
      • 交替训练判别器D 和生成器G,直到收敛
        • 固定生成器G,训练判别器D区分真实图像与合成图像

          • 一个样本x来自真实分布(P_{data})和生成分布(P_g)概率的相对比例
          • 如果来自生成分布的概率为0((P_g = 0)),那么就给出概率1,即确定该样本是真的
          • 如果来自真实分布的概率为0((P_{data} = 0)),那么就给出概率0,即确定该样本是假的
          • 因为最优判别器的输出属于[0,1] ,所以判别器的输出用sigmoid激活
        • 固定判别器D,训练生成器G欺骗判别器D

    • KL散度:一种衡量两个概率分布的匹配程度的指标

      • (P_1 = P_2)时,KL散度为零

      • 具有非负性,但存在不对称性(在优化的时候,会因为不对称性优化出不同的结果)

      • 极大似然估计 等价于 最小化生成数据分布和真实分布的KL散度

    • JS散度

      • 具有非负性,以及对称性

      • 但存在问题:生成数据和真实数据分布的表达形式我们不知道,无法计算散度,也就没有目标函数,
        无法优化生成器
      • GAN:生成式对抗网络通过对抗训练,间接计算出散度(JS),使得模型可以优化
      • 最大化判别器损失,等价于计算合成数据分布和真实数据分布的JS散度
      • 最小化生成器损失,等价于最小化JS散度(也就是优化生成模型)

    cGAN

    Conditional GAN, 条件生成式对抗网络

    • 网络结构
      • 为了能够满足条件生成,所以需要添加一个class标签

      • 对于生成器而言,没啥变化,只是增加了一个label输入

      • 对于判别器而言,输入为图片以及对应标签;判别器不仅判断图片是否为真,同时也要判断时候和标签匹配

        • 真实图片+正确label==》1
        • 真实图片+错误label==》0
        • 合成图片+任意label==》0

    DCGAN

    Deep Convlutional GAN, 深度卷积生成式对抗网络

    • 原始GAN,使用全连接网络作为判别器和生成器

      • 不利于建模图像信息
      • 参数量大,需要大量的计算资源,难以优化
    • DCGAN,使用卷积神经网络作为判别器和生成器

    • 通过大量的工程实践,经验性地提出一系列的网络结构和优化策略,来有效的建模图像数据

    • 判别器

      • 通过Pooling下采样,Pooling是不可学习的,这可能造成GAN训练困难
      • 使用滑动卷积(步长大于1),让其可以学习自己的下采样策略
    • 生成器:滑动反卷积

      • 通过插值法上采样,插值方法是固定的,不可学习的,这可能给训练造成困难
      • 使用滑动反卷积(进行扩展),让其可以学习自己的上采样策略

    WGAN/WGAN-GP

    Wasserstein GAN with Weight Clipping/ Gradient Penalty

    • 原始GAN存在的问题

      • 训练困难:生成器无法生成想要的数据
      • 模式崩塌:生成器无法学习到完整的数据分布
    • JS散度

      • 已知GAN网络的目标函数

      • 所以可以看到GAN网络的训练效果是和JS散度相关联的

        • 分析任意一个点x对JS散度的贡献:
          • (P_1(x) = 0 and P_2(x)=0)(即该数据既没有在真实数据中出现,也没有在生成数据中出现)
            • (JS(P_1||P_2)=0),对计算JS散度无贡献
          • (P_1(x) != 0 and P_2(x)=0)(P_1(x) = 0 and P_2(x)!=0)
            • 贡献等与常数(log2),但梯度等于零
          • (P_1(x) != 0 and P_2(x)!=0)
            • 对计算JS散度有贡献且不为常熟,因此梯度不为零
      • (P_{data}(x))(P_g(x))发生不重叠(或重叠部分可忽略)的可能性非常大,即(P_1(x) != 0 and P_2(x)!=0)这种情况发生概率很小

      • GAN:真实数据分布(P_{data})和生成数据分布(P_G)是高维空间中的维度流形,它们重叠的区域可以忽略不记(能够提供梯度信息的数据可以忽略不记) == =》所以无论它们相距多少,其JS散度都是常数(仅当完全重合时,JS散度为零),导致生成器的梯度(近似)为零,造成梯度消失===》GAN优化困难

    • Wasserstein距离

      • (W(P_1,P_2) = inf_{γsimprod(P_1,P_2) E_{(x,y)simγ}[||x-y||]})

        • (prod(P_1,P_2)):P1和P2组合起来的所有可能的联合分布的集合

        • (|| x - y ||):样本x和y的距离

        • inf:所有可能的下界

        • 假设对于P1和P2上的点x,y有一个联合分布γ;在这个联合分布上取一对点(x,y),计算他们的距离(||x-y||),然后通过很多的点,计算出它的期望;然后我们再遍历所有可能的联合分布,得到一个最小的距离,就是我们定义的W距离。

          • e.g

          • 假设有两个离散的分布,每个分布只包含两个点(A、B和C、D),每个点的出现概率相等,横竖距离均为1

          • 通过这个分布,可以计算出距离(||x-y||)

            • 距离 C D
              A 1 (sqrt{2})
              B (sqrt{2}) 1
          • 下面讨论所有可能出现的联合分布形式,下面仅举例其中可能的两种

            • 在联合分布1下,可以计算出期望(2sqrt2)

            • 同理,在联合分布2下,计算得出期望为2(可以得到是所有可能的联合分布中最小的期望值)

          • 所以得到W距离为2

        • 可以理解为:将分布P1移动到分布P2,已知彼此距离(||x-y||),选择一个合适的移动方案γ(联合分布),让走的路径最小,就是W距离。

          • 在最优的路径规划γ下,把土堆从P1移动到P2所需的路径(最短距离消耗)
        • 但inf(穷举所有可能,取下界)项无法直接求解

        • 为了解决其中李普希思系数存在的限制,使用了权重截断的方法
        • 权重截断:在每次优化判别器D之后,把D的权重的绝对值限制在某个范围
    • WGAN-GP

      • WGAN存在的问题

        • 权重二值化:WGAN几乎所有参数都是正负0.01,浪费神经网络的拟合能力(权重截断)
        • 梯度衰减、爆炸(权重截断的截断阈值)
      • WGAN-GP:把Lipschitz限制作为一个正则项加到Wasserstein损失上,在优化GAN损失的同时,尽可能满足Lipschitz限制

    Progressive GAN

    SN-GAN

    谱归一化层实现利普希茨连续

    • WGAN:权重截断--> 权重二值化、梯度消失/爆炸
    • WGAN-GP:惩罚项--> 收敛速度仍然慢于DCGAN
    • SN-GAN:每层权重除以该层矩阵谱范数即可满足利普希茨连续

    Self-Attention GAN

    建模长距离依赖关系

    • 原始GAN存在的问题
      • 局部效果很逼真,全局效果不逼真
    • 引入自注意力机制
      • 建立一个长距离依赖关系

      • 让最终的输出每一部分不仅仅是和对应的感受野相关,也和整体全局相关联

    BigGAN

    • 增大Batch Size
    • 噪声不单单加在输入层,还加在中间层
    • 截断技巧
      • 在一个分布中采样噪声,如果噪声超过阈值,则丢弃再次采样
      • 阈值越大,图片多样性越好,但图片质量会略微下降
      • 阈值越小,图片多样性越差,但图像质量更好

    实战项目-基础

    • 图像翻译
      • 学习图像到图像的映射
        • 黑白图像-->彩色图像:学习彩色图像的条件分布
    • U-NET
      • 神经网络中,浅层卷积核提取Low-Level特征,深层卷积核提取High-Level特征

      • High-Level特征:分类、检测需要对图像深层理解等任务

      • Low-Level特征:保留更多图像细节

      • 图像翻译任务:需要Low-Level和High-Level 特征

      • ResGenerator

        • 在残差网络中,通过残差的形式,不断向后传递
        • 同时还解决了退化的问题

    Pixel2Pixel

    用cGAN实现图像翻译

    • 已知我们有一一对应的数据集(例如:轮廓<-->建筑)
    • 使用cGAN
      • 首先输入轮廓和随机噪声,通过生成器生成建筑图像,再将输入和建筑图像输入到判别其中

      • 判别器进行判断,输出判别值

    深度学习三要素

    CycleGAN

    无须paired数据,学习图像翻译

    • 有两组数组,但彼此之间并不是一一对应

    • 因为没有很好的全局损失信息,可能会出现生成的结果不能保持对应的位置信息等

    • eg

      • CycleGAN中,首先将斑马生成马,然后再将马重新返回生成斑马,然后比对原始斑马和生成的斑马的损失,即可以保存一定的位置等信息
    • 循环一致性损失

      • ·对于输入图像:将生成图像重建回输入图像,应当让原始输入图像和重建的输入图像尽可能相似

      • 同理,有

    StarGAN

    一个GAN,多种数据,任意变换

    • 与GAN相比,其输入多了一个Target domain,输出多了一个Domain classification,用来分类表情的种类
    • 于此同时还增加了一个循环一致性损失
      • 对于生成器生成的Fake image,和期望表情的标签一起返回给生成器,让其尽可能地再次还原出原始的输入图像
  • 相关阅读:
    【L.M.W.Y.D】Scrum Meeting 5
    【L.M.W.Y.D】Scrum Meeting 4
    多喝热水 实验十 团队作业6:团队项目用户验收&Beta冲刺
    多喝热水【Beta】Scrum meeting 4
    多喝热水【Beta】Scrum meeting 3
    多喝热水【Beta】Scrum meeting 2
    多喝热水【Beta】Scrum meeting 1
    多喝热水 实验九 团队作业5:团队项目编码与Alpha冲刺
    多喝热水 [Alpha] Scrum Meeting 7
    多喝热水 [Alpha] Scrum Meeting 6
  • 原文地址:https://www.cnblogs.com/hyzs1220/p/13658758.html
Copyright © 2011-2022 走看看