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

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. 洛谷P2480 [SDOI2010]古代猪文(费马小定理,卢卡斯定理,中国剩余定理,线性筛)

    洛谷题目传送门 蒟蒻惊叹于一道小小的数论题竟能涉及这么多知识点!不过,掌握了这些知识点,拿下这道题也并非难事. 题意一行就能写下来: 给定\(N,G\),求\(G^{\sum \limits _{d| ...

  2. Codeforces Round #487 (Div. 2) E. A Trance of Nightfall (矩阵优化)

    题意 有一个平面 , 给你 \(n\) 个点构成一个点集 \(S\) , 一开始可以选择一个平面上任意点 \(P\) . 存在一种操作 : 1 选择一条至少 通过 \(S\) 中任意两个点以及 \(P ...

  3. android限制横竖屏切换 方法

    在需要限制横竖屏切换的时候,只需要在AndroidManifest.xml文件中加入android:screenOrientation属性限制. android:screenOrientation=& ...

  4. 51Nod 1048 1383 整数分解为2的幂

    任何正整数都能分解成2的幂,给定整数N,求N的此类划分方法的数量! 比如N = 7时,共有6种划分方法.   7=1+1+1+1+1+1+1   =1+1+1+1+1+2   =1+1+1+2+2   ...

  5. 初探typescript

    学习任何知识都不是一蹴而就的.typescript也是如此.今天我们来初步的了解一下typescript的安装与编译.以及基础的语法知识. 第一步:安装ts 第二步:在安装好的文件夹里面,写上ts文件 ...

  6. Linux追加文件内容并在内容前加上该文件名(awk, FILENAME功能妙用)

    假如有三个文件file1.txt,file2.txt,file3.txt 每一个文件内容如下: 现在打算提取每一个文件字符为16的行,打印该行所有的内容.以及该文件名,并追加到file4.txt,则可 ...

  7. Struts2的安装

    安装Struts 2 ,并开发一个简单 Model 1.下载Struts 2 在Struts 2 官网下载:http://struts.apache.org ,下载 struts-2.3.16.3-a ...

  8. 线程的加入.join()

    格式:以加入A线程为例 线程对象B.join()   无参数,则A线程一直暂停,直到B线程运行结束. 线程对象B.join(时间t)   有参数,则A线程每隔t时间暂停一次,直到B线程运行结束. 关于 ...

  9. 浅谈python函数签名

    函数签名对象,表示调用函数的方式,即定义了函数的输入和输出. 在Python中,可以使用标准库inspect的一些方法或类,来操作或创建函数签名. 获取函数签名及参数 使用标准库的signature方 ...

  10. Docker mysql主主互备和高可用

    一.测试环境 1.1 结构图 1.2 版本 操作系统:CentOS 7.3 MySQL版本:5.6.35 Docker版本:18.06.1-ce 使用root用户操作 IP地址说明 IP地址 用途 备 ...