学习总结于国立台湾大学 :李宏毅老师

f-GAN: Training Generative Neural Samplers using Variational Divergence Minimization

本文Outline

一句话介绍f-GAN: you can use any f-divergence

一.  回顾GAN的basic idea:

我们想要machine生成的target distribution: Pdata(x)  ,如下图蓝色区域的分布。图中的蓝色区域里面为Pdata(x)值为高的部分,即sample出的图片看起来很好,蓝色区域外sample出来的看起来很模糊。

                    

那怎么做?要找到一个generator,即为NN, 这个网络就定义了一个probability distribution。此时generator的输入为一个分布:normal distribution, 输出就是另外一个distribution。而这个输出一般是很复杂的分布,可能是叫不上名字的分布(例如高斯混合分布等),毕竟是经过了NN。那我们的任务就是调整generator的参数使得生成的分布PG(x)尽可能接近真实的分布 Pdata(x) 。

上图操作的难点在于难以计算出PG(x), 就说给定x,无法算出PG(x)是多少,如果可以算出PG(x)是多少,就可以maxmize likelihood。所以给你已有的data,无法算出data的likelihood是多少,唯一能做的是从原始data中sample。

Basic Idea of GAN

         

直观解释generator和discriminator在迭代过程中做了什么?

蓝色的点代表此时的generator画出的图,绿色的点为真实的数据分布,蓝线和绿线分别表示generator和data的distribution。红线为discriminator。那discriminator就是让绿点进入discriminator的输出为1, 蓝色输出为0,所以如果你训练了一个discriminator它应该长这个样子:

             

生成器又希望蓝线可以移向绿线                                  但调参G可能又使得移动过多, D又有新的判断

                      

G,D反复更新                                               完全重合时,D无法判别只能都是输出一样的值

实际为高维问题,远比二维复杂。

GAN的基本算法:

二. GAN的Unified Framework

什么是f-divergenceFenchel Conjugate,然后 Connect to GAN

1. f-divergence

f-divergence论文讲到之前的discriminator和JS-divergence有关,但是可以设计你的discriminator让它跟任何的f-divergence有关。

什么是f-divergence?  f可以为很多不同的function,但必须满足(f is convex, f(1) = 0):

假设P, Q为两个分布,p(x)和q(x)为sample x的概率(the probability of sampling x)。

f-divergence为大于等于0的数,当P和Q完全一样的分布时,Df(P||Q)取到最小值0.否则为正数。  证明如下:

f-divergence栗子:

  • f = xlogx 为 KL-divergence:   
  • f = -logx 为Reverse KL-divergence:  
  • f = (x-1) 为Chi Squzre:  

2. Fenchel Conjugate

每个凸函数f有一个conjugate function f*:

x不同的取值得到不同的直线,横坐标对应不同的t值取所有与直线中取值最大的值,这个操作就得到了红色的线,是个凸函数f*(t)

Fenchel Conjugate 栗子: 取x为0.1、1、10....

上图看起来像exp指数函数吧,事实上当f(x) = xlogx时, f*(t)就是指数函数exp(t-1)  !!! 这个过程怎么算的呢?

很简单,令g(x) = xt- xlogx, 就是给定t,找一个x使得g(x)最大。所以对g(x)微分: t - logx -1 = 0 得到:x = exp(t-1)  带回原式得到f得共轭f*

3.  Connection with GAN

前提了解了 f 与它的共轭好朋友的互推关系:

现在将Df(P||Q)中的 f 带入上式:

上式怎么得出的?假设有个函数叫D, 为一个function,它的输入为x,输出为t。 注意原式中的max{ }一项中为给定一个x找到一个t使得式子最大值,那么这个D为任意一个函数,所以它的输出应是个下界lower bound,所以可以用D来代替t,从而得到了下界:

所以这里的f-divergence有个近似,即找一个D使得式子  最大:

把P、Q代替后有:

算期望值可以利用sample来近似,要找一个PG 和Pdata越相近越好就是解下面这个式子:找一个G来最小化divergence

所以这就推出了原生GAN的优化目标: 

原生GAN论文实现:double-loop algorithm:

f-GAN论文实现:Single -step:

注意G、D的update方向不一样。f-GAN论文中列出了各式各样的f-divergence:

 

f-GAN的更多相关文章

  1. PLSQL_通过UTL_MAIL发送并发程式结果报表至用户邮箱(案例)

    2014-06-01 Created By BaoXinjian

  2. Mysql_以案例为基准之查询

    查询数据操作

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

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

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

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

  5. GAN 转

    生成式对抗网络(GAN)是近年来大热的深度学习模型.最近正好有空看了这方面的一些论文,跑了一个GAN的代码,于是写了这篇文章来介绍一下GAN. 本文主要分为三个部分: 介绍原始的GAN的原理 同样非常 ...

  6. 生成式模型之 GAN

    生成对抗网络(Generative Adversarial Networks,GANs),由2014年还在蒙特利尔读博士的Ian Goodfellow引入深度学习领域.2016年,GANs热潮席卷AI ...

  7. 深度学习之 GAN 进行 mnist 图片的生成

    深度学习之 GAN 进行 mnist 图片的生成 mport numpy as np import os import codecs import torch from PIL import Imag ...

  8. 【深度学习】--GAN从入门到初始

    一.前述 GAN,生成对抗网络,在2016年基本火爆深度学习,所有有必要学习一下.生成对抗网络直观的应用可以帮我们生成数据,图片. 二.具体 1.生活案例 比如假设真钱 r 坏人定义为G  我们通过 ...

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

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

  10. 论文笔记:Towards Diverse and Natural Image Descriptions via a Conditional GAN

    论文笔记:Towards Diverse and Natural Image Descriptions via a Conditional GAN ICCV 2017 Paper: http://op ...

随机推荐

  1. DHCP的原理和实现过程

    在DHCP过程中有两个对象DHCP客户端和DHCP服务端,而且DHCP在三层是通过可靠地TCP协议实现,DHCP服务运行在67和68端口. DHCP实现的简单过程,如图1所示, 图1 文字描述: 1. ...

  2. Arch Linux中通过AUR安装Redis Desktop Manager失败

    笔者在安装Redis Desktop Manager时出现了Failed to connect to chromium.googlesource.com port 443: Connection ti ...

  3. arm裸机通过uboot运行hello world程序测试结果

    开发板EasyARM i.MX280A CPU:arm926ejs helloworld程序使用的编译器 (1)arm-fsl-linux-gnueabi-gcc  version gcc4.4.4 ...

  4. java中BorderLayout的使用方法

    相关设置: 使用BorderLayout布局上下左右中布局5个按键,单击中间的那个按键时就关闭窗口 代码: /**** *java中BorderLayout的使用方法 * 使用BorderLayout ...

  5. wget一个网站很慢的原因

    今天wget一个网站时,发现很慢: # wget www.baidu.com ---- ::-- http://www.baidu.com/ Resolving www.baidu.com... 14 ...

  6. mac 本上对 rar 压缩包解压

    以前从晚上各种找软件对 xxx.rar 压缩包文件进行解压,也确实找到过那么几个,要不是不好用就是解压完有乱码,很是头疼. 这次又遇到这样的问题,于是下定决心将这个问题彻底解决好,经过验证,总结一下最 ...

  7. .net MVC使用NPOI读取Excel模板,再写入数据

    NPOI其实已经介绍的差不多了,再贴一个方便以后复制粘贴. 亮点其实是 Server.MapPath 这个东西,可以找到MVC工程下的文件夹,找路径还是很方便的. /// <summary> ...

  8. 学习windows编程 day1

    #include <windows.h> #include <strsafe.h> /* 任务:去掉标题栏和边框 */ //#define LineHeight 15 这是自己 ...

  9. 查看windows下指定的端口是否开放

    有时候会出现ip  ping的通   但是就是连接不上的情况.这时候我们需要检测一下这个端口是否被开放 netstat -ano -p tcp | find >nul && ec ...

  10. Easyui和IE浏览器的兼容问题

    现在Easyui版本已经更新到1.3.4,今天下载最新的版本,同时下载了IETestert软件,分别模拟IE浏览器5.5,6.0,7.0,8.0和9.0的环境进行测试. Easyui1.3.3与1.3 ...