GAN
学习参考
目的
GAN是由Ian Goodfellow于首次提出,学习GAN的初衷,即生成不存在于真实世界的数据。类似于AI具有创造力和想象力。
GAN有两个非常重要的网络(生成器(Generator)和判别器(Discriminator))
训练过程
GAN的训练在同一轮梯度反转的过程中可以细分为2步:(1)先训练D;(2)再训练G。注意,不是等所有的D训练好了才开始训练G,因为D的训练也需要上一轮梯度反转中的G的输出值作为输入。
当训练D的时候:上一轮G产生的图片和真实图片,直接拼接在一起作为x。然后按顺序摆放成0和1,假图对应0,真图对应1。然后就可以通过D,x输入生成一个score(从0到1之间的数),通过score和y组成的损失函数,就可以进行梯度反传了。
当训练G的时候:需要把G和D当作一个整体,这里取名叫做’D_on_G’。这个整体(简称DG系统)的输出仍然是score。输入一组随机向量z,就可以在G生成一张图,通过D对生成的这张图进行打分得到score,这就是DG系统的前向过程。score=1就是DG系统需要优化的目标,score和y=1之间的差异可以组成损失函数,然后可以采用反向传播梯度。注意,这里的D的参数是不可训练的。这样就能保证G的训练是符合D的打分标准的。这就好比:如果你参加考试,你别指望能改变老师的评分标准。
优化目标
整个式子由两项构成。x表示真实图片, z表示输入G网络的噪声,而G(z)表示G网络生成的图片。D(x)表示D网络判断真实图片是否真实的概率(因为x就是真实的,所以对于D来说,这个值越接近1越好)。而D(G(z))是D网络判断G生成的图片的是否真实的概率。G的目的: G应该希望自己生成的图片“越接近真实越好”。D的目的: D的能力越强, D(x)应该越大, D(G(x))应该越小。这时V(D,G)会变大。因此式子对于D来说是求最大(max_D)trick :为了前期加快训练,生成器的训练可以把log(1-D(G())换成-log(D(G(Z))注:后续更新优化目标的推导
GAN应用
目的
通过GAN来学习实例之间的相似性。实现流行特征挖掘。?
步骤
挖掘与Anchor(锚点)相似的实例。
第一步:先分别从正负数据集中采样(Instance Sampling);
第二步:将三个图片分别通过CNN进行特征提取,然后拼接成新向量。
第三步:将第二步产生的向量通过生成器来生成一个Proxy(代理),然后通过辨别器来判断其类别(0或1)
第四步:若Proxy为正,则在以Proxy为圆点, r r r 为半径的领域范围内寻找相似的其它负样本,并将他放在所对应正样本中,相反,负样本中的样本对应减少。
小结
GAN的目的是为了获得一个良好的生成器,因此,在许多分类任务中并不常用。这篇文章将GAN网络作为一个生成Proxy和判断其类别的步骤来实现了流行特征挖掘。