目录
既然都能生成图片了, 那至少得能够抓住数据的特征信息, 解耦.
一些GAN的输入会包括\((z, c)\), 其中\(z\)是噪声, 而\(c\)是一些别的信息, 比如标签信息, 一个很自然的问题是, 怎么保证GAN会利用这部分信息呢? 换言之, 怎么保证生成器生成的图片\(G(z, c)\)与\(c\)有不可否认的关联呢?
衡量两个随机变量关联性的指标, 经典的便是互信息
\[I(X, Y) = H(X) - H(X|Y),
\]
在这个问题里就是
\[I(c,G(z,c)) = H(c) - H(c|G(z,c)).
\]
直接估计互信息是很困难的, 利用变分方法可以得到一个有效的下界(这也是VAE的灵魂):
\[\begin{array}{ll}
I(c,G(z,c)) & = \mathbb{E}_{x \sim P_G} \mathbb{E}_{P(c|x)} \log P(c|x) + H(c) \\
& = \mathbb{E}_{x \sim P_G} [\mathrm{KL}(P(c|x) \| Q(c|x)) + \mathbb{E}_{P(c|x)}\log Q(c|x)] + H(c) \\
& \ge \mathbb{E}_{x \sim P_G}\mathbb{E}_{P(c|x)}\log Q(c|x) + H(c)=: L_{I}(G, Q).
\end{array}
\]
其中\(Q\)是我们用来近似\(P(c|x)\)的. 上述还是存在一个问题, 即\(P(c|x)\)依然无法处理, 不过注意到
\[L_I(G, Q) = \mathbb{E}_{c \sim P(c), x \sim G(z, c)}[\log Q(c|x)] + H(c).
\]
我们可以给出一个合理的先验分布.
当\(c \in \mathcal{C}\)是离散的时候, 令\(Q\)的输出向量的长度为\(|\mathcal{C}|\), 可直接令该向量的softmax后的向量为概率向量;
当\(c\)是连续的时候, 倘若\(x=G(z, c^*)\), 则可以假设\(Q(c|x) \sim \mathcal{N}(c^*, \sigma^2 I)\), 此时
\[\log Q(c|x) \propto \log \exp(-\frac{\|c-c^*\|_2^2}{2\sigma^2}) \propto -\|c-c^*\|_2^2.
\]
最后的损失便为
\[\min_{G, Q} \max_D V_{\mathrm{InfoGAN}} (D, G, Q) = V(D, G) - \lambda \cdot L_I(G, Q).
\]
其中\(V(D, G)\)是普通的GAN的损失.
看一些InfoGAN的实现: \(z\)服从[0, 1]均匀分布, 类别标签服从均匀分布(\(1/K\)), 其他的用于描述角度宽度的\(c\)服从[-1, 1]的均匀分布.
实际上, 应该还是有一个超参数\(\sigma^2\)的, 但是当我们假设其与\(x\)无关的时候, 在损失部分其为一常数, 所以就不用管了(这和VAE在decoder部分的处理也是一致的).
估计是没弄好啊, 这没看出变化来.
手机扫一扫
移动阅读更方便
你可能感兴趣的文章