Generative Adversarial Networks

  1. GAN框架

        GAN框架是有两个对象(discriminator,generator)的对抗游戏。generator是一个生成器,generator产生来自和训练样本一样的分布的样本。discriminator是一个判别器,判别是真实数据还是generator产生的伪造数据。discriminator使用传统的监督学习技术进行训练,将输入分成两类(真实的或者伪造的)。generator训练的目标就是欺骗判别器。

    游戏中的两个参与对象由两个函数表示,每个都是关于输入和参数的可微分函数。discriminator是一个以 x 作为输入和使用θ(D) 为参数的函数D,D(x)是指判断输入样本x是真实样本的概率 ;generator由一个以z为输入使用 θ(G) 为参数的函数G,G(z)是指输入样本z产生一个新的样本,这个新样本希望接近真实样本的分布。

    discriminator与generator都用两个参与对象的参数定义的代价函数。discriminator希望仅控制住θ(D)
    情形下最小化 J(D)(D), θ(G))。generator希望在仅控制θ(D) 情形下最小化 J(G)(D)(G))。因为每个参与对象的代价依赖于其他参与对象的参数,但是每个参与对象不能控制别人的参数,这个场景其实更为接近一个博弈而非优化问题。优化问题的解是一个局部最小,这是参数空间的点其邻居有着不小于它的代价。而对一个博弈的解释一个纳什均衡。在这样的设定下,Nash 均衡是一个元组,( θ(D), θ(G)) 既是关于θ(D)的 J(D) 的局部最小值和也是关于θ(G)的 J(G) 局部最小值。

    图 1 GAN两种场景

    如图 1所示GAN有两种场景,第一种场景(左图),discriminator对象随机从样本集中取一个元素X作为输入,discriminator对象的目标是以真实样本X作为输入时,尽量判断D(x)为1;而第二种场景(右图),具有discriminator和generator两个对象的参与,generator对象以噪声变量z作为输入,然后产生一个样本G(z),discriminator对象以G(z)作为输入并尽量判断D(G(z) )为0;而generator对象的目标是尽量让discriminator对象计算D(G(z) )为1。最后这个游戏是达到纳什均衡(Nash equilibrium),即G(z)产生的数据样本分布与真实数据样本分布一样,即对于所有的输入x,D(x) 的计算结果为0.5。

  2. ANN函数

    GAN是由一个判别模型(discriminator)和生成模(generator)型组成。其中discriminator和generator可以由任何可微函数来描述,如图 4所示是采用两个多层的神经网络来描述discriminator和generator模型,即图中的G和D函数。

    图 2

     

    generator是一个可微分函数 G。当 z 从某个简单的先验分布中采样出来时,G(z) 产生一个从 pmodel 中的样本。一般来说, GAN对于generator神经网络只有很少的限制。如果我们希望 pmodel 是 x 空间的支集(support),我们需要 z 的维度需要至少和 x 的维度一样大,而且 G 必须是可微分的,但是这些其实就是仅有的要求了。

  3. 损失函数

  4. discriminator的代价

  5. 交叉熵[2]

    交叉熵代价函数(Cross-entropy cost function)是用来衡量人工神经网络(ANN)的预测值与实际值的一种方式。交叉熵损失函数定义如下:

    其中:

  • x表示样本
  • y表示样本x对应的标签
  • a表示以样本x作为输入,模型的输出标签
  • n表示样本的总数,当为二分类时n为2

 

  1. 目前为 GANs 设计的所有不同的博弈针对discriminator的 J(D) 使用了同样的代价函数。他们仅仅是generator J(G) 的代价函数不同。

    discriminator的代价函数是:

    其中:    表示在分布上的期望,D(x)为概率函数。

    其实就是标准地训练一个sigmoid 输出的标准二分类器交叉熵代价函数。唯一的不同就是分类器在两个 minibatch 的数据上进行训练;一个来自数据集(其中的标签均是 1),另一个来自生成器(其标签均是 0)。

    通过给discriminator模型定义损失函数后,将优化discriminator模型转移为优化等式,即训练discriminator模型就是为了最小化discriminator的等式。

     

  2. Minimax

    GAN框架有两个参与对象discriminator和generator ,上一节只考虑优化discriminator模型,还需要考虑优化generator模型。GAN使用了零和博弈思想为generator模型定义损失函数。在零和博弈游戏中,其所有参与人的代价总是 0,即在游戏中赢的得正数,输的得负数,所以总和为0。在零和博弈中,参加游戏双方的得分互为相反数,所以根据discriminator的损失函数,可推导出generator的损失函数为:

    所以优化generator模型,一样是优化 损失函数,即最小化该损失函数。由于和两个损失函数只是互为相反数,所以可以将两个等式合并为一个优化等式。即

     

     

    由于我们训练D来最大化分配正确标签给不管是来自于训练样例还是G生成的样例的概率.我们同时训练G来最小化。换句话说,DG的训练是关于值函数V(G,D)的极小化极大的二人博弈问题:

    其中:

  • G表示生成模型,D表示分类模型
  • x~pdata(x) 表示x取自训练数据的分布
  • z~p(z) 表示z取自我们模拟数据的分布

 

图 3

如图 2所示a-b是模型G和D的优化过程,黑色的虚线表示训练数据的分布;绿色的实线表示模型G产生的分布;蓝色的虚线表示模型D的计算值;水平X轴表示D函数的计算值;水平z轴表示噪声值。一开始G的产生分布于真实数据分布偏离较大,且模型D对真实数据和伪造数据区分能力较强,即对真实数据D函数的计算值较大,而对伪造数据D函数的计算值较小,如图a;随着模型的训练,G数据分布于真实数据分布逐渐重合,如图d,最后D的计算值恒等为0.5。

 

  1. 训练过程

    训练过程包含同时随机梯度下降 simultaneous SGD。在每一步,会采样两个 minibatch:一个来自数据集的 x 的 minibatch 和一个从隐含变量的模型先验采样的 z 的 minibatch。然后两个梯度步骤同时进行:一个更新 θ(D) 来降低 J(D),另一个更新 θ(G) 来降低 J(G)。这两个步骤都可以使用你选择的基于梯度的优化算法。

    生成对抗网络的minibatch随机梯度下降训练。判别器的训练步数,k是一个超参数。在我们的试验中使用k=1,使消耗最小。

    图 4

  2. 理论分析

    GAN的设计思想采用discriminator和generator两个模型进行对抗优化,本章用两个证明来从理论上论证了对抗网络的合理性。

  3. 命题一:全局最优

    命题:当G固定的时候,D会有唯一的最优解。真实描述如下:

    证明如下:

  • 首先,根据连续函数的期望计算方式,对V(G,D)进行变换:
  • 对于任意的a,b ∈ R2 \ {0, 0}, 下面的式子在a/(a+b)处达到最优:

所以得证。

  1. 命题二:收敛性

    命题:如果G和D有足够的性能,对于算法中的每一步,给定G时,判别器能够达到它的最优,并且通过更新pg来提高这个判别准则。

    则pg收敛为pdata

     

    证明略,看不太懂。

     

  2. CycleGAN[5]

  3. 概述

    CycleGAN的原理可以概述为: 将一类图片转换成另一类图片 。也就是说,现在有两个样本空间X和Y,我们希望把X空间中的样本转换成Y空间中的样本。(获取一个数据集的特征,并转化成另一个数据集的特征).

    图 5

  4. 形式化

    CycleGAN模型的学习目标是训练两个映射函数:G:XàY和F:YàX,同时CycleGAN模型还包含了两个相关的discriminator对象:Dx和Dy。Dy是为了区分G函数产生的数据和Y数据;而Dx是为了区分F函数产生的数据和X数据,如图 5(a)所示。

  5. 对抗损失函数

    如3.2小节所示介绍的对抗网络,对于一个映射函数G:XàY,和discriminator对象DY,则GAN的损失函数定义为:

    其中,映射函数G是将X领域的数据转换为类似Y领域的数据,而DY就是判别真实的Y数据和G伪造的Y数据。即GAN的优化目标是:。同样的对于映射F:YàX,和discriminator对象DX,可以定义一个GAN损失函数的优化目标:.

  6. 循环一致损失函数

    理论上GAN能够学习两个映射函数G和F,其能够分别从X或Y一个领域的数据生成到另一个领域的数据。但是由于映射函数变换可能性非常多,无法保证映射函数能够将一个领域的输入数据xi转换为其它领域的数据yi。为了减少映射函数的变换范围或可能性,CycleGAN增加了一些约束函数来限制这种变换范围过大的问题。

    如图 5(b)所示,通过映射函数G和F,可以从X领域的数据样本变换为领域Y的数据样本,再变换为X领域的数据样本,从而生成一个环,即:,同理有图 5(c)的。所以原始数据样本x和循环产生的数据F(G(x))之间肯定有差异,那么可以定义一致性损失函数为:

    其中式中的方括号是使用了L1规范化。

  7. 完整表达式

    综上所述,CycleGAN的损失函数可以完整表达为:

    其中控制了映射函数G和F的相对重要性。所以CycleGAN的优化目标是:

    其中G和F两个映射函数的内部结构互相彼此独立,即它们能将一个数据样本映射到另一个领域的数据样本。

  8. 实现

    CycleGAN网络的实现就是定义四个神经网络:G、F、Dx和Dy;然后优化这个最终的表达式,

     

  9. 参考文献

    1. Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks.
    2.  

     

     

GAN基础的更多相关文章

  1. 常见GAN的应用

    深入浅出 GAN·原理篇文字版(完整)|干货 from:http://baijiahao.baidu.com/s?id=1568663805038898&wfr=spider&for= ...

  2. GAN Generative Adversarial Network 生成式对抗网络-相关内容

    参考: https://baijiahao.baidu.com/s?id=1568663805038898&wfr=spider&for=pc Generative Adversari ...

  3. GAN生成式对抗网络(四)——SRGAN超高分辨率图片重构

    论文pdf 地址:https://arxiv.org/pdf/1609.04802v1.pdf 我的实际效果 清晰度距离我的期待有距离. 颜色上面存在差距. 解决想法 增加一个颜色判别器.将颜色值反馈 ...

  4. 基础Gan代码解析

    initializer总结: #f.constant_initializer(value) 将变量初始化为给定的常量,初始化一切所提供的值. #tf.random_normal_initializer ...

  5. 用GAN生成二维样本的小例子

    同步自我的知乎专栏:https://zhuanlan.zhihu.com/p/27343585 本文完整代码地址:Generative Adversarial Networks (GANs) with ...

  6. 提高驾驶技术:用GAN去除(爱情)动作片中的马赛克和衣服

    同步自我的知乎专栏:https://zhuanlan.zhihu.com/p/27199954 作为一名久经片场的老司机,早就想写一些探讨驾驶技术的文章.这篇就介绍利用生成式对抗网络(GAN)的两个基 ...

  7. 编程语言的基础——搞定JavaIO

    关键字:IO基础,JUnit生命周期,字节流,字符流,字符编码,对象流,序列化,反序列化 Java I/O 流是一组有顺序的,有起点和终点的字节集合.是对设备文件间数据传输的总称和抽象. 在IO中涉及 ...

  8. 从一篇ICLR'2017被拒论文谈起:行走在GAN的Latent Space

    同步自我的知乎专栏文章:https://zhuanlan.zhihu.com/p/32135185 从Slerp说起 ICLR'2017的投稿里,有一篇很有意思但被拒掉的投稿<Sampling ...

  9. GAN︱GAN 在 NLP 中的尝试、困境、经验

    GAN 自从被提出以来,就广受大家的关注,尤其是在计算机视觉领域引起了很大的反响,但是这么好的理论是否可以成功地被应用到自然语言处理(NLP)任务呢? Ian Goodfellow 博士 一年前,网友 ...

随机推荐

  1. sql server 执行大.sql文件

    打开cmd执行:osql -S 127.0.0.1 -U sa -P sa -i d:\test.sql 执行后会提示输入密码.

  2. iOS 最新公布app到AppStore全流程具体解释

    一.生成公布证书(证书的作用:类似于驾照,证明你的身份能够进行开发人员一些操作) 打开https://developer.apple.com 点击右上角开发人员中心 这里输入你付款过的Apple 帐号 ...

  3. linux 登陆key生成

    1.登录A机器 2.ssh-keygen -t rsa,将会生成密钥文件和私钥文件 id_rsa,id_rsa.pub或id_dsa,id_dsa.pub Generating public/priv ...

  4. springboot整合docker部署(两种构建Docker镜像方式)

    项目结构 package hello; import org.springframework.boot.SpringApplication; import org.springframework.bo ...

  5. Linux下redis安装与使用 (转)

    尊重原创:https://www.cnblogs.com/codersay/p/4301677.html,并更正如下红字 redis官网地址:http://www.redis.io/ 最新版本:2.8 ...

  6. oracle复合索引的选择和使用

    声明:虽然题目是Oracle.但同样适合MySQL InnoDB索引          在大多数情况下.复合索引比单字段索引好     很多系统就是靠新建一些合适的复合索引.使效率大幅度提高      ...

  7. Web性能测试工具:http_load安装&使用简介

    除了siege,在Web性能测试工具中,http_load也是比较热门和常见的一款,有时因为种种原因,只能使用现成的工具,所以多了解和掌握一种Web性能测试工具是很有必要的. 1.下载安装包 略过 2 ...

  8. 【JMeter4.0学习(八)】之断言

    目录 响应断言 一.响应断言 1.添加线程组 2.添加HTTP请求默认值 3.添加HTTP请求1 4.先运行“HTTP请求1”,查看结果树的“取样器结果.请求.响应数据” ①取样器结果 ②请求 ③响应 ...

  9. Java 异常介绍

    Java标准库内建了一些通用的异常,这些类以 Throwable 为顶层父类.Throwable又派生出 Error 类和 Exception 类. 错误:Error类以及他的子类的实例,代表了JVM ...

  10. KiB、MiB与KB、MB的区别

    原来没太注意MB与MiB的区别,甚至没太关注还有MiB这等单位,今天认真了一下,发现两者还是有区别的,具体的差别是MB等单位以10为底数的指数,MiB是以2为底数的指数,如:1KB=10^3=1000 ...