概
既然都能生成图片了, 那至少得能够抓住数据的特征信息, 解耦.
主要内容
一些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的灵魂):
[egin{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}{2sigma^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部分的处理也是一致的).
估计是没弄好啊, 这没看出变化来.