齐国君
https://github.com/guojunq/glsgan 可以跑跑人脸生成。
之前我们分享了一种损失敏感的生成对抗网络(LS-GAN)。现在,我们发现可以通过LS-GAN里面的理论、推广得到一个更加广义的LS-GAN超模型。
让我们把之前的LS-GAN姑且叫狭义LS-GAN,不熟悉的朋友可以移步 条条大路通罗马LS-GAN:把GAN建立在Lipschitz密度上 - 知乎专栏 。
新的推广后的LS-GAN,又称GLS-GAN,是通过定义一个满足一定条件的、代价(cost)函数来得到了。不同的代价函数得到的GLS-GAN是不同的,这样我们就有了一族GLS-GAN。
而有意思的是, 狭义LS-GAN和WGAN是这族GLS-GAN的两个特例。(不熟悉WGAN的朋友可以移步 令人拍案叫绝的Wasserstein GAN - 知乎专栏)
在展开说明之前,我们先给出关于LS-GAN和WGAN是GLS-GAN特例这两个结论。
现在我们就来具体看看什么是GLS-GAN。感兴趣的朋友也可以参考我们新修订的预印本论文[1701.06264] Loss-Sensitive Generative Adversarial Networks on Lipschitz Densities 里的附件D 。
那么什么是GLS-GAN,它又是如何从LS-GAN推广而来的呢?
如果大家仔细研究过我们论文中Lemma 1的证明过程,就会发现对于损失函数的学习目标、公式(6)第二项中的
那么Lemma 1关于生成数据密度和真实数据密度一致性的结论就是成立的。
这样,我们就可以用一个广义的代价函数得到一个推广的GLS-GAN,并在理论框架下、证明了它是可以生成真实数据的。
这样,新的GLS-GAN、就是在给定一个满足条件(1)、(2)的代价函数C下、求解损失函数
,即
其中,
是一个给定的生成网络。
)类
那么,什么样的代价函数满足上面两个条件呢?一个很显然的选择是Leaky Rectified Linear,就是上面的
这个时候我们有
最后一项、是个和损失函数
无关的常数项,可以忽略,我们就得到了
大家和WGAN里求critic函数的目标比较下,不难看出它们是一致的。所以
WGAN = GLS-GAN(
)
但我们推广GLS-GAN的目的不是仅仅告诉大家,LS-GAN和WGAN是GLS-GAN的特例。
更重要的是,我们现在知道,在WGAN和LS-GAN之间,有一大片我们还从来没探索过的GLS-GAN(
),虽然我们理论上分析这族GLS-GAN可以产生和真实样本一致的密度,但实际如何,这个留给了我们后面的工作。
但是,我们有理由相信:既然作为极端特例的LS-GAN和WGAN都取得了不俗的效果,那么位于它们两者之间,以及更广义的、基于非LeakReLU代价函数的GLS-GAN上、应该也可以取得不错的效果。
图:广义GLS-GAN。LS-GAN和WGAN是这个超级GLS-GAN中、在LeakyReLU代价函数类
上的两个特例。这个超GLS-GAN族还包含基于、非LeakyReLU的代价函数的GLS-GAN。
这个GLS-GAN也是理论指导未来实践方向一个例子。本身Lemma 1只是用来证明LS-GAN的一致性,但通过分析,可以挖掘出更深入和广泛的模型,并将不同模型(LS-GAN和WGAN)联系起来,得到了一个超模型(super model)。
如果之后的实验能找到更多的、非LS-GAN或WGAN的GLS-GAN模型、可以取得更好的效果,也是我们“基于Lipschitz密度的LS-GAN理论”指导实践的一个好例子。
当然,把代价函数C定义成LeakyReLU也不是必须的,还有更多其他代价函数满足给出的条件。
就是满足条件(1)(2)的代价函数。
有兴趣的朋友可以发掘出更过的符合条件的代价函数来充实GLS-GAN超模型类。
之后,我们会发布一个易扩展的GLS-GAN代码库,方便大家可以尝试各种不同的代价函数。我们也欢迎大家加入探索GLS-GAN的队伍来,寻找更多的超模型,不断推广GLS-GAN家族。
如果有朋友提出更多的、或更广泛的GLS-GAN模型,随时欢迎联系我们 (guojunq@gmail.com), 我们会把它加到我们的模型库、分享给更多的朋友。
最后,感兴趣的朋友目前可以参考我们临时发布的 代码[github/glsgan] 。不过,这个代码我们还没有仔细测试过,暂时也没有具体的结果可以在这里和大家分享。所以仅供有兴趣的朋友参考用。