GAN
GAN由一个判别器和一个生成器组成,GAN的目标是训练一个生成器来获取数据的分布。判别器的训练目标是在真实样本和生成器生成的假样本里识别出真实样本,生成器的训练目标是尽可能地让判别器识别错误,所以GAN的整体目标函数是对交叉熵损失函数进行minmax优化。
GAN的具体实现是在每次迭代里同时对生成器和判别器的参数进行梯度优化,而且论文证明了通过这个算法可以让生成器的数据分布收敛于真实样本的分布。但GAN的训练需要生成器和判别器的良好协调,如果生成器训练过多,则容易导致太多的随机变量映射到同一个生成样本上。论文里还探讨了获取条件分布以及从真实样本映射到噪声变量的可能性。
Pix2pix
Pix2pix通过ConditionalGenerative Adversarial Nets (cGAN) 来实现图像到图像的转换。
cGAN将GAN拓展为获取数据的条件分布,通过在生成器和判别器的输入里加上额外的信息来实现,额外的信息可以是任意种类的数据,比如数据标签、图像等等。因此cGAN与GAN的区别在于和都需要合并上额外信息,然后作为新的和分别输入到判别器和生成器。
Pix2pix需要用到成对的训练数据(x,y)。其中x作为cGAN里的额外信息同时输入到生成器和判别器中,y作为真实的输出样本。Pix2pix的损失函数是在cGAN的损失函数基础上加上真样本与假样本之差的范数。另外,pix2pix用dropout来代替cGAN的噪声输入z,用U-net来作为生成器的结构。Pix2pix的优点在于只用同样方法就能解决各种图像转换问题,但pix2pix的缺点是不适用于一些没有成对的训练样本的场景。
CycleGAN
Pix2pix不适用于没有成对样本的训练集,为了解决这个问题,CycleGAN应运而生。假设有两个数据域X和Y,我们需要学习一个映射G: X→Y。上文提到,GAN容易导致多个输入映射到同一个输出,为了解决这个问题,CycleGAN引入了一个映射F: Y→X,并且要使得F(G(x))≈x。映射G与映射F是两个方向相反的GAN,因此CycleGAN由两个GAN组成,每个GAN里都有一个生成器和判别器。
CycleGAN的损失函数由两大部分组成:
第一部分是Adversarial Loss,Adversarial Loss是为了让生成器G和生成器F分别得到条件分布 p(y|x) 和 p(x|y)。
第二部分是Cycle Consistency Loss:
Cycle Consistency Loss 是为了保证 F(G(x))≈x 和 G(F(y))≈y,这样可以防止多个输入映射到同一个输出上。
Adversarially Learned Inference(ALI)
上文的GAN和pix2pix都只是学习了一个将潜在变量映射到训练样本域的生成器,但无法将训练样本映射为潜在变量。而ALI能够同时学习生成器和推断器( inference network )。
如上图所示,ALI由一个编码器,一个解码器和一个判别器组成,判别器的输入为潜在变量和训练样本的联合样本,判别器需要判断一个联合样本是来自于编码器还是解码器。而编码器和解码器的训练目标则是尽可能的让判别器判断错误。所以ALI的目标是让编码器的联合分布接近解码器的联合分布。ALI的目标函数为
跟GAN训练过程类似,ALI也是在每次迭代中同时更新生成器和判别器的参数。
ALICE
ALI的目标只是让编码器和解码器的联合分布尽可能地接近,但是没有考虑潜在变量和真实训练样本之间的约束,因此仍然有可能出现多个输入映射到同一个输出的问题。而上文提到的CycleGAN也是同时训练一个generation network 和inference network,并且CycleGAN引入了CycleConsistency Loss来防止多个输入映射到同一个输出。
因此是否可以结合CycleGAN和ALI来得到一个更好的inference network?ALICE就是做了这样一个工作。
理论上来说,z已知时,x的不确定性由x关于z的条件熵确定,条件熵越小,的不确定性越小。当条件熵为0时,x则有唯一的值。因此ALICE在ALI的损失函数上加入了条件熵:
但是条件熵难以直接求解,因此论文里证明了条件熵的上界为CycleGAN里的Cycle Consistency Loss,所以损失函数转化为
除此之外,ALICE还尝试用对抗学习的方法来替代Cycle Consistency Loss,具体来说,是增加一个判别器来区别重建的样本和真实样本: