传统的Gan存在的问题
传统的判别器损失
m a x D V ( D , G ) = E x ∼ P r ( x ) [ l o g D ( x ) ] + E z ∼ P g ( x ) [ l o g ( 1 − D ( x ) ) ] ( 1 ) \hspace{2em}\mathop{max}\limits_{D}\space V(D,G) = \mathbb{E}_{x\sim P_{r}(x)}[log\space D(x)] + \mathbb{E}_{z \sim P_g \space (x)}[log(1-D(x))] \hspace{4em}(1) Dmax V(D,G)=Ex∼Pr(x)[log D(x)]+Ez∼Pg (x)[log(1−D(x))](1)
设判别器的输入数据 x x x 来源于真实数据分布的概率为 P r ( x ) P_r(x) Pr(x) ,来源于生成数据分布的概率为 P g ( x ) P_g(x) Pg(x)
则判别器损失可以表示为:
D
L
o
s
s
=
−
[
P
r
(
x
)
l
o
g
D
(
x
)
+
P
g
(
x
)
l
o
g
(
1
−
D
(
x
)
)
]
(
2
)
\hspace{4em}D_{Loss} = -[P_r(x)\space logD(x)+P_g(x)\space log(1-D(x))]\hspace{7em}(2)
DLoss=−[Pr(x) logD(x)+Pg(x) log(1−D(x))](2)
令
D
(
x
)
D(x)
D(x)导数为0,化简可得:
D
(
x
)
=
P
r
(
x
)
P
r
(
x
)
+
P
g
(
x
)
(
3
)
\hspace{11em}D(x) = \frac{P_r(x)}{P_r(x)+P_g(x)}\hspace{11em}(3)
D(x)=Pr(x)+Pg(x)Pr(x)(3)
当输入数据来自真实分布的概率
P
r
(
x
)
P_r(x)
Pr(x) 与来自生成数据分布的概率
P
g
(
x
)
P_g(x)
Pg(x)相同时,即
P
r
(
x
)
=
P
g
(
x
)
P_r(x)=P_g(x)
Pr(x)=Pg(x)
时,生成器生成的图片效果最好,真假难辨。将 (3) 式代入 (1) 式得:
E
x
∼
P
r
(
x
)
l
o
g
P
r
(
x
)
1
2
[
P
r
(
x
)
+
P
g
(
x
)
]
+
E
x
∼
P
g
(
x
)
l
o
g
P
g
(
x
)
1
2
[
P
r
(
x
)
+
P
g
(
x
)
]
−
2
l
o
g
2
(
4
)
\mathbb{E}_{x\sim P_r(x)}\space log\frac{P_r(x)}{\frac{1}{2}[P_r(x)+P_g(x)]}\space + \mathbb{E}_{x\sim P_g(x)}\space log\frac{P_g(x)}{\frac{1}{2}[P_r(x)+P_g(x)]}\space - 2log2 \hspace{2em}(4)
Ex∼Pr(x) log21[Pr(x)+Pg(x)]Pr(x) +Ex∼Pg(x) log21[Pr(x)+Pg(x)]Pg(x) −2log2(4)
由
J
S
JS
JS 散度 和
K
L
KL
KL散度的公式:
D
K
L
(
P
1
∣
∣
P
2
)
=
∑
P
1
l
o
g
P
1
P
2
=
E
x
∼
P
1
l
o
g
P
1
P
2
(
5
)
D
J
S
=
1
2
D
K
L
(
P
1
∣
∣
P
1
+
P
2
2
)
+
1
2
D
K
L
(
P
2
∣
∣
P
1
+
P
2
2
)
(
6
)
\hspace{8em}D_{KL}(P_1||P_2) =\sum P_1\space log\frac{P_1}{P_2}= \mathbb{E}_{x\sim P_1}\space log\frac{P_1}{P_2}\hspace{5em}(5)\\ \hspace{5em} D_{JS} = \frac{1}{2}D_{KL}(P_1||\frac{P_1+P_2}{2})\space +\frac{1}{2}D_{KL}(P_2||\frac{P_1+P_2}{2})\hspace{5em}(6)
DKL(P1∣∣P2)=∑P1 logP2P1=Ex∼P1 logP2P1(5)DJS=21DKL(P1∣∣2P1+P2) +21DKL(P2∣∣2P1+P2)(6)
则(4)式可化简为(7):
2
D
J
S
(
P
r
∣
∣
P
g
)
−
2
l
o
g
2
(
7
)
\hspace{13em}2D_{JS}(P_r||P_g) -2log2\hspace{11em}(7)
2DJS(Pr∣∣Pg)−2log2(7)
所以原始的Gan 判别器的损失最终可以转换为一个计算
J
S
JS
JS 散度的式子。极端情况,当
P
r
P_r
Pr或
P
g
P_g
Pg其中一个为0时,即真实数据分布与生成数据分布完全没有交集时,代入(4)式:
P r ( x ) P_r(x) Pr(x) = 0
E x ∼ P r ( x ) l o g 0 1 2 [ 0 + P g ( x ) ] + E x ∼ P g ( x ) l o g P g ( x ) 1 2 [ 0 + P g ( x ) ] − 2 l o g 2 = 0 + 0 − 2 l o g 2 = − 2 l o g 2 \mathbb{E}_{x\sim P_r(x)}\space log\frac{0}{\frac{1}{2}[0+P_g(x)]}\space + \mathbb{E}_{x\sim P_g(x)}\space log\frac{P_g(x)}{\frac{1}{2}[0+P_g(x)]}\space - 2log2 = 0+0-2log2=-2log2 Ex∼Pr(x) log21[0+Pg(x)]0 +Ex∼Pg(x) log21[0+Pg(x)]Pg(x) −2log2=0+0−2log2=−2log2
P g ( x ) P_g(x) Pg(x)=0
E x ∼ P r ( x ) l o g P r ( x ) 1 2 [ P r ( x ) + 0 ] + E x ∼ P g ( x ) l o g 0 1 2 [ P r ( x ) + 0 ] − 2 l o g 2 = 0 + 0 − 2 l o g 2 = − 2 l o g 2 \mathbb{E}_{x\sim P_r(x)}\space log\frac{P_r(x)}{\frac{1}{2}[P_r(x)+0]}\space + \mathbb{E}_{x\sim P_g(x)}\space log\frac{0}{\frac{1}{2}[P_r(x)+0]}\space - 2log2=0+0-2log2=-2log2 Ex∼Pr(x) log21[Pr(x)+0]Pr(x) +Ex∼Pg(x) log21[Pr(x)+0]0 −2log2=0+0−2log2=−2log2
可以看出,当真实的数据分布和生成的数据分布没有重叠部分时,会导致判别器的输入要么来自真实分布( P r ( x ) ≠ 0 , P g ( x ) = 0 P_r(x)\neq 0,P_g(x)=0 Pr(x)=0,Pg(x)=0) 要么来自生成的数据分布( P r ( x ) = 0 , P g ( x ) ≠ 0 P_r(x)= 0,P_g(x)\neq 0 Pr(x)=0,Pg(x)=0) ,明明是最差的情况,最需要加大惩罚(LOSS)的时候,但此时判别器的loss却为常数 − 2 l o g 2 -2log2 −2log2,梯度消失,训练根本无法继续进行。传统的Gan很难训练成功的原因就在于此。接下来就轮到大杀器WGan 出场了。
WGan
Wasserstein 距离
为解决传统的Gan在真实数据分布与生成的数据分布差异较大而出现的梯度消失的情况,WGan引入了Wasserstein距离代替
J
S
JS
JS散度来衡量两个数据分布间的差异。Wasserstein距离相比KL散度、JS散度的优势在于,即便两个分布没有重叠,Wasserstein距离仍然能够反映它们的分布的差异。Wasserstein距离的定义式如下:
W
(
P
r
,
P
g
)
=
m
a
x
D
∈
1
−
L
i
p
s
c
h
i
t
z
{
E
x
∼
P
r
(
x
)
[
D
(
x
)
]
−
E
x
∼
P
g
(
x
)
[
D
(
x
)
]
}
W(P_r,P_g) = \mathop{max}\limits_{D \in 1-Lipschitz} \{ \mathbb{E}_{x\sim P_r(x)}[D(x)]-\mathbb{E}_{x\sim P_g(x)}[D(x)] \}
W(Pr,Pg)=D∈1−Lipschitzmax{Ex∼Pr(x)[D(x)]−Ex∼Pg(x)[D(x)]}
可以简单理解为把来自分布
P
g
P_g
Pg的点移动到分布
P
r
P_r
Pr的平均最小距离。所以Wasserstein距离也被叫做推土机距离(Earth-Mover Distance)。从上面的这个式子可以看出,要计算两个分布间的Wasserstein距离,需要使得
E
x
∼
P
r
(
x
)
D
(
x
)
\mathbb{E}_{x\sim P_r(x)}D(x)
Ex∼Pr(x)D(x) ↑,
E
x
∼
P
g
(
x
)
[
D
(
x
)
]
\mathbb{E}_{x\sim P_g(x)}[D(x)]
Ex∼Pg(x)[D(x)] ↓ 。但是又不能让
E
x
∼
P
r
(
x
)
D
(
x
)
\mathbb{E}_{x\sim P_r(x)}D(x)
Ex∼Pr(x)D(x)无限增大(+
∞
\infty
∞)或让
E
x
∼
P
g
(
x
)
[
D
(
x
)
]
\mathbb{E}_{x\sim P_g(x)}[D(x)]
Ex∼Pg(x)[D(x)]无限减少(-
∞
\infty
∞),因为如果这样,即使这两个分布靠得很近,还是会由于之间的差距过大(
∞
\infty
∞),计算出来的Wasserstein距离还是会无限大,这样就失去了Wasserstein距离所提出来的意义了。因此要让他们之间的差距限定在一定的范围内,即使得Wasserstein距离满足 Lipschitz 连续性条件。
Lipschitz 连续性条件
Lipschitz连续性条件的定义如下:
∣
∣
D
(
x
)
−
D
(
y
)
∣
∣
≦
K
∣
∣
x
−
y
∣
∣
||D(x)-D(y)|| \leqq K||x-y||
∣∣D(x)−D(y)∣∣≦K∣∣x−y∣∣
即:
∣
∣
D
(
X
)
−
D
(
y
)
∣
∣
∣
∣
x
−
y
∣
∣
≦
K
\frac{||D(X)-D(y)||}{||x-y||}\leqq K
∣∣x−y∣∣∣∣D(X)−D(y)∣∣≦K
简单来说就是让判别器函数D的导数的最大值小于某个常数K,这样就能使得函数的变动幅度不会太大,限定在了某一个范围内(导函数有界)。常见的函数如三角函数
s
i
n
x
sinx
sinx,神经网络中常用的ReLU函数都是满足1-Lipschitz连续性条件的。
s i n x sinx sinx和ReLu函数的导数最大值都是1,满足1-Lipschitz条件。常见的不满足Lipshitz条件的函数为二次函数 x 2 x^2 x2。显然二次函数的导函数为 x x x不是一个有界的函数。
卷积神经网络中常用的激活ReLU已经满足Lipschitz条件了,剩下的只需要使得卷积网络中的参数矩阵 W W W也满足Lipschitz条件就可以顺利求解Wassertein距离啦。那么要如何使得参数矩阵 W W W满足Lipschitz条件呢?原始的WGan给出了一个比较粗糙的解决办法:
将参数的范围强行设定在某个区间内,如[-c,c],
{
w
=
c
,
i
f
w
>
c
w
=
−
c
,
i
f
w
<
−
c
\begin{cases} w=c \hspace{2em},if \space w>c \\ w=-c \hspace{2em},if \space w<-c\end{cases}
{w=c,if w>cw=−c,if w<−c
但其实这样的方法只能近似地使得
W
W
W满足Lipschitz条件。后来有文献提出了更优雅的解决办法,那就是Spectral Normaliztion(谱归一化)。
Spectral Normaliztion
所谓的Spectral norm(谱范数)其实就是参数矩阵
W
W
W的最大的奇异值(即
W
T
W
W^TW
WTW的最大特征值开根号后的值),要求解谱范数需要利用SVD分解。(不想看求解过程的建议直接跳到最后
)
SVD分解
设
W
W
W为 m x n 阶矩阵,且rank(W) = r,则存在m阶正交矩阵V 和n阶正交矩阵U,使得:
W
=
V
(
∑
0
0
0
)
U
H
W = V\begin{pmatrix} \sum & 0 \\ 0 & 0\end{pmatrix}U^H
W=V(∑000)UH
其中
∑
=
d
i
a
g
(
σ
1
,
.
.
.
,
σ
r
)
\sum = diag(\sigma_1,...,\sigma_r)
∑=diag(σ1,...,σr),且
σ
1
≧
σ
2
.
.
.
≧
σ
r
\sigma_1 \geqq \sigma_2...\geqq \sigma_r
σ1≧σ2...≧σr 。这里的
σ
i
\sigma_i
σi就是奇异值,我们要求的就是这其中的最大值。要想直接求解上述SVD的分解并不那么简单,就算是可以求解,如果在神经网络每个层中都这样去求解代价也未免太大,所以一般用Power Iteration的方法来近似求解。首先,由于
W
T
W
W^TW
WTW是正规阵 (因为
W
T
W
=
W
W
T
=
I
W^TW = WW^T=I
WTW=WWT=I),所以
W
T
W
W^TW
WTW一定正交相似于对角阵。即:
U
T
W
T
W
U
=
(
∑
2
0
0
0
)
U^TW^TWU = \begin{pmatrix}\sum^2 & 0 \\ 0 &0 \end{pmatrix}
UTWTWU=(∑2000)
其中 ∑ 2 = d i a g ( σ 1 2 , . . . , σ r 2 ) = d i a g ( λ 1 , . . . λ r ) \sum^2 = diag(\sigma_1^2,...,\sigma_r^2)=diag(\lambda_1,...\lambda_r) ∑2=diag(σ12,...,σr2)=diag(λ1,...λr) ,且 λ 1 ≧ λ 2 . . . ≧ λ r \lambda_1\geqq\lambda_2...\geqq\lambda_r λ1≧λ2...≧λr , λ 1 \lambda_1 λ1为其中最大的特征值。Power Iteration的具体做法是:
(1). 随机初始化一个向量 v ^ \hat v v^,并假设矩阵 W T W W^TW WTW的特征向量组为 v 1 , v 2 , . . . v r v_1,v_2,...v_r v1,v2,...vr ,由该特征向量组张成 R r R^r Rr
线性空间,则向量
v
^
\hat v
v^可表示为:
v
^
=
c
1
v
1
+
.
.
.
+
c
r
v
r
\hat v = c_1v_1+...+c_rv_r
v^=c1v1+...+crvr
(2). 然后用下面的式子迭代地更新
v
^
\hat v
v^:
u
^
=
W
T
W
v
^
v
^
=
W
T
W
u
^
.
.
.
.
.
.
\hat u = W^TW \hat v \\ \hat v = W^TW \hat u \\ ......
u^=WTWv^v^=WTWu^......
迭代k次相当于用
W
T
W
W^TW
WTW的k次幂左乘第一个式子得:
(
W
T
W
)
k
v
^
=
c
1
λ
1
k
v
1
+
c
2
λ
2
k
v
2
+
.
.
.
+
c
r
λ
r
k
v
r
=
λ
1
(
c
1
v
1
+
c
2
(
λ
2
k
λ
1
k
)
v
2
+
.
.
.
c
r
(
λ
r
k
λ
1
k
)
v
r
)
(W^TW)^k\hat v = c_1\lambda_1^kv_1+c_2\lambda_2^kv_2+...+c_r\lambda_r^kv_r\\ =\lambda_1(c_1v_1+c_2(\frac {\lambda_2^k}{\lambda_1^k})v_2+...c_r(\frac{\lambda_r^k}{\lambda_1^k})v_r)
(WTW)kv^=c1λ1kv1+c2λ2kv2+...+crλrkvr=λ1(c1v1+c2(λ1kλ2k)v2+...cr(λ1kλrk)vr)
当k→
∞
\infty
∞时,
lim
k
→
∞
λ
r
k
λ
1
k
=
0
\lim_{k\to \infty} \frac{\lambda_r^k}{\lambda_1^k}=0
limk→∞λ1kλrk=0,
(
W
T
W
)
k
v
^
≈
c
1
λ
1
k
v
1
(W^TW)^k\hat v \approx c_1 \lambda_1^kv_1
(WTW)kv^≈c1λ1kv1,这意味着,随着迭代的进行,
(
W
T
W
)
k
v
^
(W^TW)^k\hat v
(WTW)kv^
会收敛到 v 1 v_1 v1的某个倍数,其对应的特征值为 λ 1 \lambda_1 λ1,随后借助下面的瑞利商就可以实现近似求解最大的特征值 λ 1 \lambda_1 λ1。
瑞利商
若
x
∈
R
n
x\in \R^n
x∈Rn是矩阵
A
∈
R
n
×
n
A \in \R^{n\times n}
A∈Rn×n 的一个特征向量,则其对应的特征值为:
λ
=
⟨
A
x
,
x
⟩
⟨
x
,
x
⟩
\lambda = \frac{\langle Ax,x \rangle}{\langle x,x \rangle}
λ=⟨x,x⟩⟨Ax,x⟩
其中
⟨
.
.
.
⟩
\langle... \rangle
⟨...⟩表示内积。故有:
λ
1
=
v
1
T
(
W
T
W
)
v
1
v
1
T
v
1
\lambda_1 = \frac{v_1^T(W^TW)v_1}{v_1^Tv_1}
λ1=v1Tv1v1T(WTW)v1
瑞利商的证明其实很简单,因为已知
(
W
T
W
)
v
1
=
λ
1
v
1
(W^TW)v_1 = \lambda_1v_1
(WTW)v1=λ1v1带入上式即可。由于
W
T
W^T
WT和
W
W
W具有相同的奇异值,故其谱范数为:
σ
(
W
)
=
λ
1
\sigma(W) = \sqrt{\lambda_1}
σ(W)=λ1
解决了谱范数的求解问题,就回到最初开始的问题了,为何谱范数能使神经网络的参数矩阵满足Lipschitz连续性条件呢?这是因为如果将矩阵乘法看作是一种线性变换,那么会满足下面的约束条件:
对于任意向量
x
x
x,经过矩阵W的变换后(即
W
x
Wx
Wx),其长度都不会大于
σ
(
W
)
\sigma(W)
σ(W),即:
∣
W
x
∣
<
σ
(
W
)
∣
x
∣
|Wx|<\sigma(W)|x|
∣Wx∣<σ(W)∣x∣
因此,只需要每次更新参数之后都除以谱范数
σ
(
W
)
\sigma(W)
σ(W),自然就能使参数矩阵满足1-Lipschitz连续性条件了。
详细的证明过程看这里:详细证明过程
参考
https://www.youtube.com/watch?v=MP0BnVH2yOo&list=PLJV_el3uVTsMhtt7_Y6sgTHGHp1Vb2P2J&index=16
https://zhuanlan.zhihu.com/p/63957812
https://zhuanlan.zhihu.com/p/25071913
https://christiancosgrove.com/blog/2018/01/04/spectral-normalization-explained.html