对GAN的理解还停留在一些警察抓小偷之类的层次,当自己想去独立写一个的时候发现自己对这块了解地非常肤浅。本文综合网上各种参考资料和论文,记录在本博客中,以促进自己的理解,不过自己想要想真正理解里面的内容,还是得对数学有系统的学习,不然只是生硬地知道这个公式这个定理,而不能形象理解,过三五个礼拜就忘了。还未写完
1 基础概念
1.1 Cross Entropy
熵最好理解为不确定性的量度而不是确定性的量度,因为越随机的信源的熵越大。这里的想法是,比较不可能发生的事情,当它发生了,会提供更多的信息
离散下,熵的公式可以表示成
H
(
X
)
=
−
∑
i
p
(
x
i
)
l
o
g
b
p
(
x
i
)
(1.1)
H(X)=-\sum_{i}p(x_i)log_b\ p(x_i) \tag{1.1}
H(X)=−i∑p(xi)logb p(xi)(1.1)
在这里b是对数所使用的底,通常是2,e或者10。当b时2的时候,熵的单位是bit, e的时候是nat,而当b=10,熵的单位是Hart。
交叉熵的定义如下
H
(
p
,
q
)
=
−
∑
x
p
(
x
)
l
o
g
q
(
x
)
(1.2)
H(p,q)=-\sum_xp(x)log\ q(x) \tag{1.2}
H(p,q)=−x∑p(x)log q(x)(1.2)
其中x是他们的支撑集(支撑集(support)其实就是函数的非零部分子集,比如ReLU函数的支撑集就是$(0,\infty) $一个概率分布的支撑集就是所有概率密度非零部分的集合)。在信息论中,基于相同事件测度的两个概率分布p和q的交叉熵是指,当基于一个”非自然“(相对于”真实“分布p而言)的概率分布q进行编码时,在事件集合中唯一标识一个事件所需的平均比特数。如果两个概率分布一致,所需的比特数为0
对于一个有m个样本的二分类任务,交叉熵损失可以定义成,
L
o
s
s
(
θ
)
=
−
∑
i
=
1
m
y
i
l
o
g
(
p
θ
(
x
i
)
)
+
(
1
−
y
i
)
l
o
g
(
(
1
−
p
θ
(
x
i
)
)
)
(1.3)
Loss(\theta) = -\sum_{i=1}^my_ilog(p_\theta(x_i))+(1-y_i)log((1-p_\theta(x_i))) \tag{1.3}
Loss(θ)=−i=1∑myilog(pθ(xi))+(1−yi)log((1−pθ(xi)))(1.3)
其中y是样本的标签,p是模型的预测值,$\theta $是模型的参数
对交叉熵损失函数求导得到
∂
L
θ
=
1
m
∑
i
=
1
m
(
p
θ
−
y
i
)
x
i
(1.4)
\frac{\partial L}{\theta}=\frac{1}{m}\sum_{i=1}^m(p_\theta-y_i)x_i \tag{1.4}
θ∂L=m1i=1∑m(pθ−yi)xi(1.4)
可以看到当模型预测跟样本标签一致时,梯度为0,其他时候都会有值
为什么在分类任务中使用交叉熵损失,这是因为交叉熵跟接下来要介绍的评价两个分布一致性的KL散度有着紧密联系
1.2 KL 散度
KL散度一般用来评价两个分布的距离,定义成
D
K
L
(
p
∣
∣
q
)
=
∑
i
p
(
x
i
)
l
o
g
p
(
x
i
)
q
(
x
i
)
=
∑
i
p
(
x
i
)
l
o
g
p
(
x
i
)
−
p
(
x
i
)
l
o
g
q
(
x
i
)
(1.5)
D_{KL}(p||q)=\sum_ip(x_i)log\frac{p(x_i)}{q(x_i)}=\sum_ip(x_i)log\ p(x_i)-p(x_i)log\ q(x_i) \tag{1.5}
DKL(p∣∣q)=i∑p(xi)logq(xi)p(xi)=i∑p(xi)log p(xi)−p(xi)log q(xi)(1.5)
最为人熟知的特性是不对称性,即 D K L ( p ∣ ∣ q ) ≠ D K L ( q ∣ ∣ p ) D_{KL}(p||q)\neq D_{KL}(q||p) DKL(p∣∣q)=DKL(q∣∣p)
观察上面的公式可以看出即两个分部,左边部分是p的熵,右边是p和q的交叉熵。而在机器学习里,p如果用来代表训练集的分布,那么它的熵是固定的,因此在这个场景下,最小化KL距离等价于最小化交叉熵,而交叉熵的计算比KL简便,因此采用交叉熵的方式来训练。
我们下面展示一个具体的例子,令
p
∼
N
(
0
,
1
)
,
q
∼
N
(
μ
,
2
)
p\sim \mathbb{N} (0,1), q\sim \mathbb{N}(\mu,2)
p∼N(0,1),q∼N(μ,2)
我们以离散形式只取定义域为区间[-10,10],并将他们的和放大成1以符合概率分布的要求
现在来感受下当移动
μ
\mu
μ时KL(p||q)和KL(q||p)的距离
1.3 JSD 散度(Jensen-Shanno)
上面提到了KL散度是是不对称的,为了达到对称性,JSD散度被提出,它的定义是
J
S
(
p
∣
∣
q
)
=
1
2
K
L
(
p
∣
∣
p
+
q
2
)
+
1
2
K
L
(
q
∣
∣
p
+
q
2
)
(1.6)
JS(p||q)=\frac{1}{2}KL(p||\frac{p+q}{2})+\frac{1}{2}KL(q||\frac{p+q}{2}) \tag{1.6}
JS(p∣∣q)=21KL(p∣∣2p+q)+21KL(q∣∣2p+q)(1.6)
需要在这里强调的是,如果p和q的支撑集不重叠,那么他们的KL散度值没有意义,而JS散度值是个常量
这里只显示一条线的原因是因为两条线重叠了,JSD距离跟KL不同,它是对称的。对于两个分布,它的取值范围在[0,1]之间
1.4 Wasserstein 距离
又叫Earth-Mover(推土机距离),相对于KL和JSD,它在p和q没有支撑集的时候也有意义,它特 是一种用于描述两个多维分布之间相似度的度量。所谓推土机距离,就和 “推土机” 稍微有点联系。如果将分布看做空间中泥土的分布,那么这两个分布间的距离就是将这些泥土从一个分布改变到另一个分布所需要消耗的最小能量。这里的能量是泥土重量 (权值) 和移动距离的乘积
W
(
p
,
q
)
=
i
n
f
γ
∼
π
(
p
,
q
)
E
(
x
,
y
)
∼
γ
(
∥
x
−
y
∥
)
(1.7)
W(p,q) = inf_{\gamma\sim}\pi(p,q)E_{(x,y)\sim\gamma}(\|x-y\|) \tag{1.7}
W(p,q)=infγ∼π(p,q)E(x,y)∼γ(∥x−y∥)(1.7)
严格一点定义,
π
(
p
,
q
)
\pi(p,q)
π(p,q)是p和q分布组合起来所有可能的联合分布的集合。
inf
\inf
inf是下确解(可以临时理解成min),直观上可以把
E
(
x
,
y
)
∼
γ
(
∥
x
−
y
∥
)
E_{(x,y)\sim\gamma}(\|x-y\|)
E(x,y)∼γ(∥x−y∥)理解为在
γ
\gamma
γ这个路径规划下把土堆p挪到土堆q所需要的消耗。而Wasserstein距离就是在最优路径规划下的最小消耗, 以下图片摘自李宏毅老师的课件
1.5 F-Divergence
D f ( p ∣ ∣ q ) = ∑ q ( x ) f ( p ( x ) q ( x ) ) D_f(p||q)=\sum q(x)f(\frac{p(x)}{q(x)}) Df(p∣∣q)=∑q(x)f(q(x)p(x))
其中f是凸函数,f(1)=0,两个条件可以保证f-divergence最低是0.
当p=q的时候,很好证明f-divergence是0
D
f
(
p
∣
∣
q
)
=
∑
q
(
x
)
f
(
p
(
x
)
q
(
x
)
)
≥
f
(
∑
q
(
x
)
p
(
x
)
q
(
x
)
)
=
f
(
1
)
=
f
(
0
)
D_f(p||q)=\sum q(x)f(\frac{p(x)}{q(x)}) \geq f(\sum q(x)\frac{p(x)}{q(x)})=f(1)=f(0)
Df(p∣∣q)=∑q(x)f(q(x)p(x))≥f(∑q(x)q(x)p(x))=f(1)=f(0)
当f=xlogx时是KL divergence
1.6 Fenchel Conjugate
对于任何一个凸函数,都有一个fenchel共轭函数,它也是一个凸函数
f
∗
(
t
)
=
m
a
x
x
∈
d
o
m
(
f
)
{
x
t
−
f
(
x
)
}
f^*(t) = \mathop{max}\limits_{x\in dom(f)} \{xt-f(x)\}
f∗(t)=x∈dom(f)max{xt−f(x)}
( f ∗ ) ∗ = f (f^*)^*=f (f∗)∗=f
以下图片摘自李宏毅老师的课件
1.7 K-lipschitz 连续性
一个实值函数是k-lipschitz ,只需要存在一个正整数K使得
∣
f
(
x
1
)
−
f
(
x
2
)
∣
≤
K
∣
x
1
−
x
2
∣
|f(x_1)-f(x_2)|\le K|x_1-x_2|
∣f(x1)−f(x2)∣≤K∣x1−x2∣
1.8 VAE
如果让我去做一个生成人脸的网络,我的思路的步骤是这样的
- 类似分割的方式,输入是一张图片,输出也是一张图片,用L2的loss训练
它的问题是输入的图片是什么?
- 既然输入不能是图片,那我就输入一个随机噪声
它的问题是对于一个随机的噪声我怎么确定它的输出是什么?
- 那我就采用自编码器的输入,将一个真实的人脸图片先提取latent code,然后利用latent code再去生成那张人脸
它的问题是当我想生成一张不真实存在的人脸照片时,我的latent code怎么生成?
- 那我们就对latent code做些约束好了,比如让它服从高斯分布好了,可以用KL距离去监督
其实刚刚的思路有很多问题,其实类似一个Variational Auto-Encoder(VAE)的过程,但是核心的东西有比较大的区别在于第四步。 VAE并不直接用latent code去生成,而是每个latent code代表一个高斯分布的参数,然后再从这个分布中去采样。个人对器约束的KL不是特别理解, vae是对每个VAE的分布做约束,我比较好奇的是为什么不是对所有的样本的分布做KL约束。
其实 VAE提出的时间比GAN稍微早出来一些,但为什么VAE没有像GAN一样这么流行。根据俞杨老师的说明,VAE去判断生成结果质量的时候还是用point-wise比如l2的loss,一个典型的特征就是pointwise loss常常会脱离数据流形面,因此看起来生成的图片会模糊。 流形(manifold)是高维空间中曲线、曲面概念的拓广,我们可以在低维上直观理解这个概念,比如我们说三维空间中的一个曲面是一个二维流形,因为它的本质维度(intrinsic dimension)只有2,一个点在这个二维流形上移动只有两个方向的自由度。同理,三维空间或者二维空间中的一条曲线都是一个一维流形。)
2 Divergence 框架
2.1 min-max GAN( saturating loss)
那GAN怎么去评价生成质量的好坏,主要核心思路是引入了一个区别器来进行博弈。区别器能区分出真图片和假图片,而GAN的生成器要能让区别器分辨不出来。但是博弈不是怎么好控制的,如果一方过强,比如区分器过强,那就跟让普通民众跟泰森打架一样,对两者都不好,民众有很大的挫败感,而泰森有可能丧失斗志而不再提升。最好的博弈应该类似于梅西和C罗,两人不相上下,在相互的竞争中各自成长。当然这种平衡在GAN的训练中很难把握,导致了GAN难已训练的问题。
数学一点的讲法是,我们有个生成器G,然后还有一个区别器D,假设G的输入是z。那么D的任务是区分从真实采样的数据x和生成器输出的G(z), 而相反G的任务就是让D分辨不出来两者的区别,综合一下就是
m
i
n
G
m
a
x
D
V
(
D
,
G
)
=
E
x
∼
p
d
a
t
a
(
x
)
[
log
D
(
x
)
]
+
E
z
∼
p
z
[
log
(
1
−
D
(
G
(
z
)
)
]
(2.1)
min_{G}max_{D}V(D,G)=\mathbb{E}_{x\sim p_{data(x)}}[\log D(x)]+\mathbb{E}_{z\sim p_{z}}[\log(1-D(G(z))] \tag{2.1}
minGmaxDV(D,G)=Ex∼pdata(x)[logD(x)]+Ez∼pz[log(1−D(G(z))](2.1)
观察公式加法的左右两个部分,其实就是交叉熵的损失。
整个训练的流程如下
一个小细节就是这里会多次训练D以满足公式中max操作,但是实际中很多时候只用1次,在后面的论文中会有分析
2.2 non-saturating loss
论文观察到上面的loss会有梯度消失的问题,还提出了将生成器的目标修改成maximize
l
o
g
(
D
(
G
)
)
log(D(G))
log(D(G)),也就是
m
i
n
i
m
i
z
e
−
l
o
g
(
D
(
G
)
)
minimize-log(D(G))
minimize−log(D(G))
2.3 loss跟KL JSD散度的关系
进一步地,我们希望揭示不同的loss跟距离的关系,可以让我们在更高层面理解这个问题。
我们先看一下在一个确定的生成器G情况下,最优的判别器是个什么样子,对于特定的一个样本x,根据公式2.1, 它对loss的贡献是
p
d
a
t
a
(
x
)
log
D
(
x
)
+
p
g
(
x
)
log
(
1
−
D
(
x
)
)
p_{data(x)}\log D(x)+p_{g(x)}\log(1-D(x))
pdata(x)logD(x)+pg(x)log(1−D(x))
对D进行求导并令其等于0可得
p
d
a
t
a
(
x
)
D
(
x
)
+
−
p
g
(
x
)
1
−
D
(
x
)
=
0
\frac{p_{data(x)}}{D(x)}+\frac{-p_{g(x)}}{1-D(x)}=0 \\
D(x)pdata(x)+1−D(x)−pg(x)=0
经过化简可得
D
(
x
)
=
p
d
a
t
a
(
x
)
p
d
a
t
a
(
x
)
+
p
g
(
x
)
D(x) = \frac{p_{data(x)}}{p_{data(x)}+p_{g(x)}}
D(x)=pdata(x)+pg(x)pdata(x)
最后的公式很好理解,主要是看样本来自真实数据还是生成数据之间的类似比例的值
我们将这个最优的区分器分别代入到saturating loss和 non-saturation loss
对于saturating loss, 依照公式2.1,为了引入距离,我们还是把跟G无关的前半部分保留
E
x
∼
p
d
a
t
a
(
x
)
[
log
D
(
x
)
]
+
E
x
∼
p
g
[
log
(
1
−
D
(
x
)
]
\mathbb{E}_{x\sim p_{data(x)}}[\log D(x)]+\mathbb{E}_{x\sim p_{g}}[\log(1-D(x)]
Ex∼pdata(x)[logD(x)]+Ex∼pg[log(1−D(x)]
代入最优区别器,为了书写方便,用
p
d
p_d
pd替换
p
d
a
t
a
p_{data}
pdata
∑
p
d
log
p
d
p
d
+
p
g
+
∑
p
g
log
p
g
p
d
+
p
g
\sum p_d \log \frac{p_d}{p_d+p_g}+\sum p_g \log\frac{p_g}{p_d+p_g}
∑pdlogpd+pgpd+∑pglogpd+pgpg
简单转换成
∑
p
d
log
p
d
/
2
(
p
d
+
p
g
)
/
2
+
∑
p
g
log
p
g
/
2
(
p
d
+
p
g
)
/
2
\sum p_d \log \frac{p_d/2}{(p_d+p_g)/2}+\sum p_g \log\frac{p_g/2}{(p_d+p_g)/2}
∑pdlog(pd+pg)/2pd/2+∑pglog(pd+pg)/2pg/2
进一步转换
∑
p
d
log
p
d
(
p
d
+
p
g
)
/
2
+
∑
p
g
log
p
g
(
p
d
+
p
g
)
/
2
−
l
o
g
2
∑
(
p
d
+
p
g
)
\sum p_d \log \frac{p_d}{(p_d+p_g)/2}+\sum p_g \log\frac{p_g}{(p_d+p_g)/2}-log2\sum (p_d+p_g)
∑pdlog(pd+pg)/2pd+∑pglog(pd+pg)/2pg−log2∑(pd+pg)
由于
p
d
p_d
pd和
p
g
p_g
pg是概率分布,因此和为1
∑
p
d
log
p
d
(
p
d
+
p
g
)
/
2
+
∑
p
g
log
p
g
(
p
d
+
p
g
)
/
2
−
l
o
g
4
\sum p_d \log \frac{p_d}{(p_d+p_g)/2}+\sum p_g \log\frac{p_g}{(p_d+p_g)/2}-log4
∑pdlog(pd+pg)/2pd+∑pglog(pd+pg)/2pg−log4
根据JS距离的公式,我们将上述公式转换成
−
l
o
g
4
+
2
⋅
J
S
D
(
p
d
,
p
g
)
-log4 +2 \cdot JSD(p_d,p_g)
−log4+2⋅JSD(pd,pg)
也就是说利用saturating loss训练且区别器最优的情况下,生成器的优化目标其实是JSD 散度
同理对于non-saturating loss 可以证明下列公式成立
−
E
x
∼
p
g
[
log
(
D
(
x
)
]
=
K
L
(
p
g
∣
∣
p
d
)
−
2
J
S
(
p
d
∣
∣
p
g
)
+
2
l
o
g
2
+
E
x
∼
p
d
[
log
(
D
(
x
)
]
-\mathbb{E}_{x\sim p_{g}}[\log(D(x)]=KL(p_g||p_d)-2JS(p_d||p_g)+2log2+\mathbb{E}_{x\sim p_{d}}[\log(D(x)]
−Ex∼pg[log(D(x)]=KL(pg∣∣pd)−2JS(pd∣∣pg)+2log2+Ex∼pd[log(D(x)]
也就是说利用non-saturating loss训练且区别器最优的情况下,生成器的优化目标其实是KL散度-JSD 散度。(个人对这种方式是不太认可的,因为KL和JSD之间是有关系的。比如 -2*JS也能展开成JS-3JS,不能说这个训练目标不一致,一个拉近,一个拉远,是不是可能可以转换成其他更统一的一种散度方式。)
2.4 loss跟f-divergence的关系(f-gan)
从Fenchel 共轭可以知道
f
∗
(
t
)
=
m
a
x
x
∈
d
o
m
(
f
)
{
x
t
−
f
(
x
)
}
f^*(t) = \mathop{max}\limits_{x\in dom(f)} \{xt-f(x)\}
f∗(t)=x∈dom(f)max{xt−f(x)}
做一下替换
f
(
x
)
=
m
a
x
t
∈
d
o
m
(
f
∗
)
{
x
t
−
f
∗
(
t
)
}
f(x)=\mathop{max}\limits_{t\in dom(f^*)}\{xt-f^*(t)\}
f(x)=t∈dom(f∗)max{xt−f∗(t)}
而f-divergence的表达式是
D
f
(
p
∣
∣
q
)
=
∑
q
(
x
)
f
(
p
(
x
)
q
(
x
)
)
=
∑
q
(
x
)
(
m
a
x
t
∈
d
o
m
(
f
∗
)
{
p
(
x
)
q
(
x
)
t
−
f
∗
(
t
)
}
)
D_f(p||q)=\sum q(x)f(\frac{p(x)}{q(x)})=\sum q(x)(\mathop{max}\limits_{t\in dom(f^*)}\{\frac{p(x)}{q(x)}t-f^*(t)\})
Df(p∣∣q)=∑q(x)f(q(x)p(x))=∑q(x)(t∈dom(f∗)max{q(x)p(x)t−f∗(t)})
由于一般情况下t的值,比较难解析,因此我们用一个神经网络D去拟合,输入是 x, 输出是t。
由于上面的是取max操作,所以不管我们的D怎么去拟合
D
f
(
p
∣
∣
q
)
≥
∑
q
(
x
)
(
p
(
x
)
q
(
x
)
D
(
x
)
−
f
∗
(
D
(
x
)
)
=
∑
p
(
x
)
D
(
x
)
−
q
(
x
)
f
∗
(
D
(
x
)
)
D_f(p||q)\ge\sum q(x)(\frac{p(x)}{q(x)}D(x)-f^*(D(x))=\sum p(x)D(x)-q(x)f^*(D(x))
Df(p∣∣q)≥∑q(x)(q(x)p(x)D(x)−f∗(D(x))=∑p(x)D(x)−q(x)f∗(D(x))
如果我们的D足够强,约等于应该变成等于
D
f
(
p
∣
∣
q
)
≈
m
a
x
D
∑
p
(
x
)
D
(
x
)
−
q
(
x
)
f
∗
(
D
(
x
)
)
D_f(p||q)\approx\mathop{max}\limits_{D}\sum p(x)D(x)-q(x)f^*(D(x))
Df(p∣∣q)≈Dmax∑p(x)D(x)−q(x)f∗(D(x))
D f ( p d ∣ ∣ p g ) = m a x D E x ∼ p d ( x ) [ D ( x ) ] + E x ∼ p g [ − f ∗ ( D ( x ) ) ] D_f(p_{d}||p_g)=\mathop{max}\limits_{D}\mathbb{E}_{x\sim p_{d(x)}}[D(x)]+\mathbb{E}_{x\sim p_{g}}[-f^*(D(x))] Df(pd∣∣pg)=DmaxEx∼pd(x)[D(x)]+Ex∼pg[−f∗(D(x))]
Thus, training G to minimizeLG can be roughly interpreted as minimizing the approximated divergence (although this is not technically true),see “Gans beyond divergence minimization”
另外该论文证明了训练D的时候可以用m=1
2.5 saturating loss的问题
saturating loss的本质原因在于我们在优化JSD loss. JSD loss在两个分布支撑集不重叠的时候是个恒定值,会带来梯度消失的问题。
个人不严谨的理解,一般区别器后面会加个sigmoid函数(用
σ
\sigma
σ来表示)来把区别器的值域约束到(0,1),我们把sigmoid从D中抽出来
l
o
g
(
1
−
σ
(
D
(
G
(
z
)
)
)
)
log(1-\sigma(D(G(z))))
log(1−σ(D(G(z))))
我们知道sigmoid函数的导数是
σ
(
1
−
σ
)
\sigma(1-\sigma)
σ(1−σ),因此对其进行链式求导可得
∂
L
∂
G
=
σ
(
D
(
G
)
)
(
1
−
σ
(
D
(
G
)
)
D
′
(
G
)
1
−
σ
(
D
(
G
)
)
=
σ
(
D
(
G
)
)
D
′
(
G
)
\frac {\partial L} {\partial G } = \frac{\sigma(D(G))(1-\sigma(D(G))D'(G)}{1-\sigma(D(G))} =\sigma(D(G))D'(G)
∂G∂L=1−σ(D(G))σ(D(G))(1−σ(D(G))D′(G)=σ(D(G))D′(G)
当区分器太强时,对于G生成的样本,我们知道
σ
(
D
(
G
)
)
\sigma(D(G))
σ(D(G))趋向于0,因此损失对G的梯度将也会是0,也就是原文说的饱和的意思。
更严谨的证明来自于princinple这篇论文,
2.6 non-saturating loss的问题
由于saturation loss的梯度消失问题,作者将generator的loss变成了也就是minimize − l o g ( ( D ( G ) ) ) -log((D(G))) −log((D(G)))
如果带上sigmoid,利用上面同样的思路,我们可以得到它的梯度为
(
1
−
σ
(
D
(
G
)
)
)
D
′
(
G
)
(1-\sigma(D(G)))D'(G)
(1−σ(D(G)))D′(G)
可以知道当区分器非常强的时候,对于G生成的样本还是有梯度的。
严谨一点,按照principle的论文,根据2.4节的分析,在最优区别器下,优化non-saturation loss等价于优化KL-2JSD.
−
E
x
∼
p
g
[
log
(
D
(
x
)
]
=
K
L
(
p
g
∣
∣
p
d
)
−
2
J
S
(
p
d
∣
∣
p
g
)
+
2
l
o
g
2
+
E
x
∼
p
d
[
log
(
D
(
x
)
]
-\mathbb{E}_{x\sim p_{g}}[\log(D(x)]=KL(p_g||p_d)-2JS(p_d||p_g)+2log2+\mathbb{E}_{x\sim p_{d}}[\log(D(x)]
−Ex∼pg[log(D(x)]=KL(pg∣∣pd)−2JS(pd∣∣pg)+2log2+Ex∼pd[log(D(x)]
它的第一个问题是由于两个距离的符号相反,因此优化目标有些矛盾(个人对这一观点持怀疑态度)
它的第二个问题是loss里面带有KL距离,而KL距离是不对称的
D
K
L
(
p
g
∣
∣
p
d
)
=
∑
p
g
(
x
)
l
o
g
p
g
(
x
)
p
d
(
x
)
D_{KL}(p_g||p_d)=\sum p_g(x)log\frac{p_g(x)}{p_d(x)}
DKL(pg∣∣pd)=∑pg(x)logpd(x)pg(x)
当
p
g
(
x
)
→
0
p_g(x)\rightarrow0
pg(x)→0,而
p
d
(
x
)
→
1
p_d(x)\rightarrow1
pd(x)→1,,根据洛必达法则,loss趋向0, 反之loss趋向无穷
因此网络会倾向于loss比较低的做法,就是 p g ( x ) → 0 p_g(x)\rightarrow0 pg(x)→0,也就是说在大多数真实样本所在的空间 p d ( x ) → 1 p_d(x)\rightarrow1 pd(x)→1,生成器的样本都不在这上面,因此genrator生成的样本会局限在很小的空间,造成为人熟知的mode collapse。
它的第三个问题是梯度不稳定的问题,个人不是特别理解,只能照搬论文了
上面的J应该是x对
θ
\theta
θ的偏导
3 IPM(integral probability metric) 框架
3.1 Wassertein GAN
上面已经提到了JSD散度在
p
d
p_d
pd和
p
g
p_g
pg的支撑集没有交集的时候会是一个常数的问题,从而导致梯度消失的问题。跟JSD散度相反,wasserstein距离在
p
d
p_d
pd和
p
g
p_g
pg支撑集没有交集的时候还是可以很好地评估两者的距离,因此如果我们能优化wasserstein距离就更好,当然wassertein距离是比较难求解的。不过根据Kantorovich-Rubinstein duality,wasserstein距离可以转化成
W
(
p
d
,
p
g
)
=
s
u
p
∣
∣
D
∣
∣
L
≤
1
E
x
∼
p
d
[
D
(
x
)
]
−
E
x
∼
p
g
[
D
(
x
)
]
W(p_d,p_g)=\mathop{sup}\limits_{||D||_L\le1}\mathbb{E}_{x\sim p_d}[D(x)] - \mathbb{E}_{x\sim p_g}[D(x)]
W(pd,pg)=∣∣D∣∣L≤1supEx∼pd[D(x)]−Ex∼pg[D(x)]
只要D能满足1-Lipschitz连续性
但是1-Lipschitz连续性很难保证,因此在Wasserstein GAN里通过weight clip的方式来保证K-Lipschitz连续性
另外由于D外面没有了log,所有D的输出是任何分布都有意义,因此D的后面不需要加sigmoid
最后作者实验发现用ADAM优化器比较难训练,因此改用了RMSProp训练
3.2 Wasserstein GAN GP
Wasserstein GAN需要调weight clip的大小,不是特别方便。
这篇论文证明了以下结论
对于这个损失,以拉格朗日乘法的方式加入损失
3.3 Spectral Normalization
相对于GP,spectral-norm更简洁地解决Lipshcitz的问题,实际应用感觉用的更多,着重理解下这个,这个得先从线性代数讲起
线性代数中有特征根和特征向量,意思是这样的,对于一个方阵
A
{A}
A,特征根和对应的特征向量满足
A
x
=
λ
x
Ax=\lambda x
Ax=λx
二维情况下,如果A满秩,那么会有两个不相关的特征单位向量
v
1
{v_1}
v1和
v
2
v_2
v2,对应的特征根假设为
λ
1
\lambda_1
λ1和
λ
2
\lambda_2
λ2,
那么
A
[
v
1
v
2
]
=
[
v
1
v
2
]
[
λ
1
λ
2
]
A\begin{bmatrix}v_1 & v_2 \\ \end{bmatrix} =\begin{bmatrix}v_1 & v_2 \\ \end{bmatrix} \begin{bmatrix}\lambda_1&\\&\lambda_2 \\ \end{bmatrix}
A[v1v2]=[v1v2][λ1λ2]
然后在等式的右边乘以矩阵的逆
A
[
v
1
v
2
]
[
v
1
v
2
]
−
1
=
[
v
1
v
2
]
[
λ
1
λ
2
]
[
v
1
v
2
]
−
1
A\begin{bmatrix}v_1 & v_2 \\ \end{bmatrix} \begin{bmatrix}v_1 & v_2 \\ \end{bmatrix}^{-1} =\begin{bmatrix}v_1 & v_2 \\ \end{bmatrix} \begin{bmatrix}\lambda_1&\\&\lambda_2 \\ \end{bmatrix} \begin{bmatrix}v_1 & v_2 \\ \end{bmatrix}^{-1}
A[v1v2][v1v2]−1=[v1v2][λ1λ2][v1v2]−1
A = [ v 1 v 2 ] [ λ 1 λ 2 ] [ v 1 v 2 ] − 1 A=\begin{bmatrix}v_1 & v_2 \\ \end{bmatrix} \begin{bmatrix}\lambda_1&\\&\lambda_2 \\ \end{bmatrix} \begin{bmatrix}v_1 & v_2 \\ \end{bmatrix}^{-1} A=[v1v2][λ1λ2][v1v2]−1
特征值分解就是
A
=
V
Σ
V
−
1
A=V\Sigma V^{-1}
A=VΣV−1
如果A是对称的,特征跟是正交的,转置等于逆,可以写成
A
=
V
Σ
V
T
A=V\Sigma V^{T}
A=VΣVT
那么对于一个新的向量y, 如果要求
A
x
Ax
Ax,我们可以先把x分解成
v
1
{v_1}
v1和
v
2
v_2
v2的表达,比如
x
=
a
1
v
1
+
a
2
v
2
x=a_1v_1+a_2v_2
x=a1v1+a2v2
继续推导
A
x
=
A
(
a
1
v
1
+
a
2
v
2
)
=
a
1
λ
1
v
1
+
a
2
λ
2
v
2
Ax=A(a_1v_1+a_2v_2)=a_1\lambda_1v_1+a_2\lambda_2v_2
Ax=A(a1v1+a2v2)=a1λ1v1+a2λ2v2
主要的结论是这样
∥
A
x
∥
∥
x
∥
=
∥
a
1
λ
1
v
1
+
a
2
λ
2
v
2
∥
∥
a
1
v
1
+
a
2
v
2
∥
≤
m
a
x
(
λ
1
,
λ
2
)
\frac{\|Ax\|}{\|x\|}=\frac{\|a_1\lambda_1v_1+a_2\lambda_2v_2\|}{\|a_1v_1+a_2v_2\|}\le max(\lambda_1,\lambda_2)
∥x∥∥Ax∥=∥a1v1+a2v2∥∥a1λ1v1+a2λ2v2∥≤max(λ1,λ2)
如果不是方阵,需要用到奇异值分解
A
=
U
Σ
V
T
A=U\Sigma V^T
A=UΣVT
其中
A
A
T
=
U
Λ
1
U
T
AA^T=U\Lambda_1 U^T
AAT=UΛ1UT,
A
T
A
=
V
Λ
2
V
T
A^TA=V\Lambda_2V^T
ATA=VΛ2VT,可以证明
Λ
1
\Lambda_1
Λ1和
Λ
2
\Lambda_2
Λ2的非零特征根一样,
Σ
\Sigma
Σ中的值是他们的根号,称之为奇异值
∥
A
x
∥
∥
x
∥
≤
σ
(
A
)
\frac{\|Ax\|}{\|x\|}\le \sigma(A)
∥x∥∥Ax∥≤σ(A)
其中
σ
(
A
)
\sigma(A)
σ(A)表示A的最大特征值(奇异值),也称之为A的谱函数
奇异值分解需要继续补充
对于一个神经网络而言,一般有卷积和激活函数组成,激活函数以Relu为例,不管在小于0还是大于0的时候都是满足1-Lipshcitz条件的,而卷积不一定,假设其权重是W,输入是x,那么这个卷积层的运算是
y
=
W
x
y=Wx
y=Wx
由Lipshcitz的公式和W的线性可得
∥
W
(
x
+
ϵ
)
−
W
(
x
)
∥
∥
ϵ
∥
=
∥
W
ϵ
∥
∥
ϵ
∥
≤
σ
(
W
)
\frac{\|W(x+\epsilon)-W(x)\|}{\|\epsilon\|}=\frac{\|W\epsilon\|}{\|\epsilon\|}\le\sigma(W)
∥ϵ∥∥W(x+ϵ)−W(x)∥=∥ϵ∥∥Wϵ∥≤σ(W)
因此如果将W缩放
σ
(
W
)
\sigma(W)
σ(W)
y
=
W
σ
(
W
)
x
y=\frac{W}{\sigma(W)}x
y=σ(W)Wx
将符合1-Lipshcitz连续性
有论文发现对生成器做spetral normalizaiton也有好处
3.4 与IPM之间的关系
IPM(integral probability metric)也是一种对于两个概率分布之间的距离的度量。在IPM技术中,首先定义了满足可测度和实值有界的某一类函数的集合F,然后寻找一个最优的D(x)∈F使得两个分布之间的差异最大,该最大的差异值即为两个分布之间的距离:
I
F
(
p
d
,
p
g
)
=
s
u
p
D
∈
F
∣
E
x
∼
p
d
[
D
(
x
)
]
−
E
x
∼
p
g
[
D
(
x
)
]
∣
I_{\mathbb{F}}(p_d,p_g)=sup_{D\in\mathbb{F}}|\mathbb{E}_{x\sim p_d}[D(x)]-\mathbb{E}_{x\sim p_g}[D(x)]\ |
IF(pd,pg)=supD∈F∣Ex∼pd[D(x)]−Ex∼pg[D(x)] ∣
如果
F
\mathbb{F}
F是个对称函数空间,我们就可以把上面写成
I
F
(
p
d
,
p
g
)
=
s
u
p
D
∈
F
{
E
x
∼
p
d
[
D
(
x
)
]
−
E
x
∼
p
g
[
D
(
x
)
]
}
I_{\mathbb{F}}(p_d,p_g)=sup_{D\in\mathbb{F}}\{\mathbb{E}_{x\sim p_d}[D(x)]-\mathbb{E}_{x\sim p_g}[D(x)]\}
IF(pd,pg)=supD∈F{Ex∼pd[D(x)]−Ex∼pg[D(x)]}
如果大括号内的小于0,我们总可以用-d去替换而得到一个大于0的值,另外需要说明,IPM定义的距离度量虽然满足对称性、非负性、三角不等式,但是当该距离为0时,并不能严格证明两个分布相等,故为一种伪度量.
不严谨地,我们可以这样理解IPM架构。评价两个人的关系不是用的他们在最好状况下的关系,而是在最差状况下的关系,而D就是要找到这两人什么时候是最差状况,因为每两个人它的冲突点不一样,他们是在金钱上容易反目成仇还是在价值观容易形同陌路。如果他们能通过某些努力(G)能让最差状况的关系都能提高,那说明他们的关系不会差。
可以看到Wasserstein gan属于IPM框架下。
3.5 McGan: Mean and Covariance Feature Matching GAN
McGan将D的定义成了,
KaTeX parse error: Undefined control sequence: \cal at position 2: \̲c̲a̲l̲{F}={f(x)= <v,D…
<
>
<>
<>是内积。其实这是一个对偶范数的定义,对偶范数是这样的
∥
x
∥
q
=
m
a
x
v
,
∥
v
∥
p
≤
1
<
v
,
x
>
\|x\|_q=max_{v,\|v\|_p\le1}<v,x>
∥x∥q=maxv,∥v∥p≤1<v,x>
其中
1
p
+
1
q
=
1
\frac{1}{p}+\frac{1}{q}=1
p1+q1=1
所以
KaTeX parse error: Undefined control sequence: \cal at position 4: I_\̲c̲a̲l̲{F}=\mathop{sup…
可以发现这个就是一个 feature mathing loss,只不过是均值的,D需要需增大这个loss,而generator需要去减少这个loss, 另外由于函数需要有界,所以需要也需要对D做clip, 可以看到当q=1的时候就是一个Wassertein GAN.因为是max操作,有绝对值和没有绝对值一样
当然可以做其他矩的损失
3.6 [2017-NIPS]MMD GAN: Towards Deeper Understanding of Moment Matching Network
MMD(Maximum Mean Discrepancy)之前在做domain adaptation的时候常被采用的一个loss,它可以通过有限样本来判断两组样本是否来自于同一分布或者度量两个分布的距离。之前看了好几次也不太理解,现在也一样,这一小节只说一些结论,理解的比较浅~
KaTeX parse error: Undefined control sequence: \cal at position 30: …hop{sup}_{f\sim\̲c̲a̲l̲{F}}(\mathbb E_…
也是要找一个函数f,使得经过f映射后均值最大。这种形式如果能把D替换成f,那感觉跟mean matching gan类似,除了没有模之外。不过由于是最大化,应该可以等价加个绝对值符号,如果是负数,那可以用-f代替。
那如果没有D去拟合呢?MMD通过Hilbert空间去做,(我看了好几遍也没看懂,所以也就放弃挣扎了)
M
M
D
(
p
,
q
)
=
∥
μ
(
p
)
−
μ
(
q
)
∥
H
2
=
E
p
[
k
(
x
,
x
′
)
]
−
2
E
p
,
q
[
k
(
x
,
y
)
]
+
E
q
[
k
(
y
,
y
′
)
]
MMD(p,q)=\|\mu(p)-\mu(q)\|^2_\mathbb{H}=\mathbb{E}_p[k(x,x')]-2\mathbb{E}_{p,q}[k(x,y)]+\mathbb{E}_q[k(y,y')]
MMD(p,q)=∥μ(p)−μ(q)∥H2=Ep[k(x,x′)]−2Ep,q[k(x,y)]+Eq[k(y,y′)]
并且结合了kernel技巧,用kernel可以映射到更高维,但是又不需要找映射函数,计算比较方便
以一定数量的样本问题,如果有m个g来自真实数据,n个d是生成器的数据,那么在这些样本计算MMD
M
M
D
(
g
,
d
)
=
1
m
(
m
−
1
)
∑
i
≠
j
m
k
(
g
i
,
g
j
)
+
1
n
(
n
−
1
)
∑
i
≠
j
n
k
(
d
i
,
d
j
)
−
2
m
n
∑
i
,
j
k
(
g
i
,
d
j
)
MMD(g,d)=\frac{1}{m(m-1)}\sum_{i\neq j}^mk(g_i,g_j)+\frac{1}{n(n-1)}\sum_{i\neq j}^nk(d_i,d_j)-\frac{2}{mn}\sum_{i,j}k(g_i,d_j)
MMD(g,d)=m(m−1)1i=j∑mk(gi,gj)+n(n−1)1i=j∑nk(di,dj)−mn2i,j∑k(gi,dj)
kernel常用的有高斯核和多项式核,以高斯核为例,
k
(
x
,
x
′
)
=
e
−
∥
x
−
x
′
∥
2
k(x,x')=e^{-\|x-x'\|^2}
k(x,x′)=e−∥x−x′∥2
可以证明的是如果kernel是个 characteristic kernel,那么当且仅当p和q一致时,MMD为0. 高斯核是个characteristic kernel.
另外在一些论文里证明里如果f是一个单映射的函数(可逆),其存在一个函数
f
−
1
f^{-1}
f−1使得
f
−
1
(
f
(
x
)
)
=
x
f^{-1}(f(x))=x
f−1(f(x))=x
那么它与一个 characteristic kernel k 联合计算
k
∗
k^*
k∗还是一个characteristic kernel
k
∗
=
k
(
f
(
x
)
,
f
(
x
′
)
)
k^*=k(f(x),f(x'))
k∗=k(f(x),f(x′))
也就是说如果我们把D设计成一个单映射函数,然后再接一个高斯核这类characteristic kernel,那我们的D就变成了一个可学习的characteristic kernel。那现在的问题就是怎么保证D学出一个单映射的函数
核心还是利用可逆性,再学一个decoder, 真实的样本或者伪造的样布通过区别器后还能通过一个网络恢复出来,下面截图中的e就是我们的区别器,d是另外恢复网络(符号有点反)
4 动力学系统分析
4.1 关联梯度向量场(associated gradient vector filed)
首先我们参考[2017-NIPS]The Numerics of GANs 引入动力学概念。按照公式2.1,在GAN中,如果按照non-saturating loss,我们可以将我们的目标写成
V
(
D
,
G
)
=
E
x
∼
p
d
a
t
a
(
x
)
[
log
D
(
x
)
]
+
E
z
∼
p
z
[
−
log
(
D
(
G
(
z
)
)
]
(4.1)
V(D,G)=\mathbb{E}_{x\sim p_{data(x)}}[\log D(x)]+\mathbb{E}_{z\sim p_{z}}[-\log(D(G(z))] \tag{4.1}
V(D,G)=Ex∼pdata(x)[logD(x)]+Ez∼pz[−log(D(G(z))](4.1)
其中D是希望最大化max(V),而G是希望最小化min(V),我们将他转换成max(-V),
由于想转换博弈里面的最大化利益,我们这里写成以下形式
V
(
D
,
G
)
=
m
a
x
f
∼
F
E
x
∼
p
d
a
t
a
(
x
)
[
f
(
D
(
x
)
]
+
E
x
∼
p
g
[
−
f
(
D
(
x
)
]
(4.2)
V(D,G)=\mathop{max}_{f\sim \mathbb{F}}\mathbb{E}_{x\sim p_{data(x)}}[ f(D(x)]+\mathbb{E}_{x\sim p_{g}}[-f(D(x)] \tag{4.2}
V(D,G)=maxf∼FEx∼pdata(x)[f(D(x)]+Ex∼pg[−f(D(x)](4.2)
在这里允许我滥用了一些符号让我好记些,g和d指的是生成器和区别器的网络参数
那一个纳什均衡点
(
d
∗
,
g
∗
)
(d^*,g^*)
(d∗,g∗)是指满足以下公式的点
d
∗
∈
a
r
g
m
a
x
d
V
(
d
,
g
∗
)
a
n
d
g
∗
∈
a
r
g
m
a
x
g
−
V
(
d
∗
,
g
)
(4.3)
d^*\in \mathop{argmax}_{d}V(d,g^*) \ and \ g^*\in\mathop{argmax}_g-V(d^*,g)\tag{4.3}
d∗∈argmaxdV(d,g∗) and g∗∈argmaxg−V(d∗,g)(4.3)
我们先介绍不动点以引入一个收敛性定理
**不动点(fixed point)**对于一个函数
f
f
f, 如果能满足下面的条件,称x是个不动点
f
(
x
)
=
x
f(x)=x
f(x)=x
如果f有解析式,一般情况我们能快速的求解。如果f比较复杂,我们还有迭代法
比如
f
(
x
)
=
x
2
+
1
x
f(x)=\frac{x}{2}+\frac{1}{x}
f(x)=2x+x1,根据解析式,我们知道
2
\sqrt{2}
2是不动点,迭代法的解法是
x
0
=
1
,
x
1
=
f
(
x
0
)
=
1
2
+
1
=
3
2
,
x
2
=
f
(
x
1
)
=
3
4
+
2
3
=
17
12
,
x
3
=
f
(
x
2
)
=
17
24
+
12
17
≈
1.41
x_0=1, \\ x_1=f(x_0)=\frac{1}{2}+1=\frac{3}{2},\\ x_2=f(x_1)=\frac{3}{4}+\frac{2}{3}=\frac{17}{12},\\ x_3=f(x_2)=\frac{17}{24}+\frac{12}{17}\approx 1.41
x0=1,x1=f(x0)=21+1=23,x2=f(x1)=43+32=1217,x3=f(x2)=2417+1712≈1.41
你也可以换个初始点重新试一下,得到的结论是类似的,当你运行若干次后会跟真实解非常接近
如果我们换个公式比如
f
(
x
)
=
a
x
−
b
x
2
f(x)=ax-bx^2
f(x)=ax−bx2,当a=2.5,b=1.5时,不动点是1,我们还是得到类似的结论
x
0
=
0.01
.
.
.
x
6
=
1.0018
x_0=0.01\\ ...\\ x_6=1.0018
x0=0.01...x6=1.0018
但是当a=3.25,b=1.5, 可以得到一个不动点是1.5,我们发现
x
0
=
0.01
x
5
=
1.7029
x
6
=
1.1845
x
7
=
1.7540
x
8
=
1.1036
x_0=0.01\\ x_5=1.7029\\ x_6=1.1845\\ x_7=1.7540\\ x_8=1.1036
x0=0.01x5=1.7029x6=1.1845x7=1.7540x8=1.1036
我们发现一直在振荡,这背后的原因主要跟导数有关
令
f
(
x
)
=
x
f(x)=x
f(x)=x并假设
x
n
−
1
x_{n-1}
xn−1接近x,那根据泰勒展开,我们可以得到
x
n
=
f
(
x
n
1
)
≈
f
(
x
)
+
f
′
(
x
)
(
x
n
−
1
−
x
)
=
x
+
f
′
(
x
)
(
x
n
−
1
−
x
)
x_n=f(x_{n_1})\approx f(x)+f'(x)(x_{n-1}-x)=x+f'(x)(x_{n-1}-x)
xn=f(xn1)≈f(x)+f′(x)(xn−1−x)=x+f′(x)(xn−1−x)
进一步化简
∣
x
n
−
x
∣
≈
∣
f
′
(
x
)
∣
∣
x
n
−
1
−
x
∣
|x_n-x|\approx|f'(x)| |x_{n-1}-x|
∣xn−x∣≈∣f′(x)∣∣xn−1−x∣
可以看到当导数的绝对值接近小于1时,可以收敛。更详细的可以参考不动点的迭代解法MIT课程
更一般的可以推广到
4.2 纳什均衡点附近收敛性
4.2.1 Simultaneous Gradient Ascent
如果用梯度下降法同时更新d和g,那么我们可以定义关联梯度向量场(associated gradient vector filed),其实我也不知道怎么翻译
v
(
d
,
g
)
=
[
∇
d
f
(
d
,
g
)
−
∇
g
f
(
d
,
g
)
]
(4.4)
v(d,g)=\begin{bmatrix}\nabla_df(d,g) \\-\nabla_gf(d,g) \\ \end{bmatrix} \tag{4.4}
v(d,g)=[∇df(d,g)−∇gf(d,g)](4.4)
并将梯度下降法写成下面的形式
SimGA算法 Simultaneous Gradient Ascent
while not converged do:
v d = ∇ d f ( d , g ) v_d=\nabla_df(d,g) vd=∇df(d,g)
v g = ∇ g ( − f ( d , g ) ) v_g=\nabla_g (-f(d,g)) vg=∇g(−f(d,g))
d = d + l ∗ v d d=d+l*v_d d=d+l∗vd ( l l l is the learning rate )
g = g + l ∗ v g g=g+l*v_g g=g+l∗vg
我们知道极值满足的条件需要一阶导为0,而且还需要看二阶导来判断是极大值还是极小值,二阶导为正则是极小值,二阶导为负则是极大值,由于
∇
d
\nabla d
∇d前面是正号,
∇
g
\nabla g
∇g是负号,所以
∇
d
f
2
(
d
,
g
)
\nabla_df^2(d,g)
∇df2(d,g)需要负定,且
∇
g
f
2
(
d
,
g
)
\nabla_gf^2(d,g)
∇gf2(d,g)需要正定,在这样的条件下,可以证明充分必要条件,
v
′
(
d
,
g
)
v'(d,g)
v′(d,g)是负定,
v
′
(
d
,
g
)
=
[
∇
d
f
2
(
d
,
g
)
∇
d
,
g
f
(
d
,
g
)
−
∇
d
,
g
f
(
d
,
g
)
−
∇
g
f
2
(
d
,
g
)
]
(4.5)
v'(d,g)=\begin{bmatrix}\nabla_df^2(d,g) & \nabla_{d,g}f(d,g) \\-\nabla_{d,g}f(d,g) & -\nabla_gf^2(d,g) \\ \end{bmatrix} \tag{4.5}
v′(d,g)=[∇df2(d,g)−∇d,gf(d,g)∇d,gf(d,g)−∇gf2(d,g)](4.5)
上面的公式我们已经根据克莱罗定理,如果二阶偏导数连续,那么二阶偏导对称,我们在这里认为条件成立。
下面我们来看看如果我们已经在纳什均衡点附近,需要满足哪些条件才能让我们的网络收敛到纳什均衡点
我们来看下生成器和区别器参数的收敛性,我们把参数 ( d , g ) (d,g) (d,g)合并成x,
根据SimGA算法 x的更新公式为
F
(
x
)
=
x
+
l
∗
v
(
x
)
(4.6)
F(x)=x+l*v(x)\tag{4.6}
F(x)=x+l∗v(x)(4.6)
其中v来自公式4.3。因此根据上面的截图proposition3,如果F’的特征值都小于1,将会收敛到不动点,当x是不动点时,这个时候
v
′
=
0
v'=0
v′=0,符合一般极值的条件。
那F’的特征值绝对值什么时候小于1呢?
F
′
(
x
)
=
I
+
l
∗
v
′
(
x
)
F'(x)=I+l*v'(x)
F′(x)=I+l∗v′(x)
假设
λ
v
,
p
v
\lambda_v,p_v
λv,pv是v’的特征向量
那么
F
′
∗
p
v
=
I
∗
p
v
+
l
∗
v
′
(
x
)
p
v
=
p
v
+
l
∗
λ
v
∗
p
v
=
(
1
+
l
∗
λ
v
)
∗
p
v
F'*p_v = I*p_v+l*v'(x)p_v=p_v+l*\lambda_v*p_v=(1+l*\lambda_v)*p_v
F′∗pv=I∗pv+l∗v′(x)pv=pv+l∗λv∗pv=(1+l∗λv)∗pv
可知**
1
+
l
∗
λ
v
1+l*\lambda_v
1+l∗λv**是F‘的特征向量,
根据公式4.4我们已经知道
v
′
v'
v′是负定,那么假设v’的特征向量是
−
a
+
b
i
-a+bi
−a+bi的复数形式,其中
a
>
0
a>0
a>0
∣
1
+
l
∗
(
−
a
+
b
i
)
∣
2
=
∣
1
−
a
l
+
b
l
i
∣
2
=
(
1
−
a
l
)
2
+
b
2
l
2
=
1
+
a
2
l
2
−
2
a
l
+
b
2
l
2
<
1
|1+l*(-a+bi)|^2=|1-al+bli|^2=(1-al)^2+b^2l^2=1+a^2l^2-2al+b^2l^2<1
∣1+l∗(−a+bi)∣2=∣1−al+bli∣2=(1−al)2+b2l2=1+a2l2−2al+b2l2<1
由于l>0化简可得
a
2
l
−
2
a
+
b
2
l
<
0
l
<
2
a
a
2
+
b
2
=
2
a
−
1
1
+
(
b
a
)
2
a^2l-2a+b^2l<0 \\ l<\frac{2a}{a^2+b^2}=\frac{2a^{-1}}{1+(\frac{b}{a})^2}
a2l−2a+b2l<0l<a2+b22a=1+(ab)22a−1
所以根据特征根的实部和虚部,我们的学习率需要选的很小才能收敛到纳什均衡点。
4.2.2 Alternating Gradient Descent
交替梯度的算法可以写成
AltGA算法 Alternating Gradient Ascent
while not converged do:
v d = ∇ d f ( d , g ) v_d=\nabla_df(d,g) vd=∇df(d,g)
d = d + l ∗ v d d=d+l*v_d d=d+l∗vd ( l l l is the learning rate )
v g = ∇ g ( − f ( d , g ) ) v_g=\nabla_g(-f(d,g)) vg=∇g(−f(d,g))
g = g + l ∗ v g g=g+l*v_g g=g+l∗vg
d和g的更新可以合并写成
F
(
x
)
=
F
g
(
F
d
(
x
)
)
F(x)=F_g(F_d(x))
F(x)=Fg(Fd(x))
根据链式法则
F
′
(
x
)
=
F
g
′
(
F
d
(
x
)
)
F
d
′
(
x
)
F'(x)=F'_g(F_d(x))F'_d(x)
F′(x)=Fg′(Fd(x))Fd′(x)
假设
x
∗
x^*
x∗是
F
d
F_d
Fd和
F
g
F_g
Fg的不动点,那么
F
′
(
x
∗
)
=
F
g
′
(
F
d
(
x
∗
)
)
F
d
′
(
x
∗
)
=
F
g
′
(
x
∗
)
F
d
′
(
x
∗
)
F'(x^*)=F'_g(F_d(x^*))F'_d(x^*)=F'_g(x^*)F'_d(x^*)
F′(x∗)=Fg′(Fd(x∗))Fd′(x∗)=Fg′(x∗)Fd′(x∗)
也就是说当如果两个更新操作的jocabian矩阵相乘得到的矩阵的特征值幅值小于1,系统收敛
T O D O ∗ 作 者 也 提 出 了 一 个 类 似 的 0 中 心 的 梯 度 惩 罚 项 ∗ ( 需 要 补 充 ) \textcolor{red}{TODO *作者也提出了一个类似的0中心的梯度惩罚项*(需要补充)} TODO∗作者也提出了一个类似的0中心的梯度惩罚项∗(需要补充)
4.3 Dirac-Gan实验
接下来我们参考[2018-ICML]Which Training Methods for GANs do actually Converge,来观察一个具体的简单但五脏俱全的Dirac-Gan实验
在本次实验中,我们将GAN写成以下形式
E
x
∼
p
d
a
t
a
(
x
)
[
f
(
−
D
(
x
)
]
+
E
x
∼
p
g
[
f
(
D
(
x
)
]
\mathbb{E}_{x\sim p_{data(x)}}[f(-D(x)]+\mathbb{E}_{x\sim p_{g}}[f(D(x)]
Ex∼pdata(x)[f(−D(x)]+Ex∼pg[f(D(x)]
可以证明如果
f
=
−
l
o
g
(
1
+
e
x
p
(
−
t
)
)
f=-log(1+exp(-t))
f=−log(1+exp(−t))时就是原始的GAN
E
x
∼
p
d
a
t
a
(
x
)
[
−
l
o
g
(
1
+
e
x
p
(
−
D
(
x
)
)
]
+
E
x
∼
p
g
[
−
l
o
g
(
1
+
e
x
p
(
D
(
x
)
]
=
E
x
∼
p
d
a
t
a
(
x
)
[
l
o
g
1
1
+
e
x
p
(
−
D
(
x
)
)
]
+
E
x
∼
p
g
[
l
o
g
1
1
+
e
x
p
(
D
(
x
)
)
]
=
E
x
∼
p
d
a
t
a
(
x
)
[
l
o
g
1
1
+
e
x
p
(
−
D
(
x
)
)
]
+
E
x
∼
p
g
[
l
o
g
e
x
p
(
−
D
(
x
)
e
x
p
(
−
D
(
x
)
)
+
1
]
=
E
x
∼
p
d
t
a
(
x
)
[
l
o
g
1
1
+
e
x
p
(
−
D
(
x
)
)
]
+
E
x
∼
p
g
[
l
o
g
(
1
−
1
1
+
e
x
p
(
−
D
(
x
)
)
]
\mathbb{E}_{x\sim p_{data(x)}}[-log(1+exp(-D(x))]+\mathbb{E}_{x\sim p_{g}}[-log(1+exp(D(x)]=\\ \mathbb{E}_{x\sim p_{data(x)}}[log\frac{1}{1+exp(-D(x))}]+\mathbb{E}_{x\sim p_{g}}[log\frac{1}{1+exp(D(x))}]=\\ \mathbb{E}_{x\sim p_{data(x)}}[log\frac{1}{1+exp(-D(x))}]+\mathbb{E}_{x\sim p_{g}}[log\frac{exp(-D(x)}{exp(-D(x))+1}]=\\ \mathbb{E}_{x\sim p_{dta(x)}}[log\frac{1}{1+exp(-D(x))}]+\mathbb{E}_{x\sim p_{g}}[log(1-\frac{1}{1+exp(-D(x))}]
Ex∼pdata(x)[−log(1+exp(−D(x))]+Ex∼pg[−log(1+exp(D(x)]=Ex∼pdata(x)[log1+exp(−D(x))1]+Ex∼pg[log1+exp(D(x))1]=Ex∼pdata(x)[log1+exp(−D(x))1]+Ex∼pg[logexp(−D(x))+1exp(−D(x)]=Ex∼pdta(x)[log1+exp(−D(x))1]+Ex∼pg[log(1−1+exp(−D(x))1]
就是一个带sigmoid的原始GAN
如下图,DiracGAN的实验是这样设置的,真实样本是一个在0上的狄拉克函数,我们用
δ
0
\delta_0
δ0表示,生成器产生的样本类似是一个
δ
g
\delta_g
δg表示,而区别器是一个过原点的直线
y
=
d
x
y=dx
y=dx,我们在这个简单实验上看看一些GAN设置的收敛性
在这个实验下,我们的训练目标是
E
x
∼
p
d
a
t
a
(
x
)
[
f
(
0
)
]
+
E
z
∼
p
z
[
f
(
d
g
)
]
\mathbb{E}_{x\sim p_{data(x)}}[f(0)]+\mathbb{E}_{z\sim p_{z}}[f(dg)]
Ex∼pdata(x)[f(0)]+Ez∼pz[f(dg)]
4.3.1 原始GAN Simultaneous Gradient Descent 收敛性
在这个设置下,我们来按照上一小节的理论来分析下纳什平衡点的关联梯度向量场的Jocabian矩阵。上面的式子在上面的特殊情况可以改写成
f
(
0
)
+
f
(
d
g
)
f(0)+f(dg)
f(0)+f(dg)
可以得到关联梯度向量场为
v
(
d
,
g
)
=
[
f
′
(
d
g
)
g
−
f
′
(
d
g
)
d
]
v(d,g)=\begin{bmatrix}f'(dg)g \\-f'(dg)d \\ \end{bmatrix}
v(d,g)=[f′(dg)g−f′(dg)d]
对v进行求导获得其极值点
(
0
,
0
)
(0,0)
(0,0),然后代回去发现当
g
=
0
,
d
=
0
g=0,d=0
g=0,d=0 时,对于定义域内loss都是常数
2
f
(
0
)
2f(0)
2f(0),确实是一个纳什均衡点。
由于这个场景比较简单,我们可以从另外一个侧面证明它不收敛。更确切地说d和g的积分曲线符合
d
(
t
)
2
+
g
(
t
)
2
=
c
o
n
s
t
d(t)^2+g(t)^2=const
d(t)2+g(t)2=const
证明如下,我们令函数F(又滥用符号了)
F
=
d
(
t
)
2
+
g
(
t
)
2
F=d(t)^2+g(t)^2
F=d(t)2+g(t)2
我们对F进行求导
F
′
=
2
d
d
′
+
2
g
g
′
=
2
d
f
′
(
d
g
)
g
+
2
g
(
−
f
′
(
d
g
)
d
)
=
2
d
g
f
′
(
d
g
)
−
2
d
g
f
′
(
d
g
)
=
0
F'=2dd'+2gg'=2df'(dg)g+2g(-f'(dg)d)=2dgf'(dg)-2dgf'(dg)=0
F′=2dd′+2gg′=2df′(dg)g+2g(−f′(dg)d)=2dgf′(dg)−2dgf′(dg)=0
导数为0可知是常数
那么我们按照上一节来看看
(
0
,
0
)
(0,0)
(0,0)附近的Jocabian矩阵
v
′
(
d
,
g
)
=
[
f
′
′
(
d
g
)
g
2
f
′
′
(
d
g
)
d
g
+
f
′
(
d
g
)
−
f
′
′
(
d
g
)
d
g
−
f
′
(
d
g
)
−
f
′
′
(
d
g
)
d
2
]
v'(d,g)=\begin{bmatrix}f''(dg)g^2 && f''(dg)dg+f'(dg) \\-f''(dg)dg-f'(dg) && -f''(dg)d^2 \\ \end{bmatrix}
v′(d,g)=[f′′(dg)g2−f′′(dg)dg−f′(dg)f′′(dg)dg+f′(dg)−f′′(dg)d2]
代入
(
0
,
0
)
(0,0)
(0,0),可得
v
′
(
d
,
g
)
=
[
0
f
′
(
0
)
−
f
′
(
0
)
0
]
v'(d,g)=\begin{bmatrix}0 && f'(0) \\-f'(0) && 0 \\ \end{bmatrix}
v′(d,g)=[0−f′(0)f′(0)0]
这是一个反对称矩阵,可知特征根肯定是在虚部上,求解方程可得特征根是 ± f ′ ( 0 ) i \pm f'(0)i ±f′(0)i。
那么对于SimGA它的特征根是 1 + l ∗ f ′ ( 0 ) i 1+l*f'(0)i 1+l∗f′(0)i,很明显对于学习率大于0时,特征根的绝对值大于1,因此发散
4.3.2 原始GAN Alternating Gradient Descent收敛性
如果利用AltGD分别更新discriminator和generator
n
d
n_d
nd和
n
g
n_g
ng次,仿照4.2.2节我们知道
F
d
(
d
,
g
)
=
[
d
+
l
f
′
(
d
g
)
g
g
]
F_d(d,g)=\begin{bmatrix}d+lf'(dg)g \\ g \end{bmatrix}
Fd(d,g)=[d+lf′(dg)gg]
F g ( d , g ) = [ d g − l f ′ ( d g ) d ] F_g(d,g)=\begin{bmatrix}d\\ g-lf'(dg)d \end{bmatrix} Fg(d,g)=[dg−lf′(dg)d]
分别计算其jocabian,并代入纳什均衡点是(0,0),
F
d
′
(
0
,
0
)
=
[
1
l
f
′
(
0
)
0
1
]
F'_d(0,0)=\begin{bmatrix}1 && lf'(0)\\ 0 && 1 \end{bmatrix}
Fd′(0,0)=[10lf′(0)1]
F g ′ ( 0 , 0 ) = [ 1 0 − l f ′ ( 0 ) 1 ] F'_g(0,0)=\begin{bmatrix}1 && 0\\ -lf'(0) && 1 \end{bmatrix} Fg′(0,0)=[1−lf′(0)01]
所以这个联合操作的Jocobian矩阵是它们独自的乘积
F
′
=
[
1
−
n
d
n
g
l
2
f
′
(
0
)
2
n
d
l
f
′
(
0
)
−
n
g
l
f
′
(
0
)
1
]
F'=\begin{bmatrix}1-n_dn_gl^2f'(0)^2 && n_dlf'(0)\\ -n_glf'(0) && 1 \end{bmatrix}
F′=[1−ndngl2f′(0)2−nglf′(0)ndlf′(0)1]
可计算其特征根为
1
−
α
2
2
±
(
1
−
α
2
2
)
2
−
1
1-\frac{\alpha^2}{2}\pm\sqrt{(1-\frac{\alpha^2}{2})^2-1}
1−2α2±(1−2α2)2−1
其中
α
=
n
g
n
d
l
f
′
(
0
)
\alpha=\sqrt{n_gn_d}lf'(0)
α=ngndlf′(0)
如果 α ≤ 2 \alpha\le2 α≤2,根号内是负数,因此整体是个复数,求模可得1,这个情况下有各种可能性,不过实际实验是发散的。
其他情况下可以证明有特征根的模大于1
我们令
k
=
1
−
α
2
2
k=1-\frac{\alpha^2}{2}
k=1−2α2
可知
k
<
−
1
k<-1
k<−1。我们考虑减号的情况,整个公式的模可以转成
(
k
−
k
2
−
1
)
2
=
k
2
+
k
2
−
1
−
2
k
k
2
−
1
(k-\sqrt{k^2-1})^2=k^2+k^2-1-2k\sqrt{k^2-1}
(k−k2−1)2=k2+k2−1−2kk2−1
我们需要证明其大于1也就是
k
2
+
k
2
−
1
−
2
k
k
2
−
1
>
1
2
k
2
−
2
k
k
2
−
1
>
2
k
2
−
k
k
2
−
1
>
1
k
2
−
1
>
k
k
2
−
1
k
2
−
1
>
k
k^2+k^2-1-2k\sqrt{k^2-1}>1\\ 2k^2-2k\sqrt{k^2-1}>2\\ k^2-k\sqrt{k^2-1}>1\\ k^2-1>k\sqrt{k^2-1}\\ \sqrt{k^2-1}>k
k2+k2−1−2kk2−1>12k2−2kk2−1>2k2−kk2−1>1k2−1>kk2−1k2−1>k
很明显不等式成立,因为左边大于0,右边小于0
那么对于交替式更新也是发散,论文这里强调了按照TTUR论文可以获得
4.3.3 Wasserstein GAN
v ( d , g ) = [ f ′ ( d g ) g − f ′ ( d g ) d ] v(d,g)=\begin{bmatrix}f'(dg)g \\-f'(dg)d \\ \end{bmatrix} v(d,g)=[f′(dg)g−f′(dg)d]
在Wasserstein Gan的设置中,f是
f
(
t
)
=
t
f(t)=t
f(t)=t,因此导数都是1,那上面的公式变成了
v
(
d
,
g
)
=
[
g
−
d
]
v(d,g)=\begin{bmatrix}g \\-d \\ \end{bmatrix}
v(d,g)=[g−d]
我们先假设wasserstein GAN会收敛到纳什平衡点
(
0
,
0
)
(0,0)
(0,0), 也就是说d在某个时刻k绝对值会小于1,那么我们就保证了wassertein gan里面的Liplize连续性的要求,我们可以得到jocobian矩阵
[
0
1
−
1
0
]
\begin{bmatrix} 0&&1 \\-1 &&0 \\ \end{bmatrix}
[0−110]
特征根是
±
i
\pm i
±i按照simGA得再变成
1
±
l
i
1\pm li
1±li,可以知道不收敛
或者可以从另外一个方面考虑
[
d
k
+
1
g
k
+
1
]
=
[
1
l
−
l
1
]
[
d
k
g
k
]
\begin{bmatrix}d_{k+1} \\g_{k+1} \\ \end{bmatrix}=\begin{bmatrix}1 && l \\-l &&1 \\ \end{bmatrix}\begin{bmatrix}d_{k} \\g_{k} \\ \end{bmatrix}
[dk+1gk+1]=[1−ll1][dkgk]
我们令A等于上面的矩阵,对于任意向量x,我们将x先分解到它的特征向量上,那么可得
A
x
=
A
(
a
v
1
+
b
v
2
)
=
a
λ
1
v
1
+
b
λ
2
v
2
A
n
x
=
a
λ
1
n
v
1
+
b
λ
2
n
v
2
Ax=A(av_1+bv_2)=a\lambda_1v_1+b\lambda_2v2 \\ A^nx = a\lambda_1^nv_1+b\lambda_2^nv2
Ax=A(av1+bv2)=aλ1v1+bλ2v2Anx=aλ1nv1+bλ2nv2
也主要看A的特征根幅值是否小于1,小于1即收敛,可以得出它的特征根是
1
±
l
i
1\pm li
1±li, 可知特征根的模大于1而不收敛,
跟我们的假设矛盾。对于交替梯度更新也是一样,大家可以去看论文
结论就是Wasserstein GAN也不收敛
4.3.4 Instance Noise
在第二节已经提到了原始的GAN在最优的区别器下其实在优化JSD距离,这个在两个分布没有共同支撑集的情况下是一个常数log2,因此会出现梯度消失的问题。为了解决这个论文,有些论文[2017-ICLR]Amortised MAP Inference for Image Super-resolution([blog])(https://www.inference.vc/instance-noise-a-trick-for-stabilising-gan-training/)和[2017-ICML]TOWARDS PRINCIPLED METHODS FOR TRAINING GENERATIVE ADVERSARIAL NETWORKS采用了对区别器的输入添加噪声的形式,使得两个分布的支撑集有重叠。
可以证明它能收敛
4.3.5 其他变体
因为证明有些多,这里不再继续,从论文里摘出一个图让大家有个直观的感受
4.3.6 总结
作者认为有些系统在纳什均衡点振荡是因为就算两个分布一致的情况下,这个时候Discriminator没有到达最优的优化器,它还是会有梯度,会把generator推离出一致分布的状态,所以作者提出了一个简化的正则项,希望在一致分布下discriminator的梯度越小越好。
γ
2
E
x
∼
p
d
a
t
a
(
x
)
[
∥
∇
D
(
X
)
∥
2
]
\frac{\gamma}{2}\mathbb{E}_{x\sim p_{data}(x)}[\|\nabla D(X)\|^2]
2γEx∼pdata(x)[∥∇D(X)∥2]
或者
γ
2
E
x
∼
p
g
(
x
)
[
∥
∇
D
(
X
)
∥
2
]
\frac{\gamma}{2}\mathbb{E}_{x\sim p_{g(x)}}[\|\nabla D(X)\|^2]
2γEx∼pg(x)[∥∇D(X)∥2]
看这个公式个人总感觉对训练也有一些负面影响
4.4 滑动平均
上一节我们发现很多的GAN在纳什均衡点容易振荡,[2019-ICLR]THE UNUSUAL EFFECTIVENESS OF AVERAGING IN GAN TRAINING和[2020-arixv]Tamming gan with lookahead都指出滑动平均都带来显著的增益。不严谨地理解,如果模型在纳什平衡点振荡,那么在振荡轨迹上取两个点做个平均有可能会更接近纳什均衡点。
个人也用过lookahead在imagenet的一个极端场景下试验过,并未发现它在该场景的优势。不过用在这个场景可能会更适合。 lookahead很简单,就是先存一个weight的拷贝,然后训练几步得到一个新的weight,然后两个weight做个带权重或者不带权重的平均。
5 其他未看或未总结论文
[2020-ICLR]A closer look at the optimization landscapes of generative adversarial networks
[2019-ICLR]Large scale GAN training for high fidelity natural image synthesis
[2018-arxiv] The relativistic discriminator: a key element missing from standard GAN
[2018-ICML]Which Training Methods for GANs do actually Converge
[2018-ICML]The mechanics of n-player differentiable games.
[2017-NIPS]GANs Trained by a Two Time-Scale Update Rule Converge to a Local Nash Equilibrium.
[2017] Kodali N , Abernethy J , Hays J , et al. On Convergence and Stability of GANs[J].
[2017-ICLR]Metz L , Poole B , Pfau D , et al. Unrolled Generative Adversarial Networks
[2017-ICLR]Energy-based Generative Adversarial Network
[2017-NIPS]Gradient descent GAN optimization is locally stable
[2017-NIPS]The Numerics of GANs
参考
本文参考了很多网上资料,尤其是