一、infoGAN
事实上,我们使用GAN进行训练的时候,输入一个向量,输出一幅图片,当我们改变向量的某个维度时,生成的图片也会发生某种变化。但是这种变化是没有固定规律的。我们希望像上图中左图一样,沿着纵轴变化,由绿色变为黄色再变为橙色后变为蓝色;但事实上会像右图一样没有固定规律。
infoGAN解决这个问题
infoGAN在原来GAN的基础上,输入的向量z分成两个向量,比如输入的z是20维,那么两个向量分别为10维;将它们输入Generator,得到output x,将x输入classifer,预测code c。框起来的地方可以理解为一个相反的AutoEncoder。另外还需要加一个discriminator,不然的话直接把c贴到x也可以骗过classifer,discriminator可以判断图片的真实性。classcifer和discriminator可以共享参数,只有最后一层不同即可。
在这里c是指某些特征(对图片有非常明确的影响),z‘是指某些完全随机不可解释的东西。
上图为文献中更换c每个维度得到的结果。
二、VAE GAN
可以看作用VAE强化GAN或者用GAN强化VAE
如图,左边一个Encoder一个Decoder,可以看作是VAE;右边一个Generator(Decoder)一个Discriminator,可以看作是一个GAN。
VAE的作用是使得生成的图片与原始图片足够接近,GAN的作用是使得生成的图片足够真实。
上图为训练VAE GAN的流程。第三个公式写错了,应该是De(Zi)。
三、BiGAN
Encoder和Decoder分开学,不连接在一起。但是会接一个Discriminator,它输入一个pair,x和z,来鉴别来自Encoder和Decoder。
BiGAN和上图AutoEncoder最佳结果是一样的,但实际上这种情况是不会发生的,因为AutoEncoder得到的图片往往不清晰。
BiGAN效果是更好的。
在机器学习问题中,我们很担心的一个问题是测试集与训练集不在同一个分布,比如训练集为黑白图片,测试集为彩色图片。现在的问题是如何学到一个好的Generator来解决上述问题。
我们可以使用Domain-adversarial training
input通过神经网络,得到label和Domain classifier。二者最好分开train,结果稍微稳定一些。
实际上在语音重建中是很困难的,因为输入不仅包含声音信息,还包含语者信息等等。为了解决这个问题,我们训练两个Encoder,生成两个向量,一个代表声音信息另一个代表语者信息。
但是这样训练可能还会使部分语者的资讯藏在z中,为了解决这个问题,使用domain trainning