任务:想要找到一个高维空间中的分布 P_data(x),要在目标类别的区域,采样的概率是高的;在那个区域之外,probability是低的。但这个P_data(x)分布的具体形式(pdf)是不知道的,GAN 就是要找到这个数据分布。
 
没有 GAN 怎么做生成?—— 极大似然估计
  1. 从 P_data(x) 中 sample 一些数据作为训练数据
  2. 借助一个含有未知参数 θ 的分布P_G(x; θ),想做的事情就是找出能够让 P_G 和 P_data 最接近的参数 θ。比如我们有一个混合高斯分布 GMM 作为P_G(x; θ),θ 就是 Gaussians 的一组 means 和 variances。
  3. 由训练数据 {x1, x2, ..., xm} 和假设的含参分布的 pdf 来计算 P_G(xi; θ)
  4. likelihood就定义为 ∏ P_G(xi; θ) ,一般会取对数
  5. 就用 gradient ascent 或者其他优化方法让这个 likelihood 最大
 

接下来,先放结论: maximum likelihood estimation 就等价于 minimize KL Divergence

把上面的对数似然函数写成积分形式可能看的清楚点,因为是要对 θ 取 argmax,所以在后面加上一个 θ 无关的项,不影响 argmax 计算。明显可以看出积分号里面是 P_data * log(P_G / P_data),能够得出结论:对 P_G 的最大似然估计,等价于最小化 P_data 和 P_G 的KL散度。
 
 
那问题就来了,怎么才能定义一个 general 的 P_G 呢?(因为如果很复杂、而且不知道 pdf 的明确的形式的话,对数似然函数没法计算)
 
定义一个 generator 作为生成 P_G 的方式(NN 隐式定义复杂概率分布的 pdf)。从一个很简单的先验(而且这个简单的先验分布具体是高斯还是别的,影响不大),映射成一个复杂的分布。

但是没法直接做,因为 P_G 和 P_data 的 pdf 的具体形式都是不知道的,就没法直接计算 divergence 然后 argmin。这个就是 GAN 解决的关键点。
  虽然不知道 P_G 和 P_data 的定义式,但是我们可以从这两个分布中 sample 数据出来(借助 NN 的拓扑结构):收集训练数据,就是从 P_G 分布 sample ;从先验分布 sample 然后经过 generator 得到G(z),就是从 P_data 分布 sample。

然后问题就剩下怎么计算这两个分布的 divergence ?—— 通过 discriminator。

也就是说,训练 discriminator :D* = argmax V(G, D) (仔细看看目标函数,这其实就是去训练一个 binary classifier 而已)
 
为什么这样就能最小化 P_G 和 P_data 的之间 divergence ?
 
先固定 G ,想要通过 D 来最大化 V(G, D)

重要假设是,D(x) 可以是任意函数(NN拟合的理想情况),那么对于某一个 x ,都可以找一个 D(x) 令 V(G, D) 最大。V 对 D 求梯度后令其为0,得到极大值点 D(x) = P_data(x) / ( P_data(x) + P_G(x) )

再把 D* 代入 V(G, D) 中,就得到了 maxD V(G, D) =  V(G, D*) 。然后把log里面的分母除以2,就能提出来两个 -log2

提出来常数项 -2log2 之后,可以发现后面剩下的部分就是两倍的JS散度。因为 JS散度定义为 JSD(P || Q) = KL(P || M) /2 = KL(Q || M) /2,其中 M = (P + Q) / 2

到这里就比较清楚了,接下来就要找一个 G ,最小化 JSD(P_data || P_G) 。举个例子,假设只有3个 G 可以选,那么先对每个固定的 G 找 V(G, D*),然后找一个 Gi 令 V(Gi, D*) 最小,下图所示显然应该选 G3。

对应 GAN 的训练过程,总结一下:

对于 G 的训练,就是要在固定刚才找到的最好的 D 之后,最小化 L(G, D)

这里有个疑问,L(G) 中有 max 函数,能够求梯度吗? —— 可以,分段求(回忆一下 maxout network)

还存在别的问题吗?

更新 G 那一步,会改变 V(例如下图固定 D0*,但更新G0 -> G可能导致 V(G, D0*) 变成另一个不同的函数,那么 D0* 就已经不是令 V(G, D) 最大的 D 了)。从 V(Gt, Dt*) 到 V(Gt+1, Dt*),而这个时候 L(G)可能已经不再是 V(Gt+1, Dt*),而是 V(Gt+1, Dt+1*)。 Dt* 不一定等于 Dt+1*,所以做法就是假设这两个值是近似的。
不要一次更新 G 太多,而应该尽量要把 D 训练到底,至少要找到一个local maxima。

回顾一下整个 GAN 的训练流程和实际做法:

这里面还有个技巧,实际上训练 G 的目标函数可以不跟上面的公式一模一样,因为原来的式子会导致起始的时候梯度很小、更新的会很慢

实际的训练过程中,真的会导致 D 最后训练得如下图所示吗(完全不能做判别)?

我自己觉得不会。。。因为实际的训练不会这么理想,本身就有太多假设和近似在里面。

GAN 的一般框架:fGAN

如何把不同的 f-divergence 应用到 GAN 中。 f-divergence 的定义:

满足一些性质:当 p(x) = q(x),D(P || Q) = 0;并且 D(P || Q) >= 0

一些常见的 f-divergence 和对应的 f 函数:

任意一个凸函数 f 都有一个共轭函数 f*,满足

求解方式如下图所示,穷举所有的 x,所有的直线 xt-f(x) 求包络线就行了

回到 D(P || Q) 的表达式,f 的自变量是 p(x) /q(x),代入。本来要穷举所有的 t 让后面的项最大,现在就找一个 D(更新 D 的参数),令 D(x) = t 使得后面的项最大。

其中,由于 D 的拟合能力有限,所以只能得到一个下界

所以,把积分写成对分布求期望

这就是把不同的 f-divergence 应用到 GAN 中的目标函数了

这样做是要解决什么问题? —— Mode Collapse、Mode Dropping

生成数据的模式太集中

Mode Collapse:

Mode Dropping:

这可能是散度的选择导致的,所以就多一些可能的 f-divergence 来选择,然后 ensemble 一下。(不过其实已经有更好的解决方案了)

GAN的理论 Theory behind GAN的更多相关文章

  1. GAN笔记——理论与实现

    GAN这一概念是由Ian Goodfellow于2014年提出,并迅速成为了非常火热的研究话题,GAN的变种更是有上千种,深度学习先驱之一的Yann LeCun就曾说,"GAN及其变种是数十 ...

  2. GAN实战笔记——第一章GAN简介

    GAN简介 一.什么是GAN GAN是一类由两个同时训练的模型组成的机器学习技术:一个是生成器,训练其生成伪数据:另一个是鉴别器,训练其从真实数据中识别伪数据. 生成(generative)一词预示着 ...

  3. (转) GAN论文整理

    本文转自:http://www.jianshu.com/p/2acb804dd811 GAN论文整理 作者 FinlayLiu 已关注 2016.11.09 13:21 字数 1551 阅读 1263 ...

  4. 生成式对抗网络(GAN)学习笔记

    图像识别和自然语言处理是目前应用极为广泛的AI技术,这些技术不管是速度还是准确度都已经达到了相当的高度,具体应用例如智能手机的人脸解锁.内置的语音助手.这些技术的实现和发展都离不开神经网络,可是传统的 ...

  5. [ZZ] Valse 2017 | 生成对抗网络(GAN)研究年度进展评述

    Valse 2017 | 生成对抗网络(GAN)研究年度进展评述 https://www.leiphone.com/news/201704/fcG0rTSZWqgI31eY.html?viewType ...

  6. 深度学习新星:GAN的基本原理、应用和走向

    深度学习新星:GAN的基本原理.应用和走向 (本文转自雷锋网,转载已获取授权,未经允许禁止转载)原文链接:http://www.leiphone.com/news/201701/Kq6FvnjgbKK ...

  7. [Deep-Learning-with-Python]GAN图片生成

    GAN 由Goodfellow等人于2014年引入的生成对抗网络(GAN)是用于学习图像潜在空间的VAE的替代方案.它们通过强制生成的图像在统计上几乎与真实图像几乎无法区分,从而能够生成相当逼真的合成 ...

  8. Generative Adversarial Nets(原生GAN学习)

    学习总结于国立台湾大学 :李宏毅老师 Author: Ian Goodfellow • Paper: https://arxiv.org/abs/1701.00160 • Video: https:/ ...

  9. [转]从头开始 GAN

    1 前言 GAN的火爆想必大家都很清楚了,各种GAN像雨后春笋一样冒出来,大家也都可以名正言顺的说脏话了[微笑脸].虽然目前GAN的酷炫应用还集中在图像生成上,但是GAN也已经拓展到NLP,Robot ...

随机推荐

  1. java实现邮箱发送信息--验证码的发送(163邮箱)

    1.maven环境 <!-- 发送邮件 --> <dependency> <groupId>javax.mail</groupId> <artif ...

  2. 力扣Leetcode 46. 全排列

    全排列 给定一个 没有重复 数字的序列,返回其所有可能的全排列. 示例: 输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], ...

  3. vue刷新数组

    困扰我两天的问题被一行代码解决了!!! 最近在做某个功能时用到了v-for,页面内容都是根据父页面传递过来的数组生成的,但是当我改变数组内容时页面不会跟着改变.这个问题足足困扰了我两天时间,最终下面的 ...

  4. 在vue项目中使用scss

    1.首先安装依赖 npm install node-sass sass-loader --save-dev 2.找到build中webpack.base.conf.js,在rules中添加scss规则 ...

  5. 【HttpRunner v3.x】笔记—7. 测试用例-teststeps-RunTestCase

    以前我在写接口自动化用例的时候,为了保证用例的独立性,需要在setUp里调用各种满足用例的一些前置条件,其中就不乏调用了其他测试用例中的方法. 而httprunner也是支持了这一项很重要的特性,通过 ...

  6. [BUUOJ记录] [ACTF2020 新生赛]Include

    本题主要考查了利用php://filter伪协议进行文件包含 进入题目根据Tip进入正题,可以看到URL中存在文件包含(题目名也很直接) 首先考虑 "php://input"伪协议 ...

  7. 剑指 Offer 49. 丑数

    题目描述 我们把只包含质因子 2.3 和 5 的数称作丑数(Ugly Number).求按从小到大的顺序的第 n 个丑数. 示例: 输入: n = 10 输出: 12 解释: 1, 2, 3, 4, ...

  8. nginx 配置下载text等文件

    当前的浏览器能够识别文件格式,如果浏览器本身能够解析就会默认打开,如果不能解析就会下载该文件.比如txt文件就直接被解析,还有其他文件也是一样. 在nginx.conf配置文件中添加 add_head ...

  9. Linux/Unix Terminal中文件/目录的颜色各代表什么意思?

    注意:console/terminal中文件目录的颜色设置是可以更改的,故环境不同颜色就可能不一样. 下面是我所用终端的颜色示例: 颜色说明: 白色:普通文件 紫色:目录 红色:有问题的链接文件 蓝绿 ...

  10. sublime3 激活

    起因 这段时间sublime一直抽风,每次打开都提示让我更新. 身为强迫症的我当然不能忍! 方法 关闭自动更新 点击菜单栏"Preferences"=> "Sett ...