生成模型中的互信息

基础知识

在信息论中,随机变量 X(微分)熵定义为 logp(x) 的期望: H(X)=xp(x)logp(x)dx=EX[logp(X)] 当涉及两个随机变量 X,Y 时,对它们的联合分布求熵也就得到了联合熵H(X,Y)=xyp(x,y)logp(x,y)dxdy=EX,Y[logp(X,Y)] 当其中一个随机变量给定时,例如 X=x,我们可以对条件概率分布 p(Y|X=x) 求它的熵: H(Y|X=x)=yp(y|x)logp(y|x)dy=EY|X=x[logp(Y|X=x)] 值得注意的是,H(Y|X=x) 建立在已知 X 取值为 x 的情况下。那么在平均意义下,继续对 X 取期望,就得到了条件熵H(Y|X)=xp(x)yp(y|x)logp(y|x)dxdy=xyp(x,y)logp(y|x)dxdy=EX,Y[logp(Y|X)] 不难证明,条件熵加上作为条件的那个随机变量的熵(也许可以称作边缘熵?),正好就是联合熵: H(Y|X)+H(X)=xyp(x,y)logp(y|x)dxdyxp(x)logp(x)dx=xyp(x,y)logp(y|x)dxdyxyp(x,y)logp(x)dxdy=xyp(x,y)log(p(y|x)p(x))dxdy=xyp(x,y)logp(x,y)dxdy=H(X,Y) 这个关系式可以类比 p(y|x)p(x)=p(x,y) 来记忆。

条件熵 H(Y|X) 可以理解为在给定 X 的条件下,Y 还剩下的不确定性。例如,当 XY 独立时,X 不能给 Y 带来任何新的信息,即 H(Y|X)=H(Y)Y 的不确定性不变;当 X 完全决定了 Y 时,给定 X 的条件下 Y 没有任何的不确定性,即 H(Y|X)=0. 因此,我们用熵减去条件熵来表示 X 带给 Y 的不确定性,即互信息I(X;Y)=H(Y)H(Y|X) 如果把互信息的表达式展开: I(X;Y)=H(Y)H(Y|X)=yp(y)logp(y)dy+xyp(x,y)logp(y|x)dxdy=xyp(x,y)logp(y)dxdy+xyp(x,y)logp(y|x)dxdy=xyp(x,y)logp(y|x)p(y)dxdy=xyp(x,y)logp(x,y)p(x)p(y)dxdy=KL(p(x,y)p(x)p(y)) 我们发现互信息其实就是 p(x,y)p(x)p(y) 之间的 KL 散度。由于 KL 散度衡量了两个分布之间的差异,所以从这个角度看,互信息在衡量 p(x,y)p(x)p(y) 之间的差异(注意 p(x)p(y) 确实是一个合法的概率分布)。当 XY 独立时,p(x,y)=p(x)p(y),KL 散度为 0,也即互信息为 0;否则,p(x,y) 不能拆成 p(x)p(y),这两个分布存在差异,KL 散度非零,即互信息非零。

从上式也能看出互信息其实是对称的,X 带给 Y 的不确定性等于 Y 带给 X 的不确定性: I(X;Y)=H(Y)H(Y|X)=H(X)H(X|Y) 以上涉及到的关系式可以用如下韦恩图直观地可视化出来:

InfoGAN & InfoVAE

在生成模型的研究中,我们常常认为观测到的数据 x 背后是由维度更低的隐变量 z 控制的。记数据的真实分布为 pdata(x),我们无法直接写出它的形式,只能从中采样若干样本构成训练集。因此,为了对未知的 pdata(x) 进行建模,我们可以构建一个解码器(生成器) pθ(x|z),并预定义一个隐变量的先验分布 p(z)(例如标准正态分布),那么就能够生成如下的数据分布: pθ(x)=zpθ(x|z)p(z)dz 训练生成模型的目标就是学习参数 θ 使得 pθ(x) 近似于 pdata(x). 然而,直接计算或遍历隐空间近似 pθ(x) 是不可行的,因此不同生成模型采用了不同的方法来解决这个问题。

对于 GANs 一类生成模型,我们使用一个判别器与生成器做对抗,促使生成器的数据分布尽可能接近真实的数据分布。可以证明,GANs 在隐式地最小化 pθ(x)pdata(x) 之间的 JS 散度(或 F 散度、Wasserstein 距离等)。在这个情形下,为了避免生成器忽略掉隐变量 z,我们可以最大化互信息 Ipθ(x;z),这就是 InfoGAN 的核心思想。

对于 VAEs 一类生成模型,我们引入了变分后验 qϕ(z|x) 推导出对数似然 logpθ(x) 的变分下界 ELBO. 其中,qϕ(z|x) 实现为一个神经网络编码器。在这个情形下,为了避免编码器将不同的 x 都映射到没有差别的 z 中,即隐变量不包含输入的任何信息,我们可以最大化互信息 Iqϕ(x;z),这就是 InfoVAE 的核心思想。

可以看见,InfoGAN 和 InfoVAE 优化的互信息其实是不同的——前者是为了保留生成器(也就是解码器)的输入和输出之间的信息传递,而后者是为了保留编码器的输入和输出之间的信息传递。

InfoGAN

前文提到,InfoGAN 希望最大化互信息 . 然而, 本身是 intractable 的,这是因为: 其中涉及到了后验分布的计算: 分母部分需要遍历隐空间——这在绝大多数情况下是不可行的。InfoGAN 的解决方案类似于 VAE——引入变分后验 去近似不可解的真实后验 于是我们可以通过最大化这个变分下界来最大化互信息。特别地,如果我们固定取 为标准正态分布,那么 为常数,我们只需要优化 即可。

具体而言,InfoGAN 引入互信息的动机是希望在 GAN 的学习过程中鼓励隐变量的解耦。作者其实并没有直接最大化 ,而是将隐变量分为两部分: 是无法解耦的部分, 是可解耦的部分,并只最大化 . 根据上面的讨论,引入变分后验 在实现上, 可以是离散的,也可以是连续的。为了简便起见,我们将离散 的先验分布设为均匀类别分布,连续 的先验分布设为标准正态分布,那么上式中的 也变成了常数。

使用一个神经网络解码器实现——特别地,这个网络可以与已有的判别器共用浅层部分,只需要最后拉出一个新的 head,因而 InfoGAN 新引入的计算量非常小。对于离散的 ,取 为 softmax 分布,那么容易推出 就是一个交叉熵损失;对于连续的 ,取 为高斯分布,那么 就是一个 MSE 损失函数。

InfoVAE

如前文所述,InfoVAE 希望最大化互信息 . 在已有的编码器 下,可以推出 由两部分组成:

我们发现第一项正好是原 VAE 的 ELBO 中的正则项: 如果将 ELBO 与 相加(相当于为原 VAE 新添加一个最大化互信息的目标),这一正则项就被抵消了: 或者我们也可以理解为,保留重构项不变,将原来的正则项替换成了现在的先验匹配项。直观上,原正则项让不同 编码出来的 都趋向于同一个先验分布 ,这显然与最大化互信息 是矛盾的。而新的先验匹配项只要求整体意义下编码出的 与先验分布 相近即可,不同的 编码出的 依旧可以不同,因此有助于保留 之间的互信息。

然而, 是 intractable 的,为此,我们可以把 KL 散度换成其他衡量两个分布差异的指标 ,使得 ​ 可解。例如,取 为 JS 散度,那么我们可以通过对抗训练的方式(GANs)来隐式地实现 JS 散度,这就是 Adversarial Autoencoders[7];而取 为 MMD,则可以按如下方式计算: 其中 是任一正定核,例如高斯核。作者称这样的模型为 MMD-VAE.

进一步地,为了更好的通用性,作者在 式的基础上引入了两个超参数 来调节原 VAE 正则项与新先验匹配项的权重系数。因此,InfoVAE 最终的目标函数为: 作者在 MNIST 实验中取 .

参考资料

  1. 互信息(Mutual Information)浅尝辄止(一):基础概念 - idejie的文章 - 知乎 https://zhuanlan.zhihu.com/p/240676850 ↩︎
  2. Mutual information. https://en.wikipedia.org/wiki/Mutual_information ↩︎
  3. 深度学习中常见的互信息的变分上下界(详细推导) - sonta的文章 - 知乎 https://zhuanlan.zhihu.com/p/91900950 ↩︎
  4. Barber, David, and Felix Agakov. The im algorithm: a variational approach to information maximization. Advances in neural information processing systems 16, no. 320 (2004): 201. ↩︎
  5. A Tutorial on Information Maximizing Variational Autoencoders (InfoVAE). https://ermongroup.github.io/blog/a-tutorial-on-mmd-variational-autoencoders/ ↩︎
  6. Zhao, Shengjia, Jiaming Song, and Stefano Ermon. Infovae: Information maximizing variational autoencoders. arXiv preprint arXiv:1706.02262 (2017). ↩︎
  7. Makhzani, Alireza, Jonathon Shlens, Navdeep Jaitly, Ian Goodfellow, and Brendan Frey. Adversarial autoencoders. arXiv preprint arXiv:1511.05644 (2015). ↩︎

生成模型中的互信息
https://xyfjason.github.io/blog-main/2023/09/15/生成模型中的互信息/
作者
xyfJASON
发布于
2023年9月15日
许可协议