Python人工智能
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3.6 生成对抗网络

生成对抗网络(Generative Adversarial Network,GAN)是通过生成器G来学习特定概率分布的生成模型。生成器G与判别器D进行一个零和极小极大博弈,同时二者均随时间进化,直到达到纳什均衡(Nash Equilibrium)。生成器G尝试产生与给定的概率分布P(x)相似的样例,判别器D试图从原始的分布中区分生成器G产生的假样例。生成器G尝试转换从一个噪声分布P(z)中提取的样例z,来产生与P(x)相似的样例。判别器D学习标记生成器G生成的假样例为G(z),将真样例标记为P(x)。在极小极大博弈的均衡中,生成器会学习产生与P(x)相似的样例,因此下面的表达式成立。

图3-22展示了一个学习MNIST数字概率分布的GAN网络。

图3-22 学习MNIST数字概率分布的GAN网络

判别器最小化的损失函数是二元分类问题的交叉熵,用于区分概率分布P(x)中的真实数据和生成器(即G(z))产生的假数据。

生成器将尝试最大化给出同一个损失函数。这意味着,这个最优化问题可以通过效用函数(Utility Function)U(G,D)表示成一个极小极大博弈。

通常来说,可以用f散度(f-Divergence)来计算两个概率分布的距离,如Kullback-Leibler(KL)散度、Jensen Shannon散度及Bhattacharyya散度。可以通过以下公式表示两个概率分布PQ相对P的KL散度(KLD)。

相似地,PQ之间的Jensen Shannon散度(JSD)用如下公式表示。

因此,式(3-15)可以改写为

这里,G(x)是生成器的概率分布。通过将它的期望结果展开为积分形式,可以得到

对于固定的生成器分布G(x),当式(3-18)为真时,效用函数的值最小。

将式(3-18)中的D(x)替换至式(3-16),可以得到

现在,生成器的任务是最大化效用,或最小化效用,后者的表达式可被整理为

因此,生成器最小化等价于真实分布P(x)和生成器G(即G(x))产生样例的分布之间的Jensen Shannon散度的最小化。

【例3-10】 演示Python实现对抗生成网络。

运行程序,输出如下,效果如图3-23所示。

图3-23 生成对抗网络图