原文
InfoGAN: Interpretable Representation Learning by Information Maximizing Generative Adversarial Nets
通引入隐含编码的互信息,使用GAN在非监督学习中学习到可分解/可解释的表示。
1 隐含编码的互信息
在GAN中,生成器是如何使用噪声的,这点不明确、不可解释。噪声各维度和样本的语义特征是怎样对应的,也不清楚。但是很多问题都可以分解成可解释的语义特征。例如MNIST数据集可以分解成数字、笔画粗细、数字倾斜程度等等。
因此,和单独的z输入相比,infoGAN采用了噪声z+隐含编码c的输入。隐含编码c就是为了表征数据中显著而结构化的语义特征。$c=\{c_1,…,c_L\},P(c_1,…,c_L)=\prod^L_{i=1}P(c_i)$。这样生成器就变成了$G(z,c)$。
但是单纯引入隐含编码是很容易被忽略的,生成器可能很容易就达到了$P_G(x|c) = P_G(x)$。为了解决这个问题,引入互信息来保证c在结果中的存留。
通过随机变量Y,从随机变量X中学习到的信息量I(X;Y)叫做互信息。当X,Y互相独立时,互信息为0。互信息用熵表示就是:
$$
I(X;Y) = H(X)-H(X|Y) = H(Y)-H(Y|X)
$$
保证c在结果中的存留,就要求$I(c;G(z,c))$尽可能大。于是infoGAN的最小最大博弈问题转化为:
$$
\min_G \max_D V_I(D,G) = V(D,G)-\lambda I(c;G(z,c))
$$
但是$I(c;G(z,c))$无法计算,因为$P(c|x)$并不清楚。作者构造一个变分分布$Q(c|x)$来估计$P(c|x)$,从而得到互信息的下界$L_I(G,D)$。文章采用了NIP’03中提出的IM算法(一种变分信息最大化方法)。具体细节和证明不再赘述。互信息的下界为:
$$
I(c;G(z,c)) \ge L_I(G,D) = E_{c\sim P(c),x \sim G(z,c)}[\log Q(c|x)]+H(c)
$$
可见变分分布Q很像一个根据G的生成结果学习隐含编码c的判别器!引入Q之后的博弈变为:
$$
\min_{G,Q} \max_D V_{\rm InfoGAN}(D,G,Q) = V(D,G) - \lambda L_1(G,Q)
$$
2 实现
Q是一个神经网络,和D共享所有的卷积层,最后由一层fc输出条件分布$Q(c|x)$。额外的计算开销非常小。
对于隐含编码c来说,如果是分类编码,就用softmax,如果是连续编码,可以采用高斯分布。超参数$\lambda$在分类编码中取1,连续编码中小一些。
这个网络最终会学习到隐含编码和数据中某些语义关系的对应。改变隐含编码,就可以生成语义上有差异的结果。在MNIST数据集上生成的结果如下,可以看到数字类别(类别编码)、倾斜角度和粗细(连续编码)都通过隐含编码很好地控制了。仔细观察旋转的结果,不仅仅是姿态倾斜而已,连笔画都做了适应性的改变。
这里有用tensorflow实现的infoGAN。从源码中可以得知,隐含编码是和噪声拼接到一起的。
体会
自然要和CGAN对比下。CGAN通过加入条件输入,实际上将GAN的学习过程变成了有监督的。但对于infoGAN来说,隐含编码不是给定的输入,而是引入Q学习得到,因此是无监督的。
infoGAN的泛化能力如何呢?毕竟某些场合下,想要学习到的特征分解和模型学习到的未必恰好一致啊,而且和隐含编码的数量似乎还有关系。
连续型的隐含编码很适合参数控制!我觉得单是这些连续型的隐含编码,就可以串起一个网络,从而建立一个非线性模型,映射更高层的语义和编码的关系,再通过infoGAN映射到图像结果。