Generative Adversarial Nets

GAN原文
code


同时训练两个模型:generative model G 学习逼近真实数据的分布,目标是使得生成的样本让D无法识别是来自真实的数据还是G生成的数据,discriminative model D 评估样本来自真实数据的可能。当G学习到足够好以致D无法判别时,D(x)=1/2。

为了使generator’s distribution pg 逼近真实数据data x
定义一个输入噪声变量pz(Z)
G,D都为multilayer perceptrons 参数各为θg,θd.
G伴随噪音z生成的样本为:G(z;θg)
D(x;θd)输出为一个单独的变量scalar
D(x)代表x来自真实数据x的可能而不是pg
将训练D使其区分样本是来自data x还是 G,最大化log(D(x))
同时最小化G:log(1-D(G(z))) ,G(z)生成的样本:x'
在log(D(x'))最大化的同时log(1-D(x'))就必须最小化:即二者形成一个极大极小的竞争:其中IEx~pdata(x) 为根真实数据分布从真实数据中取x,IEz~p(z)亦然

竞争函数

在最初D可以轻易分辨x来自data x或G,使得最小化log(1-D(G(z))) 饱和
因此可以先训练D(G(z))

Generative Adversarial Nets_第1张图片
训练过程

训练过程中:蓝色虚线代表D的分布,绿色实线代表G的分布pg,黑色圈代表真实数据的分布。z是代表噪音,x代表数据。z志向x的区域即代表当前G(z)生成的样本落在x中的哪个区域.(a)是初始状态的时候,D还是能较好好分辨出data x与G(z).(b)经过训练D已经能很好区分样本来自于data x还是G(z).(c)训练G使得G逼近真实数据的分布。此时D可再训练调整D的分布重复上述过程...(d)为最后结果即G生成的样本逼近真实的数据,D(x)=1/2

Generative Adversarial Nets_第2张图片
DG梯度更新
Generative Adversarial Nets_第3张图片
最佳D*


Generative Adversarial Nets_第4张图片
竞争函数代入最佳D*
pg可逼近pdata

你可能感兴趣的:(Generative Adversarial Nets)