一.介绍
1.generator:
最简单的过程:丢入一个向量,经过generator就会产生一个图片或者句子。
最基础的思想:generator是一个神经网络,即也是一个函数。输入vector有一个项改变了,就会改变生成东西的内容。
2.discriminator:
最简单的过程:丢入一个图片或者句子,经过discriminator就会产生一个scalar,scalar越大就表示越真。
3.generator和discriminator的关系就像是枯叶蝶和鸟的关系
4.每一代discriminator会判别generator,而下一代generator要试图骗过discriminator,即adversarial"对抗":
5.算法
Step1:初始化G和D
Step2:(在每个训练期里面)
1)固定G,更新D:
(1)丢入两组数据,给D一个是G产生的,一个是原始数据库中的。
(2)从一个分布中取出m个噪音样列向量,把它们丢到G里。
(3)使得,D在输入原始数据后,尽量输出1;在输入G的数据后尽量输出0。.
(注意:这个不是损失函 数,而是要让式子越大越好)
(所以:这里也不是减号,而是加号)
2) 固定D,更新G:
(1)D和G合起来是一个巨大的网络,中间有一层输出就会是图片。
(2)固定最后几层,只调前面几层,使得输入后,结果能够越来越大。
(3)再次从分布中取出m个噪音。
6.structured learing:输出的不是scalar,不是one-hot,而是一个序列,矩阵,图,树等等。
为此它的作用很神奇:
输入一个向左看的人脸,慢慢地,它可以向右看。
输出一个问题,它可以输出一个回答。
输入东西,并限制条件,它生成的东西也可以有条件的特征。
8.generator可以自己学吗
1)一个产生器和分类器的对比图,很有启发性:
2)auto-encoder 和 auto-decoder:
3)variational Auto-encoder(VAE):(可以使生成器更稳定)
4)但是它的缺点就是,和目标越像越好并不一定是真的好,
(上面两图差一个像素,下面两图差六个像素,但是,
下面的更像是人们所乐意看到的数字2)
9.discriminator可以自己学吗
1)discriminator在不同领域的不同名字:evaluation function, potential function, energy function
2) discriminator在检查上非常有优势,比如上面的情况,CNN加一个filter就可以搞定。
3)只用第一代差数据,新一代的作为负样本,旧一代作为正样本。
4)在做GAN的时候很难知道自己有没有overfit
10.G和D的优劣:
G:
优:很容易产生,即便是深度模型
劣:1)模仿外表
2)很难学习到组件间的一致关系
D:
优:具有全局管
劣:1)生成不总是很灵活,尤其是模型是深度的时候
2)怎样做负样本?
11.GAN的优势:
从D的角度:就可以不用解。。。?,直接由G生成东西
从G的角度:1)生成的东西任然是由组件组成的
2)但是,因为D而更具有全局观