GAN 公式推导 您所在的位置:网站首页 导数变化公式 GAN 公式推导

GAN 公式推导

2024-06-22 02:47| 来源: 网络整理| 查看: 265

目录

零、前言

一、完美生成器的数学模型

二、转化为最优化问题

三、详细的公式证明

四、寻找最好的鉴别器

五、查找最好的生成器

六、收敛

七、总结

零、前言

        笔者在学习GAN的过程中,查阅了许许多多资料,最终发现台湾大学李宏毅教授的GAN教程讲的极好(PPT非常干净、讲解的很清楚),除此之外网易慕课上的一个Pytorch教程里的GAN部分讲的也是不错,近期还看了B站上李沐大佬的论文精度系列(大佬一段段拆开读,甚好),都有将原理和推导。但最后发现GAN的学习路程上还是有个拦路虎,就是损失函数公式的推导,这是GAN论文的精华所在,同时也是为了记录下自己学习的情况,所以本文参考网络资料与原文进行一个GAN公式的推导计算。推导公式时,本文大量参考了国外的一个大牛博士的笔记。

以下因为一些原因给的都是Bilibili的链接(之间点击或者搜索)

生成对抗神经网络课程 (GAN) - 李宏毅_哔哩哔哩_bilibili 李宏毅教授的GAN视频

PyTorch深度学习快速入门教程_哔哩哔哩_bilibili     慕课上的一个Pytorch视频(里面有GAN)

GAN论文逐段精读【论文精读】_哔哩哔哩_bilibili  李沐大佬的GAN论文精读

14年GAN的原文PDF(可能要科学网)GAN原文pdf里面有比较详细的推导(结合李沐视频使用)

详细的GAN公式推导这个是公式推导作者Scott Rome 博士,笔者基本上就是参考大佬  ^_^

一、完美生成器的数学模型

        GAN由一个生成网络与一个判别网络组成,我们需要通过严谨的数学证明。GAN的目的就是做生成,那么我们就要使生成的东西与真实的图片难以区分。换一句话说就是生成的随机变量在分布上与真实分布是相等的:p_G(x) = p_{data} (x) ,如果最终生成器G生成的数据满足该关系,GAN就可以说完成训练啦!

二、转化为最优化问题

        在GAN的文章中,需要鉴别器D来识别来自p_{data}(x) 的分布,具体的公式为:

E_{x \sim p_{data}(x)}\log(D(x))

其中E表示期望。这一项来自于损失函数的正部分(损失函数有D和G两部分)。当x\sim p_{data}(x)使这一项最大化即D(x) = 1 就能够精准的判别图像的真假。另一项来自于损失函数的负部分,生成器G的损失函数公式为:

E_{z \sim p_{z}(z)}\log(1-D(G(z)))

如果该公式数值是最大值 = 0(logx 在x 0,则递增;一阶倒数 < 0,则递减;一阶导数等于0,则不增不减。二阶导数可以反映图象的凹凸。二阶导数 > 0,图象为凹;二阶导数 < 0,图象为凸;二阶导数等于0,不凹不凸。凹f``(x)在该点为极大,凸f``(x)在该点为极小 ) 

所以,当a,b \in (0,1)时,y = \frac{a}{a+b}是最大值,此时最好的判别器D(x) = \frac{p_{data}}{p_{data}+p_{G}}就出现了,没有比它更好的D了。由此,我们可以推导出命题1函数的边界范围:

V(G,D) = \int_{x} p_{data}(x)\log D(x) + p_G(x) \log ( 1- D(x)) \, \mathrm{d}x

\leq \int_x \max_y {p_{data}(x)\log y + p_G(x) \log ( 1- y)}\, \mathrm{d}x.

但其实D(x)是不能够直接进行计算的。我们一开始是不知道p_{data}(x),所以我们永远不能再训练期间直接使用它。另一方面来说,D(x)的存在表明了我们能够证明存在一个最优的G(x),在训练的过程中我们只需要逼近这个D(x)。

五、查找最好的生成器

        在证明能够找到最优的D(x)后,我们再回到最终目的上(生成图片),即生成器G 生成的图片可以以假乱真(p_G = p_{data}),不妨将等式带入鉴别器公式中得出最优D^*_G

D_G^* = \frac{p_{data}}{p_{data}+p_G} = \frac{1}{2}.

这就意味着,最优秀的鉴别器也无法辨别真假分布了,此时就证明了GAN存在MaxMin博弈解G

其理论如为:只有在数据分布为p_G = p_{data}时,训练的最终目标C(G)可以达到最大值。

        该定理目前当且仅当是命题,因此我们同时从两个方向进行证明。首先,我们向后逼近最佳值C(G)。然后我们用新发现的知识从后面的方向推进。假设p_G = p_{data},我们可以写成:

C(G)=V(G, D_G^*) = \int_{x} p_{data}(x)\log \frac{1}{2} + p_G(x) \log \big ( 1- \frac{1}{2}\big) \, \mathrm{d}x

V(G,D_G^*) = - \log 2 \int_{x}p_{G}(x) \,\mathrm{d}x - \log 2 \int_x p_{data}(x)\, \mathrm{d}x = - 2 \log 2 = -\log4.

该值是全局最小值的候选值,现在我们停止继续向后计算,我们要来证明一下这个值总是最小的(满足当与当且仅当部分)。所以抛开分布相等p_G = p_{data}的假设,可以将最佳辨别器D^*_G代入C(G)=\max_D V(G,D): 

C(G) = \int_{x} p_{data}(x)\log \big (\frac{p_{data}(x)}{p_{G}(x)+p_{data}(x)} \big ) + p_G(x) \log\big ( \frac{p_{G}(x)}{p_{G}(x)+p_{data}(x)}\big ) \, \mathrm{d}x.

注释:右边部分的被积函数推导小技巧可如下所示:

1-D_G^*(x) = 1 - \frac{p_{data}(x)}{p_{G}(x)+p_{data}(x)} =\frac{p_G(x) + p_{data}(x)}{p_{G}(x)+p_{data}(x)} - \frac{p_{data}(x)}{p_{G}(x)+p_{data}(x)}= \frac{p_{G}(x)}{p_{G}(x)+p_{data}(x)}.

        由于我们知道-log4是全局最小值的候选项(代入算算就知道),把这个值塞进方程,再对积分同时加上与减去log2,乘上相应的概率密度p可以的到以下公式(本质上不会对式子进行改变,因为加减最后值为0)

C(G) = \int_{x} (\log2 -\log2)p_{data}(x) + p_{data}(x)\log \big (\frac{p_{data}(x)}{p_{G}(x)+p_{data}(x)} \big )

\quad+(\log2 - \log2)p_G(x) + p_G(x) \log\big ( \frac{p_G(x)}{p_G(x)+p_{data}(x)}\big ) \, \mathrm{d}x.

C(G) = - \log2\int_{x} p_{G}(x) + p_{data}(x)\, \mathrm{d}x+\int_{x}p_{data}(x)\Big(\log2 + \log \big (\frac{p_{data}(x)}{p_{G}(x)+p_{data}(x)} \big ) \big)

+ p_G(x)\Big (\log2 + \log\big ( \frac{p_{G}(x)}{p_{G}(x)+p_{data}(x)}\big ) \Big ) \, \mathrm{d}x.

注释1:并且由于概率密度的定义,分布p的积分值最终是为1的,所以在计算前半部分时将p_Gp_{data} = 1.

前半部分:  -\log2\int_{x} p_{G}(x) + p_{data}(x)\, \mathrm{d}x = -\log2 ( 1 + 1) = -2\log2 = -\log4.

注释2:由于log函数的定义,可以将C(G)后半部分写为

\log2 + \log \big (\frac{p_{data}(x)}{p_{G}(x)+p_{data}(x)} \big ) = \log \big ( 2\frac{p_{data}(x)}{p_{G}(x)+p_{data}(x)} \big ) = \log \big (\frac{p_{data}(x)}{(p_{G}(x)+p_{data}(x))/2} \big ).

     

此时我们将C(G)函数的前半部分与后半部分进行替换,可得:

C(G) = - \log4 + \int_{x}p_{data}(x)\log \big (\frac{p_{data}(x)}{(p_{G}(x)+p_{data}(x))/2} \big )\,\mathrm{d}x + \int_x p_G(x)\log\big ( \frac{p_{G}(x)}{(p_{G}(x)+p_{data}(x))/2}\big ) \, \mathrm{d}x.

直到这一步的可以发现C(G)的式子是可以用 Kullback-Leibler divergence KL散度表示,其实很特别,我们写下用KL散度表示的公式:

C(G) = - \log4 + KL\big (p_{data} \big | \frac{p_{data}+p_{G}}{2} \big ) + KL\big(p_{G} \big | \frac{p_{data}+p_{G}}{2}\big) .

由于KL散度总是非负数的,所以我们可以推断除C(G)的全局最小值是-log4.  如果我们证明只有一个G满足这个条件,其实已经完成了证明,因为p_G = p_{data}将是C(G)=-\log 4的唯一点。要证明这部分,得注意到第二个证明:

C(G) = - \log4 + 2\cdot JSD \big (p_{data} \| p_{G}\big ) .

         JSD被称作是JS散度Jenson-Shannon divergence。该散度其实是Jenson-Shannon distance metric的平方,是Kullback-Leibler 散度的对称和平滑版本。

此时可以得出当p_G = p_{data}时:

JSD \big (p_{data} \| p_{G}\big ) = 0

         所以说对鉴别器D的优化就是在求  P_GP_{data}的JS散度C(G)=\max_D V(G,D),对\text{argmin}_G \text{max}_D V(G,D).其实G的优化就是在缩小  P_GP_{data}的JS散度。

六、收敛

        总结来说就是 p_G = p_{data} 在\max_D V(G,D)是最佳值。并且在给定足够多的训练数据和适当情况下,数据是会收敛到最佳的G。

七、总结

后面有空再加



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有