转载地址:http://hacker.duanshishi.com/?p=1766
InfoGAN
InfoGAN是一种能够学习disentangled representation的GAN(https://arxiv.org/pdf/1606.03657v1.pdf),何为disentangled representation?比如人脸数据集中有各种不同的属性特点,如脸部表情、是否带眼睛、头发的风格眼珠的颜色等等,这些很明显的相关表示, InfoGAN能够在完全无监督信息(是否带眼睛等等)下能够学习出这些disentangled representation,而相对于传统的GAN,只需修改loss来最大化GAN的input的noise(部分fixed的子集)和最终输出之间的互信息。
原理
为了达到上面提到的效果,InfoGAN必须在input的noise来做一些文章,将noise vector划分为两部分:
- z: 和原始的GAN input作用一致;
- c: latent code,能够在之后表示数据分布中的disentangled representation
那么如何从latent code中学到相应的disentangled representation呢? 在原始的GAN中,忽略了c这部分的影响,即GAN产生的数据分布满足$P_{G}(x|C)=P(x)$,为了保证能够利用c这部分信息, 作者提出这样一个假设:c与generator的输出相关程度应该很大,而在信息论中,两个数据分布的相关程度即互信息, 即generator的输出和input的c的$I(c;G(z,c))$应该会大。 所以,InfoGAN就变成如下的优化问题:
因为互信息的计算需要后验概率的分布(下图红线部分),在实际中很难直接使用,因此,在实际训练中一般不会直接最大化$I(c;G(z,c))$
这里作者采用和VAE类似的方法,增加一个辅助的数据分布为后验概率的low bound: 所以,这里互信息的计算如下:
这里相关的证明就不深入了,有兴趣的可以去看看paper。