GAN简述
GAN的全称是Generative Adversarial Network,中文名为生成对抗网络。主要构成为Generator和Discriminator。Generator为生成器,Discriminator为鉴别器。给定一个Database(假设为image),Generator的目标是尽力生成和Database接近的image;而Discriminator的目标是尽力区分Generator产生的image以及Database的image。Generator和Discriminator互相对抗提升(类似做假钞的坏蜀黍和验假钞的警察uncle),最终要达到的结果是Discriminator无法区分image是来自Generator还是Database。Generator能不能单独完成任务?
回答是可以的。相当于Auto-encode中的Deconder。但是网络层数相同的情况下,用VAE产生的图片的质量没有用GAN产生的好。此外,pixel和pixel之间也无法相互联系(也即没有全局观),除非加深网络深度。Discriminator能不能单独完成任务?
明确Discriminator训练过程中需要合适的Negative example,而Generator恰好能提供。
Generator就相当于上述式子Generator+Discriminator
Bottom up (Generator):learn to generate the object at the component level.
Top down (Discriminator):Evaluating the whole object and find the best are.
在生成图像过程中,component之间的关系尤为重要。故而两者能够互补互成。GAN算法
记Generator产生的数据集为 PG(x) P G ( x ) ,记输入网络的数据集为 Pdata(x) P d a t a ( x ) ,我们应当使得 PG(x) P G ( x ) 和 Pdata(x) P d a t a ( x ) 尽可能地接近。由Maximum Likelihood Estimation = Minimize KL Divergence.我们得知 G∗=arg minG Div(PG,Pdata) G ∗ = a r g m i n G D i v ( P G , P d a t a ) ,我们应当算出 PG(x) P G ( x ) 和 Pdata(x) P d a t a ( x ) 的Divergence,然后再最小化Divergence。来到这里我们先来看看有关Discriminator的训练。
Train Discriminator:(fix G)
V(G,D)=Ex−Pdata[logD(x)]+Ex−PG[log(1−D(x))] V ( G , D ) = E x − P d a t a [ l o g D ( x ) ] + E x − P G [ l o g ( 1 − D ( x ) ) ]
D∗=arg maxDV(G,D) D ∗ = a r g m a x D V ( G , D )
通过推算,我们可以得出,在寻求D的最优解过程, maxDV(G,D) m a x D V ( G , D ) 实际就是在计算 PG(x) P G ( x ) 和 Pdata(x) P d a t a ( x ) 的JS divergence。所以 G∗=arg minD Div(PG,Pdata) G ∗ = a r g m i n D D i v ( P G , P d a t a ) 就转换为 G∗=arg minG maxDV(G,D) G ∗ = a r g m i n G m a x D V ( G , D ) 。我们再回过头来看,如何去 maxDV(G,D) m a x D V ( G , D ) ,由于在Training Discriminator的过程中我们是把Generator定住的,所以我们先把 V(G,D) V ( G , D ) 记为 L(G) L ( G ) ,对其求偏导: θG←θG−η∂L(G)/∂θG θ G ← θ G − η ∂ L ( G ) / ∂ θ G
下图为pratice中的算法流程:
GAN基础笔记
最新推荐文章于 2022-03-04 21:28:12 发布