GANs的核心理念很简单,其实就是回答了最大似然估计没有办法解决的问题提出另一条解决路径。所以在全面认识GANs之前首先需要掌握一点点最大似然相关的知识。
这个文章主要是根据最近做的一个PPT进行相关的讲解注释。
首先我们讲下什么是GANs,从最简单的流程图从上往下看就是,首先定义一些噪音数据(这里我更偏向于称作种子数据。anyway),将他们喂(feed)给生成器,经由生成器后最初的一些噪音数据会得到相应的,具有一定分布形式的数据,之后分别将生成的数据和真实数据交给判别器,判别器的主要作用就是根据这些数据的相关特性来分辨这些数据中哪些是来源于真实数据,哪些是来源于生成器构造的数据。这个可以看作是GNAs的单次运算过程。
具体来说GANs是怎么工作的呢?其实在原论文中作者就有过相关的详细描述。这里做个简单的翻译。为了让pg(构建的数据)最终能符合真实数据的分布,我们首先将一些毫无规律的噪音数据输入到生成器中,生成器根据喂进的数据生成具有一定分布形式的数据G(z,Θ),同时我们还定义了一个判别器D(x),其输出为单个标量。判别器D的主要功能就是判别输入其中的数据是否来自于真实的数据集中而不是来自构建的数据集中。训练判别器D使其对两个来源的数据能最准确的判别,例如来源于真实数据集的数据经过判别器的判断其概率接近于1,而来源于构建数据集中的数据经过判别器的判断,其概率更接近于0。从而将两种来源的数据划分开来。
这几个图从真实数据集的分布,构建的数据分布以及判别器的判别线这三个元素动态的展示了GANs运算优化过程,并且可以在最后一张图中看出最终达到最优解时判别器对两种来源的数据判断的概率均为0.5,且构建的数据已经和真实数据的分布重合,表示此时,判别器已经无法二者的差别。本文后面部分将主要从数学角度依据原论文中的相关公式计算验证这一最优解的情况是否具有严格的数据验证。
文中给出的算法示例,其大致过程与上述描述的一致,只是在其中补充了更新判别器D和生成器G的策略,分别是应用随机梯度上升优化D,用随机梯度下降来优化更新生成器。
接下来就是一堆数学相关的验证时刻了,这个公式是原文中的第一个公式,有江湖传言,如果一眼就能看懂这个公式在讲些什么,就说明你的GANs已经达到大成的级别了~首先我们来说说开头部分的那个minmax,它是源自博弈论中的极小极大博弈来的,简单的说就是在函数V(D, G)中D和G两者之间形成了一种此消彼长的关系。所谓的极小极大就是指,D和G两者的作用(G和D更准确点)。就是说D的主要作用是要将函数值拖向极大那边,而G的作用就是要将函数值怒力拖向极小的那边。其中Ex~pdata(x)[log D(x)]公式中的这种形式,很大程度上是来源于对数似然函数(个人猜测,但也挺合理的)。
这一页就是最大似然函数的相关知识,主要参考了李宏毅18年讲解的GANs课程PPT,只是将其中的英文部分翻译成了中文而已,后面还有几张片子也是来源于他的课程PPT之中的。
这个片子也是参照李宏毅的课程PPT,与他不同的是我在这里并没有关注他原版PPT中将似然函数与KL散度统一的那块知识,主要是觉得目前还不太会干扰到我后续对GANs论文数理部分的理解,首先这上面取log的主要原因是将连乘转化成加法运算,并且在取完log之后对本来的函数也没有什么本质上的性质改变(这一点很重要!),所以可行。最后一步的约等于是大数定理已经证明的结论,即,当M接近无限大时,可以用期望乘以log(…)代替将log(…)求和。
为什么要求证图中的式子,因为这个等式成立对我很重要(其实是,这个等式成立是后面几步运算的基础)。这里依然采用李宏毅PPT中的解释,(目前来说看到的大部分相关博客对这一部分要不就是没有解释,要不就是采用了我下张片子会讲到的验证方法,但也很少有涉及的博客)这里主要是一个理解的过程,第一个等式成立代表了G(z) = x;同时Ez = Ex也是成立的。这一步的基础是在给定的G 的基础上求解D的最优解(这是大前提)。具体按图中的意思就是经过一段优化之后(论文以及后续的很多实验都说最好预先训练G一小会)生成器G可以将吃掉的噪音数据大致的规划成一个新的分布,就是PG(x), G吃掉的z生成的就是x(这个x不是来源于真实数据集的x而是生成器生成的x),GANs做到后面就是要让两种来源的x达到几乎一样分布的地步,是判别器无法区分。
这里是另一种常用来证明等式成立的数学理论,主要是运用到了测度论中的随机变量换元定理进行证明,其中要是使等式成立则必须假设G(x) = G-1(x),即G(x)首先得是可逆的,其次它的逆函数要等于本身,这一点的证明还不太明了。实在没找到相关的数学证明部分,有知道的同学可以告知一下。
这部分加上后面的片子主要就是对文中几乎没怎么写详细证明的部分详细的展开证明了下(个人觉得这部分的证明具有简明性,一步步的看下去就能理解,所以在后面的片子中,一般不会进行评论解释)
就是一个简单的求凸函数的最大值的问题,转化成倒数等于0即可求解。
这一块的收敛性的证明论文中讲解的很详细,其主要讨论的部分即D的最优解在不在V(G; D)的最优解的范围中。
后面是一些常被提及的最新的GANs家族里的各个文章地址,感兴趣的可以自行下载阅读。
1. InfoGANs https://arxiv.org/abs/1606.03657
2. Relativistic GANs https://arxiv.org/abs/1807.00734
3. CycleGANs https://arxiv.org/abs/1703.10593
4. SAGANs https://arxiv.org/abs/1805.08318
5. Progressive GANs https://arxiv.org/abs/1710.10196
6. DCGANs https://arxiv.org/abs/1511.06434
7. WGANs https://arxiv.org/abs/1701.07875
8. BEGANs https://arxiv.org/abs/1703.10717
9. VAEGANs https://arxiv.org/abs/1512.09300
10. Seq GANs https://arxiv.org/abs/1609.05473
11. cGANs https://arxiv.org/abs/1411.1784
总的来说文中最模糊的部分就是第一个等式的证明,那块总觉得要想通了什么,但是就是有个隔阂,突破不了(- -! 污~)
本文中的图片来自于自己制作的PPT,其中部分页标注了引用。如对文中内容有相关问题可以进行讨论,未经许可,严禁转载!