《智能系统与技术丛书 生成对抗网络入门指南》—3.2.2生成对抗网络的数学推导
3.2.2 生成对抗网络的数学推导
从之前几节我们可以了解到,我们的生成模型会从一个输入空间将数据映射到我们的生成空间,写成公式的形式是x = G(z)。通常我们的输入z会满足一个简单形式的随机分布,比如高斯分布或者均匀分布等,为了使得我们生成空间的数据分布能够尽可能地逼近真实数据分布,生成函数G会是一个神经网络的形式,通过神经网络我们可以模拟出各种完全不同的分布类型。
虽然我们可以清楚地知道前置输入数据z的概率分布函数,但在经过一个神经网络的情况下我们难以计算最终的生成空间分布Pmodel(x),这样就无法计算上一节中的概率函数L。
现在我们来看一下生成对抗网络是如何解决这个问题的。
我们首先看一下生成对抗网络中的代价函数,以判别器D为例,代价函数写作J(D),形式如下所示,后面我们会解释使用这种形式的原因。
(3-16)
对于生成器来说它与判别器是紧密相关的,我们可以把两者看作一个零和博弈,它们的代价综合应该是零,所以生成器的代价函数应满足如下等式。
(3-17)
这样一来,我们可以设置一个价值函数V来表示J(G)和J(D)。
(3-18)
(3-19)
(3-20)
我们现在把问题变成了需要寻找一个合适的V(θ(D), θ(G))使得J(G)和J(D)都尽可能小,也就是说对于判别器而言V(θ(D), θ(G))越大越好,而对于生成器来说则是V(θ(D), θ(G))越小越好,从而形成了两者之间的博弈关系。
在博弈论中,博弈双方的决策组合会形成一个纳什平衡点(Nash equilibrium),在这个博弈平衡点下博弈中的任何一方将无法通过自身的行为而增加自己的收益。这里有一个经典的囚徒困境例子来进一步说明纳什平衡点。两名囚犯被警方分开单独审讯,他们被告知的信息如下:如果一个人招供而另一方不招供,则招供的一方将可以立即释放,而另一方会被判处10年监禁;如果双方都招供的话,每个人都被判处两年监禁;如果双方都不招供,则每个人都仅被判半年监禁。两名囚犯由于无法交流,必须做出对自己最有利的选择,从理性角度出发选择招供是个人的最优决策,对方做出任何决定对于招供方都会是一个相对较好的结果,我们称这样的平衡为纳什平衡点。
在生成对抗网络中,我们要计算的纳什平衡点正是要寻找一个生成器G与判别器D使得各自的代价函数最小,从上面的推导中也可以得出我们希望找到一个V(θ(D), θ(G))对于生成器来说最小而对判别器来说最大,我们可以把它定义成一个寻找极大极小值的问题,公式如下所示。
(3-21)
我们可以用图形化的方法理解一下这个极大极小值的概念,一个很好的例子就是鞍点(saddle point),如图3-9所示,即在一个方向是函数的极大值点,而在另一个方向是函数的极小值点。
在上面公式的基础上,我们可以分别求出理想的判别器D*和生成器G*。
(3-22)
下面我们先来看一下如何求出理想的判别器,对于上述的D*,我们假定生成器G是固定的,令式子中的G(z) = x。推导如下。
(3-23)
(3-24)
(3-25)
(3-26)
图3-9 鞍点
我们现在的目标是希望寻找一个D使得V最大,我们希望对于积分中的项f(x) = pdata(x)logD(x) + pg(x)log(1 - D(x)),无论x取何值都能最大。其中,我们已知pdata是固定的,之前我们也假定生成器G固定,所以pg也是固定的,所以我们可以很容易地求出D以使得f(x)最大。我们假设x固定,f(x)对D(x)求导等于零,下面是求解D(x)的推导。
(3-27)
最终我们求得D*(x)的形式如下式所示。
(3-28)
可以看出它是一个范围在0到1的值,这也符合我们判别器的模式,理想的判别器在接收到真实数据时应该判断为1,而对于生成数据则应该判断为0,当生成数据分布与真实数据分布非常接近的时候,应该输出的结果为。
找到了D*之后,我们再来推导一下生成器G*。现在先把D*(x)代入前面的积分式子中重新表示。
(3-29)
(3-30)
(3-31)
到了这一步,我们需要先介绍一个定义—Jensen–Shannon散度,我们这里简称JS散度。在概率统计中,JS散度也与前面提到的KL散度一样具备了测量两个概率分布相似程度的能力,它的计算方法基于KL散度,继承了KL散度的非负性等,但有一点重要的不同,JS散度具备了对称性。JS散度的公式如下,我们还是以P和Q作为例子,另外我们设定,KL为KL散度公式。
(3-32)
如果我们把KL的公式代入展开的话,结果如下。
(3-33)
现在我们回到之前的式子,可以把它转化成JS散度的形式。
(3-34)
(3-35)
对于上面的,由于JS散度是非负的,当且仅当pdata = pg的时候,上式可以取得全局最小值-log(4)。所以我们要求的最优生成器G*,正是要使得G*的分布pg = pdata。
到这里为止我们已经看到了生成对抗网络在数学理论上是如何成立的,在第4章的开始部分会介绍实际操作中是如何实现上述构想的。
- 点赞
- 收藏
- 关注作者
评论(0)