生成对抗网络(GAN)原理详记

  • 前言
  • 一:什么是生成对抗网络(GAN)
    • 1.GAN是什么
    • 2.生成任务
    • 3.GAN的数学描述
  • 二:各类GAN
    • 1.DCGAN
      • (1) DCGAN网络结构
      • (2) DCGAN做了以下改进
      • (4) BN的优势
      • (5) DCGAN的损失函数与训练过程
    • 2.条件生成对抗网络(CGAN)
      • (1)CGAN的输入
      • (2)损失函数
      • (3)ColorGAN
    • 3.改进生成对抗网络
      • (1)传统GAN
      • (2) Wasserstein GAN
      • (3) Improved WGAN(WGAN-GP)
      • (4) SN GAN
  • 三:一些具体的GAN结构
    • 1.循环一致性
    • 2.渐进增强式生成对抗网络
    • 3.文本转图像
  • 后记

前言

最近几天,入坑了生成对抗网络(GAN),主要是研读了缪茂文 潘志宏著写的《深入浅出GAN生成对抗网络原理剖析与Tensorflow实践》,这里把GAN一些基础的,必要的东西梳理一下。

一:什么是生成对抗网络(GAN)

1.GAN是什么

GAN网络结构是由生成器和判别器组成,训练过程中,生成器G不断的生成赝品,判别器D这识别生成器G生成的结果是真品还是赝品,两个网络相互对抗,生成器G努力生成出欺骗过判别器D的赝品,而判别器D努力识别出生成器G生成的赝品,往复循环,从而训练彼此

2.生成任务

GAN主要用于生成任务,所谓生成任务,就是通过输入一些随机噪声给生成模型,生成模型将这些噪声映射到真实数据的分布上。以图片生成为例,我们手上有大量的真实图片数据,这些数据在高维空间会存在一个特定的概率分布,我们会使用GAN训练一个生成模型,训练时,生成模型生成的图片的概率分布会逐渐的往真实的图片的概率分布靠近,从而,生成模型会生成与真实图片相似的图片。

3.GAN的数学描述

原论文给出了如下数学描述,假定用于生成的噪声分布是pz(z)p_z(z)pz​(z),真实数据分布是px(x)p_x(x)px​(x),同时生成器和辨别器分别为G和D,则GAN的目标可以通过如下公式描述:
D(x)表示x来源于真实数据的分布,理想情况下,D(x)=1,logD(x)=0。若是分类器不理想,则D(x)输出越小,logD(x)则会越小。G(z)表示噪声经过生成器后生成的样本,D(G(z))则是分类器认为生成样本属于真实样本的概率,理想情况下这个数值为0,但当性能越不好,D(G(z))越大,log(1-D(G(z)))就会越小。总而言之,后面两项期望的和越大,分类器识别能力越好。 再观察估值函数V(G,D)前面的min/max,就很明显了,最终的目标是求外面的minG,G的目标是让V最小,达到以假乱真的目的;而内部嵌套的maxD,则代表D是在G给定的情况下,最大化V,即给定生成器,得到识别能力最好的分辨器。

二:各类GAN

1.DCGAN

相较于原始GAN,DGGAN主要的区别是生成器和判别器使用了深层卷积网络,

(1) DCGAN网络结构

(2) DCGAN做了以下改进

(1)生成器和判别器使用带步长的过滤来代替池化层,加快模型收敛速度,但会降低网络的稳定性
(2)生成器和判别器使用Batch Normalization来加速模型收敛避免模型过拟合
(3)生成器中最后一层使用tanh作为激活函数,其余层使用relu作为激活函数
(4)判别器中所有层都使用Leaky ReLU作为激活函数
(3) Internal Convariate Shift 现象
随着网络加深,每层网络的参数更新会导致输出变化,层层叠加会出现高层不断重新计算参数去适应底层发生的变化,这种现象叫ICS现象

(4) BN的优势

BN可以缓解ICS问题,是训练网络是可以使用更大的学习速率,加快网络收敛
BN可以减少梯度爆炸和梯度弥散问题
BN减少了训练网络时对正则化的需要
BN的核心是:
BN操作保证神经网络节点间参数具有“伸缩不变性”
BN确保了神经网络中输入数据具有“伸缩不变性”

(5) DCGAN的损失函数与训练过程

判别器的损失:
(1)判别器给真实图片打的分与其期望分数(1)的差距D_L1
(2)判别器给生成图片打的分与其期望分数(0)的差距D_L2
(3)则生成器的总损失为 D_L1 + D_L2
生成器的损失:
(1)生成图片与真实图片的差距
(2)实际上,将该差距转化为
生成器期望判别器给自己生成图片打多少分与实际判别器打多少分的差距

2.条件生成对抗网络(CGAN)

(1)CGAN的输入

条件生成网络(CGAN)与DCGAN一个重要差别是,CGAN给生成器的输入除了一个随机噪声多了一个约束条件

(2)损失函数

(3)ColorGAN

colorGAN是一个经典的CGAN,ColorGAN的训练数据是彩色图片,
数据准备时,将彩色图片通过自适应阀值的方法获得对应的线条图片做为约束条件,然后再使用彩色图片的blur滤波的模糊图片作为颜色噪声

ColorGAN还可用于去除图片的马赛克,将原图片数据随机打码,打码的图片作为约束条件,然后通过blur滤波生成全模糊的图像作为噪声,就可以进行训练了。

ColorGAN与DCGAN还有一个较大不同点是,
ColorGAN的生成器的网络结构使用了U型网络

3.改进生成对抗网络

(1)传统GAN
  1. 传统的GAN,本质是最小化两个概率分布的 JS散点
  2. 使用JS散度表示概率分布距离,需要满足分布之间有重叠部分的要求,在高维环境中,GAN通常重叠部分可忽略的
  3. 当两分布没有任何重叠或重叠可忽略,JS散度恒为log2,梯度为恒0,会产生梯度消失问题
  4. 可以再开始的训练中,给输入叠加一个目标分布,使得两分布存在重叠部分,然后再缓慢去掉重叠,同时,也不要把判别器训练的太好
  5. 传统GAN会存在模式崩溃问题,直观表现是生成器生成的样本多样性不足
(2) Wasserstein GAN

Wasserstein GAN 是为解决传统GAN 遇到的梯度消失,训练梯度不稳定以及模式崩溃而提出的。
其本质就是用Wasserstein距离(EM距离)来替代JS散度。

GAN中使用EM距离,是在判别器的目标函数加一个 1-Lipschitz约束条件,如下图

Lipschitz函数定义如下
∣∣f(x1)−f(x2)∣∣<=K∣∣x1−x2∣∣||f(x_1)-f(x_2)|| <= K||x_1-x_2||∣∣f(x1​)−f(x2​)∣∣<=K∣∣x1​−x2​∣∣
当K = 1 时,Lipschitz函数就叫1-Lipschitz

WGAN论文没有直接解决如何使得判别器的目标函数服从1-Lipschitz约束,而是采用限制的方式是目标函数平滑,这种方式为 Weight Clipping

WGAN的改动有:

  1. 判别器最后一层去掉了sigmoid
  2. 生成器与判别器的损失不取log
  3. 训练判别器时,每次参数更新后的值限制在一个范围(-c,c)
  4. 不使用基于动量的梯度优化算法,改为RMSProp 或SGD
(3) Improved WGAN(WGAN-GP)

WGAN 使用了Weight Clipping,这会很容易会导致判别器的参数要么取极大值要么取极小值,从而导致判别器变成一个二值化网络,丧失了原本强大的拟合能力

同时Weight Clipping的限制范围若设得过大,可能会参数梯度爆炸问题,过小也可能会产生梯度消失问题

为此,WGAN-GP提出了gradient penalty(梯度惩罚)

在 WGAN或WGAN-GP中,通常是先训练K次判别器,再训练1次生成器

(4) SN GAN

gradient genalty只对生成数据分布与真实数据分布之间的空间做梯度惩罚,无法对整个空间的数据做惩罚,从而导致graident penalty正则化方式不稳定。
SN GAN 使用Spectral Normalization(光谱标准化),具有一下优势

  1. 以SN的方式让判别器满足Lipschitz约束,Lipschit的K是唯一要调的超参数
  2. 整体上,SN-GAN只改变判别器权值矩阵的最大奇异值,从而最大限度的保留原始信息
  3. 具体训练模型时,power iteration可加快训练速度

三:一些具体的GAN结构

1.循环一致性

此类型的,有cycleGAN,StarGAN,XGAN…

2.渐进增强式生成对抗网络

StackGAN
PGGAN

3.文本转图像

这一使用CGAN结构的GAN,输入的约束条件
可以使用Skip-Thought 来构建句子级别的语义向量来作为约束条件

后记

本文许多内容是《深入浅出GAN生成对抗网络原理剖析与Tensorflow实践》摘抄的内容
同时,也用paddlepaddle复现了 DCGAN和ColorGAN。
开源链接如下:
https://gitee.com/lingcb/dcgan
https://gitee.com/lingcb/color-gan

生成对抗网络(GAN)原理详记相关推荐

  1. 【通知】《生成对抗网络GAN原理与实践》代码开源,勘误汇总!

    有三上个月出版了新书<生成对抗网络GAN:原理与实践>,Generative Adversarial Networks(中文名生成对抗网络,简称GAN)自从被提出来后,其发展就非常迅猛,几 ...

  2. 生成对抗网络gan原理_中国首个“芯片大学”即将落地;生成对抗网络(GAN)的数学原理全解...

    开发者社区技术周刊又和大家见面了,萌妹子主播为您带来第三期"开发者技术联播".让我们一起听听,过去一周有哪些值得我们开发者关注的重要新闻吧. 中国首个芯片大学,南京集成电路大学即将 ...

  3. 生成对抗网络gan原理_必读!TOP10生成对抗网络GAN论文(附链接)

    来源:新智元 本文约2200字,建议阅读7分钟. 本文所选论文提供了一个易读的对GAN的介绍,帮助你理解GAN技术的基础. [ 导读 ]生成对抗网络 (GAN) 是深度学习中最有趣.最受欢迎的应用之一 ...

  4. 『一起学AI』生成对抗网络(GAN)原理学习及实战开发

     参考并翻译教程:https://d2l.ai/chapter_generative-adversarial-networks/gan.html,加入笔者的理解和心得 1.生成对抗网络原理 在Col ...

  5. 图解 生成对抗网络GAN 原理 超详解

    生成对抗网络 一.背景 一般而言,深度学习模型可以分为判别式模型与生成式模型.由于反向传播(Back propagation, BP).Dropout等算法的发明,判别式模型得到了迅速发展.然而,由于 ...

  6. 生成对抗网络gan原理_生成对抗网络(GAN)的半监督学习

    前言 如果您曾经听说过或研究过深度学习,那么您可能就知道MNIST, SVHN, ImageNet, PascalVoc或者其他数据集.这些数据集都有一个共同点: 它们由成千上万个有标签的数据组成. ...

  7. 条件生成对抗神经网络,生成对抗网络gan原理

    关于GAN生成式对抗网络中判别器的输出的问题 . ...摘要生成式对抗网络GAN(Generativeadversarialnetworks)目前已经成为人工智能学界一个热门的研究方向.GAN的基本思 ...

  8. 通俗易懂生成对抗网络GAN原理(一)

    生成对抗网络(Generative Adversarial Network, GAN) 学习李宏毅机器学习课程总结. 前言 生成式网络有什么特别的地方呢? 之前我们学到的神经网络就是一个函数,输入一个 ...

  9. 生成对抗网络(GAN)原理和实现

    个人博客:http://www.chenjianqu.com/ 原文链接:http://www.chenjianqu.com/show-54.html 生成式对抗网络(GAN, Generative ...

  10. GAN生成对抗网络-GAN原理与基本实现-入门实例02

    什么是GAN 实现代码 import tensorflow as tf from tensorflow import keras from tensorflow.keras import layers ...

最新文章

  1. 【建站系列教程】6、.htaccess文件的url重写规则-网页伪静态化
  2. 什么时候可以全面升级鸿蒙系统,华为已做好全面升级准备,鸿蒙系统将替换底层安卓系统...
  3. linux find 忽略大小写查找文件
  4. 互联网人的《三十而已》:裸辞,催婚,职业瓶颈,逃离北上广深......
  5. 【每周NLP论文推荐】 开发聊天机器人必读的重要论文
  6. 台湾ML笔记--1.2 formalize the learning probelm
  7. GDCM:gdcm::GroupDict的测试程序
  8. source insight 支持lua /ruby
  9. 【转】1.SharePoint服务器端对象模型 之 对象模型概述(Part 1)
  10. 面试官又整新活,居然问我for循环用i++和++i哪个效率高?
  11. 【Kafka】kafka消费者参数
  12. “滚蛋吧”扎克伯格!
  13. 谈谈你对TCP三次握手和四次挥手的理解
  14. NLP系列之文本分类
  15. java坦克大战爆炸效果_用java做坦克大战--主要类和基本功能实现
  16. 学号20189220 2018-2019-2 《密码与安全新技术专题》第四周作业
  17. 特斯拉国产又怎样,十个月后就完蛋
  18. 超详细的抖音运营全攻略
  19. 利用python批量合并手机哔哩哔哩下载的视频各分段
  20. C++Person类继承

热门文章

  1. C语言笔记(27)网络编程-TCP编程
  2. 什么是UI设计中的情感化设计?
  3. 另一版本驾校一点通下载
  4. BEM战略解码的核心是打赢必赢之战
  5. Windows11安装安卓/Android子系统运行安卓应用程序详细教程
  6. 计算机专硕双导师,说说你不知道的双导师制
  7. Xshell使用密钥登录linux
  8. 深度学习训练中如何处理NaNs
  9. DEV Accordion Control 控件
  10. 知网导出引用文件,插入到Endnote管理文献