f-GAN

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

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:

 

 

 

posted @ 2018-02-27 16:06  三年一梦  阅读(2143)  评论(0编辑  收藏  举报