李宏毅学习笔记34.GAN.05.fGAN: General Framework of GAN

简介

上节在讲原文GAN的时候,提到我们实际是在用Discriminator来衡量两个数据的分布之间的JS divergence,那能不能是其他类型的divergence来衡量真实数据和生成数据之间的差距?又如何进行衡量?(虽然在实作上用不同divergence结果没有很大差别)
公式输入请参考:在线Latex公式

f-divergence

任意的divergence都可以用来衡量真实数据和生成数据之间的差距,用f-divergence进行衡量的算法就叫fGAN。先来看看f-divergence的概念:
P P P and Q Q Q are two distributions. p ( x ) p(x) p(x) and q ( x ) q(x) q(x) are the probability of sampling x x x.
D f ( P ∣ ∣ Q ) = ∫ x q ( x ) f ( p ( x ) q ( x ) ) d x , f is convex,  f ( 1 ) = 0 D_f(P||Q)=\int_xq(x)f\left(\cfrac{p(x)}{q(x)}\right)dx,\text{f is convex, }f(1)=0 Df(PQ)=xq(x)f(q(x)p(x))dx,f is convex, f(1)=0
如果两个分布相同,那么f-divergence的值应该相等,我们来验证一下:
p ( x ) = q ( x )  for all  x p(x)=q(x) \text{ for all } x p(x)=q(x) for all x
D f ( P ∣ ∣ Q ) = ∫ x q ( x ) f ( p ( x ) q ( x ) ) d x = 0 D_f(P||Q)=\int_xq(x)f\left(\cfrac{p(x)}{q(x)}\right)dx=0 Df(PQ)=xq(x)f(q(x)p(x))dx=0
因为: p ( x ) q ( x ) = 1 , f ( 1 ) = 0 \cfrac{p(x)}{q(x)}=1,f(1)=0 q(x)p(x)=1,f(1)=0,所以divergence为0,是最小的f-divergence。证明如下:
Because f is convex,因此有(右边是左边的lower bound):
D f ( P ∣ ∣ Q ) = ∫ x q ( x ) f ( p ( x ) q ( x ) ) d x ≥ f ( ∫ x q ( x ) p ( x ) q ( x ) d x ) D_f(P||Q)=\int_xq(x)f\left(\cfrac{p(x)}{q(x)}\right)dx\ge f\left(\int_xq(x)\cfrac{p(x)}{q(x)}dx\right) Df(PQ)=xq(x)f(q(x)p(x))dxf(xq(x)q(x)p(x)dx)
f ( ∫ x q ( x ) p ( x ) q ( x ) d x ) = f ( ∫ x p ( x ) d x ) = f ( 1 ) = 0 f\left(\int_xq(x)\cfrac{p(x)}{q(x)}dx\right)=f\left(\int_xp(x)dx\right)=f(1)=0 f(xq(x)q(x)p(x)dx)=f(xp(x)dx)=f(1)=0
如果 f f f是不同的函数,就得到不同的divergence,例如: f ( x ) = x l o g x f(x)=xlogx f(x)=xlogx
D f ( P ∣ ∣ Q ) = ∫ x q ( x ) p ( x ) q ( x ) l o g ( p ( x ) q ( x ) ) d x = ∫ x p ( x ) l o g ( p ( x ) q ( x ) ) d x D_f(P||Q)=\int_xq(x)\cfrac{p(x)}{q(x)}log\left(\cfrac{p(x)}{q(x)}\right)dx\\ =\int_xp(x)log\left(\cfrac{p(x)}{q(x)}\right)dx Df(PQ)=xq(x)q(x)p(x)log(q(x)p(x))dx=xp(x)log(q(x)p(x))dx
这个是KL divergence。
例如: f ( x ) = − l o g x f(x)=-logx f(x)=logx
D f ( P ∣ ∣ Q ) = ∫ x q ( x ) ( − l o g ( p ( x ) q ( x ) ) ) d x = ∫ x q ( x ) l o g ( q ( x ) p ( x ) ) d x D_f(P||Q)=\int_xq(x)\left(-log\left(\cfrac{p(x)}{q(x)}\right)\right)dx\\ =\int_xq(x)log\left(\cfrac{q(x)}{p(x)}\right)dx Df(PQ)=xq(x)(log(q(x)p(x)))dx=xq(x)log(p(x)q(x))dx
这个是Reverse KL divergence。
例如: f ( x ) = ( x − 1 ) 2 f(x)=(x-1)^2 f(x)=(x1)2
D f ( P ∣ ∣ Q ) = ∫ x q ( x ) ( p ( x ) q ( x ) − 1 ) 2 d x = ∫ x ( p ( x ) − q ( x ) ) 2 q ( x ) d x D_f(P||Q)=\int_xq(x)\left(\cfrac{p(x)}{q(x)}-1\right)^2dx\\ =\int_x\cfrac{\left(p(x)-q(x)\right)^2}{q(x)}dx Df(PQ)=xq(x)(q(x)p(x)1)2dx=xq(x)(p(x)q(x))2dx
这个是Chi Square divergence。

Fenchel Conjugate

每一个 f f f凸函数都有一个Conjugate函数记为 f ∗ f^* f,公式如下:
f ∗ ( t ) = max x ∈ d o m ( f ) { x t − f ( x ) } f^*(t)=\underset{x\in dom(f)}{\text{max}}\{xt-f(x)\} f(t)=xdom(f)max{xtf(x)}
穷举所有的 t , x t,x t,x,然后找到能使得 x t − f ( x ) xt-f(x) xtf(x)最大的 t , x t,x t,x
比较笨的穷举法如下:
在这里插入图片描述
另外一种方法:函数 x t − f ( x ) xt-f(x) xtf(x)是直线,我们带不同的 x x x得到不同的直线,例如下面有三条直线:
在这里插入图片描述
然后找不同的t对应的最大值。(就是所有直线的upper bound)
在这里插入图片描述
上面的红线无论你如何画,最后都是convex的。
看例子,假设: f ( x ) = x l o g x f(x)=xlogx f(x)=xlogx,把 x = 0.1 , x = 1 , x = 10 x=0.1,x=1,x=10 x=0.1,x=1,x=10,图片如下:
在这里插入图片描述
红线最后接近
f ∗ ( t ) = e x p ( t − 1 ) f^*(t)=exp(t-1) f(t)=exp(t1)
下面是数学证明,假设 f ( x ) = x l o g x f(x)=xlogx f(x)=xlogx
则:
f ∗ ( t ) = max x ∈ d o m ( f ) { x t − f ( x ) } = max x ∈ d o m ( f ) { x t − x l o g x } (1) f^*(t)=\underset{x\in dom(f)}{\text{max}}\{xt-f(x)\}=\underset{x\in dom(f)}{\text{max}}\{xt-xlogx\}\tag1 f(t)=xdom(f)max{xtf(x)}=xdom(f)max{xtxlogx}(1)
令上式中 x t − x l o g x = g ( x ) , Given  t , find  x  maximizing  g ( x ) xt-xlogx=g(x)\text{, Given }t\text{, find }x\text{ maximizing }g(x) xtxlogx=g(x), Given t, find x maximizing g(x)
求极值,就是对 x x x求导数等于0:
g ′ ( x ) = t − l o g x − 1 = 0 x = e x p ( t − 1 ) g'(x)=t-logx-1=0\\ x=exp(t-1) g(x)=tlogx1=0x=exp(t1)
把上面内容代入公式(1):
f ∗ ( t ) = x t − x l o g x = e x p ( t − 1 ) × t − e x p ( t − 1 ) × ( t − 1 ) = e x p ( t − 1 ) f^*(t)=xt-xlogx=exp(t-1)\times t-exp(t-1)\times(t-1)=exp(t-1) f(t)=xtxlogx=exp(t1)×texp(t1)×(t1)=exp(t1)
一般化后:
( f ∗ ) ∗ = f (f^*)^*=f (f)=f
讲这么多,下面看下上面两节内容和GAN的关系

Connection with GAN

通过上面的推导我们知道 f ∗ ( t ) f^*(t) f(t) f ( x ) f(x) f(x)互为Conjugate,写为:
f ∗ ( t ) = max x ∈ d o m ( f ) { x t − f ( x ) } ← → f ( x ) = max t ∈ d o m ( f ∗ ) { x t − f ∗ ( t ) } f^*(t)=\underset{x\in dom(f)}{\text{max}}\{xt-f(x)\}\leftarrow\rightarrow f(x)=\underset{t\in dom(f^*)}{\text{max}}\{xt-f^*(t)\} f(t)=xdom(f)max{xtf(x)}f(x)=tdom(f)max{xtf(t)}
这两个相互Conjugate的convex的函数有什么特别?我们继续看。
D f ( P ∣ ∣ Q ) = ∫ x q ( x ) f ( p ( x ) q ( x ) ) d x = ∫ x q ( x ) ( max t ∈ d o m ( f ∗ ) { p ( x ) q ( x ) t − f ∗ ( t ) } ) d x D_f(P||Q)=\int_xq(x)f\left(\cfrac{p(x)}{q(x)}\right)dx\\ =\int_xq(x)\left(\underset{t\in dom(f^*)}{\text{max}}\left\{\cfrac{p(x)}{q(x)}t-f^*(t)\right\}\right)dx Df(PQ)=xq(x)f(q(x)p(x))dx=xq(x)(tdom(f)max{q(x)p(x)tf(t)})dx
我们用函数 D ( x ) D(x) D(x)代替 t t t,使得输入x,输出为t,使得上面{}中的值最大,替换后,就找到了 D f ( P ∣ ∣ Q ) D_f(P||Q) Df(PQ)的lower bound
D f ( P ∣ ∣ Q ) ≥ ∫ x q ( x ) ( p ( x ) q ( x ) D ( x ) − f ∗ ( D ( x ) ) ) d x = ∫ x p ( x ) D ( x ) d x − ∫ x q ( x ) f ∗ ( D ( x ) ) d x D_f(P||Q)\ge\int_xq(x)\left(\cfrac{p(x)}{q(x)}D(x)-f^*(D(x))\right)dx\\ =\int_xp(x)D(x)dx-\int_xq(x)f^*(D(x))dx Df(PQ)xq(x)(q(x)p(x)D(x)f(D(x)))dx=xp(x)D(x)dxxq(x)f(D(x))dx
当我们找的函数 D ( x ) D(x) D(x)是最好的,那么就可以逼近 D f ( P ∣ ∣ Q ) D_f(P||Q) Df(PQ)
D f ( P ∣ ∣ Q ) ≈ max D ∫ x p ( x ) D ( x ) d x − ∫ x q ( x ) f ∗ ( D ( x ) ) d x D_f(P||Q)\approx\underset{D}{\text{max}}\int_xp(x)D(x)dx-\int_xq(x)f^*(D(x))dx Df(PQ)Dmaxxp(x)D(x)dxxq(x)f(D(x))dx
积分可以写成期望值:
= max D { E x ∼ P [ D ( x ) ] − E x ∼ Q [ f ∗ ( D ( x ) ) ] } =\underset{D}{\text{max}}\{E_{x\sim P}[D(x)]-E_{x\sim Q}[f^*(D(x))]\} =Dmax{ExP[D(x)]ExQ[f(D(x))]}
接下来我们把 P = P d a t a , Q = P G P=P_{data},Q=P_G P=Pdata,Q=PG,则有:
D f ( P d a t a ∣ ∣ P G ) = max D { E x ∼ P d a t a [ D ( x ) ] − E x ∼ P G [ f ∗ ( D ( x ) ) ] } D_f(P_{data}||P_G)=\underset{D}{\text{max}}\{E_{x\sim P_{data}}[D(x)]-E_{x\sim P_G}[f^*(D(x))]\} Df(PdataPG)=Dmax{ExPdata[D(x)]ExPG[f(D(x))]}
把上面的式子可以带回求Generator的公式:
G ∗ = a r g min G D f ( P d a t a ∣ ∣ P G ) = a r g min G max D { E x ∼ P d a t a [ D ( x ) ] − E x ∼ P G [ f ∗ ( D ( x ) ) ] } = a r g min G max D V ( G , D ) \begin{aligned}G^* &=arg\underset{G}{\text{min}}D_f(P_{data}||P_G)\\ &=arg\underset{G}{\text{min}}\underset{D}{\text{max}}\{E_{x\sim P_{data}}[D(x)]-E_{x\sim P_G}[f^*(D(x))]\}\\ &=arg\underset{G}{\text{min}}\underset{D}{\text{max}}V(G,D)\end{aligned} G=argGminDf(PdataPG)=argGminDmax{ExPdata[D(x)]ExPG[f(D(x))]}=argGminDmaxV(G,D)
也就是说我们可以优化不同的divergence(https://arxiv.org/pdf/1606.00709.pdf)
在这里插入图片描述
在这里插入图片描述
可以用来解决Mode Collapse

Mode Collapse

当我们的GAN模型Training with too many iterations……
有些人脸就会比较像,除了一些颜色不太一样
在这里插入图片描述

从数学上说就是我们的生成对象的分布越来越小了
在这里插入图片描述

Mode Dropping

就是真实数据有两簇或者多簇,但是生成数据只能生成其中一簇:
在这里插入图片描述
例如下面的人脸,一个循环只有白种人,一个循环只有黄种人,一个循环中只有黑人。
在这里插入图片描述

问题分析

传统的做法类似MLE实际上是最小化KL divergence,可以看到生成数据的分布是在真实数据中间,这也是为什么真实数据这么模糊
在这里插入图片描述
如果换成Reverse KL Divergence:
在这里插入图片描述
可以看到解决了模糊的问题,但是会出现Mode Dropping的问题。
因此选择不同的divergence对于GAN很重要。

解决Mode Collapse

Unsemble:训练多个generator,然后随机调一个generator来生成图片,这样结果就会比较diverse。
Train a set of generators: { G 1 , G 2 , … , G N } \{G_1,G_2,…,G_N\} {G1,G2,,GN}
To generate an image Random pick a generator G i G_i Gi. Use G i G_i Gi generate the image.
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

oldmao_2000

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值