简介
gan,全名Generative Adversarial Nets,翻译成中文,生成对抗网络。顾名思义,有生成过程,有对抗过程的一种net model。
这种模型大致工作流程:
有一生产者,也可以称其为造假者,他的工作是生成类似于源数据的数据,比如与古董真假难辨的伪造古董。生产者在这里就扮演了伪造古董的“工艺大师”。
有一对抗者,形象一点称其为鉴别者,他的工作就是判断某一数据是否来源于源数据,比如说,判断某一可能是古董的工艺品是不是真的古董。对抗者在这里就充当了“鉴宝大师”。
“工艺大师”和“鉴宝大师”相互竞争(对抗),驱使着他们各自变得更加优秀(前者生成真假难辨的古董,后者对再怎么真假难辨的古董也能分辨出来)。
gan的目的就是让这个“工艺大师”能够生成无限接近于(相似于)源数据的数据。对于工艺大师,就是生成“古董”。
gan数学表达
假设源数据集(古董数据)分布:p_{data}
假设生成的数据集(伪造的古董)分布:p_{g}(x_i,\theta_g),定义一个先验噪声p_z(z),经过多层感知机处理,噪声经过G(z,\theta_g)处理得到x,即x = G(z,\theta_g).
假设D(x)表示x来自源数据集p_{data}被鉴别为真(古董)的概率,那么D(G(z))则可以表示为x = G(z,\theta_g)来自于p_g而被鉴别为真(古董的概率)。
- 趋于0。因此可以这样表达:
\mathop{max}\limits_{D} E_{x\sim p_{data}}[logD(X)]+E_{z\sim p_z}[log(1-D(G(z)))]- 趋于1,产生误判。因此可以这样表达:
\mathop{min}\limits_{G}E_{z\sim p_z}[log(1-D(G(z)))]- 结合以上两者,可以归纳为一个公式
\mathop{min}\limits_{G}\mathop{max}\limits_{D} E_{x\sim p_{data}}[logD(X)]+E_{z\sim p_z}[log(1-D(G(z)))]gan数学表达的全局最优解
将上式记为
\mathop{min}\limits_{G}\mathop{max}\limits_{D} V(G,D) = \mathop{min}\limits_{G}\mathop{max}\limits_{D} E_{x\sim p_{data}}[logD(X)]+E_{z\sim p_z}[log(1-D(G(z)))]\mathop{=====}\limits^{将期望用积分表达}\int_xp_{data}(x)log(D(x))dx+\int_zp(z)log(1-D(G(z)))dz\mathop{===}\limits^{将z换成x}\int_x[p_{data}(x)log(D(x))+p_glog(1-D(x)]dx求其全局最优解,将G固定,求此时的\mathop{max}\limits_{D}V(D)
\mathop{max}\limits_{D}V(D)=\mathop{max} \int_x[p_{data}(x)log(D(x))+p_glog(1-D(x)]dx对上式中的D求偏微分,使其偏微分为0,于是有
\frac{\partial}{\partial D}[V(D)]=\int_x\frac{\partial}{\partial D}[p_{data}(x)log(D(x))+p_glog(1-D(x)]dx=\int_x\frac{\partial}{\partial D}[p_{data}\frac{1}{D(x)}+p_g\frac{1}{1-D(x)}]dx=0解得有:D_G^* = \frac{p_{data}}{p_{data}+p_g}
再将D_G^* = \frac{p_{data}}{p_{data}+p_g}代回\mathop{min}\limits_{G}\mathop{max}\limits_{D} V(G,D) ,此时有
\mathop{min}\limits_{G}V(G,D)=E_{x\sim p_{data}}[log\frac{p_{data}}{p_{data}+p_g}]+E_{x\sim p_g}[log(1-\frac{p_{data}}{p_{data}+p_g})]关于求解上式,有一个叫KL散度的东西,相对熵,衡量两个概率P(x),Q(x)分布的距离:如下
D_{KL}(P||Q) = \sum\limits_{i=1}logP(x)\frac{P(x)}{Q(X)}=E_{P(x)}[log\frac{P(x)}{Q(x)}]其中
在本式中,除以2处理
\mathop{min}\limits_{G}V(G,D)=\mathop{min}\limits_{G}E_{x\sim p_{data}}[log\frac{p_{data}/2}{(p_{data}+p_g)/2}]+E_{x\sim p_g}[log(\frac{p_g/2}{(p_{data}+p_g)/2})]=\mathop{min}\limits_{G}E_{x\sim p_{data}}[log\frac{p_{data}}{(p_{data}+p_g)/2}]+E_{x\sim p_g}[log(\frac{p_g}{(p_{data}+p_g)/2})]-log4=\mathop{min}\limits_{G} KL(p_{data}||\frac{p_{data}+p_g{}}{2})+KL(p_g||\frac{p_{data}+p_g{}}{2})-log4\geq -log4当p_g==p_{data}时,取全局最优最小值。
论文中实现生成对抗伪算法
gan论文
视频讲解
实验
略。