【深度学习】生成对抗网络(Generative Adversarial Nets)浅解析

【深度学习】生成对抗网络(Generative Adversarial Nets)浅解析

KL散度和JS散度

KL散度,用于衡量两种概率分布的相似程度非负值越小,表示两种概率分布越接近

  • 对于离散的概率分布:
    D K L ( P ∣ ∣ Q ) = ∑ x ∈ X P ( x ) l o g P ( x ) Q ( x ) D_{KL}(P||Q)=\displaystyle\sum_{x\in{X}}P(x)log\dfrac{P(x)}{Q(x)} DKL(PQ)=xXP(x)logQ(x)P(x)
  • 对于连续的概率分布:
    D K L ( P ∣ ∣ Q ) = ∫ x p ( x ) l o g p ( x ) q ( x ) d x D_{KL}(P||Q)=\int_x{p(x)}log\dfrac{p(x)}{q(x)}d_x DKL(PQ)=xp(x)logq(x)p(x)dx

注意,KL散度不是对称的,即 D K L ( P ∣ ∣ Q ) ≠ D K L ( Q ∣ ∣ P ) D_{KL}(P||Q)\not=D_{KL}(Q||P) DKL(PQ)=DKL(QP)


JS散度,用于衡量两种概率分布的相似程度值在 [ 0 , 1 ] [0, 1] [0,1]值越小,表示两种概率分布越接近解决了KL散度非对称的问题。

D J S ( P ∣ ∣ Q ) = 1 2 D K L ( P ∣ ∣ P + Q 2 ) + 1 2 D K L ( Q ∣ ∣ P + Q 2 ) D_{JS}(P||Q)=\dfrac{1}{2}D_{KL}(P||\dfrac{P+Q}{2})+\dfrac{1}{2}D_{KL}(Q||\dfrac{P+Q}{2}) DJS(PQ)=21DKL(P2P+Q)+21DKL(Q2P+Q)

理论及推导

原始GANs的基本结构:

生成对抗网络包括两个模型:

  • 生成模型 G G G:用于学习数据集的分布,输入随机噪声 z z z输出生成数据 x x x,即 x = G ( z ) x=G(z) x=G(z) G G G z z z从噪声域 p z ( z ) p_z(z) pz(z)映射到数据域 p g ( x ) p_g(x) pg(x)

  • 判别模型 D D D:判断一个样本是来自数据集,还是来自生成器 G G G的生成。判别模型希望当输入来自数据集时,输出 1 1 1,当输入是生成器 G G G的生成时,输出 0 0 0。即区分 p d a t a ( x ) p_{data}{(x)} pdata(x) p g ( x ) p_g{(x)} pg(x)

优化预期结果:

  • 生成模型 G G G G G G完全恢复训练数据的数据分布,即 p d a t a ( x ) = p g ( x ) p_{data}{(x)}=p_g{(x)} pdata(x)=pg(x)

  • 判别模型 D D D D D D无法区分样本是来自数据集还是来自生成器 G G G的生成,即对任何输入,输出都是 1 / 2 1/2 1/2

对于原始的GANs,生成模型 G G G和判别模型 D D D的backbone都是多层感知机


直观地看GANs的思想:
在这里插入图片描述如图 ( a ) (a) (a),噪声 z z z作为生成器 G G G的输入,生成器 G G G的输出 x x x的数据分布如绿色线所示。黑色线为训练数据的数据分布。此时判别器如蓝色线所示,可以很好的区分 p d a t a ( x ) p_{data}(x) pdata(x)(对应输出为1)和 p g ( x ) p_g(x) pg(x)(对应输出为0)。

如图 ( b ) (b) (b),训练判别器 D D D,使其达到最优,可以更好的区分 p d a t a ( x ) p_{data}(x) pdata(x) p g ( x ) p_g(x) pg(x)

如图 ( c ) (c) (c),训练生成器 G G G,使 p d a t a ( x ) p_{data}(x) pdata(x) p g ( x ) p_g(x) pg(x)更加接近,判别器 D D D不易将二者分开。

最后如图 ( d ) (d) (d) p d a t a ( x ) p_{data}(x) pdata(x) p g ( x ) p_g(x) pg(x)完全相同,判别器 D D D无法区分二者。


分析原始GANs的优化目标,和优化目标的唯一解:
在这里插入图片描述
原始GANs的优化目标如上公式:

  • 固定生成模型 G G G,优化判别模型 D D D,使优化目标最大:
    l o g log log是递增函数,优化 D D D,使 D ( x ) D(x) D(x)接近1,使 D ( G ( z ) ) D(G(z)) D(G(z))接近0(这里 x x x是训练数据, G ( z ) G(z) G(z)是生成器 G G G的输出),即 D D D可以分辨出 p g ( x ) p_g(x) pg(x) p d a t a ( x ) p_{data}(x) pdata(x),即优化目标的两项都增大,即总优化目标增大
  • 固定判别模型 D D D,优化生成模型 G G G,使优化目标最小:
    生成器 G G G要尽量使 p g ( x ) p_g(x) pg(x)接近 p d a t a ( x ) p_{data}(x) pdata(x) D ( G ( x ) ) D(G(x)) D(G(x))接近 D ( x ) D(x) D(x),即 D ( G ( x ) ) D(G(x)) D(G(x))增大,即优化目标的后一项减小,即总优化目标减小

接下来,简单证明一下,上述的优化目标,生成器 G G G有全局唯一解—— p g ( x ) = p d a t a ( x ) p_g(x)=p_{data}(x) pg(x)=pdata(x)

将上述优化目标,数学期望写成积分的形式:

  • V ( D , G ) = ∫ x p d a t a ( x ) l o g ( D ( x ) ) d x + ∫ z p z ( z ) l o g ( 1 − D ( G ( z ) ) ) d z V(D, G)=\int_xp_{data}(x)log(D(x))d_x + \int_zp_z(z)log(1-D(G(z)))d_z V(D,G)=xpdata(x)log(D(x))dx+zpz(z)log(1D(G(z)))dz

因为

  • E z ∼ p z ( z ) [ l o g ( 1 − D ( G ( z ) ) ) ] = E x ∼ p g ( x ) [ l o g ( 1 − D ( x ) ) ] E_{z∼p_z(z)}[log(1−D(G(z)))]=E_{x∼p_g(x)}[log(1−D(x))] Ezpz(z)[log(1D(G(z)))]=Expg(x)[log(1D(x))]

所以,上述优化目标可进一步写为:

  • V ( D , G ) = ∫ x p d a t a ( x ) l o g ( D ( x ) ) d x + ∫ x p g ( x ) l o g ( 1 − D ( x ) ) d x = ∫ x [ p d a t a ( x ) l o g ( D ( x ) ) + p g ( x ) l o g ( 1 − D ( x ) ) ] d x V(D, G)=\int_xp_{data}(x)log(D(x))d_x + \int_xp_g(x)log(1-D(x))d_x=\int_x[p_{data}(x)log(D(x))+p_g(x)log(1-D(x))]d_x V(D,G)=xpdata(x)log(D(x))dx+xpg(x)log(1D(x))dx=x[pdata(x)log(D(x))+pg(x)log(1D(x))]dx

因为当 y y y的值在 [ 0 , 1 ] [0, 1] [0,1]时, y y y a a + b \dfrac{a}{a+b} a+ba,使 a l o g ( y ) + b l o g ( 1 − y ) alog(y)+blog(1-y) alog(y)+blog(1y)最大,故,固定生成器 G G G时候,最优判别器为

  • D G ( x ) = p d a t a ( x ) p d a t a ( x ) + p g ( x ) D_G(x)=\dfrac{p_{data}(x)}{p_{data}(x)+p_g(x)} DG(x)=pdata(x)+pg(x)pdata(x)

注意,在实际训练中,因为 p d a t a ( x ) p_{data}(x) pdata(x)是不可求的,所以实际训练中,当固定生成器 G G G优化判别器 D D D时,是另 D D D逼近 D G ( x ) D_G(x) DG(x)

p d a t a ( x ) = p g ( x ) p_{data}(x)=p_g(x) pdata(x)=pg(x)时,对任意 x x x,判别器 D D D的输出为 1 2 \dfrac{1}{2} 21,满足判别器 D D D的优化预期

为什么固定 D D D D G ( x ) D_G(x) DG(x)时,当且仅当 p d a t a ( x ) = p g ( x ) p_{data}(x)=p_g(x) pdata(x)=pg(x),会另优化目标 V ( D G ( x ) , G ) V(D_G(x),G) V(DG(x),G)最小呢?

证明如下:


假设 p d a t a ( x ) = p g ( x ) p_{data}(x)=p_g(x) pdata(x)=pg(x),则:

  • V ( D G ( x ) , G ) = ∫ x [ p d a t a ( x ) l o g ( 1 2 ) + p g ( x ) l o g ( 1 − 1 2 ) ] d x V(D_G(x), G)=\int_x[p_{data}(x)log(\dfrac{1}{2})+p_g(x)log(1-\dfrac{1}{2})]d_x V(DG(x),G)=x[pdata(x)log(21)+pg(x)log(121)]dx

  • V ( D G ( x ) , G ) = − l o g 2 ∫ x p d a t a ( x ) d x − l o g 2 ∫ x p g ( x ) d x = − l o g 4 V(D_G(x), G)=-log2\int_xp_{data}(x)d_x-log2\int_xp_g(x)d_x=-log4 V(DG(x),G)=log2xpdata(x)dxlog2xpg(x)dx=log4

仅将 D G ( x ) = p d a t a ( x ) p d a t a ( x ) + p g ( x ) D_G(x)=\dfrac{p_{data}(x)}{p_{data}(x)+p_g(x)} DG(x)=pdata(x)+pg(x)pdata(x)代入 V ( D , G ) V(D, G) V(D,G),有:

  • V ( D G ( x ) , G ) = ∫ x [ p d a t a ( x ) l o g ( p d a t a ( x ) p d a t a ( x ) + p g ( x ) ) + p g ( x ) l o g ( p g ( x ) p d a t a ( x ) + p g ( x ) ) ] d x V(D_G(x), G)=\int_x[p_{data}(x)log(\dfrac{p_{data}(x)}{p_{data}(x)+p_g(x)})+p_g(x)log(\dfrac{p_g(x)}{p_{data}(x)+p_g(x)})]d_x V(DG(x),G)=x[pdata(x)log(pdata(x)+pg(x)pdata(x))+pg(x)log(pdata(x)+pg(x)pg(x))]dx

  • V ( D G ( x ) , G ) = ∫ x [ ( l o g 2 − l o g 2 ) p d a t a ( x ) + p d a t a ( x ) l o g ( p d a t a ( x ) p d a t a ( x ) + p g ( x ) ) + ( l o g 2 − l o g 2 ) p g ( x ) + p g ( x ) l o g ( p g ( x ) p d a t a ( x ) + p g ( x ) ) ] d x V(D_G(x), G)=\int_x[(log2-log2)p_{data}(x)+p_{data}(x)log(\dfrac{p_{data}(x)}{p_{data}(x)+p_g(x)})+(log2-log2)p_g(x)+p_g(x)log(\dfrac{p_g(x)}{p_{data}(x)+p_g(x)})]d_x V(DG(x),G)=x[(log2log2)pdata(x)+pdata(x)log(pdata(x)+pg(x)pdata(x))+(log2log2)pg(x)+pg(x)log(pdata(x)+pg(x)pg(x))]dx

  • V ( D G ( x ) , G ) = − l o g 2 ∫ x [ p d a t a ( x ) + p g ( x ) ] d x + ∫ x [ p d a t a ( x ) [ l o g 2 + l o g ( p d a t a ( x ) p d a t a ( x ) + p g ( x ) ) ] + p g ( x ) [ l o g 2 + l o g ( p g ( x ) p d a t a ( x ) + p g ( x ) ) ] ] d x V(D_G(x), G)=-log2\int_x[p_{data}(x)+p_g(x)]d_x +\int_x[p_{data}(x)[log2+log(\dfrac{p_{data}(x)}{p_{data}(x)+p_g(x)})]+p_g(x)[log2+log(\dfrac{p_g(x)}{p_{data}(x)+p_g(x)})]]d_x V(DG(x),G)=log2x[pdata(x)+pg(x)]dx+x[pdata(x)[log2+log(pdata(x)+pg(x)pdata(x))]+pg(x)[log2+log(pdata(x)+pg(x)pg(x))]]dx

  • V ( D G ( x ) , G ) = − 2 l o g 2 + ∫ x [ p d a t a ( x ) l o g ( p d a t a ( x ) p d a t a ( x ) + p g ( x ) 2 ) + p g ( x ) l o g ( p g ( x ) p d a t a ( x ) + p g ( x ) 2 ) ] d x V(D_G(x), G)=-2log2+\int_x[p_{data}(x)log(\dfrac{p_{data}(x)}{\dfrac{p_{data}(x)+p_g(x)}{2}})+p_g(x)log(\dfrac{p_g(x)}{\dfrac{p_{data}(x)+p_g(x)}{2}})]d_x V(DG(x),G)=2log2+x[pdata(x)log(2pdata(x)+pg(x)pdata(x))+pg(x)log(2pdata(x)+pg(x)pg(x))]dx

  • V ( D G ( x ) , G ) = − l o g 4 + D K L ( p d a t a ∣ ∣ p d a t a + p g 2 ) + D K L ( p g ∣ ∣ p d a t a + p g 2 ) V(D_G(x), G)=-log4+D_{KL}(p_{data}||\dfrac{p_{data}+p_g}{2})+D_{KL}(p_g||\dfrac{p_{data}+p_g}{2}) V(DG(x),G)=log4+DKL(pdata2pdata+pg)+DKL(pg2pdata+pg)

  • V ( D G ( x ) , G ) = − l o g 4 + 2 D J S ( p d a t a ∣ ∣ p g ) V(D_G(x), G)=-log4+2D_{JS}(p_{data}||p_g) V(DG(x),G)=log4+2DJS(pdatapg)

因为JS散度的值在 [ 0 , 1 ] [0,1] [0,1],当且仅当 p d a t a = p g p_{data}=p_g pdata=pg时, D J S ( p d a t a ∣ ∣ p g ) D_{JS}(p_{data}||p_g) DJS(pdatapg)的值为零,
所以,当且仅当 p d a t a = p g p_{data}=p_g pdata=pg时, V ( D G ( x ) , G ) V(D_G(x), G) V(DG(x),G)的值最小,为 − l o g 4 -log4 log4


原始GANs的训练策略:
在这里插入图片描述

结语

如果您有修改意见或问题,欢迎留言或者通过邮箱和我联系。
手打很辛苦,如果我的文章对您有帮助,转载请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值