之前GAN中都没有加入分类信息,都是耍流氓啊。用原始maxD的时候,G学到的容易收敛到一个固定图像。
而用feature matching的话,相同向量可能每次match的都不同,这怎么regression啊,摔 (也可能我是用姿势不对,但有多类的feature matching不靠谱啊)
What:
1.通常GAN把一个随机噪声向量z生成为一张图像。z可能从一个 0到1的随机采样构成。
2.这样连累了GAN中的每个值的作用
- 因为即使你改了向量中一个值,对生成图片的影响也是很小的。一定要改变很多个值去影响生成的结果。
- 每个值应该是有实际含义的(即文题中的interpretable,可翻译的),理想情况下,每个值应该都有物理含义,比如在人脸生成任务中,一个值控制眼睛的颜色,一个控制头发的长度等等。 (类似分类最后fc的每个值都有含义的,虽然定义不了)
3.所以作者建议对GANs基于共同信息(mutual information)的改进,将会得到有意义的向量元素(每个值)
How
1.潜在编码 latent code c
- 原来的GAN G的输出为 G(z) 现在改为 G(z,c)
- c可以包含多种变量,根据不同的分布,比如在MNIST中,c可以一个值来表示类别,一个高斯分布的值来表示手写体的粗细
2.共同信息 mutual information
- 如果使用潜在编码c,其实没有监督让网络去使用c。它就往往会被忽略。
- 为了避免这种情况,作者定义了一个熵。作为衡量X,Y两个变量之间 mutual information的程度
I(X;Y) = entropy(X) - entropy(X|Y) = entropy(Y) - entropy(Y|X) 这个值就像条件概率,X,Y互相独立的话,这个值应该等于0.
-新的loss被定义为 old loss - lamda* I(G(z,c);c)
我们需要增大生成出来的图像 与 类别c的关联。所以I(G(z,c);c) 的目标是变大。
3. variational mutual information maximisation
有一串公式。。。大概就是用一个网络从 G(z,c) 来regress c 可以和D是同一个网络,最后分个叉来回归c。
我简单模仿了一下,在输入向量中加了分类信息,github地址为:https://github.com/layumi/2016_GAN_Matlab 欢迎fork star ~~
GANs与可解释性
本文探讨了GANs中加入分类信息的重要性,并提出通过引入基于共同信息的改进方法,使得生成器的学习更具方向性,每个潜在向量元素都能对应特定的物理意义。
225

被折叠的 条评论
为什么被折叠?



