传统GAN的输入是一串连续的噪声z,导致GAN无法将z所要表达的语义信息与目标数据联系起来,而infoGAN很好的解决了这个问题:利用互信息,将输入G的信号经行约束,产生可解释的样本(传统GAN产生的样本比较随机,不具有可解释性),可以理解为找到输入的噪声与目标样本之间的相互联系
infoGAN的一个大框架为:
infoGAN
整个框架由3部分组成:生成器G,判别器D和潜变量判别器Q,其中D和Q共享一套参数,除了最后一层全连接层不一样之外。
具体的:
- 论文在原始GAN的基础之上,加入了一个潜变量c,使得c与生成的样本具有较高的互信息,z则为普通的噪声数据
- 生成器G接受2个输入c和z,其中c可以包含2中不同的潜变量编码(latent code),举个例子如MNIST数据集:c包含2部分,一部分是0~9的离散数据编码,控制G生成的数字,另一部分是2个连续性编码,可以认为是控制字体;D和传统GAN的判别器功能差不多,而Q负责判别潜变量
1. 互信息
infoGAN主要使用到了互信息,来达到生成样本可解释性的目的。在概率论和信息论中,两个随机变量之间的互信息(Mutual Information),是变量间相互依赖性的度量,互信息并不局限于实值随机变量,他更加一般的决定着联合分布和边缘分布的乘积
的相似程度
![](https://img.haomeiwen.com/i1305239/b2918789bdb5f2fb.png)
1.1 定义:两个随机变量
的互信息可以定义为
其中是
的联合概率分布函数,
是
的边缘概率分布函数
2.潜变量(latent code)
生成器G接受2个输入:潜变量c和噪声z,文章提出c对应于语义变量,由多个子变量组成:,这些子变量相互独立,那么可以得到:
引出一个问题:如果对G之间输入z和c,可以表示为,那么c的作用将会被忽略掉,因为c和z是独立的,即
,为了解决这个问题,文章提出了正则化约束项,认为c与
的互信息量应该较大,即
也应该比较大才是,于是作者在原始GAN的损失函数的基础上,提出加入正则化约束项:
此处增加了一个相当于对互信息的惩罚项
3 公式推导及优化
在实践中,如果直接最大化则很难,因为需要求解后验概率
, 于是可以定义Q(c|x)来逼近P(c|x),从而获得p(c|x)的变分下界。
假设:
, 根据作者后面的一大堆证明可以得到:
进而可以推导出:
其中,
inforGAN的pytorch实现:
https://github.com/HCMY/DeepLearningPractice/blob/master/GAN/infoGan.py
网友评论