Generative adversarial network(GAN)生成对抗网络
1、GAN的初衷就是生成不存在于真实世界的数据。类似于使得AI具有创造力或者想象力。
应用场景:
①AI作家、AI画家等需要创造力的AI体
②将模糊图变清晰(去雨、去雾、去抖动、去马赛克等),这需要AI具有所谓的“想象力”,能脑补情节
③进行数据增强,根据已有数据生成更多数据供以feed,可以减缓模型过拟合现象
2、GAN原理
GAN的两大护法:G、D
G是generator,生成器: 负责凭空捏造数据出来
D是discriminator,判别器: 负责判断数据是不是真数据
在最原始的GAN论文里,G和D都是两个多层感知机网络。
以图像为例,解释上图,z是随机噪声(就是随机生成的一些数,也即是GAN生成图像的源头)。D通过真图和假图的数据(相当于天然label),进行一个二分类神经网络训练。G根据一串随机数就可以捏造一个“假图像”出来,用这些假图去欺骗D,D负责辨别这是真图还是假图,会给出一个score。比如,G生成了一张图,在D这里得分很高,那证明G是很成功的;如果D能有效区分真假图,则G的效果还不太好,需要调整参数。GAN就是这么一个博弈的过程。
3、GAN训练
GAN的训练遵循DGDGDG的顺序,其中DG为一轮,先训练D再训练G,可以看出不是等所有的D训练好以后,才开始训练G,因为D的训练也需要上一轮中G的输出值作为输入。
设DGDGDG为D(1)G(1)D(2)G(2)D(3)G(3),以训练D(2)G(2)为例。
(1)训练D(2)
将G(1)产生的图片和真实图片直接拼接在一起作为x,按顺序摆放0和1,假图对应0,真图对应1。然后就可以通过x输入生成一个score(从0到1之间的数),通过score和y组成的损失函数,就可以进行梯度反传从而进行训练。
(2)训练G(2)
输入一组随机向量,就可以在G(2)生成一张图,通过D(2)对生成的这张图进行打分。score=1就是DG系统需要优化的目标,score和y=1之间的差异可以组成损失函数,然后可以反向传播梯度从而进行训练。注意,这里的D(2)的参数是不可训练的。这样就能保证G(2)的训练是符合D(2)的打分标准的。这就好比:如果你参加考试,你别指望能改变老师的评分标准。
4、整个GAN的整个过程都是无监督的(后面会有监督性。如何理解其是无监督的?
给的真图都是没有经过人工标注的,系统只知道是真实的图片,并不知道来的图片是什么玩意,比如全是人脸,它只需要分辨真假。G也不知道自己生成的是什么玩意,反正就是学真图片的样子骗D。正由于GAN的无监督,在生成过程中,G就会按照自己的意思天马行空生成一些“诡异”的图片,可怕的是D还能给一个很高的分数。比如,生成人脸极度扭曲的图片。这就是无监督目的性不强所导致的。有一篇论文conditional GAN就加入了监督性进去,将可控性增强,表现效果也好很多。