GAN生成对抗网络(一)

作者: Ice_spring | 来源:发表于2020-09-06 21:17 被阅读0次

    GAN

    GAN(Generative Adversarial Networks)是两个网络的的组合, 一个网络生成模拟数据, 另一个网络判断生成的数据是真实的还是模拟的。生成模拟数据的网络要不断优化自己让判别的网络判断不出来, 判别的网络也要优化自己让自己判断得更准确。 二者关系形成对抗博弈,因此叫对抗神经网络(生成对抗网络)。实验证明, 利用这种网络间的对抗关系所形成的网络, 在无监督及半监督领域取得了很好的效果, 可以算是用网络来监督网络的一个自学习过程。在GAN发明之前,变分自编码器被认为是理论完美、实现简单,使用神经网络训练起来很稳定, 生成的图片逼近度也较高, 但是人类还是可以很轻易地分辨出真实图片与机器生成的图片。

    GAN原理

    生成对抗网络包含了 2 个子网络: 生成网络(Generator, G)和判别网络(Discriminator,D), 其中生成网络负责学习样本的真实分布,判别网络负责将生成网络采样的样本与真实样本区分开来。

    GAN架构图

    GAN网络结构

    生成网络 G(𝐳) 生成网络 G 和自编码器的 Decoder 功能类似, 从先验分布𝑝_𝑧(∙)中采样隐藏变量𝒛 \sim 𝑝_𝑧(∙),通过生成网络 G 参数化的𝑝_𝑔(𝒙|𝒛)分布, 获得生成样本𝒙 \sim 𝑝_𝑔(𝒙|𝒛),如下图所示。 其中隐藏变量𝒛的先验分布𝑝_𝑧(∙)可以假设属于某中已知的分布,比如多元均匀分布𝑧 \sim 𝑈(−1,1)

    生成网络

    𝑝_𝑔(𝒙|𝒛)可以用深度神经网络来参数化, 如下图所示, 从均匀分布𝑝_𝑧(∙)中采样出隐藏变量𝒛, 经过多层转置卷积层网络参数化的𝑝_𝑔(𝒙|𝒛)分布中采样出样本𝒙_𝑓

    转置卷积构成的生成网络

    判别网络 D(𝒙) 判别网络和普通的二分类网络功能类似,它接受输入样本𝒙,包含了采样自真实数据分布𝑝_𝑟(∙)的样本𝒙_𝒓 \sim 𝑝_𝑟(∙),也包含了采样自生成网络的假样本𝒙_𝒇 \sim 𝑝_𝑔(𝒙|𝒛)𝒙_𝒓𝒙_𝒇共同组成了判别网络的训练数据集。判别网络输出为𝒙属于真实样本的概率P(𝒙为真|𝒙),我们把所有真实样本𝒙_𝒓的标签标注为1,所有生成网络产生的样本𝒙_𝒇标注为0, 通过最小化判别网络预测值与标签之间的误差来优化判别网络参数。

    生成网络和判别网络

    GAN的损失函数

    我们的目标很明确, 既要不断提升判断器辨别真假图像样本的能力, 又要不断提升生成器生成更加逼真的图像,使判别器越来越难判别。
    对于判别网络 D,它的目标是能够很好地分辨出真样本𝒙_𝑟与假样本𝒙_𝑓。即最小化图片的预测值和真实值之间的交叉熵损失函数:

    \min _{\theta} \mathcal{L}=\text {Crossentropy}\left(D_{\theta}\left(\boldsymbol{x}_{r}\right), y_{r}, D_{\theta}\left(\boldsymbol{x}_{f}\right), y_{f}\right)

    其中𝐷_𝜃(𝒙_𝑟)代表真实样本𝒙_𝑟在判别网络𝐷_𝜃的输出, 𝜃为判别网络的参数集, 𝐷_𝜃(𝒙_𝑓)为生成样本𝒙_𝑓在判别网络的输出, 𝑦_𝑟𝒙_𝑟的标签,由于真实样本标注为真,故𝑦_𝑟 = 1𝑦_𝑓为生成样本的𝒙_𝑓的标签,由于生成样本标注为假,故𝑦_𝑓 = 0。 根据二分类问题的交叉熵损失函数定义:

    \mathcal{L}=-\sum_{x_{r} \sim p_{r}(\cdot)} \log D_{\theta}\left(x_{r}\right)-\sum_{x_{f} \sim p_{g}(\cdot)} \log \left(1-D_{\theta}\left(x_{f}\right)\right)

    因此判别网络的优化目标是:

    \theta^{*}=\operatorname{argmin}_{\theta} \mathcal{L}

    去掉\mathcal{L}中的负号,把\min_{\theta} \mathcal{L}问题转换为\max_{\theta} \mathcal{L}问题,并写为期望形式:

    \theta^{*}=\operatorname{argmax} \mathbb{E}_{x_{r} \sim p_{r}(\cdot)} \log D_{\theta}\left(x_{r}\right)+\mathbb{E}_{x_{f} \sim p_{g}(\cdot)} \log \left(1-D_{\theta}\left(x_{f}\right)\right)

    对于生成网络G(𝒛),我们希望𝒙_𝑓 = 𝐺(𝒛)能够很好地骗过判别网络 D, 假样本𝒙_𝑓在判别网络的输出越接近真实的标签越好。也就是说,在训练生成网络时, 希望判别网络的输出𝐷(𝐺(𝒛))越逼近 1 越好,此时的交叉熵损失函数:

    \min _{\phi} \mathcal{L}=\text { Crossentropy }\left(D\left(G_{\phi}(z)\right), 1\right)=-\log D\left(G_{\phi}(z)\right)

    \min_{\phi} \mathcal{L}问题转换为\max_{\phi} \mathcal{L}问题,并写为期望形式:

    \phi^{*}=\underset{\phi}{\operatorname{argmax}} \mathbb{E}_{\mathbf{z} \sim p_{\mathbf{z}}(\cdot)} \log D\left(G_{\phi}(\mathbf{z})\right)

    再等价转化为:

    \phi^{*}=\underset{\phi}{\operatorname{argmin}} \mathcal{L}=\mathbb{E}_{\mathbf{z} \sim p_{\mathbf{z}}(\cdot)} \log \left[1-D\left(G_{\phi}(\mathbf{z})\right)\right]

    GAN的优化过程不像通常的求损失函数的最小值, 而是保持生成与判别两股力量的动态平衡。 因此, 其训练过程要比一般神经网络难很多。

    统一损失代价函数

    把判别网络的目标和生成网络的目标合并,写成min-max形式:
    \begin{aligned} \underset{\phi}{\operatorname{min}} \underset{\theta}{\operatorname{max}} \mathcal{L}(D, G)&=\mathbb{E}_{x_{r} \sim p_{r}(\cdot)} \log D_{\theta}\left(x_{r}\right)+\mathbb{E}_{x_{f} \sim p_{g}(\cdot)} \log \left(1-D_{\theta}\left(x_{f}\right)\right) \\ &=\mathbb{E}_{x \sim p_{r}(\cdot)} \log D_{\theta}(x)+\mathbb{E}_{z \sim p_{z}(\cdot)} \log \left(1-D_{\theta}\left(G_{\phi}(z)\right)\right) \end{aligned}
    原GAN论文中:
    \min _{G} \max _{D} V(D, G)=\mathbb{E}_{\boldsymbol{x} \sim p_{\text {data }}(\boldsymbol{x})}[\log D(\boldsymbol{x})]+\mathbb{E}_{\boldsymbol{z} \sim p_{\boldsymbol{z}}(\boldsymbol{z})}[\log (1-D(G(\boldsymbol{z})))]

    这里为了好理解,把各个符号梳理的更清晰了,注意符号和网络参数的对应。
    理想情况下D会有更精确的鉴别真伪数据的能力,经过大量次数的迭代训练会使G尽可能模拟出以假乱真的样本, 最终整个GAN会达到所谓的纳什均衡, 即D对于生成样本和真实样本鉴别结果为正确率和错误率各占50%。下面具体从理论层面来推导。


    纳什均衡

    现在从理论层面进行分析, 通过博弈学习的训练方式,生成器 G 和判别器 D 分别会达到什么状态。 具体地,来看以下 2 个问题:

    • 问题1:固定生成器 G, 判别器D 会收敛到什么最优状态D^*?
    • 问题2:在 鉴别器 D 达到最优状态𝐷^∗后, G 会收敛到什么状态?

    首先我们通过𝒙_𝒓 \sim 𝑝_𝑟(∙)一维正态分布的例子给出一个直观的解释,如下图所示,黑色虚线曲线代表了真实数据的分布𝑝_𝑟(∙), 为某正态分布N(𝜇, 𝜎^2), 绿色实线代表了生成网络学习到的分布𝒙_𝒇 \sim 𝑝_𝑔(∙), 蓝色虚线代表了判别器的决策边界曲线, 图中(a)(b)(c)(d)分别代表了生成网络的学习轨迹。在初始状态,如图 (a)所示, 𝑝_𝑔(∙)分布与𝑝_𝑟(∙)差异较大,判别器可以很轻松地学习到决策边界,即图(a)中的蓝色虚线,将来自𝑝_𝑔(∙)的采样点判定为 0, 𝑝_𝑟(∙)中的采样点判定为 1。 随着生成网络的分布𝑝_𝑔(∙)越来越逼近真实分布𝑝_𝑟(∙),判别器越来越困难将真假样本区分开,如图 (b)(c)所示。 最后,生成网络性能达到最佳,学习到的分布𝑝_𝑔(∙) = 𝑝_𝑟(∙),此时从生成网络中采样的样本非常逼真, 判别器无法区分,即判定为真假样本的概率均等,如图(d)所示。

    直观解释

    问题1:判别器D状态

    固定生成器G的参数\phi,判别器D最佳能达到的状态:
    D^{*}(\boldsymbol{x})=\frac{p_{r}(\boldsymbol{x})}{p_{r}(\boldsymbol{x})+p_{g}(\boldsymbol{x})}

    证明:对于给定的生成器G,要让判别器D达到最优,我们的目标是最大化损失函数,其积分形式为:
    \begin{aligned} \mathcal{L}(D, G) &=\int_{x} p_{r}(\boldsymbol{x}) \log (D(\boldsymbol{x})) d x+\int_{z} p_{\boldsymbol{z}}(\boldsymbol{z}) \log (1-D(G(\boldsymbol{z}))) d z \\ &=\int_{x} p_{r}(\boldsymbol{x}) \log (D(\boldsymbol{x}))+p_{g}(\boldsymbol{x}) \log (1-D(\boldsymbol{x})) d x \end{aligned}

    对于给定的 G,真实分布始终是固定的,所以p_r(x)p_g(x)都是定值,于是对于判别器D,要找出
    f_{\theta}=p_{r}(\boldsymbol{x}) \log (D(\boldsymbol{x}))+p_{g}(\boldsymbol{x}) \log (1-D(\boldsymbol{x}))

    的最大值,其中\theta是判别器网络参数,对于函数f(x)=alog(x)+blog(1-x),x \in (0,1),a > 0, b > 0,不难得到f(x)\frac{a}{a+b}处取得极大值且是最大值。因此可得f_{\theta}的极值点也为
    \theta^* s.t. D^{*}(\boldsymbol{x})=\frac{p_{r}(\boldsymbol{x})}{p_{r}(\boldsymbol{x})+p_{g}(\boldsymbol{x})}

    故判别器 G 能达到的最佳状态为定理中给出的式子。

    问题2:生成器G状态

    现在考虑第二个问题。
    JS 散度(Jensen–Shannon divergence)

    D_{J S}(p \| q)=\frac{1}{2} D_{K L}\left(p \| \frac{p+q}{2}\right)+\frac{1}{2} D_{K L}\left(q \| \frac{p+q}{2}\right)

    对于KL散度,D_{KL}(p,q) \neq D_{KL}(q,p),是不对称的。但JS散度是对称的。


    D达到D^*时,考虑此时p_rp_gJS散度:
    \begin{aligned} D_{J S}\left(p_{r} \| p_{g}\right)=& \frac{1}{2} D_{K L}\left(p_{r} \| \frac{p_{r}+p_{g}}{2}\right)+\frac{1}{2} D_{K L}\left(p_{g} \| \frac{p_{r}+p_{g}}{2}\right) \\ =& \frac{1}{2}\left(\log 2+\int_{x} p_{r}(x) \log \frac{p_{r}(x)}{p_{r}+p_{g}(x)} d x\right)+ \frac{1}{2}\left(\log 2+\int_{x} p_{g}(x) \log \frac{p_{g}(x)}{p_{r}+p_{g}(x)} d x\right) \\ =& \frac{1}{2}\left(\log 4+\int_{x} p_{r}(x) \log \frac{p_{r}(x)}{p_{r}+p_{g}(x)} d x + \int_{x} p_{g}(x) \log \frac{p_{g}(x)}{p_{r}+p_{g}(x)} d x \right) \end{aligned}
    考虑到判别网络到达𝐷^∗时,此时的损失函数为:
    \begin{aligned} \mathcal{L}\left(G, D^{*}\right)= &\int_{x} p_{r}(x) \log \left(D^{*}(x)\right)+p_{g}(x) \log \left(1-D^{*}(x)\right) d x \\ =& \int_{x} p_{r}(x) \log \frac{p_{r}(x)}{p_{r}+p_{g}(x)} d x+\int_{x} p_{g}(x) \log \frac{p_{g}(x)}{p_{r}+p_{g}(x)} d x \end{aligned}

    于是我们可以得到:
    \mathcal{L}\left(G, D^{*}\right)=2 D_{J S}\left(p_{r} \| p_{g}\right)-2 \log 2

    对于生成网络G而言,目标是最小化损失函数,由于D_{J S}\left(p_{r} \| p_{g}\right) \geq 0,因此\mathcal{L}(𝐺, 𝐷^∗)取得最小值仅在𝐷_{𝐽𝑆}(𝑝_𝑟||𝑝_𝑔) = 0时(此时𝑝_𝑔 = 𝑝_𝑟),\mathcal{L}(𝐺, 𝐷^∗)取得最小值:
    \mathcal{L}(𝐺, 𝐷^∗)=-2log2

    此时生成网络达到G^*状态是:
    p_g=p_r

    G^∗的学到的分布𝑝_𝑔与真实分布𝑝_𝑟一致,网络达到纳什均衡点,此时:
    D^{*}(x)=\frac{p_{r}(x)}{p_{r}(x)+p_{g}(x)}=0.5

    即对于生成器生成的图像有0.5的概率被判定为真,也有0.5的概率被判定为假。

    GAN训练过程

    算法过程

    参考资料

    GoodfellowIan, Pouget-AbadieJean, MirzaMehdi, XuBing, Warde-FarleyDavid, OzairSherjil, . . .
    BengioYoshua. (2014). Generative Adversarial Nets

    Radford, Alec, Luke Metz, and Soumith Chintala. (2015).Unsupervised representation learning with deep convolutional generative adversarial networks.

    https://www.jianshu.com/p/058fd15cfa52

    https://zhuanlan.zhihu.com/p/83476792

    深度学习Tensorflow2.0+Github项目

    相关文章

      网友评论

        本文标题:GAN生成对抗网络(一)

        本文链接:https://www.haomeiwen.com/subject/myiglktx.html