GAN的数学原理

信息论基础

信息论的基本想法 - 如何量化信息?

  • 非常可能发生的事件信息量较少,确保能够发生的事件应该没有信息量。
  • 较不可能发生的实践具有更高的信息量。
  • 独立事件应具有增量的信息。例如,投掷的硬币两次正面朝上传递的信息量,应该是投掷一次硬币正面朝上的信息量的两倍。

为了满足上述三个性质,定义一个事件 X = x X=x X=x的自信息为
I ( x ) = − l o g P ( x ) I(x)=-logP(x) I(x)=logP(x)
其中 P ( x ) P(x) P(x)为观察到该事件的概率。

自信息只能处理单个的输出。可以用香农熵(Shannon entropy)来对整个概率分布中的不确定性总量进行量化:
H ( X ) = E x ∼ P [ I ( x ) ] = − E x ∼ P [ l o g P ( x ) ] H(X)=\mathbb E_{x\sim P}[I(x)]=-\mathbb E_{x\sim P}[logP(x)] H(X)=ExP[I(x)]=ExP[logP(x)]
一个分布的香农熵是指遵循这个分布的事件所产生的期望信息总量,它给出了对依据概率分布 P P P生成的符号进行编码所需的比特数在平均意义上的下界(当对数底数不是 2 时,单位将有所不同)。

可以将问题理解为给一些字符编码,这些字符出现的频率不同,我们给那些出现频率高的字符,优先赋予较短的编码,给那些出现频率低的字符,赋予稍长一些的编码,这个问题可以用数据结构中的哈弗曼树解决, − l o g P ( x ) -logP(x) logP(x)可以理解为在这种策略下,赋予字符 x x x的编码长度。

如果我们对于同一随机变量 X X X有两个单独的概率分布 P ( x ) P(x) P(x) Q ( x ) Q(x) Q(x),我们可以使用KL散度(Kullback-Leibler divergence)来衡量这两个分布的差异:
D K L ( P ∣ ∣ Q ) = E x ∼ P [ l o g P ( x ) Q ( x ) ] = − E x ∼ P [ l o g Q ( x ) ] − ( − E x ∼ P [ l o g P ( x ) ] ) = − E x ∼ P [ l o g Q ( x ) ] − H ( P ) D_{KL}(P||Q)=\mathbb E_{x\sim P}\Big[log\frac{P(x)}{Q(x)}\Big]=-\mathbb E_{x\sim P}[logQ(x)]-\big(-\mathbb E_{x\sim P}[logP(x)]\big) \\=-\mathbb E_{x\sim P}[logQ(x)]-H(P) DKL(PQ)=ExP[logQ(x)P(x)]=ExP[logQ(x)](ExP[logP(x)])=ExP[logQ(x)]H(P)
KL 散度衡量的是,当我们使用一种被设计成能够使得概率分布 Q 产生的消息的长度最小的编码(记为BQ),发送包含由概率分布 P 产生的符号的消息时,发送的消息长度,这里的多是相对于使用能够使得概率分布 P 产生的消息的长度最小的编码(记为BP)。

因为消息是以概率P发送的,所以使用编码BP才能使消息长度最短,使用编码BQ会多发送一些比特,KL散度衡量的就是多发送的比特长度。所以我们很容易知道KL散度是非负的,KL 散度为 0 当且仅当P 和 Q 在离散型变量的情况下是相同的分布,或者在连续型变量的情况下是几乎处处相同的。

一个和 KL 散度密切联系的量是交叉熵(cross-entropy),
H ( P , Q ) = H ( P ) + D K L ( P ∣ ∣ Q ) = − E x ∼ P [ l o g Q ( x ) ] H(P,Q)=H(P)+D_{KL}(P||Q)=-\mathbb E_{x\sim P}[logQ(x)] H(P,Q)=H(P)+DKL(PQ)=ExP[logQ(x)]
针对 Q 最小化交叉熵等价于最小化 KL 散度,因为 Q 并不参与被省略的那一项。在机器学习分类任务中,Q为神经网络学习到的分布,P为数据真实分布, P ( x ) P(x) P(x)的取值只有1(正确分类)和0(错误分类)两种可能,所以
H ( P ) = − E x ∼ P [ l o g P ( x ) ] = − ∑ x P ( x ) l o g P ( x ) = 0 H(P)=-\mathbb E_{x\sim P}[logP(x)]=-\sum_xP(x)logP(x)=0 H(P)=ExP[logP(x)]=xP(x)logP(x)=0
恒成立,即交叉熵的值与KL散度相等(信息论中,0log0=0)。

GAN之前,如何寻找数据的分布?

假设我们想找到一个数据分布 P d a t a ( x ) P_{data}(x) Pdata(x),使一张图片看起来像是二次元头像,其中 x x x是一个高维向量,代表一张图片。在整个向量空间中,只有一小部分空间中的向量所代表的图片像是二次元头像,比如下图中的蓝色区域

我们所要寻找的分布 P d a t a ( x ) P_{data}(x) Pdata(x),应该在蓝色区域概率高,在其他区域概率低。
在GAN之前,我们使用的是最大似然估计方法:

  • 给定一个真实数据分布 P d a t a ( x ) P_{data}(x) Pdata(x),并且我们可以从中抽样
  • 假设一个数据分布 P G ( x ; θ ) P_G(x;\theta) PG(x;θ),其中 θ \theta θ为参数(如果假设为高斯分布, θ \theta θ就是分布的均值与方差)
  • 寻找使 P G ( x ; θ ) P_G(x;\theta) PG(x;θ)最接近 P d a t a ( x ) P_{data}(x) Pdata(x)的参数 θ \theta θ
  • P d a t a ( x ) P_{data}(x) Pdata(x)中抽样得到 { x 1 , x 2 , … , x m } \{x^1,x^2,\dots,x^m\} {x1,x2,,xm},我们可以计算出从 P G ( x ; θ ) P_G(x;\theta) PG(x;θ)中抽样得到这些样本的概率 P G ( x i ; θ ) P_G(x^i;\theta) PG(xi;θ)
  • 似然函数 L = ∏ i = 1 m P G ( x i ; θ ) L=\prod \limits ^m _{i=1} P_G(x^i;\theta) L=i=1mPG(xi;θ)
  • 寻找 θ ∗ \theta^* θ使L最大

我们对 θ ∗ \theta^* θ进一步计算:
θ ∗ = a r g max ⁡ θ ∏ i = 1 m P G ( x i ; θ ) = a r g max ⁡ θ l o g ∏ i = 1 m P G ( x i ; θ ) = a r g max ⁡ θ ∑ i = 1 m l o g P G ( x i ; θ ) \theta^*=arg\max\limits_\theta\prod \limits ^m _{i=1} P_G(x^i;\theta) =arg\max\limits_\theta log\prod \limits ^m _{i=1} P_G(x^i;\theta) \\=arg\max\limits_\theta\sum \limits ^m _{i=1} logP_G(x^i;\theta) θ=argθmaxi=1mPG(xi;θ)=argθmaxlogi=1mPG(xi;θ)=argθmaxi=1mlogPG(xi;θ)
我们假设样本 { x 1 , x 2 , … , x m } \{x^1,x^2,\dots,x^m\} {x1,x2,,xm}的分布与 P d a t a ( x ) P_{data}(x) Pdata(x)的分布几乎一致,并且把 ∑ i = 1 m l o g P G ( x i ; θ ) \sum \limits ^m _{i=1} logP_G(x^i;\theta) i=1mlogPG(xi;θ)理解为m倍的数学期望,那么
a r g max ⁡ θ ∑ i = 1 m l o g P G ( x i ; θ ) ≈ a r g max ⁡ θ E x ∼ P d a t a [ l o g P G ( x i ; θ ) ] = a r g min ⁡ θ H ( P d a t a , P G ) = a r g min ⁡ θ D K L ( P d a t a ∣ ∣ P G ) arg\max\limits_\theta\sum \limits ^m _{i=1} logP_G(x^i;\theta) \approx arg\max\limits_\theta\mathbb E_{x\sim P_{data}}[logP_G(x^i;\theta)]\\=arg\min\limits_\theta H(P_{data},P_G)=arg\min\limits_\theta D_{KL}(P_{data}||P_G) argθmaxi=1mlogPG(xi;θ)argθmaxExPdata[logPG(xi;θ)]=argθminH(Pdata,PG)=argθminDKL(PdataPG)
所以,求参数 θ \theta θ使似然函数最大,就是使交叉熵与KL散度最小,由上节内容可知,这就是使两个概率分布最相似。
上述做法有一个无法解决的问题,那就是数据的分布很可能不是高斯分布,而是极其复杂、很难预估的分布,我们无法提前写出 P G ( x ; θ ) P_G(x;\theta) PG(x;θ)的表达式,这时我们只能用神经网络来表示它。

生成对抗网络

生成器G是一个神经网络,它定义了一个概率分布 P G P_G PG,由于神经网络可以近似任意函数,所以无论目标概率分布多复杂,我们都可以近似它。

此时我们要寻找的生成器 G ∗ = a r g min ⁡ G D i v ( P G , P d a t a ) G^*=arg\min\limits_GDiv(P_G,P_{data}) G=argGminDiv(PG,Pdata)

那么,如何计算 D i v ( P G , P d a t a ) Div(P_G,P_{data}) Div(PG,Pdata),即两个分布的差异呢?

鉴别器D同样是一个神经网络,将生成器生成的样本与真实数据作为训练样本,输入D中,D的输出为 D ( x ) D(x) 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 ) ) ] V(G,D)=\mathbb E_{x\sim P_{data}}[logD(x)]+\mathbb E_{x\sim P_G}[log(1-D(x))] V(G,D)=ExPdata[logD(x)]+ExPG[log(1D(x))]
我们要寻找的鉴别器 D ∗ = a r g max ⁡ D V ( D , G ) D^*=arg\max\limits_DV(D,G) D=argDmaxV(D,G),给定 G G G D ∗ D^* D可以最大化
V = E x ∼ P d a t a [ l o g D ( x ) ] + E x ∼ P G [ l o g ( 1 − 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=\mathbb E_{x\sim P_{data}}[logD(x)]+\mathbb E_{x\sim P_G}[log(1-D(x))] \\=\int\limits_x[P_{data}(x)logD(x)+P_G(x)log(1-D(x))]dx V=ExPdata[logD(x)]+ExPG[log(1D(x))]=x[Pdata(x)logD(x)+PG(x)log(1D(x))]dx
即给定 x x x D ∗ D^* D可以最大化 P d a t a ( x ) l o g D ( x ) + P G ( x ) l o g ( 1 − D ( x ) ) P_{data}(x)logD(x)+P_G(x)log(1-D(x)) Pdata(x)logD(x)+PG(x)log(1D(x))

f ( D ) = a l o g ( D ) + b l o g ( 1 − D ) f(D)=alog(D)+blog(1-D) f(D)=alog(D)+blog(1D),求极值点得 D ∗ = a a + b D^*=\frac{a}{a+b} D=a+ba,即
D ∗ = P d a t a ( x ) P d a t a ( x ) + P G ( x ) D^*=\frac{P_{data}(x)}{P_{data}(x)+P_G(x)} D=Pdata(x)+PG(x)Pdata(x)
此时目标函数
m a x V ( G , D ) = V ( G , D ∗ ) = E x ∼ P d a t a [ l o g P d a t a ( x ) P d a t a ( x ) + P G ( x ) ] + E x ∼ P G [ l o g ( P G ( x ) P d a t a ( x ) + P G ( x ) ) ] = − 2 l o g 2 + 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 ) = − 2 l o g 2 + 2 D J S ( P d a t a ∣ ∣ P G ) maxV(G,D)=V(G,D^*)=\mathbb E_{x\sim P_{data}}[log\frac{P_{data}(x)}{P_{data}(x)+P_G(x)}]+\mathbb E_{x\sim P_G}[log(\frac{P_G(x)}{P_{data}(x)+P_G(x)})] \\=-2log2+D_{KL}\Big(P_{data}||\frac{P_{data}+P_G}{2}\Big)+D_{KL}\Big(P_G||\frac{P_{data}+P_G}{2}\Big) \\=-2log2+2D_{JS}(P_{data}||P_G) maxV(G,D)=V(G,D)=ExPdata[logPdata(x)+PG(x)Pdata(x)]+ExPG[log(Pdata(x)+PG(x)PG(x))]=2log2+DKL(Pdata2Pdata+PG)+DKL(PG2Pdata+PG)=2log2+2DJS(PdataPG)
与两个分布的JS散度正相关。

回到前面的问题,目标函数可以衡量两个分布的JS散度(差异度),所以 G ∗ = a r g min ⁡ G max ⁡ D V ( G , D ) G^*=arg\min\limits_G\max\limits_DV(G,D) G=argGminDmaxV(G,D)

  • 步骤1:固定生成器G,更新鉴别器D使目标函数最大
  • 步骤2:固定鉴别器D,更新生成器G使目标函数最小

以上三个生成器中, G 3 G_3 G3是最优的。

GAN的算法

一个问题是,为什么在一次训练迭代中,D迭代的次数比G多?
若G迭代次数过多,会使D陷入局部最优,如下图:

  • 表面上,由于G的更新,找到了更小的 max ⁡ D V ( G , D ) \max\limits_DV(G,D) DmaxV(G,D),但此时G已经变为了 G 1 G_1 G1,非常不幸的是,上文已经说过,在G的更新过程中,D是被固定的;也就是说,此时 G 1 = a r g min ⁡ G V ( G 1 , D 0 ) G_1=arg\min\limits_GV(G_1,D_0) G1=argGminV(G1,D0),而 D 0 ≠ a r g max ⁡ D V ( G 1 , D ) D_0\neq arg\max\limits_DV(G_1,D) D0=argDmaxV(G1,D);为了解决这个问题,我们必须假设 G 0 ≈ G 1 G_0\approx G_1 G0G1,而这要求 G G G的更新不能过于频繁。同时,若 G G G更新过于频繁,会产生过拟合,对于不同的输入 z z z,生成器只会产生最讨好 D D D的那个输出,破坏了模型的多样性。
  • 但若频繁更新 D D D,同样会使鉴别器过拟合,此时任何生成器的输出都不能满足 D D D,使优化更困难。

综合起来, G G G的迭代次数不能多于 D D D,同时两者都不能在一个训练迭代中循环太多次。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GAN(Generative Adversarial Networks)的训练基于博弈论中的最小极大值原理。GAN由两个神经网络组成:生成器和判别器。 生成器的目的是生成与真实数据类似的数据,判别器的目的是判断输入的数据是真实数据还是生成数据。具体来说,生成器将一个随机噪声作为输入,并输出一个与真实数据类似的数据样本。判别器接收一个数据样本,并输出一个概率,表示这个样本是真实数据的概率。 在训练过程中,生成器和判别器相互博弈,生成器的目标是尽可能地欺骗判别器,让判别器无法判断生成数据和真实数据的区别;判别器的目标是尽可能准确地判断输入数据是真实数据还是生成数据。 GAN的训练过程可以用以下公式表示: $$ \min_G \max_D V(D, G) = E_{x \sim p_{data}(x)}[\log D(x)] + E_{z \sim p_z(z)}[\log (1 - D(G(z)))] $$ 其中,$G$ 表示生成器,$D$ 表示判别器,$x$ 表示真实数据,$z$ 表示随机噪声,$p_{data}$ 表示真实数据的分布,$p_z$ 表示随机噪声的分布,$D(x)$ 表示判别器判断 $x$ 是真实数据的概率,$D(G(z))$ 表示判别器判断生成器生成的 $G(z)$ 是真实数据的概率。 公式中的第一项表示判别器判断真实数据是真实数据的损失,第二项表示判别器判断生成数据是生成数据的损失。生成器的目标是最小化第二项,判别器的目标是最大化整个式子。 通过反复迭代训练,生成器和判别器的性能逐渐提升,最终生成器可以生成与真实数据非常相似的数据。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值