Generative Adversarial Nets
Ian J. Goodfellow et al.
摘要
本文评估生成模型的新方法:对抗网络。同时训练生成器与判别器,生成器的目的是拟合出真实数据的分布,判别器的目的是评估样本为真实数据而非生成数据的概率。
在训练过程中,生成器尽最大努力使判别器误判,而判别器将尽最大努力作出正确判断。这实质上为零和博弈,结果为生成器可以复原真实数据分布,生成高度伪造的数据,以假乱真,使得判别器对每个样本判断结果为
1
2
\frac{1}{2}
21.
概述
文中探究了一种简单情形:生成模型为一个多层感知机,往其中输入随机噪声数据,得到输出的生成样本。而判别器也是一个多层感知机。假设随机噪声
z
z
z的的分布为
p
z
(
z
)
p_z(z)
pz(z),生成器
G
G
G生成的数据分布为
p
g
(
z
)
=
G
(
z
;
θ
g
)
p_g(z)=G(z;\theta_g)
pg(z)=G(z;θg),其中
θ
g
\theta_g
θg为生成器
G
G
G的参数,生成器
G
G
G的目标就是使已知分布
p
g
(
z
)
p_g(z)
pg(z)尽量接近未知的真实数据分布
p
d
a
t
a
(
x
)
p_{data}(x)
pdata(x),判别器
D
D
D的输出为
D
(
x
;
θ
d
)
D(x;\theta_d)
D(x;θd),是一个标量,表示数据
x
x
x为真实数据的概率。
根据交叉熵损失,可以构造出如下损失函数:
V
(
D
,
G
)
=
E
x
∼
p
d
a
t
a
(
x
)
[
log
D
(
x
)
]
+
E
z
∼
p
z
(
z
)
[
log
(
1
−
D
(
G
(
z
)
)
)
]
V(D,G)=E_{x\sim p_{data}(x)}[\log D(x)]+E_{z\sim p_{z}(z)}[\log (1-D(G(z)))]
V(D,G)=Ex∼pdata(x)[logD(x)]+Ez∼pz(z)[log(1−D(G(z)))]
训练中,
D
,
G
D,G
D,G的目的各不相同,
G
G
G希望其生成的数据越接近真实越好,换言之,
G
G
G希望
D
(
G
(
z
)
)
D(G(z))
D(G(z))尽可能大(即接近1),这将使得
V
(
D
,
G
)
V(D,G)
V(D,G)变小。
D
D
D希望其鉴别数据真伪的能流越强越好,换言之,
D
D
D希望
D
(
x
)
D(x)
D(x)尽可能大(即接近1),
D
(
G
(
z
)
)
D(G(z))
D(G(z))尽可能小(即接近0),这将使得
V
(
D
,
G
)
V(D,G)
V(D,G)变大。
综合来看,训练目标为:
min
G
max
D
V
(
D
,
G
)
\min_G \max_D V(D,G)
GminDmaxV(D,G)
注意
实际上,上述损失函数 V ( D , G ) V(D,G) V(D,G)中训练方式 min G log ( 1 − D ( G ( z ) ) \min_G \log (1-D(G(z)) minGlog(1−D(G(z))不能为 G G G的训练提供足够大的梯度,因为在训练初始阶段, G G G的伪造性能还很差, D D D可以轻易鉴别真伪,给出很高的置信度来区分生成样本与真实样本。此时对任意的输入噪声 z z z, D ( G ( z ) ) D(G(z)) D(G(z))都几乎为0, log ( 1 − D ( G ( z ) ) \log (1-D(G(z)) log(1−D(G(z))也几乎为0,处于饱和状态,只能为 G G G提供很小的梯度。如果用 max G log ( D ( G ( z ) ) \max_G \log (D(G(z)) maxGlog(D(G(z))的方式训练 G G G,则尤为不同,由于 D ( G ( z ) ) D(G(z)) D(G(z))几乎为0,故 log ( D ( G ( z ) ) \log (D(G(z)) log(D(G(z))存在着很大的绝对值,可以为 G G G的训练提供更强烈的梯度。
训练算法:
(请忽视以下的‘——’)
for 总训练迭代次数:
——for k 步: //进判别器
D
D
D行训练
————从已知的噪声分布
P
z
(
z
)
P_z(z)
Pz(z)中选出
m
m
m个样本
{
z
(
1
)
,
.
.
.
,
z
(
m
)
}
\left\{z^{(1)},...,z^{(m)} \right\}
{z(1),...,z(m)}
————从训练数据中选出
m
m
m个样本
{
x
(
1
)
,
.
.
.
,
x
(
m
)
}
\left\{x^{(1)},...,x^{(m)} \right\}
{x(1),...,x(m)}
————设判别器
D
D
D的参数为
θ
d
\theta_d
θd,通过加上如下梯度来更新判别器
D
D
D:
————
∇
θ
d
1
m
∑
i
=
1
m
[
log
D
(
x
)
+
log
(
1
−
D
(
G
(
z
)
)
)
]
\nabla_{\theta_d}\frac{1}{m}\sum^m_{i=1}[\log D(x)+\log (1-D(G(z)))]
∇θdm1∑i=1m[logD(x)+log(1−D(G(z)))]
——for 1 步: //进生成器
G
G
G行训练
————从已知的噪声分布
P
z
(
z
)
P_z(z)
Pz(z)中选出
m
m
m个样本
{
z
(
1
)
,
.
.
.
,
z
(
m
)
}
\left\{z^{(1)},...,z^{(m)} \right\}
{z(1),...,z(m)}
————设判别器
G
G
G的参数为
θ
g
\theta_g
θg,通过减去如下梯度来更新判别器
D
D
D:
————
∇
θ
g
1
m
∑
i
=
1
m
log
(
1
−
D
(
G
(
z
)
)
)
\nabla_{\theta_g}\frac{1}{m}\sum^m_{i=1}\log (1-D(G(z)))
∇θgm1∑i=1mlog(1−D(G(z)))
以上算法在每对判别器 D D D的参数更新 k k k次后,对生成器 D D D的参数更新1次。训练完成后,从 P z ( z ) P_z(z) Pz(z)任取一个样本,经过生成器 G G G运算后,都可生成出符合 p d a t a ( x ) p_{data}(x) pdata(x)分布的样本。