你想“GAN”什么

简单介绍了 GAN 的基本思路、基本理论和训练过程,更为深奥的数学部分可以看最后模块“从 GAN 到 WGAN”。虽然 GAN 在“生成”方面应用颇多,但 GAN 更多的是一种思路而不是一个具体应用,“对抗”的思想是其核心,在多个领域都有其影子。实际上“对抗”也不局限于原论文的两个网络之间的一种对抗,可能是两个网络之间的多种对抗,也可能是多个网络之间的一种或多种对抗。所以根据具体任务具体应用不同 GAN,那么你想“GAN”什么?

GAN 基本思想

生成式对抗网络(Generative Adversarial Networks, GAN)因其能够学习高纬和复杂的的真实数据分布的潜能,在机器学习领域受到了广泛的关注。如今 GAN 应用于众多领域:图像生成(image generation)、图像到图像转换或称图像风格转换(image-to-image translation)、视频生成(video generation)、超分辨率重建(super-resolution)、音乐生成(music generation)、自然语言处理(natural language processing)、域适应(domain adaptation)、医学图像分割(medical image segmentation)等等

GAN 的基本思想是“博弈论”。博弈论是二人在平等的对局中各自利用对方的策略变换自己的对抗策略,达到取胜的目的。可能你已经在其他地方见过用造假币的故事来介绍 GAN,所以我换一个也许比前者更合适的例子:新学生和新美术老师。老师虽然是经过培训,见过很多大师的画作,有较高的绘画鉴赏水平,但是是第一次当老师。首先学生先自己画一幅画,然后老师提出基本的指导意见,比如光影不对,颜色不对,透视比例不对等等。然后学生得到老师指导意见之后就再画一副画,改正自己的错误地方,接着老师再给出更高要求的指导意见。在多次来回之后,学生的绘画水平越来越高,老师提出的要求也越来越高。最终老师看到一副足够好的画,老师也分不清是大师作品还是学生作品,也就是说老师基本提不出什么修改意见了,此时学生就可以出师了。这里的学生和老师,就是后面即将介绍的GANs的两个重要组成部分:生成器和判别器

GAN 基本理论

GAN 的训练过程是无监督的,能够生成不存在于训练集的数据。典型的 GAN 由生成器和判别器组成。输入随机噪声到生成器,然后生成器生成和训练集同分布的数据(也就是说学生尽量画出类似大师的画作)。判别器的输入有两个:真实数据(大师画作)和生成数据(学生画作),判别器尽可能区分真两个数据(也就是说老师尽量区分大师画作和学生画作,并给出指导意见)

GAN 网络结构图
Fig. 1. GAN 网络结构图

正式来说,给定一个训练数据集,pdata(x)p_{\text {data}}(\boldsymbol{x}) 是真实数据 x\boldsymbol{x} 的分布,xpdata(x)\boldsymbol{x} \sim p_{\text {data}}(\boldsymbol{x})。由生成器和判别器组成的 GAN 尽可能学习真实数据的分布。首先我们定义一个噪声序列 z\boldsymbol{z},并且zpz(z)\boldsymbol{z} \sim p_{\boldsymbol{z}}(\boldsymbol{z})。生成器函数 G:zxG:\boldsymbol{z} \mapsto \boldsymbol{x},其中生成数据 G(z)pG(x)G(\boldsymbol{z}) \sim p_{G}(\boldsymbol{x})pG(x)p_{G}(\boldsymbol{x}) 是生成数据的分布。判别器函数 D:x[0,1]D:\boldsymbol{x} \mapsto [ 0,1 ],其中 D(x)D(\boldsymbol{x})x\boldsymbol{x} 来自于训练数据的概率。训练 DD 来极大化判别生成数据和训练数据的概率,训练 GG 来最小化 log(1D(G(z)))log(1-D(G(\boldsymbol{z})))。总的来说 GGDD 在玩一个目标函数为 V(G,D)V(G,D) 的极大极小值游戏:

minGmaxDV(G,D)=Expdata(x)[logD(x)]+Ezpz(z)[log(1D(G(z)))]=Expdata(x)[logD(x)]+ExpG(x)[log(1D(x))]\begin{aligned} \underset{G}{\min} \underset{D}{\max} V( G,D) & = \mathbb{E}_{\boldsymbol{x} \sim p_{\text {data}}(\boldsymbol{x})}\left[\log D(\boldsymbol{x})\right] + \mathbb{E}_{\boldsymbol{z} \sim p_{\boldsymbol{z}}(\boldsymbol{z})}\left[\log \left(1-D\left(G(\boldsymbol{z})\right)\right)\right] \\ & = \mathbb{E}_{\boldsymbol{x} \sim p_{\text {data}}(\boldsymbol{x})}\left[\log D(\boldsymbol{x})\right] + \mathbb{E}_{\boldsymbol{x} \sim p_{\text {G}}(\boldsymbol{x})}\left[\log(1-D(\boldsymbol{x}))\right] \end{aligned}

在训练过程中,GG 生成数据,DD 快速学习区分生成数据和真实数据。经过一定次数的迭代,GG 将生成近似训练集同分布的数据。在纳什均衡,生成器模型可以表达出生成数据的分布:pG(x)=pdata(x)p_{G}(\boldsymbol{x})=p_{\text{data}}(\boldsymbol{x}),此时 DD 无法区分真实数据和生成数据。

GAN 训练过程

GAN 通过在每个迭代中进行下面两步来训练:训练 DD 和 训练 GG
实际使用中可能训练多次 GG 再训练一次 DD。因为一开始 DD 的“能力”明显比 GG 强:训练初期,DD 可以轻而易举区分真实数据和生成数据,而 GG 一开始生成的数据并不理想

Step 1. 训练 DD

DD 更好的区分生成数据和真实数据。 首先固定 GG 参数,然后学习 DD 的参数。这一步通过损失函数 L1L_1 的梯度上升来实现:

L1(X,Z)=1mxXlog(D(x))+1mzZlog(1D(G(z)))L_1(X, Z) = \frac{1}{m} \sum_{\boldsymbol{x} \in X} \log(D(\boldsymbol{x})) + \frac{1}{m} \sum_{\boldsymbol{z} \in Z} \log(1-D(G(\boldsymbol{z})))

Step 2. 训练 GG
GG 尽可能欺骗 DD,让 DD 无法正确区分真实数据和生成数据(即无法对生成数据正确分类)。 通过上一步更新的 DD 的参数来更新 GG 的参数。这一步通过损失函数 L2L_2 的梯度下降来实现:

L2(Z)=1mzZlog(1D(G(z)))L_2(Z) = \frac{1}{m} \sum_{\boldsymbol{z} \in Z} \log (1-D(G(\boldsymbol{z})))

从 GAN 到 WGAN

关于 GAN 存在的问题以及更深的理论分析可看 GAN 原论文、英文博客《From GAN to WGAN》和中文博客《令人拍案叫绝的Wasserstein GAN

  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2020-2022 Eureka Tesla
  • Visitors: | Views:

请我喝杯咖啡吧~