本文整理自B站的白板推导系列。这篇主要讲解GAN的原理。下一篇会动手在minist数据集上实现一个GAN。
一个例子
现在有一批国宝,一个造假专家和一个鉴赏专家。造假专家通过观察国宝,然后仿造工艺品,鉴赏专家通过判断一个工艺品是国宝还是造假专家仿造的,对造假专家进行反馈。同时造假专家也会对鉴赏专家进行反馈,提升鉴赏专家的鉴赏能力。
鉴赏专家的目标是通过上面的训练成为高水平的鉴赏专家,造假专家的目标是通过上面的训练成为高水平的造假专家,造出的工艺品能以假乱真。
数学描述
国宝是真实的,用 p d a t a ( x ) p_{data}(x) pdata(x)来描述,假设有 N 个 国 宝 N个国宝 N个国宝,那么有 x i ∼ p d a t a ( x i ) , i ∈ [ 1 , N ] x_{i} \sim p_{data}(x_i), i \in[1, N] xi∼pdata(xi),i∈[1,N]。造假专家制作的工艺品是仿造的,用 p g ( x ; θ g ) p_g(x; \theta_g) pg(x;θg)来描述, θ g \theta_g θg是分布的参数。
在GAN中,并没有直接对
p
g
(
x
;
θ
g
)
p_{g}(x;\theta_g)
pg(x;θg)建模,而是用一个神经网络去逼近
p
g
(
x
;
θ
g
)
p_{g}(x;\theta_g)
pg(x;θg),而网络的参数就是
θ
g
\theta_g
θg。由于纯粹的神经网络是不具备随机性的,所以假设
x
x
x是由一个随机变量
z
z
z生成的,
z
z
z服从一个简单的分布,比如高斯分布,这样就引入了随机性。假设
z
∼
p
z
(
z
)
z \sim p_{z}(z)
z∼pz(z)
上面提到的神经网络就是
G
(
z
;
θ
g
)
G(z;\theta_g)
G(z;θg),那么
x
=
G
(
z
;
θ
g
)
x=G(z;\theta_g)
x=G(z;θg),上面这个过程其实也就是由一个隐变量生成样本的过程,也就是在建模分布
p
g
(
x
∣
z
)
p_{g}(x|z)
pg(x∣z)。VAE中不也是这样吗?只不过在VAE中显示定义了
p
g
(
x
∣
z
)
p_{g}(x|z)
pg(x∣z)的形式,一般都是高斯分布,而在GAN中,则用一个神经网络去拟合分布
p
g
(
x
∣
z
)
p_{g}(x|z)
pg(x∣z),并没有假设其具体形式,所以从这个角度来看,是不是GAN比VAE要更好。
令 D ( x ; θ d ) D(x;\theta_d) D(x;θd)是鉴赏专家鉴别造假专家生成的 x x x是国宝的概率, D ( x ; θ d ) D(x;\theta_d) D(x;θd)越大,表示鉴赏专家认为 x x x是国宝的概率越高。
也就是:
对于鉴赏专家来说:
- 如果 x x x是来自于 p d a t a p_{data} pdata,那么 D ( x ) D(x) D(x)应该越高,
- 如果 x x x是来自于 p g p_{g} pg,那么 D ( x ) D(x) D(x)应该越低,也就是 1 − D ( x ) 1-D(x) 1−D(x)应该越高。前面已经说到造假专家的 x x x是通过 G ( z ; θ g ) G(z;\theta_g) G(z;θg)生成的,那么也就是 1 − D ( G ( z ; θ g ) ) 1-D(G(z;\theta_g)) 1−D(G(z;θg))应该越高。
综上,站在鉴赏专家的角度考虑,就是使下式最大化:
E
x
∼
p
d
a
t
a
[
D
(
x
)
]
+
E
z
∼
p
z
[
1
−
D
(
G
(
z
;
θ
g
)
)
]
E_{x \sim p_{data}}[D(x)] +E_{z \sim p_{z}}[1-D(G(z;\theta_g))]
Ex∼pdata[D(x)]+Ez∼pz[1−D(G(z;θg))]
为了计算的方方便,上面一般都取
l
o
g
log
log,也就是:
E
x
∼
p
d
a
t
a
[
l
o
g
D
(
x
)
]
+
E
z
∼
p
z
[
l
o
g
(
1
−
D
(
G
(
z
;
θ
g
)
)
)
]
(1)
\tag{1} E_{x \sim p_{data}}[logD(x)] +E_{z \sim p_{z}}[log(1-D(G(z;\theta_g)))]
Ex∼pdata[logD(x)]+Ez∼pz[log(1−D(G(z;θg)))](1)
对于造假专家来说:
- 如果 x x x是来自于 p g p_g pg,那么希望鉴赏专家将其鉴别为真,也就是 l o g ( 1 − D ( G ( z ) ) ) log(1-D(G(z))) log(1−D(G(z)))越小。
站在造假专家的角度考虑就是使得下式最小:
E
x
∼
p
z
[
l
o
g
(
1
−
D
(
G
(
z
;
θ
g
)
)
)
]
E_{x \sim p_{z}}[log(1-D(G(z;\theta_g)))]
Ex∼pz[log(1−D(G(z;θg)))]
综合鉴赏专家和造假专家的损失函数,最终GAN的损失是:
m
i
n
G
m
a
x
D
[
E
x
∼
p
d
a
t
a
[
l
o
g
D
(
x
)
]
+
E
z
∼
p
z
[
l
o
g
(
1
−
D
(
G
(
z
;
θ
g
)
)
)
]
]
(2)
\tag{2} min_{G} max_{D}[E_{x \sim p_{data}}[logD(x)] +E_{z \sim p_{z}}[log(1-D(G(z;\theta_g)))]]
minGmaxD[Ex∼pdata[logD(x)]+Ez∼pz[log(1−D(G(z;θg)))]](2)
GAN的难点是学习出来 G 和 D G和D G和D,也就是学习出 θ g 和 θ d \theta_g和\theta_d θg和θd。
GAN的另一大特点是,GAN并没有直接去面对 p g p_{g} pg,没有假设 p g p_{g} pg的具体形式,而是用了一个可微的神经网络 G ( z ; θ g ) G(z;\theta_g) G(z;θg)去逼近 p g p_g pg。
全局最优解
令 V ( G , D ) = E x ∼ p d a t a [ l o g D ( x ) ] + E x ∼ p g [ l o g ( 1 − D ( x ) ) ] (3) \tag{3} V(G,D)=E_{x \sim p_{data}}[logD(x)] +E_{x \sim p_{g}}[log(1-D(x))] V(G,D)=Ex∼pdata[logD(x)]+Ex∼pg[log(1−D(x))](3)
为了推导方便,这里将
z
z
z都换成了
x
x
x。将
G
和
D
G和D
G和D理解为神经网络就行。所以目标就变成了
m
i
n
G
m
a
x
D
V
(
G
,
D
)
(4)
\tag{4}min_{G}max_{D} V(G,D)
minGmaxDV(G,D)(4)
- 固定
G
,
m
a
x
D
V
(
G
,
D
)
G,max_{D}V(G,D)
G,maxDV(G,D)。
m a x D V ( G , D ) = ∫ p d a t a ( x ) l o g D ( x ) d x + ∫ p g ( x ) l o g ( 1 − D ( x ) ) d x = ∫ p d a t a ( x ) l o g D ( x ) + p g ( x ) l o g ( 1 − D ( x ) ) d x (5) \begin{aligned} \tag{5} max_{D}V(G,D)= & \int p_{data}(x)logD(x)dx+\int p_{g}(x)log(1-D(x))dx \\ = & \int p_{data}(x)logD(x)+p_{g}(x)log(1-D(x))dx \end{aligned} maxDV(G,D)==∫pdata(x)logD(x)dx+∫pg(x)log(1−D(x))dx∫pdata(x)logD(x)+pg(x)log(1−D(x))dx(5)
(5)式对
D
D
D求导得:
∂
m
a
x
D
V
(
G
,
D
)
∂
D
=
∫
∂
∂
D
[
p
d
a
t
a
(
x
)
l
o
g
D
(
x
)
+
p
g
(
x
)
l
o
g
(
1
−
D
(
x
)
)
]
d
x
=
∫
[
p
d
a
t
a
(
x
)
1
D
(
x
)
−
p
g
(
x
)
1
1
−
D
(
x
)
]
d
x
(6)
\begin{aligned} \tag{6} {\partial max_{D}V(G,D) \over \partial D} = & \int {\partial \over \partial D}[p_{data}(x)logD(x)+p_{g}(x)log(1-D(x))]dx \\ = & \int [p_{data}(x){1 \over D(x)}-p_{g}(x){1 \over 1-D(x)}]dx \end{aligned}
∂D∂maxDV(G,D)==∫∂D∂[pdata(x)logD(x)+pg(x)log(1−D(x))]dx∫[pdata(x)D(x)1−pg(x)1−D(x)1]dx(6)
令(6)式等于0,解得:
D
G
∗
(
x
)
=
p
d
a
t
a
(
x
)
p
d
a
t
a
(
x
)
+
p
g
(
x
)
D^{*}_{G}(x) = {p_{data}(x) \over p_{data}(x)+p_{g}(x)}
DG∗(x)=pdata(x)+pg(x)pdata(x)
p
d
a
t
a
(
x
)
p_{data}(x)
pdata(x)虽然形式未知,但是给定数据时是固定不变的。
p
g
(
x
)
p_{g}(x)
pg(x)是变化的,所以
D
G
∗
D^{*}_{G}
DG∗是关于生成器
p
g
(
x
)
p_{g}(x)
pg(x)的函数。
- 将
D
G
∗
D^{*}_{G}
DG∗带入(4)式
m i n G m a x D V ( G , D ) = m i n G V ( G , D ∗ ) = m i n G E x ∼ p d a t a [ l o g p d a t a ( x ) p d a t a ( x ) + p g ( x ) ] + E x ∼ p g [ l o g p g ( x ) p d a t a ( x ) + p g ( x ) ] = m i n G E x ∼ p d a t a [ l o g p d a t a ( x ) ∗ 1 2 ( p d a t a ( x ) + p g ( x ) ) / 2 ) ] + E x ∼ p g [ l o g p g ( x ) ∗ 1 2 ( p d a t a ( x ) + p g ( x ) ) / 2 ] = m i n G K L ( p d a t a ( x ) ∣ ∣ p d a t a ( x ) + p g ( x ) 2 ) + K L ( p g ( x ) ∣ ∣ p d a t a ( x ) + p g ( x ) 2 ) − l o g 4 = m i n G J S ( p d a t a ( x ) ∣ ∣ p g ( x ) ) − l o g 4 ≥ − l o g 4 (7) \begin{aligned} \tag{7} min_{G}max_{D} V(G,D) = & min_{G}V(G, D^{*})\\ = & min_{G} E_{x \sim p_{data}}[log {p_{data}(x) \over p_{data}(x)+p_{g}(x)}] + E_{x \sim p_{g}}[log {p_{g}(x) \over p_{data}(x)+p_{g}(x)}] \\ = & min_{G} E_{x \sim p_{data}}[log {p_{data}(x) *{1\over 2}\over (p_{data}(x)+p_{g}(x))/2})] + E_{x \sim p_{g}}[log {p_{g}(x)*{1 \over 2} \over (p_{data}(x)+p_{g}(x)) / 2}] \\ = & min_{G} KL(p_{data}(x)||{p_{data}(x) + p_{g}(x) \over 2}) + KL(p_{g}(x)||{p_{data}(x) + p_{g}(x) \over 2}) -log4 \\ = & min_{G}JS(p_{data}(x)||p_{g}(x)) -log4\\ \ge & -log4 \end{aligned} minGmaxDV(G,D)=====≥minGV(G,D∗)minGEx∼pdata[logpdata(x)+pg(x)pdata(x)]+Ex∼pg[logpdata(x)+pg(x)pg(x)]minGEx∼pdata[log(pdata(x)+pg(x))/2pdata(x)∗21)]+Ex∼pg[log(pdata(x)+pg(x))/2pg(x)∗21]minGKL(pdata(x)∣∣2pdata(x)+pg(x))+KL(pg(x)∣∣2pdata(x)+pg(x))−log4minGJS(pdata(x)∣∣pg(x))−log4−log4(7)
当 p d a t a ( x ) = p d a t a ( x ) + p g ( x ) 2 = p g ( x ) p_{data}(x)={p_{data}(x)+p_{g}(x) \over 2} =p_{g}(x) pdata(x)=2pdata(x)+pg(x)=pg(x)时取等号。
此时, p g ∗ = p d a t a , D G ∗ = 0.5 p^{*}_{g}=p_{data}, D^{*}_{G}=0.5 pg∗=pdata,DG∗=0.5,这就是全局最优解,此时鉴别器对于生成器输出的 x x x都输出0.5,说明鉴别器已无法判断 x x x是真实数据还是假数据。生成器达到了全局最优。