php网站开发基础教程,长沙商城网站开发,做网站不给钱,七台河新闻综合文章目录论文#xff1a;Generative Adversarial Nets符号意义生成器(Generator)判别器(Discriminator)生成器和判别器的关系GAN的训练流程简述论文中的生成模型和判别模型GAN的数学理论最大似然估计转换为最小化KL散度问题定义PGP_GPG全局最优论文#xff1a;Generative A…
文章目录论文Generative Adversarial Nets符号意义生成器(Generator)判别器(Discriminator)生成器和判别器的关系GAN的训练流程简述论文中的生成模型和判别模型GAN的数学理论最大似然估计转换为最小化KL散度问题定义PGP_GPG全局最优论文Generative Adversarial Nets
符号意义
G()表示对生成器功能的一个封装函数D()表示对判别器功能的一个封装函数x表示真实数据z表示含噪音的数据x‾\overline xx表示G(z)将噪音数据输入到生成器得到的结果θgθ_gθg表示生成器的参数θdθ_dθd表示判别器的参数Pdata(x)P_{data}(x)Pdata(x)表示真实数据分布PG(x;θ)P_G(x;\theta)PG(x;θ)表示生成器生成的数据分布
生成器(Generator)
狭义的生成器就是输入一个向量通过生成器输出一个高维向量(代表图片、文字等) 其中输入向量的每一个维度都代表一个特征。如下图示例
判别器(Discriminator)
狭义的判别器就是输入数据(生成器产物或者真实数据)通过判别器输出一个标量数值输出的数值越大则代表这个数据越真实。如下图示例(假设输出数值在0-1之间):
生成器和判别器的关系
结合图来理解生成器和判别器的关系
首先输入噪音让生成器v1生成图片之后输入不同来源的图片到判别器v1,由判别器v1来判断图片是真实图片还是生成器生成的图片然后为了骗过判别器生成器v1升级为v2再生成新的图片。再将不同来源的图片输入到升级的判别器v2来判断图片是真实图片还是生成器生成的图片依次循环下去直到判别器无法区分图片来源也就是生成器产生的图片真实度越来越接近真实图片的真实度。 GAN的训练流程简述
在每个训练迭代器中 先训练判别器 从数万张图片(数据集)中采样出m个样本即{ x1,x2,...,xm{x_1,x_2,...,x_m}x1,x2,...,xm}随机从一个分布(高斯分布或均匀分布)里采样出有噪音的m个样本即{z1,z2,...,zm{z_1,z_2,...,z_m}z1,z2,...,zm}通过生成器获得生成的数据即{ x‾1,x‾2,...,x‾m{\overline x_1,\overline x_2,...,\overline x_m}x1,x2,...,xm},其中x‾i\overline{x}_ixiG(ziz_izi)更新判别器的参数使v‾\overline vv最大。 v‾1m[logD(xi)log(1−D(x‾i))]\overline v\frac{1}{m}[logD(x_i)log(1-D(\overline x_i))]vm1[logD(xi)log(1−D(xi))]梯度下降更新参数θdθ_dθd 再训练生成器 随机从一个分布(高斯分布或均匀分布)里采样出有噪音的m个样本即{z1,z2,...,zm{z_1,z_2,...,z_m}z1,z2,...,zm}更新生成器的参数使v‾\overline vv最小 v‾1m[logD(xi)log(1−D(x‾i))]\overline v\frac{1}{m}[logD(x_i)log(1-D(\overline x_i))]vm1[logD(xi)log(1−D(xi))]梯度下降更新参数θgθ_gθg
当训练判别器的时候就相当于把生成器固定住了当训练生成器的时候就相当于把判别器固定住了于是就有对上述关于v‾\overline vv的讲解 对于判别器目标是提升辨认图片来源的能力对真实图片输出大的数值所以D(xi)D(x_i)D(xi)越大越好D(x‾i)D(\overline x_i)D(xi)越小越好也就是v‾\overline vv越大越好。 对于生成器目的是希望自己生成的图片越来越真实也就是要让D(x‾i)D(\overline x_i)D(xi)越大越好也就是v‾\overline vv越小越好(另一项当成常数即可)。 论文中的生成模型和判别模型
GAN提出了两个模型 生成模型(Generator) 生成模型主要是用来生成数据分布目的是尽量与原数据分布接近。 判别模型(Discriminator) 判别模型主要是用来判断样本是来自真实分布还是生成模型生成的分布。目的是能够更加好地区分哪些样本来自真实数据哪些样本来自生成模型的数据越真实的数据得到的结果越大。
用数学来表示训练过程中两模型的变化如下图 绿色线表示真实数据的分布蓝色线表示生成模型输出的数据分布红色线表示判别器(越高就表示给的分数越大)
首先判别模型对真实数据的分布给高的分对生成模型输出的数据分布给低分。生成模型得出的分布就往分高的地方移动。判别模型对生成模型得出的新分布进行打压将它区域的分数压低。不断执行23最终生成模型输出数据的分布和真实数据的分布十分接近判别器无法判断了。
GAN的数学理论
最大似然估计转换为最小化KL散度问题
真实数据的分布是Pdata(x)P_{data}(x)Pdata(x) 我们定义一个分布PG(xi;θ)P_G(x_i;\theta)PG(xi;θ) ,我们想要找到一组参数θ\thetaθ,使得PG(xi;θ)P_G(x_i;\theta)PG(xi;θ)越接近Pdata(x)P_{data}(x)Pdata(x)越好。比如说PG(xi;θ)P_G(x_i;\theta)PG(xi;θ) 如果是一个高斯混合模型那么θ\thetaθ就是均值和方差。 采用极大似然估计方法我们从真实数据分布 Pdata(x)P_{data}(x)Pdata(x)里面取样 m 个点x1,x2,...,xm{x_1,x_2,...,x_m}x1,x2,...,xm根据给定的参数 θ 我们可以算出某个x在该分布的概率 PG(xi;θ)P_G(x_i;θ)PG(xi;θ)即 也可以将极大似然估计等价于最小化KL散度我们需要找一个最大的θ\thetaθ使得PG(xi;θ)P_G(x_i;\theta)PG(xi;θ)接近Pdata(x)P_{data}(x)Pdata(x)就有下列式子 将其化简得 由于需要最大化概率的θ\thetaθ也就是可以近似等价于原分布的期望可得
然后再展开成期望定义的形式并且加减一项常数项(不含θ\thetaθ)不影响结果有 最终化成了最小化KL散度的形式。 其中KL散度用来衡量两种概率分布的相似程度越小则表示两种概率分布越接近。形式为
所以机器学习中的最大似然估计其实就是最小化我们要寻找的目标分布PGP_GPG与PdataP_{data}Pdata的KL散度。
定义PGP_GPG
如何来定义PGP_GPG呢 以前是采用高斯分布来定义的但是生成的图片会很模糊采用更复杂的分布的话最大似然会没法计算。所以就引进了Generator来定义PGP_GPG如下图 全局最优
优化目标是最小化PGP_GPG与PdataP_{data}Pdata之间的差异 虽然我们不知道PGP_GPG与PdataP_{data}Pdata的公式但是我们可以从这两个分布中采样出一些样本。 对PGP_GPG我们从给定的数据集中采样出一些样本。(该步骤对应训练判别器流程步骤1) 对PdataP_{data}Pdata我们随机采样出一些向量经过Generator输出一些图片。(该步骤对应训练判别器流程步骤2,3) 之后经过Discriminator我们就可以计算PGP_GPG与PdataP_{data}Pdata的收敛。Discriminator的目标函数是 该目标函数对应训练判别器的损失函数意思是假设x是从PdataP_{data}Pdata 里面采样出来的那么希望D(x)越大越好。如果是从 PGP_GPG里面采样出来的就希望它的值越小越好。x~PdataP_{data}Pdata表示该均值的x都来自PdataP_{data}Pdata分布。
我们的目标是让判别器无法区分PGP_GPG与PdataP_{data}Pdata也就是让它没办法把V(G,D)调大。接下来从数学上去解释这个结论。
给定生成器我们要找到能最大化目标函数V(D,G)的D* 现在我们把积分里面的这一项拿出来看: PdatalogD(x)PG(x)log(1−D(x))P_{data}logD(x)P_G(x)log(1-D(x))PdatalogD(x)PG(x)log(1−D(x))
我们想要找到一组参数D*使这一项最大。把式子简写一下将PdataP_{data}Pdata用a表示PGP_GPG用b表示得 f(D)alog(D)blog(1−D)f(D)alog(D)blog(1-D)f(D)alog(D)blog(1−D) 对D求导得 df(D)dDa∗1Db∗11−D∗(−1)\frac{df(D)}{dD}a*\frac1Db*\frac1{1-D}*(-1)dDdf(D)a∗D1b∗1−D1∗(−1) 另这个求导结果为0得 D∗aabD^*\frac a{ab}D∗aba 将a,b代回去得: D∗Pdata(x)Pdata(x)PG(x)D^*\frac {P_{data}(x)}{P_{data}(x)P_G(x)}D∗Pdata(x)PG(x)Pdata(x) 再将这个D带入V(G,D*)中然后分子分母同时除以2之后可以化简为JS散度形式(KL散度的变体解决了KL散度非对称的问题)得 当PdataP_{data}PdataPGP_GPG时JS散度为0值为-2log2达到最优(也就是让判别器没办法把V(G,D)调大)。这是从正向证明当PdataP_{data}PdataPGP_GPG时达到最优还需从反向证明才可以得出当且仅当PdataP_{data}PdataPGP_GPG才可以达到的全局最优。 反向证明很容易假设PdataP_{data}PdataPGP_GPG那么D*12\frac 1221再直接代入V(G,D*)即可得到-2log2。
所以当且仅当PdataP_{data}PdataPGP_GPG才可以达到的全局最优。也就是当且仅当生成分布等于真实数据分布时我们取得最优生成器。
我们从头整理一下我们的目标是找到一个G*去最小化PdataP_{data}PdataPGP_GPG的差异也就是 G∗argminGDiv(PG,Pdata)G^*argmin_GDiv(P_G,P_{data})G∗argminGDiv(PG,Pdata) 但是这个差异没法之间去算所以就用一个判别器来计算这两个分布的差异 D∗argmaxDV(D,G)D^*argmax_DV(D,G)D∗argmaxDV(D,G) 所以优化目标就变为 G∗argminGmaxDV(G,D)G^*argmin_Gmax_DV(G,D)G∗argminGmaxDV(G,D) 这个看起来很复杂其实直观理解一下如下图我们假设已经把生成器固定住了图片的曲线表示红点表示固定住G后的 maxD(G,D)max_D(G,D)maxD(G,D) , 也就是 PGP_GPG 和 PdataP_{data}Pdata 的差异。而我们的目标是最小化这个差异所以下图的三个网络中 G3G_3G3 是最优秀的。 参考的文章 GAN论文阅读——原始GAN基本概念及理论推导 生成对抗网络(GAN) 背后的数学理论