GAN的核心思想,训练生成器,当生成器生成的数据让判别器无法辨别时就是一个号的生成器。
生成模型:建模x的分布p(x)
对于生成器,开始绘制一些随机分布的参数
z
∈
R
d
\mathbf z\in\mathbb R^d
z∈Rd , 如正态分布
z
∼
N
(
0
,
1
)
\mathbf z \sim \mathcal{N} (0, 1)
z∼N(0,1).我们把
z
\mathbf z
z 成为潜在变量. 然后使用一个函数来生成
x
′
=
G
(
z
)
\mathbf x'=G(\mathbf z)
x′=G(z). 生成器的目标是欺骗判别器,让判别器认为
x
′
=
G
(
z
)
\mathbf x'=G(\mathbf z)
x′=G(z) 是一个真实数据, 例如,我们希望
D
(
G
(
z
)
)
≈
1
D( G(\mathbf z)) \approx 1
D(G(z))≈1. 换言之,对于给定的判别器
D
D
D, 我们更新
G
G
G 使得
y
=
0
y=0
y=0时交叉熵损失最大,
max G { − ( 1 − y ) log ( 1 − D ( G ( z ) ) ) } = max G { − log ( 1 − D ( G ( z ) ) ) } . \max_G \{ - (1-y) \log(1-D(G(\mathbf z))) \} = \max_G \{ - \log(1-D(G(\mathbf z))) \}. Gmax{−(1−y)log(1−D(G(z)))}=Gmax{−log(1−D(G(z)))}.
如果判别器表现很好, 那么 D ( x ′ ) ≈ 0 D(\mathbf x')\approx 0 D(x′)≈0所以上述损失接近0, 但是这样会因为值太小而产生梯度消失,导致训练失败。所以,我们通常使用下面的损失函数:
min G { − y log ( D ( G ( z ) ) ) } = min G { − log ( D ( G ( z ) ) ) } , \min_G \{ - y \log(D(G(\mathbf z))) \} = \min_G \{ - \log(D(G(\mathbf z))) \}, Gmin{−ylog(D(G(z)))}=Gmin{−log(D(G(z)))},
将 x ′ = G ( z ) \mathbf x'=G(\mathbf z) x′=G(z) 带入判别器,并使得 y = 1 y=1 y=1.
总的来说, D D D 和 G G G 的总的loss是一个极大极小的对抗损失函数:
m i n D m a x G { − E x ∼ Data l o g D ( x ) − E z ∼ Noise l o g ( 1 − D ( G ( z ) ) ) } . min_D max_G \{ -E_{x \sim \text{Data}} log D(\mathbf x) - E_{z \sim \text{Noise}} log(1 - D(G(\mathbf z))) \}. minDmaxG{−Ex∼DatalogD(x)−Ez∼Noiselog(1−D(G(z)))}.