Generative Adversarial Nets 论文解读

Generative Adversarial Nets 论文解读

generative 生成 adversarial 对抗

摘要 Abstract

提出了一个生成模型框架(framework),通过一个对抗的过程,同时训练两个模型:一个生成模型G,G是用来抓取数据的分布,对其进行建模;一个辨别模型D,D来辨别该样本是生成的,还是真实数据 。G的目标是让D犯错,D的目标是来辨别出生成的数据(不被欺骗)。每个框架都类似于一个 two-player 游戏(博弈论中的著名游戏)。在任何函数的G和D都存在一个独一无二的解,G能找出所有的解,D的辨别率到达50%。G和D是一个MLP(多层感知机),整个系统可以通过一个误差反传来进行训练,在这里不需要使用马尔科夫链和对一个近似的推理过程展开。

导论 Introduction

深度学习是用来发现丰富、有层次的模型,这些模型能对AI中的数据做一个概率分布的表示,深度学习不仅仅是深度神经网络,更多的是对整个数据分布的一个特征的表示。虽然深度学习在辨别模型上取得了很大的成就,但是在生成模型上表现依然较差。这个问题来自在最大化似然函数时,要对概率分布进行很多近似,这个近似会带来很大的困难。
GAN(本篇论文)是一个框架,框架中有两类模型:生成模型G和判别模型D,一个比喻能帮助你更好的理解这个概念。生成模型G是造假币的罪犯,判别模型D是捉罪犯的警察,警察的任务是找出假币,将其与真币区分开。罪犯G和警察D会不断地学习,G会提升自己造假的技能,警察会提升自己判别真假币的技能,最终目标是,罪犯G造的假币和真币没有区别,警察无法区分真币和假币。
在GAN框架下,生成模型G是一个MLP,输入是一个随机的噪音,G能够把产生随机噪音的一个分布(通常是一个高斯分布)可以映射到任何一个我们想要拟合的分布。如果判别模型也是一个MLP,这种情况叫做对抗网络(adversarial nets)。此时由于两个模型都是MLP,可以通过误差的反向传递来对分布进行复杂的采样,而不是采用马尔科夫链的算法。

相关工作 Related Work

其他方法总是想构造一个分布函数,向这个函数提供一些参数让他学习,这些参数通过最大化它的对数似然函数来做,此方法缺点在于采量一个分布时计算较困难,尤其是在较高纬度时。最近有一些工作是,不再构造分布,而是训练一个模型来近似这个分布,此方法缺点在于不知道分布什么样子,只知道结果,好处在于计算较容易。
对f的期望求导等价于对f求导
lim ⁡ σ → 0 ▽ x E ε ∼ N ( 0 , σ 2 I ) f ( x + ε ) = ▽ x f ( x ) \lim\limits_{\sigma\to0} \bigtriangledown_{x} \mathbb{E}_{\varepsilon\sim\mathcal{N}(0,\sigma^{2}\mathcal{I})} f(x+\varepsilon)=\bigtriangledown_{x}f(x) σ0limxEεN(0,σ2I)f(x+ε)=xf(x)
通过一个辨别模型来帮助生成模型也不可以,NCE做过这个工作。后面在解释跟predictability minimization算法的区别(具体小故事可以自行搜索)
跟“adversarial examples”的区别,adversarial examples是构造一些假的样本但是跟真的很像,从而测试算法的稳定性。

算法 Adversial nets

GAN框架最简单的应用是生成模型和判别模型都是MLP的时候,生成器G要学习在数据 x x x上的分布 p g p_{g} pg,我们在输入噪声 z z z上定义了一个先验(先验概率,一个可能性的概率评估),分布为 p z ( z ) p_{z}(z) pz(z),生成模型的功能就是将 z z z映射成 x x x,对于MLP生成器G来说,有一个可学习参数 θ g \theta_{g} θg (可学习参数通常是指权重(weights)和偏置(biases)),上述这个映射表示为 G ( z ; θ g ) G(z;\theta_{g}) G(z;θg)。这个思路的优点,计算比较简单;缺点,没有理解对应的 z z z。辨别器D也是一个MLP,同样拥有可学习参数 θ d \theta_{d} θd,作用是把数据转换为一个标量,输出是真实数据的概率,来自真实的数据输出为1,来自生成器的数据输出为0。我们训练D的同时也在训练G,G用来 minimax l o g ( 1 − D ( G ( z ) ) ) log(1-D(G(z))) log(1D(G(z))) z z z是随机噪声, G ( z ) G(z) G(z)对应生成的数据 x ′ x' x(区别于真实数据 x x x), D ( G ( z ) ) D(G(z)) D(G(z))对应的是判别器的输出, l o g ( 1 − D ( G ( z ) ) ) log(1-D(G(z))) log(1D(G(z)))的功能是辨别器做的很好的情况下为0,否则输出大于0的数,如果 D D D确信 x ′ x' x是真实数据就为1。
总结来说, D D D G G G是两个模型,目标函数是如下的 two-player minmax game 的函数 V ( G , D ) V(G,D) V(G,D)
min ⁡ G max ⁡ D V ( D , G ) = E x ∼   p d a t a ( x ) [ l o g D ( x ) ] + E z ∼   p z ( z ) [ l o g ( 1 − D ( G ( z ) ) ) ] \min\limits_{G} \max\limits_{D} V(D,G) = \mathbb{E}_{x\sim\ p_{data(x)}}[logD(x)]+\mathbb{E}_{z\sim\ p_{z}(z)} [log(1-D(G(z)))] GminDmaxV(D,G)=Ex pdata(x)[logD(x)]+Ez pz(z)[log(1D(G(z)))]
第一项 E x ∼ p d a t a ( x ) [ l o g D ( x ) ] \mathbb{E}_{x\sim p_{data}(x)} [logD(x)] Expdata(x)[logD(x)]是一个期望, x x x是采样真实数据,如果判别器效果很好 l o g D ( x ) logD(x) logD(x)的值应为0
第二项 E z ∼   p z ( z ) [ l o g ( 1 − D ( G ( z ) ) ) ] \mathbb{E}_{z\sim\ p_{z}(z)} [log(1-D(G(z)))] Ez pz(z)[log(1D(G(z)))]是采样噪音分布,如果 D D D是完美的情况下 l o g ( 1 − D ( G ( z ) ) ) log(1-D(G(z))) log(1D(G(z)))应该为0
如果 D D D并不完美的情况下,一二项都会产生误分类的情况,都会变成一个负数值。
G G G要尽量的犯错使第二项值更小,这与 D D D的目标是矛盾的,这就是对抗的过程,最终结果是达到一个均衡即纳什均衡。
在这里插入图片描述
(a):
x x x z z z分别是一维的标量,z是均分分布采样来的,x是高斯分布,第一步将z映射到x,表示为绿线,辨别器为蓝色的线。
(b):
更新辨别器, 使其能分辨出真实的数据和生成的数据
(c):
更新生成器,使峰值右移
(d):
不断更新辨别器和生成器,最后将生成映射成接近真实分布的分布,辨别器对每个值得输出都是0.5
算法1
在这里插入图片描述
第一行是一个for loop,每个loop里做一次迭代
第二行是另一个for loop,做k步
■ 每一步里先采样m个噪音样本 { z ( 1 ) , … , z ( m ) } \{ z^{(1)},\ldots ,z^{(m)} \} {z(1),,z(m)}
■ 再采样m个来自真实数据的样本 { x ( 1 ) , … , x ( m ) } \{ x^{(1)},\ldots ,x^{(m)} \} {x(1),,x(m)}
组成 2 m 2m 2m大小的批量 p d a t a ( x ) p_{data}(x) pdata(x)
■ 放入价值函数 V ( G , D ) V(G,D) V(G,D)求梯度,做 k k k步对辨别器的参数求梯度,来更新辨别器
∇ θ d 1 m ∑ i = 1 m [ l o g D ( x ( i ) ) + l o g ( 1 − D ( G ( z ( i ) ) ) ) ] \nabla_{\theta_{d}}\frac{1}{m} \sum_{i=1}^{m}[logD(x^{(i)})+log(1-D(G(z^{(i)})))] θdm1i=1m[logD(x(i))+log(1D(G(z(i))))]
结束
■ 采样m个噪音样本 { z ( 1 ) , … , z ( m ) } \{ z^{(1)},\ldots ,z^{(m)} \} {z(1),,z(m)}
■ 放入第二项中,求梯度更新生成器
∇ θ d 1 m ∑ i = 1 m [ l o g ( 1 − D ( G ( z ( i ) ) ) ) ] \nabla_{\theta_{d}}\frac{1}{m} \sum_{i=1}^{m}[log(1-D(G(z^{(i)})))] θdm1i=1m[log(1D(G(z(i))))]
结束完成一次迭代
先更新辨别器再更新生成器,其中 k k k是一个超参数,不能太大也不能太小。GAN的收敛是非常不稳定的。
欠更新:
更新了生成器后,辨别器更新不好,在下一轮,更新D就没有意义。
过更新:
生成器一更新,就将D训练到完美,那么 1 − D ( G ( z ( i ) ) ) ) 1-D(G(z^{(i)}))) 1D(G(z(i))))就会变成0,那么在生成模型G上的更新会有困难。
问题,初始时G很弱,很容易把D训练到很好,会导致 l o g ( 1 − D ( G ( z ) ) ) log(1-D(G(z))) log(1D(G(z)))变成0,建议在更新G时把目标函数改成maximize l o g ( D ( G ( z ) ) ) log(D(G(z))) log(D(G(z))),但是依然有问题
理论结果 Theoretical Results
当生成器学到的分布 p g p_{g} pg与真实分布 p d a t a p_{data} pdata相等时,目标函数有一个全局最优解。算法1确实能求解目标函数。

全局最优解 Gloabl Optimality of p g = p d a t a p_{g}=p_{data} pg=pdata

结论一:G固定,最优辨别器D是

D G ∗ ( x i ) = p d a t a ( x ) p d a t a ( x ) + p g ( x ) D_{G}^{*}(x^{i}) = \frac{p_{data}(x)}{p_{data}(x)+p_{g}(x)} DG(xi)=pdata(x)+pg(x)pdata(x)
p d a t a ( x ) p_{data}(x) pdata(x)x在真实数据的分布中概率是多少, p g ( x ) p_{g}(x) pg(x)x在生成器所拟合的分布中的概率。不管对什么样子的x,最优辨别器的输出的概率都是 1 2 \frac{1}{2} 21
证明:
计算来自p的x的期望 E x ∼ p f ( x ) = ∫ x p ( x ) f ( x ) d x \mathbb{E}_{x\sim p} f(x) = \int_x p(x)f(x)dx Expf(x)=xp(x)f(x)dx
将期望带入价值函数
V ( D , G ) = ∫ x p d a t a ( x ) l o g D ( x ) + ∫ x p z ( z ) l o g ( 1 − D ( G ( z ) ) ) d z V(D,G) =\int_x p_{data}(x)logD(x) +\int_x p_{z}(z)log(1-D(G(z)))dz V(D,G)=xpdata(x)logD(x)+xpz(z)log(1D(G(z)))dz
第一项是在 p d a t a p_{data} pdata上对 l o g ( D ( x ) ) log(D(x)) log(D(x))求均值,第二项是在 p z ( z ) p_z(z) pz(z)上对 l o g ( 1 − D ( G ( z ) ) ) log(1-D(G(z))) log(1D(G(z)))求均值
因为 x = g ( z ) x = g(z) x=g(z),可得出
V ( D , G ) = ∫ x p d a t a ( x ) l o g D ( x ) + p g l o g ( 1 − D ( x ) ) d x V(D,G) =\int_x p_{data}(x)logD(x) + p_{g}log(1-D(x))dx V(D,G)=xpdata(x)logD(x)+pglog(1D(x))dx
对于任何 ( a , b ) ∈ R > 0 2 (a,b) \in \mathbb{R}^2_{>0} (a,b)R>02,函数 y = a log ⁡ ( y ) + b log ⁡ ( 1 − y ) y = a\log(y) + b\log(1-y) y=alog(y)+blog(1y) 在区间 [ 0 , 1 ] [0,1] [0,1] 上达到其最大值点 y = a a + b y = \frac{a}{a+b} y=a+ba。分母不需要在 S u p p ( p d a t a ) ∪ S u p p ( p g ) Supp(p_{data}) \cup Supp(p_g) Supp(pdata)Supp(pg) 之外定义,从而证明。
将D的最优解带回到我们的价值函数中
C ( G ) = max ⁡ D V ( G , D ) C(G) = \max\limits_{D} V(G, D) C(G)=DmaxV(G,D)
= E x ∼ p data [ log ⁡ D G ∗ ( x ) ] + E z ∼ p z [ log ⁡ ( 1 − D G ∗ ( G ( z ) ) ) ] =\mathbb{E}_{x \sim p{\text{data}}} [\log D_{G}^{*}(x)] + \mathbb{E}_{z \sim p_z} [\log (1- D_{G}^{*}(G(z)))] =Expdata[logDG(x)]+Ezpz[log(1DG(G(z)))]
= E x ∼ p data [ log ⁡ D G ∗ ( x ) ] + E x ∼ p g [ l o g ( 1 − D G ∗ ( G ( z ) ) ) ] =\mathbb{E}_{x \sim p{\text{data}}} [\log D_{G}^{*}(x)] + \mathbb{E}_{x \sim p_g} [log(1- D_{G}^{*}(G(z)))] =Expdata[logDG(x)]+Expg[log(1DG(G(z)))]
= E x ∼ p data [ log ⁡ p data ( x ) P data ( x ) + p g ( x ) ] + E x ∼ p g [ log ⁡ p g ( x ) p data ( x ) + p g ( x ) ] =\mathbb{E}_{x \sim p_{\text{data}}} [\log \frac{p_{\text{data}}(x)}{P_{\text{data}}(x) + p_g(x)} ]+ \mathbb{E}_{x \sim p_g} [\log \frac{p_g(x)}{p{\text{data}}(x) + p_g(x)}] =Expdata[logPdata(x)+pg(x)pdata(x)]+Expg[logpdata(x)+pg(x)pg(x)]

定理一:当且仅当 p g = p d a t a p_{g}=p_{data} pg=pdata时, C ( G ) C(G) C(G)是全局最小值

证明:
引入KL散度证明,太难了,建议看原文…Generative Adversarial
算法一的收敛
G G G D D D有足够容量时,并且在算法 1 的每一步中,允许鉴别器在给定 G 的条件下达到其最优状态,并且更新 p g p_{g} pg以改善标准
E x ∼ p data [ log ⁡ D ( G ( x ) ) ] + E x ∼ p g [ log ⁡ ( 1 − D ( x ) ) ] \mathbb{E}_{x\sim p_{\text{data}}}[\log D(G(x))] + \mathbb{E}_{x \sim p_g}[\log(1 - D(x))] Expdata[logD(G(x))]+Expg[log(1D(x))]
那么 p g p_{g} pg会收敛至 p d a t a p_{data} pdata
证明:
考虑 V ( G , D ) = U ( p g , D ) V(G, D) = U(p_g, D) V(G,D)=U(pg,D) 作为上述标准中对 p g p_g pg的一个函数。注意到 U ( p g , D ) U(p_g, D) U(pg,D) p g p_g pg中是凸的。凸函数的上确界的次导数包括在最大值达到的点上该函数的导数。换句话说,如果 f ( x ) = s u p A f ( x ) f(x) = sup_A f(x) f(x)=supAf(x)并且对于每一个 A,f(x) 在 x 中是凸的,那么 f ′ ( x ) f'(x) f(x)就是在 a r g s u p A f ( x ) argsup_A f(x) argsupAf(x)处的 f(x)。这相当于在给定相应的G时,对于最优的 D,为 p g p_g pg计算一个梯度下降更新。定理一证明了在 p g p_g pg s u p D U ( p g , D ) sup_D U(p_g, D) supDU(pg,D)是凸的,并且有一个唯一的全局最优解,因此,通过对 p g p_g pg进行足够小的更新, p g p_g pg会收敛到 p x p_x px,从而完成了证明。

  • 27
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值