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(P∣∣Q)=x∈X∑P(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(P∣∣Q)=∫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(P∣∣Q)=DKL(Q∣∣P)
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(P∣∣Q)=21DKL(P∣∣2P+Q)+21DKL(Q∣∣2P+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(1−D(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))] Ez∼pz(z)[log(1−D(G(z)))]=Ex∼pg(x)[log(1−D(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(1−D(x))dx=∫x[pdata(x)log(D(x))+pg(x)log(1−D(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(1−y)最大,故,固定生成器 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(1−21)]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)=−log2∫xpdata(x)dx−log2∫xpg(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[(log2−log2)pdata(x)+pdata(x)log(pdata(x)+pg(x)pdata(x))+(log2−log2)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)=−log2∫x[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(pdata∣∣2pdata+pg)+DKL(pg∣∣2pdata+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(pdata∣∣pg)
因为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(pdata∣∣pg)的值为零,
所以,当且仅当
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的训练策略:
结语
如果您有修改意见或问题,欢迎留言或者通过邮箱和我联系。
手打很辛苦,如果我的文章对您有帮助,转载请注明出处。