InfoGAN利用互信息和变分自编码(VAE,参考我这篇博客)将样本的label信息加入了GAN中。
首先我们列出一些基本公式:
熵: H(X)=−∫XP(X)logP(X) H ( X ) = − ∫ X P ( X ) l o g P ( X )
H(Y|X)=−∫XP(X)∫YP(Y|X)logP(Y|X) H ( Y | X ) = − ∫ X P ( X ) ∫ Y P ( Y | X ) l o g P ( Y | X )
仔细回想一下期望的计算公式,我们发现H(X) = E(log(P(X))),这个后面会用到。
互信息: I(X;Y)=H(X)−H(Y|X) I ( X ; Y ) = H ( X ) − H ( Y | X )
KL散度: DKL(X||Y)=∫XlogXY D K L ( X | | Y ) = ∫ X l o g X Y
好了,我们步入正题。为了让G网络生成的图片更有语义意思,论文中在z向量的基础上加入了隐藏编码c变量。隐藏编码c表示了所要生成图片的语义,比如mnist中的0-9数字。以mnist为例,隐藏编码c,其实就是一个one-hot向量,比如要生成内容为7的图片,则c向量中的第7索引则为1,其余的位置为0。因此来自G网络的图片可写成G(z,c)。
为了确保隐藏编码c能够起到引导G网络生成的图片有语义信息。论文使用了互信息 I(c;G(z,c)) I ( c ; G ( z , c ) ) ,以降低给定G(z,c)后c的不确定性。这样一来,InfoGAN的优化目标函数为:
就是在原始的GAN损失函数上加入一个互信息函数。下文我们只关心互信息函数。
在实际中,I(c;G(z,c))是很难优化的,这是因为我们根本不是知道后验概率