GAN,生成式对抗网络
Video Prediction
Previous frames – Network --> Frames
让 Network 的输出不是单一的、固定的,而是有几率的分布输出。
当同一个输入,有多种不同可能性的正确输出时,就需要 distribution。
比如输出一个带翅膀的动物,那么就有多种结果,而很多种结果都是正确的。
再比如输出辉夜是谁,可以输出秀知学院的四宫辉夜,也可以输出忍者世界的大筒木辉夜。
Unconditional generation
Normal Distribution --Generator–> Complex Distribution 产生图片
image -->Discriminator 用来表示图片的真实程度。
Generator 不断进化,产生的图片越来越接近真实,对应的 Discriminator 也不断进化,对产生的图片的判断真实性的条件越来越严格
两者相互对立统一,竞争合作关系。
第一步:一堆随机的参数进入Generator产生图片,将产生的图片和真正的图片丢入Discriminator进行对比,产生结果的优秀程度,训练Discriminator。
第二部:训练Generator,让Generator产生的图片可以在Discriminator中获得一个尽量好的结果。相当于让Discriminator的结果反作用于Generator,让Discriminator的结果越小越好。
第三步:反复执行第一步和第二步,训练Discriminator和Generator。
用GAN可以产生人脸,并且是可以产生现实生活中不存在的人脸。并且可以通过调整参数,获得不同角度的同一张人脸。
通过Generator产生的结果,应当和真实的结果越接近越好,判断两者的接近程度是通过计算divergence,这是一个概率问题而不是数值问题。产生各个结果的概率应当和真实的各个概率相接近。
Discriminator的具体操作为,有一堆数据,是从真实数据中产生的或者Generator中产生的,Discriminator看到一张真实图片就加分,看到一张生成图片就减分,即说明真实图片要尽量多,生成图片要尽量少。
G*=arg min max V(G,D)
GAN的训练技巧
首先,真实值和生成值都类似于二维空间中的直线,实际分布在非常小的空间内,重合部分非常少。
其次,从真实值和生成值中如果sample的点不够多的话,可能导致重叠的点比较少。
使用JS divergence,可能出现一种情况,即使训练的结果在变好,但是判断不出来,Loss不产生变化。
Wasserstein distance
P、Q是两个distribution,相当于两个土堆,而两个之间的差距,相当于将P重塑成Q的形状的过程中需要移动的总距离。优于JS divergence。
Generator和Discriminator之间是相互进步的关系,当某一方出现一次问题,整个训练过程也会出现问题。
用GAN生成文字是最困难的部分,Training language GANs from Scratch
Quality,对生成的图片进行影像辨识,辨识出的结果分布应当是相对比较集中的,如果结果的分布比较分散,说明生成的图片效果不好。
Mode Collapse,生成的多张图片各个方面都很相似,并不是一个好的Genenrator
Mode Dropping,与上一个问题类似,不过略好,生成的图片有几个方面很相似,比如生成的人脸都是白皮肤或者总皮肤,也不是一个好的Generator
Diversity,如果放入不同的vector,生成的结果都集中在某个class,那么说明多样性可能不够。
Quality是对一张图片的生成结果进行判断,结果应当比较集中。而Diversity是对多张不同图片的生成结果进行判断,结果应当比较分散。
FID,一种比较常用的判断生成图片结果的方法
训练出来的生成图片应当与真实图片不完全一样,如果生成图片和真实图片完全一致,则说明结果并不好,GAN的Evolution十分困难,评估方式也很复杂。
Conditional Generation,Unconditional的生成,输入的结果是一个distribution,而有条件的Genenrator需要多输入参数,表示对生成的图片添加一些条件限制,如黑头发、黑眼睛,至于如何将限制条件表示为参数,可以通过辨识识别来产生vector。
不仅需要对Generator进行修正,也需要对Discriminator进行修正,Discriminator的输入参数需要有图片和文字描述的限制条件,需要同时判断是否是真实图片以及是否满足文字描述,可以对输入的vector增加适当数量的参数维度。
可以运用于图像处理,image to image,输入图片,输入限制条件,输出另一张图片,就有了图像处理的效果,比如Photoshop中的各种滤镜。
使用GAN+supervise learning可以产生一个比较好的结果。
输入声音输出图片,通过截取电影、电视剧片段可以收集到需要的数据。
Unsupervise Learning
Learning from Unpaired Data
例如,影像风格转换,将真人照片转为二次元照片,使用GAN的做法还不够,要强化输入的真人图片和输出的二次元图片的关系,Cycle GAN,先将真人图片A转换为二次元图片,再将二次元图片转换为真人图片B,两张图片A、B应该越接近越好,有三个network,第一个A——二次元,第二个二次元——B,第三个判断中间图片是否是二次元图片,这样输出的二次元图片和输入的真人图片一定是有关系的。实际上即使没有二次元——真人B这一步,一般问题也不会太大,因为机器学习比较懒惰,会想要输出一张和真人A相接近的二次元图片。
StarGAN,可以在多种风格之间做影像风格转换。
也可以用作Seq2Seq文字风格转换