F-GAN更高一层看GAN

今天介绍一篇比较经典的工作,作者命名为f-GAN,他在文章中给出了通过一般的ff散度来构造一般的GAN的方案。可以毫不夸张地说,这论文就是一个GAN模型的“生产车间”,它一般化的囊括了很多GAN变种,并且可以启发我们快速地构建新的GAN变种(当然有没有价值是另一回事,但理论上是这样)。

局部变分 #

整篇文章对ff散度的处理事实上在机器学习中被称为“局部变分方法”,它是一种非常经典且有用的估算技巧。事实上本文将会花大部分篇幅介绍这种估算技巧在ff散度中的应用结果。至于GAN,只不过是这个结果的基本应用而已。

f散度 #

首先我们还是对ff散度进行基本的介绍。所谓ff散度,是KL散度的一般化:

f(P‖Q)=∫q(x)f(p(x)q(x))dx(1)(1)Df(P‖Q)=∫q(x)f(p(x)q(x))dx


注意,按照通用的约定写法,括号内是p/qp/q而不是q/pq/p,大家不要自然而言地根据KL散度的形式以为是q/pq/p。

 

可以发现,这种形式能覆盖我们见过的很多概率分布之间的度量了,这里直接把论文中的表格搬进来(部分)

凸函数 #

上面列举了一堆的分布度量以及对应的ff,那么一个很自然的问题是这些ff的共同特点是什么呢?

答案是:

1、它们都是正实数到实数的映射(ℝ+→ℝR+→R);

2、f(1)=0f(1)=0;

3、它们都是凸函数。

第一点是常规的,第二点f(1)=0f(1)=0保证了f(P‖P)=0Df(P‖P)=0,那第三点凸函数是怎么理解呢?其实它是凸函数性质的一个最基本的应用,因为凸函数有一个非常重要的性质(詹森不等式):

𝔼[f(x)]≥f(𝔼[x])(2)(2)E[f(x)]≥f(E[x])


也就是“函数的平均大于平均的函数”,有些教程会直接将这个性质作为凸函数的定义。而如果f(u)f(u)是光滑的函数,我们一般会通过二阶导数f″(u)f″(u)是否恒大于等于0来判断是否凸函数。

 

利用(2)(2),我们有

∫q(x)f(p(x)q(x))dx=≥===𝔼x∼q(x)[f(p(x)q(x))]f(𝔼x∼q(x)[p(x)q(x)])f(∫q(x)p(x)q(x)dx)f(∫p(x)dx)f(1)=0(3)(3)∫q(x)f(p(x)q(x))dx=Ex∼q(x)[f(p(x)q(x))]≥f(Ex∼q(x)[p(x)q(x)])=f(∫q(x)p(x)q(x)dx)=f(∫p(x)dx)=f(1)=0


也就是说,这三个条件保证了ff散度是非负,而且当两个分布一模一样时ff散度就为0,这使得fDf可以用来简单地度量分布之间的差异性。当然,ff散度原则上并没有保证P≠QP≠Q时f(P‖Q)>0Df(P‖Q)>0。但通常我们会选择严格凸的ff(即f″(u)f″(u)恒大于0),那么这时候可以保证P≠QP≠Q时f(P‖Q)>0Df(P‖Q)>0,也就是说这时候有f(P‖Q)=0⇔P=QDf(P‖Q)=0⇔P=Q。(注:即便如此,一般情况下f(P‖Q)Df(P‖Q)仍然不是满足公理化定义的“距离”,不过这个跟本文主题关系不大,这里只是顺便一提。)

 

凸共轭 #

现在从比较数学的角度讨论一下凸函数,一般地,记凸函数的定义域为𝔻D(对于本文来说,𝔻=ℝ+D=R+)。选择任意一个点ξξ,我们求y=f(u)y=f(u)在u=ξu=ξ处的切线,结果是

y=f(ξ)+f′(ξ)(u−ξ)(4)(4)y=f(ξ)+f′(ξ)(u−ξ)


考虑两者的差函数

h(u)=f(u)−f(ξ)−f′(ξ)(u−ξ)(5)(5)h(u)=f(u)−f(ξ)−f′(ξ)(u−ξ)


所谓凸函数,直观理解,就是它的图像总在它的(任意一条)切线上方,因此对于凸函数来说下式恒成立

f(u)−f(ξ)−f′(ξ)(u−ξ)≥0(6)(6)f(u)−f(ξ)−f′(ξ)(u−ξ)≥0


整理成

f(u)≥f(ξ)−f′(ξ)ξ+f′(ξ)u(7)(7)f(u)≥f(ξ)−f′(ξ)ξ+f′(ξ)u


因为不等式是恒成立的,并且等号是有可能取到的,因此可以导出

f(u)=maxξ∈𝔻{f(ξ)−f′(ξ)ξ+f′(ξ)u}(8)(8)f(u)=maxξ∈D{f(ξ)−f′(ξ)ξ+f′(ξ)u}


换新的记号,记t=f′(ξ)t=f′(ξ),并从中反解出ξξ(对于凸函数,这总能做到,读者可以自己尝试证明),然后记

g(t)=−f(ξ)+f′(ξ)ξ(9)(9)g(t)=−f(ξ)+f′(ξ)ξ


那么就有

f(u)=maxt∈f′(𝔻){tu−g(t)}(10)(10)f(u)=maxt∈f′(D){tu−g(t)}


这里的g(t)g(t)就称为f(u)f(u)的共轭函数。留意花括号里边的式子,给定ff后,gg也确定了,并且整个式子关于uu是线性的。所以总的来说,我们做了这样的一件事情:

 

对一个凸函数给出了线性近似,并且通过最大化里边的参数就可以达到原来的值。

注意给定uu,我们都要最大化一次tt才能得到尽可能接近f(u)f(u)的结果,否则随便代入一个tt,只能保证得到下界,而不能确保误差大小。所以它称为“局部变分方法”,因为要在每一个点(局部)处都要进行最大化(变分)。这样一来,我们可以理解为tt实际上是uu的函数,即

f(u)=maxT是值域为f′(𝔻)的函数{T(u)u−g(T(u))}(11)(11)f(u)=maxT是值域为f′(D)的函数{T(u)u−g(T(u))}

上述讨论过程实际上已经给出了计算凸共轭的方法,在这里我们直接给出上表对应的凸函数的共轭函数。

(注:这里的WW朗伯W函数。)

f-GAN #

由上述推导,我们就可以给出f散度的估算公式,并且进一步给出f-GAN的一般框架。

f散度估计 #

计算ff散度有什么困难呢?根据定义(1)(1),我们同时需要知道两个概率分布P,QP,Q才可以计算两者的ff散度,但事实上在机器学习中很难做到这一点,有时我们最多只知道其中一个概率分布的解析形式,另外一个分布只有采样出来的样本,甚至很多情况下我们两个分布都不知道,只有对应的样本(也就是说要比较两批样本之间的相似性),所以就不能直接根据(1)(1)来计算ff散度了。

结合(1)(1)(11)(11),我们得到

f(P‖Q)==maxT∫q(x)[p(x)q(x)T(p(x)q(x))−g(T(p(x)q(x)))]dxmaxT∫[p(x)⋅T(p(x)q(x))−q(x)⋅g(T(p(x)q(x)))]dx(12)(12)Df(P‖Q)=maxT∫q(x)[p(x)q(x)T(p(x)q(x))−g(T(p(x)q(x)))]dx=maxT∫[p(x)⋅T(p(x)q(x))−q(x)⋅g(T(p(x)q(x)))]dx


T(p(x)q(x))T(p(x)q(x))记为整体T(x)T(x),那么就有

f(P‖Q)=maxT(𝔼x∼p(x)[T(x)]−𝔼x∼q(x)[g(T(x))])(13)(13)Df(P‖Q)=maxT(Ex∼p(x)[T(x)]−Ex∼q(x)[g(T(x))])


(13)(13)就是估计ff散度的基础公式了。意思就是说:分别从两个分布中采样,然后分别计算T(x)T(x)g(T(x))g(T(x))的平均值,优化TT,让它们的差尽可能地大,最终的结果就是ff散度的近似值了。显然T(x)T(x)可以用足够复杂的神经网络拟合,我们只需要优化神经网络的参数。

 

注意在对凸函数的讨论中,我们在最大化目标的时候,对TT的值域是有限制的。因此,TT的最后一层,我们必须设计适当的激活函数,使得TT满足要求的值域。当然激活函数的选择不是唯一的,参考的激活函数已经列举在前表。注意,尽管理论上激活函数的选取是任意的,但是为了优化上的容易,应该遵循几个原则:

1、对应的定义域为ℝR,对应的值域为要求值域(边界点可以忽略);

2、最好选择全局光滑的函数,不要简单地截断,例如要求值域为ℝ+R+的话,不要直接用relu(x)relu(x),可以考虑的是exex或者log(1+ex)log⁡(1+ex)

3、注意式(13)(13)的第二项包含了g(T(x))g(T(x)),也就是ggTT的复合计算,因此选择激活函数时,最好使得它与gg的复合运算比较简单。

GAN批发 #

好了,说了那么久,几乎都已经到文章结尾了,似乎还没有正式说到GAN。事实上,GAN可以算是整篇文章的副产物而已。

GAN希望训练一个生成器,将高斯分布映射到我们所需要的数据集分布,那就需要比较两个分布之间的差异了,经过前面的过程,其实就很简单了,随便找一种ff散度都可以了。然后用式(13)(13)ff散度进行估计,估计完之后,我们就有ff散度的模型了,这时候生成器不是希望缩小分布的差异吗?最小化ff散度就行了。所以写成一个表达式就是

minGmaxT(𝔼x∼p(x)[T(x)]−𝔼x=G(z),z∼q(z)[g(T(x))])(14)(14)minGmaxT(Ex∼p(x)[T(x)]−Ex=G(z),z∼q(z)[g(T(x))])


或者反过来:

minGmaxT(𝔼x=G(z),z∼q(z)[T(x)]−𝔼x∼p(x)[g(T(x))])(15)(15)minGmaxT(Ex=G(z),z∼q(z)[T(x)]−Ex∼p(x)[g(T(x))])


就这样完了~

 

需要举几个例子?好吧,先用JS散度看看。把所有东西式子一步步代进去,你会发现最终结果是(略去了log2log⁡2的常数项)

minGmaxD(𝔼x∼p(x)[logD(x)]+𝔼x=G(z),z∼q(z)[log(1−D(x))])(16)(16)minGmaxD(Ex∼p(x)[log⁡D(x)]+Ex=G(z),z∼q(z)[log⁡(1−D(x))])


其中DDσ(x)=1/(1+e−x)σ(x)=1/(1+e−x)激活。这就是最原始版本的GAN了。

 

用Hellinger距离试试?结果是

minGmaxD(−𝔼x∼p(x)[eD(x)]−𝔼x=G(z),z∼q(z)[e−D(x)])(17)(17)minGmaxD(−Ex∼p(x)[eD(x)]−Ex=G(z),z∼q(z)[e−D(x)])


这里的D(x)D(x)是线性激活。这个貌似还没有命名?不过论文中已经对它做过实验了。

 

那用KL散度呢?因为KL散度是不对称的,所以有两个结果,分别为

minGmaxD(𝔼x∼p(x)[D(x)]−𝔼x=G(z),z∼q(z)[eD(x)−1])(18)(18)minGmaxD(Ex∼p(x)[D(x)]−Ex=G(z),z∼q(z)[eD(x)−1])


minGmaxD(𝔼x=G(z),z∼q(z)[D(x)]−𝔼x∼p(x)[eD(x)−1])(19)(19)minGmaxD(Ex=G(z),z∼q(z)[D(x)]−Ex∼p(x)[eD(x)−1])


这里的D(x)D(x)也是线性激活。

 

好吧,不再举例了。其实这些ff散度本质上都差不多,看不到效果差别有多大。不过可以注意到,JS散度和Hellinger距离都是对称的、有界的,这是一个非常好的性质,以后我们会用到。

总结 #

说白了,本文主要目的还是介绍ff散度及其局部变分估算而已~所以大部分还是理论文字,GAN只占一小部分。

当然,经过一番折腾,确实可以达到“GAN生产车间”的结果(取决于你有多少种ff散度),这些新折腾出来的GAN可能并不像我们想象中的GAN,但它们确实在优化ff散度。不过,以往标准GAN(对应JS散度)有的问题,其实ff散度照样会有,因此f-GAN这个工作更大的价值在于“统一”,从生成模型的角度,并没有什么突破。

转载到请包括本文地址:https://spaces.ac.cn/archives/6016

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值