本文主要是列举几种GAN中的loss函数形式以及部分相关知识。
1. GAN的多种形式
1.1 GAN 14.01
原始GAN论文[1]中指出,生成器
G
G
G和判别器
D
D
D在进行零和博弈,最终达到纳什均衡。可以用下面的值函数(value function)表示:
min
G
max
D
V
(
G
,
D
)
=
min
G
max
D
E
x
∼
p
d
a
t
a
[
log
D
(
x
)
]
+
E
z
∼
p
z
[
log
(
1
−
D
(
G
(
z
)
)
)
]
\min_{G} \max_{D} V(G, D) = \min_{G} \max_{D} \mathbb{E}_{x \sim p_{data}}[\log D(x)] + \mathbb{E}_{z \sim p_{z}}[\log (1-D(G(z)))]
GminDmaxV(G,D)=GminDmaxEx∼pdata[logD(x)]+Ez∼pz[log(1−D(G(z)))]
其中
p
d
a
t
a
p_{data}
pdata表示真实数据分布,
x
x
x表示该分布中的样本,
p
z
p_{z}
pz表示噪声变量
z
z
z的先验分布。
在求解时分别对生成器和判别器计算loss,vanilla GAN中由于生成器loss不同而有两种形式:
1) Minimax GAN
判别器loss和生成器loss分别为:
max
D
L
(
D
)
=
E
x
∼
p
d
a
t
a
[
log
D
(
x
)
]
+
E
z
∼
p
z
[
log
(
1
−
D
(
G
(
z
)
)
)
]
min
G
L
(
G
)
=
E
z
∼
p
z
[
log
(
1
−
D
(
G
(
z
)
)
)
]
\begin{aligned} &\max_{D} L(D) = \mathbb{E}_{x \sim p_{data}}[\log D(x)] + \mathbb{E}_{z \sim p_{z}}[\log (1-D(G(z)))] \\ &\min_{G} L(G) = \mathbb{E}_{z \sim p_{z}}[\log (1-D(G(z)))] \end{aligned}
DmaxL(D)=Ex∼pdata[logD(x)]+Ez∼pz[log(1−D(G(z)))]GminL(G)=Ez∼pz[log(1−D(G(z)))]
上式的判别器loss就是负的二分类交叉熵损失。
2) Non-saturating GAN
仅是更改了生成器loss形式,在[2]中3.2一节有更详细的解释,1)中初期判别器能很好地区分真假样本的时候,生成器会面临梯度消失的问题。更改后的生成器loss在训练初期会有较大的梯度,使得生成器能较快开始更新。
max
D
L
(
D
)
=
E
x
∼
p
d
a
t
a
[
log
D
(
x
)
]
+
E
z
∼
p
z
[
log
(
1
−
D
(
G
(
z
)
)
)
]
min
G
L
(
G
)
=
−
E
z
∼
p
z
[
log
D
(
G
(
z
)
)
]
\begin{aligned} &\max_{D} L(D) = \mathbb{E}_{x \sim p_{data}}[\log D(x)] + \mathbb{E}_{z \sim p_{z}}[\log (1-D(G(z)))] \\ &\min_{G} L(G) = -\mathbb{E}_{z \sim p_{z}}[\log D(G(z))] \end{aligned}
DmaxL(D)=Ex∼pdata[logD(x)]+Ez∼pz[log(1−D(G(z)))]GminL(G)=−Ez∼pz[logD(G(z))]
两种不同生成器loss的示意图[2]:
但是上述两种形式的GAN还是存在若干问题,详见1.4节。
1.2 BiGAN 16.05
BiGAN[12]全称 Bidirectional Generative Adversarial Networks,意为双向GAN。文中作者结合编解码器和判别器的结构,设计出了双向GAN,这里的双向指的是一个方向从编码器到解码器,另一个方向是从解码器到编码器。具体组织形式如下图:
说明:
- G G G:生成器,可视为解码器; D D D:判别器; E E E:编码器
- x \textbf{x} x:真实样本; z \textbf{z} z:潜在表征(latent representation)
- E ( x ) E(\textbf{x}) E(x): x \textbf{x} x编码到潜在空间的表征
- G ( z ) G(\textbf{z}) G(z):由 z \textbf{z} z生成出的数据
- y y y:表示分类结果。若来自真实样本, y = 1 y=1 y=1;若是生成样本, y = 0 y=0 y=0
上图描述的过程是:
- 输入真实图像 x \textbf{x} x,经过 E E E编码后得到 E ( x ) E(\textbf{x}) E(x)。
- 从某个分布中采样随机噪声 z \textbf{z} z,经过 G G G解码得到 G ( z ) G(\textbf{z}) G(z)。
- 经过上述2步后,得到两个样本对 ( x , E ( x ) ) (\textbf{x},E(\textbf{x})) (x,E(x))和 ( G ( z ) , z ) (G(\textbf{z}),\textbf{z}) (G(z),z),将这两个样本对输入到判别器 D D D,让 D D D判断是由编码器 E E E还是生成器 G G G产生的。
最终目的就是让判别器 D D D区分不出是从编码器 E E E(Real)还是从生成器 G G G(Fake)产生的。
优化过程如[13]中图示:
注:上图中的
D
e
De
De就是前文图示中的
G
G
G。
BiGAN的目标函数如下所示:
该目标函数的含义就跟vanilla GAN中一样,要是来自真实数据,判别器
D
D
D输出就越大;若是来自生成数据,
D
D
D的输出就越小。
最优的编码器
E
E
E和生成器
G
G
G是想要达到:
x
=
G
(
E
(
x
)
)
z
=
E
(
G
(
z
)
)
\begin{aligned} &\textbf{x} = G(E(\textbf{x})) \\ &\textbf{z}= E(G(\textbf{z})) \end{aligned}
x=G(E(x))z=E(G(z))
E
E
E和
D
D
D就成了一对互逆的网络。
BiGAN让GAN有了表征学习能力,因为BiGAN里有从数据空间向潜在空间的映射,这使得可以学习到一些有意义的特征,捕捉到高层语义。
与BiGAN几乎相同的工作,ALI(Adversarially Learned Inference)[14]于16.06挂在了arxiv上,在博客[15]中有讲到这篇文章。
1.3 LSGAN 16.11
判别器loss和生成器loss为:
min
D
L
(
D
)
=
1
2
E
x
∼
p
d
a
t
a
[
(
D
(
x
)
−
1
)
2
]
+
1
2
E
z
∼
p
z
[
(
D
(
G
(
z
)
)
)
2
]
min
G
L
(
G
)
=
1
2
E
z
∼
p
z
[
(
D
(
G
(
z
)
)
−
1
)
2
]
\begin{aligned} &\min_{D} L(D) = \frac{1}{2}\mathbb{E}_{x \sim p_{data}}[(D(x)-1)^2] + \frac{1}{2}\mathbb{E}_{z \sim p_{z}}[(D(G(z)))^2] \\ &\min_{G} L(G) = \frac{1}{2}\mathbb{E}_{z \sim p_{z}}[(D(G(z))-1)^2] \end{aligned}
DminL(D)=21Ex∼pdata[(D(x)−1)2]+21Ez∼pz[(D(G(z)))2]GminL(G)=21Ez∼pz[(D(G(z))−1)2]
1.4 WGAN 17.01
WGAN[4, 5]是利用了Wasserstein distance(也叫Earth Mover’s Distance)来度量真实分布和生成分布间的距离,目的就是解决vanilla GAN存在的问题[6]:
在原始GAN的(近似)最优判别器下,第一种生成器loss面临梯度消失问题,第二种生成器loss面临优化目标荒谬、梯度不稳定、对多样性与准确性惩罚不平衡导致mode collapse这几个问题。
这里的“第一种生成器loss”指Minimax GAN中的。在最优判别器下,生成器loss即由两个分布间的JS散度表示。当真实分布和生成分布不相交的时候,两个分布间的JS散度是个固定值
l
o
g
2
log2
log2,也就是说生成器loss是个常数,当前也就不能提供梯度以用于参数的更新。
“第二种生成器loss”值Non-saturating GAN中的。
WGAN的值函数为:
min
G
max
D
∈
1
−
L
i
p
s
c
h
t
i
z
E
x
∼
p
d
a
t
a
[
D
(
x
)
]
−
E
z
∼
p
z
[
D
(
G
(
z
)
)
]
\min_{G} \max_{D \in 1-Lipschtiz}\mathbb{E}_{x \sim p_{data}}[D(x)] - \mathbb{E}_{z \sim p_{z}}[D(G(z))]
GminD∈1−LipschtizmaxEx∼pdata[D(x)]−Ez∼pz[D(G(z))]
判别器loss和生成器loss为:
min
D
L
(
D
)
=
E
z
∼
p
z
[
D
(
G
(
z
)
)
]
−
E
x
∼
p
d
a
t
a
[
D
(
x
)
]
min
G
L
(
G
)
=
−
E
z
∼
p
z
[
D
(
G
(
z
)
)
]
\begin{aligned} &\min_{D} L(D) = \mathbb{E}_{z \sim p_{z}}[D(G(z))] - \mathbb{E}_{x \sim p_{data}}[D(x)] \\ &\min_{G} L(G) = -\mathbb{E}_{z \sim p_{z}}[D(G(z))] \end{aligned}
DminL(D)=Ez∼pz[D(G(z))]−Ex∼pdata[D(x)]GminL(G)=−Ez∼pz[D(G(z))]
WGAN为了让
D
D
D满足
1
−
L
i
p
s
c
h
t
i
z
1-Lipschtiz
1−Lipschtiz 连续,引入weight clipping,把神经网络的参数限制在某个范围
[
−
c
,
c
]
[-c, c]
[−c,c]内,
w
:
=
c
l
i
p
_
b
y
_
v
a
l
u
e
(
w
,
−
0.01
,
0.01
)
w :=clip\_by\_value(w, -0.01, 0.01)
w:=clip_by_value(w,−0.01,0.01)
1.5 WGAN-GP 17.04
WGAN-GP[7]改进了让
D
D
D满足
1
−
L
i
p
s
c
h
t
i
z
1-Lipschtiz
1−Lipschtiz 连续的条件,将weight clipping换成了Gradient Penalty。
有下面等价形式[8]:
D
∈
1
−
L
i
p
s
c
h
t
i
z
⇔
∥
∇
x
D
(
x
)
∥
2
≤
1
f
o
r
a
l
l
x
D \in 1-Lipschtiz \Leftrightarrow \Vert \nabla_xD(x) \Vert_{2} \leq 1\quad for\ all\ x
D∈1−Lipschtiz⇔∥∇xD(x)∥2≤1for all x
上式意思是:
D
(
x
)
D(x)
D(x)对所有
x
x
x求梯度,所有梯度的2-范数都小于等于1即说明
D
D
D是
1
−
L
i
p
s
c
h
t
i
z
1-Lipschtiz
1−Lipschtiz 连续。
但是对所有
x
x
x进行计算时不现实的,
x
x
x的数据空间很大,不可能遍历到所有
x
x
x,为此WGAN-GP中选择了
x
∼
p
p
e
n
a
l
t
y
x\sim p_{penalty}
x∼ppenalty来计算。这个
p
p
e
n
a
l
t
y
p_{penalty}
ppenalty是指真实分布和生成分布间的区域,也就是说选择一个真实样本
x
r
x_r
xr和一个生成样本
x
g
x_g
xg,两个样本间的连线上选择一个样本
x
p
x_p
xp,即
x
p
=
α
x
r
+
(
1
−
α
)
x
g
,
0
≤
α
≤
1
x_p=\alpha x_r + (1-\alpha)x_g,\ 0 \leq \alpha \leq 1
xp=αxr+(1−α)xg, 0≤α≤1。这些样本构成了
p
p
e
n
a
l
t
y
p_{penalty}
ppenalty。如下图所示:
WGAN-GP的目标函数:
min
G
max
D
V
(
G
,
D
)
=
E
x
∼
p
d
a
t
a
[
D
(
x
)
]
−
E
z
∼
p
z
[
D
(
G
(
z
)
)
]
−
λ
E
x
^
∼
p
p
e
n
a
l
t
y
[
(
∥
∇
x
^
D
(
x
^
)
∥
2
−
1
)
2
]
\min_{G} \max_{D}V(G, D)=\mathbb{E}_{x \sim p_{data}}[D(x)] - \mathbb{E}_{z \sim p_{z}}[D(G(z))] - \lambda \mathbb{E}_{\hat x \sim p_{penalty}}[(\Vert \nabla_{\hat x}D(\hat x) \Vert_{2}-1)^2]
GminDmaxV(G,D)=Ex∼pdata[D(x)]−Ez∼pz[D(G(z))]−λEx^∼ppenalty[(∥∇x^D(x^)∥2−1)2]
判别器loss和生成器loss为:
min
D
L
(
D
)
=
E
z
∼
p
z
[
D
(
G
(
z
)
)
]
−
E
x
∼
p
d
a
t
a
[
D
(
x
)
]
+
λ
E
x
^
∼
p
p
e
n
a
l
t
y
[
(
∥
∇
x
^
D
(
x
^
)
∥
2
−
1
)
2
]
min
G
L
(
G
)
=
−
E
z
∼
p
z
[
D
(
G
(
z
)
)
]
\begin{aligned} &\min_{D} L(D) = \mathbb{E}_{z \sim p_{z}}[D(G(z))] - \mathbb{E}_{x \sim p_{data}}[D(x)] + \lambda \mathbb{E}_{\hat x \sim p_{penalty}}[(\Vert \nabla_{\hat x}D(\hat x) \Vert_{2}-1)^2] \\ &\min_{G} L(G) = -\mathbb{E}_{z \sim p_{z}}[D(G(z))] \end{aligned}
DminL(D)=Ez∼pz[D(G(z))]−Ex∼pdata[D(x)]+λEx^∼ppenalty[(∥∇x^D(x^)∥2−1)2]GminL(G)=−Ez∼pz[D(G(z))]
1.6 Geometric GAN 17.05
Geometric GAN[9]利用了SVM中hinge loss思想,对生成器loss和判别器loss做出了相应改变。
判别器loss和生成器loss为:
min
D
L
(
D
)
=
E
x
∼
p
d
a
t
a
[
m
a
x
(
0
,
1
−
D
(
x
)
)
]
+
E
z
∼
p
z
[
m
a
x
(
0
,
1
+
D
(
G
(
z
)
)
)
]
min
G
L
(
G
)
=
−
E
z
∼
p
z
[
D
(
G
(
z
)
)
]
\begin{aligned} &\min_{D} L(D) = \mathbb{E}_{x \sim p_{data}}[max (0, 1- D(x))] + \mathbb{E}_{z \sim p_z}[max(0, 1+D(G(z)))] \\ &\min_{G} L(G) = -\mathbb{E}_{z \sim p_z}[D(G(z))] \end{aligned}
DminL(D)=Ex∼pdata[max(0,1−D(x))]+Ez∼pz[max(0,1+D(G(z)))]GminL(G)=−Ez∼pz[D(G(z))]
2. 相关知识
2.1 Gradient Penalty
在1.5节中有说到在判别器loss上施加gradient penalty,起到正则化的作用,也使GAN能具有某些性质。
[10]中提出了两种 gradient penalty方法:
说明:上图中
p
D
(
x
)
p_{D}(x)
pD(x)表示真实样本分布,
p
θ
(
x
)
p_{\theta}(x)
pθ(x)表示生成样本分布。
在[11]中将上图中
R
1
R_1
R1正则化项称为0-GP-sample,WGAN-GP中的正则化项称为1-GP,同时提出了0-GP方法。引用[11]中的图表:
说明:上图中的
x
\textbf{\textit{x}}
x指的是真实样本,
y
\textbf{\textit{y}}
y指的是生成样本。
参考文献
[1] Generative Adversarial Nets
[2] NIPS 2016 tutorial: Generative adversarial networks
[3] Least Squares Generative Adversarial Networks
[4] Towards principled methods for training generative adversarial networks
[5] Wasserstein Generative Adversarial Networks
[6] 令人拍案叫绝的Wasserstein GAN(推荐阅读一下)
[7] Improved Training of Wasserstein GANs
[8] 李宏毅WGAN讲义
[9] Geometric GAN
[10] Which Training Methods for GANs do actually Converge?
[11] Improving Generalization and Stability of Generative Adversarial Networks
[12] Adversarial Feature Learning
[13] 李宏毅InfoGAN, VAE-GAN, BiGAN讲义
[14] Adversarially Learned Inference
[15] 关于GAN你想知道的全部