生成对抗网络GAN
1. GAN的主要思想
概述
GAN训练了两个网络
一个是生成器(generative)一个是判别器(discriminative)
生成器负责学习数据分布
判别器负责区分数据到底是由生成器产生还是由真实数据产生
生成器
生成器的输入数据是一组随机噪声X(简单理解就是一个随机向量, 或者说是随机数种子)
生成器去学习一个映射F, 将随机噪声X映射为一个结果Y, 这个结果就是我们想要生成的图片
也就是通过学习来的F, 生成器能将一个随机向量的空间映射到训练数据的分布上, 通过一个随机向量能通过映射F生成一个符合训练数据分布的数据
判别器
判别器的输入数据是生成器的输出Y或是训练数据X, 判别器是一个分类器, 判断输入数据是来自生成器还是训练数据
2. GAN的训练目标
训练目标(人话)
生成器尽量骗过判别器
判别器尽量区分数据来源
理想模型
生成器完全学习到了训练数据的分布
判别器输出恒为1/2
3. GAN的损失函数
总损失函数(泛函functional)
m
i
n
G
??
m
a
x
D
??
V
(
D
,
?
G
)
=
E
x
[
?
l
o
g
D
(
x
)
?
]
?
+
?
E
z
[
?
l
o
g
(
?
1
?
D
(
G
(
z
)
)
?
)
?
]
.
min_G\ ~max_D\ ~V(D,~G) = E_{x}[~logD(x)~]~ + ~E_z[~log(~1-D(G(z))~)~].
minG???maxD???V(D,?G)=Ex?[?logD(x)?]?+?Ez?[?log(?1?D(G(z))?)?].
符号解释
D:判别器
G:生成器
x:来自训练数据的样本数据
z: 随机噪声
说明:
对于单个数据输入
输入数据来自训练数据x ,则D(x) = 1
输入数据来自生成器G( z ),则D( G( z ) ) = 0
判别器D的优化目标
m
a
x
D
??
V
(
D
)
?
=
?
E
x
[
?
l
o
g
(
D
(
x
)
)
?
]
?
+
?
E
z
[
?
l
o
g
(
?
1
?
D
(
G
(
z
)
)
?
)
?
]
max_D~~V(D) ~=~ E_x[~log(D(x))~]~+~E_z[~log(~1-D(G(z))~)~]
maxD???V(D)?=?Ex?[?log(D(x))?]?+?Ez?[?log(?1?D(G(z))?)?]
解释:
? 判别器越完美, 越能区分数据来源, 则第一个期望越接近0, 第二个期望越接近0
? 完美的判别器V(D)优化为0
生成器G的优化目标
m
i
n
G
V
(
G
)
?
=
?
E
z
[
?
l
o
g
(
?
1
?
D
(
G
(
z
)
)
?
)
?
]
min_G V(G)~=~E_z[~log(~1-D(G(z))~)~]
minG?V(G)?=?Ez?[?log(?1?D(G(z))?)?]
解释:
? 因为总损失函数中, 第一个期望不含G, 所以只用考虑第二个期望
? 生成器越完美, 越能骗过判别器, 第二个期望越接近负无穷
? 完美的生成器V(G)优化为负无穷
4. GAN的训练过程
算法过程
训练过程:
在一次迭代里
先采随机噪声, 再采集训练数据
先训练k轮判别器D ,再训练生成器
解释:
k是一个超参数,这里k是一个超参数, 不能把D训练的太好也不能太坏
梯度下降的时候是对D,G的损失函数分别进行梯度下降, 不对总损失剃度下降
|