GAN(Generative Adversarial Network) 生成对抗网络
1. 为什么要有这个东西?
为了解决相同输入x,不同输出y的情形,每一个输出都是对的,唯一可以知道的是他服从某一个分布。
李宏毅中的例子是根据游戏的前三帧,去预测下一帧,当前三帧游戏人物走到路口的时候,下一帧可能左拐也可能右拐,无法得到一个确切的输出,只能得到一个概率分布。
也可以用于扩充样本。
2. 生成对抗网络是什么?
一个生成对抗网络主要包含 生成器 + 判别器
-
生成器(G)
的主要作用就是根据一个输入z(满足某个分布的向量)随机生成输出y(满足另一个分布) -
判别器(D)
的主要作用是判断G的某一堆输出y_s与最终要生成的数据的相似程度 相似度越高打分越高 -
直观理解:
3.1 正常的network都是给定一个 x,得到一个 y, 记作
{f(x) = y}
3.2 这里为了使得给定一个x得到不同的y,同时再给定一个z1(满足某种简单的分布Z),这样便成了
f(x,z1) = y
。3.3 因为z服从一个分布Z,那么y也服从一个分布Y,这样的话对于一个输入x得到的输出就是一个分布,而不是确定的值,等到预测的时候 给定x, 同时从Z分中随机选取一个z1,就能得到一个满足Y分布的结果
4. 如何保证分布Y就是我们想要的 概率分布呢?
使用 判别器D 建立一个分类的network,他的输入是 生成器G 的输出,和我们已知的样本分布,输出是一个值,表示他和所需要生成的样本的差异程度,用这个值来表示 生成器G 表现好不好
真正计算的时候: 从real_data (标签1) 和 generated_data(标签0) 中随机抽取出若干个输入network分类,设定loss使得real_data得分尽可能高,generated_data 的分尽可能低
同时可以从理论上推导这个 loss Function和 JS Diversion 是有关联的,直观理解也好理解,只有分布相似,差异小才难分,然后那个maxV才不会太大,所有Diversion越小,maxV越小【具体推导见GAN原paper:https://arxiv.org/abs/1406.2661 】
5. 整体优化目标是什么,如何训练?
6. GAN 是很难train的,原因是什么?
-
真实数据和生成的数据的分布存在重合很难 (1.所有图像空间中动漫的分布很小很小,存在交集就更难了 2.即使分布存在交集,我们sample出来的点构成的分布未必存在交集)
-
JS Diversion的特性是只要没有重合那两个分布的距离就是固定的log2
所以可以看出JS divergence 不好,后人改用了W distance(Wasserstein distance)来衡量两个分布之间的距离,它的定义是通过移动一个分
布P中的样本点使其满足另一个分布Q,所需要移动的最小距离就是W distance
6.1 那W distance 如何计算
lipschitz 条件
6.2 如何使得函数D满足上述条件
7. 生成器 和 判别器 必须水平相当才能训练起来,怎么保证双方水平相当呢?
一些tip
8. 怎么评估一个GAN的好坏,评估其生成的图片的质量的好坏
评估图像质量
评估图像多样性
综合质量和多样性的话就是Inception Score
这种评估手段无法检测出的一些问题
标签:输出,一个,生成器,生成,GAN,分布,概述 From: https://www.cnblogs.com/da-zhi/p/16937103.html