InfoGAN解读

InfoGAN的概念最早来自论文InfoGAN: Interpretable Representation Learning by Information Maximizing Generative Adversarial Nets,发表于NIPS 2016。

motivation

在标准的GAN中,生成数据的来源一般是一段连续单一的噪声z,这样带来的一个问题是,Generator往往会将z高度耦合处理,我们无法通过控制z的某些维度来控制生成数据的语义特征,也就是说,z是不可解释的。比如,假设我们打算生成像MNIST那样的手写数字图像,每个手写数字可以分解成多个维度特征:代表的数字、倾斜度、粗细度等等,在标准GAN的框架下,我们无法在上述维度上具体指定Generator生成什么样的手写数字。
为了解决这一问题,文章对GAN的目标函数进行了一些小小的改进,成功让网络学习到了可解释的特征表示(即论文题目中的interpretable representation)。

latent code

这个trick的关键是latent code的应用。
既然原始的噪声是杂乱无章的,那就人为地加上一些限制,于是作者把原来的噪声输入分解成两部分:一是原来的z;二是由若干个latent variables拼接而成的latent code c,这些latent variables会有一个先验的概率分布,且可以是离散的或连续的,用于代表生成数据的不同特征维度,比如MNIST实验的latent variables就可以由一个取值范围为0-9的离散随机变量(用于表示数字)和两个连续的随机变量(分别用于表示倾斜度和粗细度)构成。
但仅有这个设定还不够,因为GAN中Generator的学习具有很高的自由度,它很容易找到一个解,使得


,导致c完全不起作用。

mutual information

作者从信息论中得到启发,提出了基于互信息(mutual information)的正则化项。c的作用是对生成数据的分布施加影响,于是需要对这两者的关系建模,在信息论中,互信息I(X;Y)用来衡量“已知Y的情况下可获取多少有关X的信息”,计算公式为:


其中H表示计算entropy,H(X|Y)衡量的是“给定Y的情况下,X的不确定性”。从公式可以得知,当XY毫无关联时,H(X|Y) = H(X)I(X;Y) = 0,取得最小值;当XY有明确的关联时,已知Y时,X没有不确定性,因而H(X|Y) = 0,此时I(X;Y)取得最大值。
所以,现在优化目标就很明确了:要让c和Generator分布G(z, c)的互信息达到最大值。现在目标函数可改写为:

Variational Mutual Information Maximization

上述的推导看似已经很充足了,然而上面互信息的计算涉及后验概率分布P(c|x),而后者在实际中是很难获取的,所以需要定义一个辅助性的概率分布Q(c|x),采用一种叫作Variational Information Maximization的技巧对互信息进行下界拟合:


再经过一番数学推导,可把这个下界转化成如下的形式:

这里的

很容易在现有的框架中进行优化,当它取得最大值H(c)时,我们也获得了互信息的最大值,达到最优结果。
现在目标函数改为:

网络模型概览

最终的网络模型示意图为:


网络是基于DC-GAN(Deep Convolutional GAN)的,G和D都由CNN构成。在此基础上,Q和D共享卷积网络,然后分别通过各自的全连接层输出不同的内容:Q输出对应于fake data的c的概率分布,D则仍然判别真伪。

你可能感兴趣的:(InfoGAN解读)