infoGAN中一个重要的采样技巧

【写在前面】这篇文章写给了解infoGAN的同学,或对于互信息参数模型感兴趣的同学。写作起因是,我发现介绍infoGAN的文章往往忽略了一个重要的采样技巧,而这个技巧对于以互信息为约束的参数模型极为重要。

1.铺垫

1.1 信息熵
H(X) = -\sum_{x_i} P(x_i) log(P(x_i))\{离散\}
= -\int_{X} P(x) log(P(x))dx\{连续\}
=-E_X[log(P(X))]
信息熵反应信息带来的惊讶程度,概率越低,惊讶程度越大,信息熵越大。
1.2 互信息
I(X,Y) = H(X) - H(X|Y) = H(Y) - H(Y|X)
= H(X) + H(Y) - H(X,Y)
= -E[log(P(X)] + E_{X|Y}[log P(X|Y)]
=- \int_{X} P(x) log P(x)dx + \int_{X} P(x|Y) logP(x|Y)dx
=- \int_{X} (\int_{Y}P(x,y)dy) log P(x)dx + \int_{Y}p(y)\int_{X} P(x|y) logP(x|y)dxdy
= -\int_{X} \int_{Y}P(x,y)log P(x)dydx +\int_{X}\int_{Y}p(y) P(x|y) logP(x|y)dydx
= -\int_{X} \int_{Y}P(x,y)log P(x)dydx +\int_{X}\int_{Y} P(x,y) log\frac{P(x,y)}{P(y)}dydx
=\int_{X} \int_{Y} p(x,y)log \frac{p(x,y)}{p(x)p(y)} dy dx
=D_{KL}( \mathbb{P}_{XY}||\mathbb{P}_{X} \bigotimes \mathbb{P}_{Y})
两个随机变量X和Y的互信息有两种等价的定义:一种是二者的联合概率密度与它们各自概率密度的积直接的KL距离,另一种是用X自身的惊讶程度(H(X))减去在已知Y的基础上,X带来的惊讶程度(H(X|Y))。翻转X和Y也成立。
1.3 引理
对于随机变量X,Y和它们的函数f(x,y)服从
E_{x \sim X,y \sim Y|x} [f(x,y)] = E_{x \sim X, y \sim Y|x, x' \sim X|y}[f(x', y)]
证明
E_{x \sim X,y \sim Y|x} [f(x,y)]
= \int _{x}\int_{y} {P(x,y)f(x,y)}dydx
= \int _{x}\int_{y} {P(x,y)f(x,y)} \int _{x'}{P(x'|y)}dx'dydx
= \int _{x}P(x)\int_{y}P(y|x)\int_{x'}{f(x,y)} {P(x'|y)}dx'dydx
= \int _{x}P(x)\int_{y}P(y|x)\int_{x'}{f(x',y)} {P(x'|y)}dx'dydx
=E_{x \sim X, y \sim Y|x, x' \sim X|y}[f(x', y)]
这里需要解释的是第四行到第五行,
1)x是不给定yX里取,x'是给定yX里取,所以x'能选择的范围是X的子集;
2)f(x,y)X|y上有值,在X\not{|}y等于0,这是显然的;
3)这样f(x',y)=f(x,y)

2.用互信息的形式重写GAN的目标【这部分可跳过】

2.1 GAN的目标
\min_{G} \max_{D} V(D,G) = E_{x \sim P_{data}}[log D(X)] + E_{z \sim noise}[log(1-D(G(z)))]
D,G分别表示判别器和产生器。
2.2 GAN的目标的互信息写法
定义Y\sim Ber(0.5)为判别器的输出变量,P(y=1)=P(y=-1)=0.5
(其他一个什么值也可以。在GAN收敛时等于0.5),定义
x=\begin{cases} x_{real}& \text{if y=1}\\ x_{fake}& \text{if y=-1} \end{cases}
为判别器的输入,x_{real}x_{fake}=q(x_{fake}|c;\theta)分别表示真实数据和产生的数据,\theta表示网络参数。
L_{GAN}(\theta)=I(X,Y)
这一目标是说,GAN努力减小XY之间的互信息,也就是迷惑判别器,使其不能通过X来得到正确的判断。在理想情况下,XY之间的互信息为0。

3.infoGAN神来之笔的采样技巧

3.1 infoGAN想做什么
普通GAN中的隐变量z \sim P(Z)是一个随机采样,常选择高斯分布。这样隐变量的可解释性很差。而infoGAN要使得隐变量和产生的图像之间获得较大的关联性,比如某个隐变量和生成图像的类别相关,另一个和生成图像的风格相关,等等。关联性的形式化就是互信息。
3.2 infoGAN的(新增)目标函数
L_{infoGAN}(\theta)=V(G,D)-\lambda I(c,x_{fake})
这里重点讲新增的目标函数:
I(c,x_{fake})=I(c;G(z,c))=H(c)-H(c|G(z,c))
=E_{x\sim G(z,c)}[E_{c' \sim P(c|x)}[log P(c'|x)]] + H(c)
=E_{x\sim G(z,c)}[E_{c' \sim P(c|x)}[log \frac{P(c'|x)}{Q(c'|x)}+log Q(c'|x)]] + H(c)
=E_{x\sim G(z,c)}[KL[P(c'|x)||Q(c'|x)]+E_{c' \sim P(c|x)}[log Q(c'|x)]] + H(c)
\geq E_{x\sim G(z,c)}[E_{c' \sim P(c|x)}[log Q(c'|x)]] + H(c)
这里的c表示和类别相关的隐变量,服从类别分布c \sim category(C)G(z,c)zc的联合概率分布的函数,表示生成的数据。忽略z的影响(因为z是高斯噪声)就可以认为G(z,c)c的概率密度函数的函数。
3.3 infoGAN的采样
重点来了,从c \sim P(c|x)来采样是比较麻烦的,因为我们并不知道后验概率P(c|x)的数学形式,而直接从P(c)采样是比较方便的。这就用到了1.3节的引理,只要反着用就可以搞定。
E_{x\sim G(z,c)}[E_{c' \sim P(c|x)}[log Q(c'|x)]] + H(c)
=E_{x\sim G(z,c)}[E_{c' \sim P(c)}[log Q(c'|x)]] + H(c)
=E_{x\sim G(z,c), c \sim P(c)}[log Q(c|x)] + H(c)
简单解释一下,就是xC里取,cC|x里取,这样和cC里取是没有区别的,因为Q(c\not{|}x)=0

完。

参考文献:

  1. InfoGAN: using the variational bound on mutual information (twice)
  2. InfoGAN: Interpretable Representation Learning by Information Maximizing Generative Adversarial Nets Xi Chen,Yan Duan, Rein Houthooft,John Schulman, Ilya Sutskever, Pieter Abbeel
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容