上两篇博文介绍和总结了
Generative Adversarial Network
的原始版本以及改进后的版本
f−GAN
,本篇博文将详细总结
WGAN
Earth Mover Distance
在
original GAN
中,我们采用
Jensen−Shannon divergence
来衡量两种分布之间的拟合程度,在
f−GAN
中我们可以采用
any f−divergence
来衡量不同分布之间的拟合程度,那么在
WGAN
中呢?
WGAN
中采取一种叫做
Earth Mover′s Distance
方式来衡量两种分布的拟合程度。
简单来说,假设有两种不同的分布分别为
P、Q
,将
P
移动
Q
的位置与
Q
重合所移动的最小平均距离即为
Earth Mover′s Distance
。如下图:
显然对于不同的移动方式(
move plan
),其移动距离是不一样的,例如下图:
那么存在多种
move plans
的情况下,如何定义上面的平均距离
average move plan
呢?
对于所有可能的
moving plans
,也即是
all possible move plans Π
,
γ
表示某一种
move plan
,
xp、xq
分布表示
P、Q
分布中某一个区间的概率。那么对于
plan γ
的平均移动距离即为:
B(γ) = ∑xp,xqγ(xp,xq)∥∥xp−xq∥∥
其中
γ(xp,xq)
表示移动的量。
那么
Earth Mover′s Distance
即为:
W(P,Q)=minγ∈Π B(γ)
那么使用
Earth Mover′s Distance
有什么好处呢?
显然相对于使用
Jensen−Shannon divergence
,
Earth Mover′s Distance
能检测到两种分布拟合程度,即使是在没有重合的情况下,那么在
use gradient descent minmize Earth Mover′s Distance
时就有动力更新
G
。
Original version (weight clipping)
论文:
Martin Arjovsky,Soumith Chintala,Lé on Bottou,Wasserstein GAN,arXiv prepring,2017
推导过程
那么上面所说的
Earth Mover′s Distance
的具体数学公式是什么呢?在
WGAN
的论文里面是这样定义的:
W(Pdata,PG)=maxD∈1−Lipschitz{Ex∼Pdata[D(x)]−Ex∼PG[D(x)]}
这里需要介绍下
Lipschitz Function
:
我们可以这样理解:在
maximize W(Pdata,PG)
,如果不加
D∈1−Lipschitzmax
条件时,那么岂不是
Ex∼Pdata[D(x)]→+∞
,
Ex∼PG[D(x)]→−∞
,所以有必要加上这个条件,而这个条件的意义就是希望
D
在
Pdata、PG
相差不要太大,不要变化太大太快。
那么当
k=1
时有:
相比在
original gan
中,其
Discriminator
是一个二元分类器,输出时加了
sigmoid
函数(因为有
log
),则其
D(x)
图像可能如下:
蓝色线条表示
Pdata
,橙色线条表示
PG
,
D
在
Pdata
处可能为
1
,在
PG
处可能为
0
,并且在两端非常平滑,不易反向更新
G
。那么如果采取
W(Pdata,PG)
,会有什么样的结果呢?
上图的绿色的直线就是可能的
D(x) for WGAN
,因为其输出不需要加上
sigmoid
函数,在
Pdata、PG
出斜率比较大,不容易产生
gradient vanish 或gradient explod
现象。
接下来的问题是如何得到下式的最优解,假如没有加
max
条件的话,我们可以直接利用
gradient descent
来求
D
的最优解的近似解,但是前面加了现在条件时
How to use gradient descent to optimize?
W(Pdata,PG)=maxD∈1−Lipschitz{Ex∼Pdata[D(x)]−Ex∼PG[D(x)]}
WGAN
的原始论文中采用了一种叫做
weight clipping
的方法,简单来说就是限制
D
的
weight w
在
[−c,c]
之间,也就是在更新参数时,始终做如下操作:
if w>c,then w=c; if w<−c, then w=−c
weight clipping
做法的意义也就是保证
D
输出的变化在一定范围之内,在进行这种操作以后,我们仅仅能保证:
∥D(x1)−D(x2)∥≤K∥x1−x2∥ for some K
这个时候有
D∈K−Lipschitz
,
WGAN
论文中说相应的有:
此时已经把条件放宽到
K−Lipschitz
,也就是做
weight clipping
后可以保证满足
D∈K−Lipschitz
,但是这样做不能保证真的最大化了
Ex∼Pdata[D(x)]−Ex∼PG[D(x)]
,并且可能
weight
参数
w
不在
[−c,c]
之间也可能会满足上面
D∈K−Lipschitz
条件。
来看看做了
weight clipping
后有什么好处?
如上图,如果在更新
D
没有做
weight clipping
,则
D
会对
Pdata
赋予越来越大的值,对
PG
赋予越来越小的值,这样
train
的话没办法停止,就是
train
飞了。所以一定要
clipping
,如果
Discriminator
是一条直线的话,就限制了直线的斜率。
算法总结
Improved version (gradient penalty)
论文:
Ishaan Gulrajani,Faruk Ahmed,Martin Arjovsky,Vincent Dumoulin,Aaron Courville,“Improved Training of Wasserstein GANs”,arXiv prepring,2017
由上面的推导总结已经可知:
W(Pdata,PG)=maxD∈1−Lipschitz{Ex∼Pdata[D(x)]−Ex∼PG[D(x)]}
因为
D∈1−Lipschitz
,所以可得:
上式的意思就是对于任意的
x
,
∥▿xD(x)∥
表示
D
的
input
对
output
的
gradient
都小于
1
。
有了这个约束条件,我们可以利用以前学习的给
object function
添加惩罚项的思路,可以去掉
D∈1−Lipschitz
,而去添加一个惩罚项,如下:
由上式,当
∥▿xD(x)∥≤1
,则惩罚项对
W
的影响为
0
,当
∥▿xD(x)∥>1
时,才会对
W
产生影响。所以加上这样的一个惩罚项以后,更容易产生符合
∥▿xD(x)∥≤1
的
D
。
但是在实做的时候不可能对所有的
x
做:
∫xmax(0,∥∥▽xD(x)−1∥∥)
只能可能是从某一个
uniform distribution
内
sample
出一些
x
。
但实际上,在
Improved WGAN
的论文中,这个
Ppenalty
并不是一个
uniform distribution
,而是如下图
sample
:
就是每次从
Pdata
中
sample
一个点,从
PG
中
sample
有个点,然后将其连成一条直线,从这条直线上再次
sample
一个点,作为从
Ppenalty
中
sample
的点。
那么为什么这么做呢?论文中只是说这样做的效果比较好。
可以更进一步的思考,
WGAN
的核心就是围绕着
D∈1−Lipschitz
这个条件进行,无论是
weight clipping
还是加惩罚项,目的都是不希望
D
的输出在某一个范围内,也即是:
∥D(x1)−D(x2)∥≤∥x1−x2∥
那么这个时候
∥▿xD(x)∥≤1
,在上面加惩罚项时,当
∥▿xD(x)∥≤1
无
penalty
,反之有。我们希望更新的
D
在
pdata
上面有较高的值,相反在
PG
上有较低的值,两者相差越大越好,说明这时
D
能很好的分辨,但是有不能相差太大,相差太大的话就会
train
飞了,既然如此,我们何不直接使得
∥▿xD(x)∥==1
呢?这样
update
出来的
D
岂不是更好?所以
W(pdata,PG)
有了如下改进: