G
e
n
e
r
a
t
o
r
Generator
Generator 和
N
e
t
w
o
r
k
Network
Network 的区别
- 可以输出一种分布的
N
e
t
w
o
r
k
Network
Network , 我们就叫它
G
e
n
e
r
a
t
o
r
Generator
Generator
- 神经网络是根据输入
x
x
x 产生输出
y
y
y。输入
x
x
x 根输出
y
y
y 是一一对应的。
- 生成器的输入是
x
x
x 和一个从已知分布中采样得到的
z
z
z ,利用不同的
z
z
z ,针对同一个
x
x
x 生成不同的
y
y
y ,来达到输出是一个分布的目的
为什么需要输出一个分布
- 下面是一个游戏的例子,我们要根据之前的训练,通过当前的画面,决定下一步的操作
- 直接
n
e
t
w
o
r
k
network
network 训练得到的结果不好
- 在转角的时候,小精灵可能会出现分裂,就是同时向左向右转
- 因为在训练集中,在一个转角处,向左转和向右转的情况都有发生。因此模型为了既接近向左转的结果,又接近向右转的结果,采取同时向左向右转的方式。所以,小精灵出现分裂
- 我们想让输出的结果是一个分布,不同结果的发生是有概率的。也就是输出包含向左转和向右转的情况,但不会同时出现向左转和向右转
- 最终输出我们通过
z
z
z 来调控 。比如
z
=
1
z = 1
z=1 时向左转 ,
z
=
0
z = 0
z=0 时向右转
什么时候使用输出一个分布的模型
当我们的模型需要有创造力的时候,需要generator。也就是说,针对同一个输入可以产生不同的输出,而这些输出都是对的。
- 针对一个相同的任务,不同的人会给出不同的答案
- 比如下面的画画和聊天任务
GAN
Unconditional generation
- 输入只有
z
z
z ,没有
x
x
x
- 通过输入
z
z
z , 产生二次元人脸图
- 下图是一个
g
e
n
e
r
a
t
o
r
generator
generator , 其任务是通过输入向量,生成二次元人脸图片
- 还要有一个辨别器
D
i
s
c
r
i
m
i
n
a
t
o
r
Discriminator
Discriminator , 其任务是辨别出生成的图片和真实图片
- 拿鸟和枯叶蝶来说
- 枯叶蝶一直在进化,想要通过伪装自己来成功欺骗鸟,从而躲过被鸟吃的命运
- 鸟也一直在进化,想要分辨出枯叶蝶,从而吃掉
- 这里其实对应了
G
e
n
e
r
a
t
o
r
Generator
Generator 和
D
i
s
c
r
i
m
i
n
a
t
o
r
Discriminator
Discriminator
-
G
e
n
e
r
a
t
o
r
Generator
Generator 和
D
i
s
c
r
i
m
i
n
a
t
o
r
Discriminator
Discriminator 相互对抗,互相提升
算法流程
训练一个
g
e
n
e
r
a
t
o
r
generator
generator 作为
G
G
G 和一个
d
i
s
c
r
i
m
i
n
a
t
o
r
discriminator
discriminator 作为
D
D
D
- 首先将
G
G
G 固定 , 训练
D
D
D , 让
D
D
D 能够分辨
G
G
G 产生的图片和真实图片
- 训练
D
D
D 的过程就是,先利用
G
G
G 生成一些图片(带有
l
a
b
e
l
label
label),并找一些真实图片(带有
l
a
b
e
l
label
label),然后将
D
D
D 作为
c
l
a
s
s
i
f
i
e
r
classifier
classifier 来训练
- 对于真实图片,产生高分。对于生成图片,产生低分
- 然后将
D
D
D 固定住 , 训练
G
G
G
- 就是将
G
G
G 生成的图片送入
D
D
D 中,训练的目标是得到的分数越高越好
- 可以将
G
G
G 与
D
D
D 的网络合在一起,看作一个更大的网络。
- 输入是向量 , 输出时分数
- 训练
G
G
G 的时候,调整前面几层网络的参数
- 训练
D
D
D 的时候,调整后面几层网络的参数
- 重复上述过程,反复训练
G
G
G 和
D
D
D ,这样两者的效果都能得到提升
结果
- 可以直接合成图片
- 可以利用已有图片,生成一些新的图片
- 输入最左端和最右端的向量
- 中间的向量通过插值得到
- 可以生成从左图向右图过渡状态的图片
|