生成对抗网络

1.生成对抗网络的定义

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

2.生成对抗网络的结构


GANs是以两个独立的对抗网络组成:生成器和判别器。当仅将嘈杂的图像阵列作为输入时,会对生成器进行训练以创建逼真的图像。判别器经过训练可以对图像是否真实进行分类。
生成器G:通过一个参数化概率生成模型(通常用深度神经网络进行参数化)进行概率分布的逆变换采样,得到一个生成的概率分布。
判别器D:给定样本,判断(通常也是深度卷积神经网络)这个样本来自真实数据还是伪造数据。
其中生成器帮助训练判别器,而判别器又帮助训练生成器。它们同时变得更强。

3.GAN生成模型中的自编码器


自编码器可以帮助我们对数据进行自动编码,它由两部分构成:编码器和解码器。它的输入和输出是一致的,目标是使用稀疏的高阶特征重新组合来重构自己。

4.GAN–如何定义损失


通过优化目标,使得我们可以调节概率生成模型的参数,从而使得生成的概率分布和真实数据分布尽量接近。 但是这里的分布参数不再与传统概率统计一样,这些参数保存在一个黑盒中:最后所学到的一个数据分布Pg(G),没有显示的表达式。

5.GAN–损失函数


这个Loss其实就是交叉熵。对于判别器D,它的任务是最小化 -L(G,D)。如果采用零和博弈,生成器G的目标是最小化L(G,D),而实际操作发现零和博弈训练效果并不好,G的目标一般采用最小化。

6.GAN的训练方法

优化函数的目标函数:

D(x)表示判别器认为x是真实样本的概率,而1-D(G(z))则是判别器认为合成样本为假的概率。训练GAN的时候,判别器希望目标函数最大化,也就是使判别器判断真实样本为“真”,判断合成样本为“假”的概率最大化;与之相反,生成器希望该目标函数最小化, 也就是降低判别器对数据来源判断正确的概率。
在训练的过程中固定一方,更新另一方的网络权重,交替迭代,在这个过程中,双方都极力优化自己的网络,从而形成竞争对抗,直
到双方达到一个动态的平衡,此时生成模型 G 恢复了训练数据的分布,判别模型再也判别不出来结果,准确率为 50%,约等于乱猜。

7.GAN的收敛性

如果G和D的学习能力足够强,两个模型可以收敛。但是GAN模型的收敛性和均衡点存在性需要新的理论突破,模型结构和训练稳定性需要进一步提高。 GAN的收敛是很困难的。
第一,就是梯度消失的问题,当优化的时候,对于公式里生成器、判别器的损失函数会存在梯度消失的问题,那么我们需要设计一些更好的损失函数,使得梯度消失问题得到解决。第二个就是模式发现问题,也就是说我们的生成器可能生成同样的数据而不是多样的数据。

8.DCGAN

把有监督学习的CNN与无监督学习的GAN整合到一起提出了 DCGANs,是生成器和判别器分别学到对输入图像层次化的表示。

DCGAN的生成器和鉴别器都舍弃了CNN的pooling层,鉴别器保留CNN的整体架构,生成器则是将卷积层替换成了反卷积层;在鉴别器和生成器中使用了BN层,加速模型训练,提升了训练的稳定性。但是在生成器的输出层和鉴别器的输入层不使用BN层;生成器网络中使用ReLU作为激活函数,最后一层使用Tanh(),让模型更快地学习,以饱和和覆盖训练分布的颜色空间;使用Adam优化器,一阶矩估计的指数衰减率的值设置为0.5。

9.WGAN

①为什么要提出WGAN

因为GAN网络训练的重点在于均衡生成器与判别器,判别器越好,生成器梯度消失越严重。
在最优判别器的下,我们可以把原始GAN定义的生成器loss 等价变换为最小化真实分布与生成分布之间的JS散度。 我们越训练判别器,它就越接近最优,最小化生成器的loss也就会越近似于最小化真实分布与生成分布之间的JS散度。


PG和Pdata是高维空间的低维流形。判别器最优,最小化生成器的目标函数等价于最小化真实分布Pdata与生成分布Pg与之间的JS散度,而由于真实分布Pdata与生成分布Pg几乎不可能不可忽略的重叠,所以无论它们相距多远,JS散度都是常数。最终导致生成器的梯度(近似)为0,造成梯度消失,造成GAN难以优化。

②Wasserstein距离

即使两个分布没有重叠或可忽略不计,Wasserstein距离仍然能够反映它们的远近。

③WGAN算法实现

  1. 判别器最后一层去掉sigmoid激活函数:原始GAN中,最优的D是一个概率形式,属于[0,1],因此用sigmoid可以加速D的训练。WGAN中,D是任意满足利普斯次连续的函数,因此不需要用Sigmoid激活。
  2. 生成器G 和判别器D 的损失不取对数:根据Wasserstein距离的定义可知,不需要取对数。
  3. 每次更新判别器D 的参数之后,权重绝对值截断到不超过一个固定常数c:使得判别器D 满足利普希茨连续。
    4.不基于动量的优化算法(momentum和Adam)推荐RMSProp或SGD。

10.Image-Translation-GANs

①CycleGAN


●G_A2B:将真实的图片变成相同状态的图片(假的)或者将生成的假的的图片变成橘子。
●G_B2A:将真实的图片变成相同形状的的图片(假的)或者将生成的图片变成苹果。
●D_A:鉴别真实的苹果或者鉴别生成的苹果。
●D_B: 鉴别真实的橘子或者鉴别生成的橘子。
CycleGAN由两个判别器(DxDx和DyDy)和两个生成器(G和F)组成。

为什么要连用两个生成器和两个判别器呢?
是为了避免所有X都被映射到同一个Y,采用两个生成器的方式,既能满足X->Y的映射,又能满足Y->X的映射,这一点其实就是变分自编码器VAE的思想,是为了适应不同输入图像产生不同输出图像。

X(苹果)经过生成器G(G_A2B)来生成带有原来形状的橘子图片,紧接着我在用另一个生成器F(G_B2A)来将我刚刚生成的橘子图片还原成之前苹果的样子,最后两个鉴别器分别来判断生成的橘子和真实的苹果的真假。反过来原理也是一样,我将Y(橘子)放入生成器(G_B2A)中来生成假的带有原来形状的苹果,紧接着我在用另一个生成器(G_A2B)把生成出来的苹果来变成原来形状的橘子,紧接着两个鉴别器分别来判别生成的苹果和真实的橘子的真假。
以下为训练中的各种损失值变化,存储的model文件以及测试结果图:

②Pixel2Pixel


图片x作为条件需要输入到G和D中。G的输入是x(需要转换的图片),输出是生成的图片G(x)。D则需要分辨出{x,G(x)}和{x, y}。

把图像等分成patch,批量加载数据判断每个Patch的真假。
生成网络用来根据输入图片得到假图片,两个鉴别器根据输入图片与假图片或真图片的组合,分辨出图片的真假。

③starGAN


StarGAN 包含 鉴别器D 和 生成器G 两个部分。鉴别器D 学习去辨别真实图像和生成图像,以及对图像进行所属域的分类(两个输出)。生成器接受图像和目标域标签(两个输入),生成假的图像。

鉴别器Discriminator:一个多任务鉴别器,由多个输出分支组成。
每个分支Dy学习二元分类,确定图像x是域y的真实图像还是G生
成的伪图像G(x,s)。

生成器 Generator:将输入图像x转换到输出图像G(x,s),后者体现的是指定domain的风格码s,该码由映射网络F或样式编码器E提供。其中,使用的是自适应实例归一化(AdaIN)将s注入G。s被设计为表示特定域y的样式,这消除了向G提供y的必要性,并使G可以合成所有域的图像。
提出StarGAN解决了图像转换的两个主要挑战:将一个域的图像转换为目标域的多种图像,并支持多个目标域。以下为测试结果图:

GAN生成对抗网络的原理及CycleGAN、Pixel2Pixel、starGAN的的原理即实现相关推荐

  1. GAN生成对抗网络-PIX2PIXGAN原理与基本实现-图像翻译09

    什么是pix2pix Gan 普通的GAN接收的G部分的输入是随机向量,输出是图像 :D部分接收的输入是图像(生成的或是真实的),输出是对或 者错.这样G和D联手就能输出真实的图像. 对于图像翻译任务 ...

  2. GAN生成对抗网络-CGAN原理与基本实现-条件生成对抗网络04

    CGAN - 条件GAN 原始GAN的缺点 代码实现 import tensorflow as tf from tensorflow import keras from tensorflow.kera ...

  3. GAN生成对抗网络-DCGAN原理与基本实现-深度卷积生成对抗网络03

    什么是DCGAN 实现代码 import tensorflow as tf from tensorflow import keras from tensorflow.keras import laye ...

  4. GAN生成对抗网络-SSGAN原理与基本实现-半监督学习GAN-08

  5. GAN生成对抗网络-INFOGAN原理与基本实现-可解释的生成对抗网络-06

    代码 import tensorflow as tf from tensorflow import keras from tensorflow.keras import layers import m ...

  6. 深度学习(九) GAN 生成对抗网络 理论部分

    GAN 生成对抗网络 理论部分 前言 一.Pixel RNN 1.图片的生成模型 2.Pixel RNN 3.Pixel CNN 二.VAE(Variational Autoencoder) 1.VA ...

  7. 54_pytorch GAN(生成对抗网络)、Gan代码示例、WGAN代码示例

    1.54.GAN(生成对抗网络) 1.54.1.什么是GAN 2014 年,Ian Goodfellow 和他在蒙特利尔大学的同事发表了一篇震撼学界的论文.没错,我说的就是<Generative ...

  8. 深度学习 GAN生成对抗网络-1010格式数据生成简单案例

    一.前言 本文不花费大量的篇幅来推导数学公式,而是使用一个非常简单的案例来帮助我们了解GAN生成对抗网络. 二.GAN概念 生成对抗网络(Generative Adversarial Networks ...

  9. 使用PyTorch构建GAN生成对抗网络源码(详细步骤讲解+注释版)02 人脸识别 下

    文章目录 1 测试鉴别器 2 建立生成器 3 测试生成器 4 训练生成器 5 使用生成器 6 内存查看 上一节,我们已经建立好了模型所必需的鉴别器类与Dataset类. 使用PyTorch构建GAN生 ...

最新文章

  1. Java并发编程(十一)——原子操作CAS
  2. 对抗攻击层出不穷?神经科学带来新突破、导出智能统一框架,Hinton:我早有洞见...
  3. 《流畅的Python》一副扑克牌中的难点
  4. sqlplus 远程连接 oracle 12514 错误
  5. python 库列表_python库安装列表
  6. POJ 1061扩展欧几里得
  7. 【C++自我精讲】基础系列三 重载
  8. 华为专利全球第一:哪里跌倒,哪里爬起!
  9. 复旦微电子fpga数据手册_牛眼IPO | 复旦微闯关科创板:主要产品售价走低、晶圆成本却在上升...
  10. 计算机速录学什么,学速录需要哪些能力
  11. 关于页面导航和数据传递的简单总结
  12. 信息学奥赛一本通网站
  13. [示例代码]植物大战僵尸网页版
  14. 阿里云数据库迁移手记
  15. 国家开发大学计算机平面设计试题,国家开放大学电大专科《计算机平面设计(1)》网络课形考任务1答案...
  16. IPV6 DNS服务器地址列表
  17. 1076: 三位数求解
  18. 塞拉利昂首次秘密进行基于区块链的总统选举
  19. So Easy京东商城
  20. 《Wireshark数据包分析实战(第2版)》目录—导读

热门文章

  1. android10 网络连接受限,移除蓝牙限制 Windows 10 与 Android 手机于同一网络就可连接...
  2. DNF端游服务器搭建流程
  3. Word2003Xml格式摸索 1
  4. 常见小票打印机打印故障及解决方法汇总视频教程-王西猛-专题视频课程
  5. Liunx环境安装Java1.8
  6. 5000元性价比高的笔记本_2019年5000左右的笔记本推荐这3款,最值得买性价比超高的...
  7. d3为饼图增加引导线
  8. win10 搭建Qt环境
  9. 华秋DFM软件——PCB最后一道关卡,检测PCB
  10. 一款好用的运行在Android手机上的pdf阅读器