赞
踩
GAN的基本架构如下图所示。
图源
GAN的核心是生成器Generator和判别器Discriminator。二者本质上都是多层感知机网络。
GAN训练的基本流程:每一轮梯度反向传播过程中,先训练Discriminator,再训练Generator。
具体来说,假设现在进行第k轮训练:
discriminator.trainable = False
,即Discriminator的参数此时不能更新。Generator根据输入随机信号z产生假图像G^{k-1}(z),输入Discriminator进行打分score。score和标签1之间的差值作为损失函数loss反向传播,更新Generator的参数。变量命名:
2.1.1. 最优解
D
G
∗
(
x
)
D^*_G(x)
DG∗(x)
用
D
G
(
x
)
D_G(x)
DG(x)表示假图像与真图像之间的相似性,即上文的score。
D
G
(
x
)
D_G(x)
DG(x)越大,则Generator以假乱真的能力越强。
固定Generator时,Discriminator的最优解(极大值点)为:
2.1.2. 优化问题
max
V
(
G
,
D
)
\max V(G,D)
maxV(G,D)
Discriminator的优化目标是增强判别真假的能力,因此可以归纳为一个优化问题,即
max
D
V
(
G
,
D
)
\max_D V(G,D)
maxDV(G,D)。因为Generator已经固定,有
x
=
g
(
z
)
x=g(z)
x=g(z),
x
x
x与
z
z
z一一映射。因此,第二项可以用
x
x
x替换
z
z
z。
很明显,
V
(
G
,
D
)
V(G,D)
V(G,D)是一个香农熵(Jesen-Shannon Divergence,JSD)的形式,是为了衡量两种概率分布(这里是,
p
d
a
t
a
p_{data}
pdata和
p
g
p_g
pg)的相似性提出的方法。
D
J
S
(
P
∥
Q
)
=
1
2
D
K
L
(
P
∥
M
)
+
1
2
D
K
L
(
Q
∥
M
)
\operatorname{D_{\mathrm{JS}}}(P \| Q)=\frac{1}{2} D_{\mathrm{KL}}(P \| M)+\frac{1}{2} D_{\mathrm{KL}}(Q \| M)
DJS(P∥Q)=21DKL(P∥M)+21DKL(Q∥M)
其中,
M
=
P
+
Q
2
M=\frac{P+Q}{2}
M=2P+Q。
D
K
L
(
∗
)
D_{\mathrm{KL}}(*)
DKL(∗)表示相对熵(Kullback-Leibler Divergence,KLD)。
D
K
L
(
P
∥
Q
)
=
∫
x
P
(
x
)
ln
P
(
x
)
Q
(
x
)
D_{\mathrm{KL}}(P \| Q)=\int_x P(x) \ln \frac{P(x)}{Q(x)}
DKL(P∥Q)=∫xP(x)lnQ(x)P(x)
我们要找到
V
(
G
,
D
)
V(G,D)
V(G,D)的极大值,因此对式(3)积分号内的数学表达式关于
D
(
x
)
D(x)
D(x)求导,导数为0处即为极大值点:
p
d
a
t
a
(
x
)
1
ln
10
1
D
(
x
)
−
p
g
1
ln
10
1
1
−
D
(
x
)
=
0
p_{data}(x)\frac{1}{\ln10}\frac{1}{D(x)}-p_g\frac{1}{\ln10}\frac{1}{1-D(x)}=0
pdata(x)ln101D(x)1−pgln1011−D(x)1=0
进而有
D
G
∗
(
x
)
=
p
data
(
x
)
p
data
(
x
)
+
p
g
(
x
)
∈
[
0
,
1
]
D_{G}^{*}(\boldsymbol{x})=\frac{p_{\text {data }}(\boldsymbol{x})}{p_{\text {data }}(\boldsymbol{x})+p_{g}(\boldsymbol{x})}\in[0,1]
DG∗(x)=pdata (x)+pg(x)pdata (x)∈[0,1]
易知,
p
g
=
p
d
a
t
a
p_g=p_{data}
pg=pdata时,
D
G
∗
D^*_G
DG∗的值最大。
D
G
,
m
a
x
∗
=
1
2
D^*_{G,max}=\frac{1}{2}
DG,max∗=21
Discriminator固定时, 令损失函数 C ( G ) = V ( G , D G ∗ ) = max D V ( G , D ) C(G)=V(G, D^*_G)=\max _{D} V(G,D) C(G)=V(G,DG∗)=maxDV(G,D),优化目标转变成使生成假图像尽可能接近真实图像。因此,形成了一个新的优化问题: min G C ( G ) = min G max D V ( G , D ) \min_G C(G)=\min_G \max _{D} V(G, D) minGC(G)=minGmaxDV(G,D)。
那什么时候
C
(
G
)
C(G)
C(G)最小呢?
应该是
p
g
p_g
pg和
p
d
a
t
a
p_{data}
pdata最接近的时候,即生成的假图像最接近真实图像。理想的情况就是和真图像一摸一样。
那么,用香农熵考察
p
g
p_g
pg和
p
d
a
t
a
p_{data}
pdata的相似性:
D
J
S
(
p
d
a
t
a
∥
p
g
)
=
1
2
D
K
L
(
p
d
a
t
a
∥
p
d
a
t
a
+
p
g
2
)
+
1
2
D
K
L
(
p
g
∥
p
d
a
t
a
+
p
g
2
)
=
1
2
(
log
2
+
∫
x
p
d
a
t
a
(
x
)
log
p
d
a
t
a
(
x
)
p
d
a
t
a
+
p
g
(
x
)
d
x
)
+
1
2
(
log
2
+
∫
x
p
g
(
x
)
log
p
g
(
x
)
p
d
a
t
a
+
p
g
(
x
)
d
x
)
=
1
2
(
log
4
+
V
(
G
,
D
G
∗
)
)
=
1
2
(
log
4
+
C
(
G
)
)
DJS(pdata‖
DJS(pdata∥pg)====21DKL(pdata∥2pdata+pg)+21DKL(pg∥2pdata+pg)21(log2+∫xpdata(x)logpdata+pg(x)pdata(x)dx)+21(log2+∫xpg(x)logpdata+pg(x)pg(x)dx)21(log4+V(G,DG∗))21(log4+C(G))
进而,
C
(
G
)
C(G)
C(G)可以表示为
C
(
G
)
=
−
log
(
4
)
+
2
⋅
D
J
S
(
p
data
∥
p
g
)
C(G)=-\log (4)+2 \cdot D_{JS}\left(p_{\text {data }} \| p_{g}\right)
C(G)=−log(4)+2⋅DJS(pdata ∥pg)
因为香农熵
D
J
S
(
∗
)
D_{JS}(*)
DJS(∗)非负,且在
p
g
=
p
d
a
t
a
p_g=p_{data}
pg=pdata时取到
D
J
S
(
p
data
∥
p
g
)
=
0
D_{JS}\left(p_{\text {data }} \| p_{g}\right)=0
DJS(pdata ∥pg)=0,有损失函数最小值
C
∗
(
G
)
=
−
log
4
C^*(G)=-\log4
C∗(G)=−log4。
我将实现的GAN开源在Colab上:Code
介绍一个GitHub上好玩的GAN项目《双城之战》风格人脸生成ArcaneGAN
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。