[Deep Learning] Generative Adversarial Networks (GANs)


Generative Adversarial Networks是深度学习的一种技术,主要目标是生成近似于真实数据分布的新数据。它是由两部分组成:Generator和Discriminator。

Generator:Generator的任务是生成新的数据样本。在训练过程中,generator接收到一组随机噪声z,并通过该噪声生成数据。初期,generator生成的数据并不能很好的模仿真实的数据分布,但是随着训练的进行,generator将能够生成更好的模仿真实数据的样本。

Discriminator:Discriminator的任务是接收一个输入(这个输入可能是真实的数据,也可能是generator生成的数据),然后判断这个输入是真实数据还是generator生成的假数据。简单地说,discriminator的任务就是尽可能地分辨出真实数据和生成的数据。

GANs的训练过程类似于“零和游戏”或“对抗游戏”。生成器和判别器在训练过程中相互竞争,生成器试图欺骗判别器,而判别器则试图防止被欺骗。具体来说,生成器的目标是最大化判别器判断其生成的样本为真的概率,而判别器的目标是正确地区分出真实样本和生成的样本。

训练过程中,判别器和生成器的参数都会不断更新,生成器会逐渐生成更逼真的样本,而判别器也会变得更加精确。当训练稳定后,判别器应该对于真实样本和生成样本的判断概率均为0.5,这时候,生成器生成的样本将与真实数据无法区分。

Minimax Problem

首先,GANs的目标是通过学习一个生成模型G来尽可能接近真实数据分布 p data p_{\text{data}} pdata。换句话说,GANs试图最小化生成模型 P G P_G PG和真实数据分布 p data p_{\text{data}} pdata之间的分布散度:

G ∗ = arg ⁡ min ⁡ G D K L ( p data ∥ P G ) G^* = \arg\min_G D_{KL}(p_{\text{data}} \| P_G) G=argGminDKL(pdataPG)

这是生成模型的通常目标,其中 D K L D_{KL} DKL是Kullback-Leibler散度。

然而,直接最小化KL散度通常是困难的,因为我们通常无法显式地访问 p data p_{\text{data}} pdata。因此,我们引入了判别模型D,它的任务是区分来自 p data p_{\text{data}} pdata的样本和来自 P G P_G PG的样本。

判别器D的目标是最大化以下目标函数:

V ( D , G ) = E x ∼ p data [ log ⁡ D ( x ) ] + E z ∼ p z ( z ) [ log ⁡ ( 1 − D ( G ( z ) ) ) ] V(D, G) = \mathbb{E}_{x \sim p_{\text{data}}}[\log D(x)] + \mathbb{E}_{z \sim p_z(z)}[\log (1 - D(G(z)))] V(D,G)=Expdata[logD(x)]+Ezpz(z)[log(1D(G(z)))]

这里的目标函数实际上是两个二元交叉熵的和,其对应于判别器D对真实样本和生成样本的分类能力。

然后,我们的目标是找到能够最小化 V ( D , G ) V(D, G) V(D,G)的生成器G。换句话说,我们希望找到能够最大化判别器D分类错误的生成器G。

结合以上两步,我们得到了生成对抗网络的最小-最大问题:

min ⁡ G max ⁡ D V ( D , G ) = E x ∼ p data ( x ) [ log ⁡ D ( x ) ] + E z ∼ p z ( z ) [ log ⁡ ( 1 − D ( G ( z ) ) ) ] \min_G \max_D V(D, G) = \mathbb{E}_{x \sim p_{\text{data}}(x)}[\log D(x)] + \mathbb{E}_{z \sim p_z(z)}[\log (1 - D(G(z)))] GminDmaxV(D,G)=Expdata(x)[logD(x)]+Ezpz(z)[log(1D(G(z)))]

这个目标函数的一个重要特性是,当G和D都足够强大并且有足够的训练时,最优的生成器G会生成与真实数据分布 p data p_{\text{data}} pdata相匹配的样本,而最优的判别器D则无法区分真实样本和生成样本。这一点可以通过观察当 P G = p data P_G = p_{\text{data}} PG=pdata时, V ( D , G ) V(D, G) V(D,G)对D的最大值是 log ⁡ 4 \log 4 log4,而当 P G ≠ p data P_G \neq p_{\text{data}} PG=pdata时,最大值小于 log ⁡ 4 \log 4 log4来证明。

另一方面,这个目标函数可以看作是生成分布和真实分布之间Jensen-Shannon散度的一个估计。

当我们求解 min ⁡ G max ⁡ D V ( D , G ) \min_G \max_D V(D, G) minGmaxDV(D,G) 这个最小-最大问题时,需要考虑生成器和判别器的最优解,即 D ∗ D^* D G ∗ G^* G。对于判别器 D D D,我们希望最大化以下目标函数:

V ( D , G ) = E x ∼ p data [ log ⁡ D ( x ) ] + E z ∼ p z ( z ) [ log ⁡ ( 1 − D ( G ( z ) ) ) ] V(D, G) = \mathbb{E}_{x \sim p_{\text{data}}}[\log D(x)] + \mathbb{E}_{z \sim p_z(z)}[\log (1 - D(G(z)))] V(D,G)=Expdata[logD(x)]+Ezpz(z)[log(1D(G(z)))]

在固定生成器 G G G 的情况下,对于每一个固定的 x x x,我们希望最大化 log ⁡ D ( x ) \log D(x) logD(x)。对于从生成器 G G G 生成的样本,我们希望最大化 log ⁡ ( 1 − D ( G ( z ) ) ) \log (1 - D(G(z))) log(1D(G(z)))。如果我们设 p data ( x ) = p x p_{\text{data}}(x) = p_x pdata(x)=px 并且 p G ( x ) = p x ′ p_G(x) = p_x' pG(x)=px,那么可以将 V ( D , G ) V(D, G) V(D,G) 写作如下形式:

V ( D ) = ∫ x p x log ⁡ D ( x ) + p x ′ log ⁡ ( 1 − D ( x ) ) d x V(D) = \int_x p_x \log D(x) + p_x' \log(1 - D(x)) dx V(D)=xpxlogD(x)+pxlog(1D(x))dx

D ( x ) D(x) D(x) 上取这个函数的导数并令其等于0,我们可以求解这个函数在什么情况下达到最大值。这样就得到了最优的判别器 D ∗ D^* D

D ∗ ( x ) = p data ( x ) p data ( x ) + p G ( x ) D^*(x) = \frac{p_{\text{data}}(x)}{p_{\text{data}}(x) + p_G(x)} D(x)=pdata(x)+pG(x)pdata(x)

这个函数的意义是,如果一个样本 x x x 更可能来自真实数据,那么 D ( x ) D^(x) D(x) 就更接近于1。反之,如果一个样本 x x x 更可能来自生成器,那么 D ( x ) D^(x) D(x) 就更接近于0。

现在我们知道了最优判别器的形式,我们可以将其带入目标函数中,然后求解生成器的最小化问题。插入 D ∗ D^* D 到目标函数中,我们有:

min ⁡ G V ( D ∗ , G ) = E x ∼ p data [ l o g p data ( x ) p data ( x ) + p G ( x ) ] + E x ∼ p G [ l o g p G ( x ) p data ( x ) + p G ( x ) ] \min_G V(D^*, G) = \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)}] GminV(D,G)=Expdata[logpdata(x)+pG(x)pdata(x)]+ExpG[logpdata(x)+pG(x)pG(x)]
如果我们设 p data ( x ) = p x p_{\text{data}}(x) = p_x pdata(x)=px 并且 p G ( x ) = p x ′ p_G(x) = p_x' pG(x)=px,那么这个函数可以简化为:

C ( G ) = ∫ x p x log ⁡ 2 p x p x + p x ′ + p x ′ log ⁡ 2 p x ′ p x + p x ′ d x C(G) = \int_x p_x \log \frac{2p_x}{p_x + p_x'} + p_x' \log \frac{2p_x'}{p_x + p_x'} dx C(G)=xpxlogpx+px2px+pxlogpx+px2pxdx

可以证明这个函数等于 2 log ⁡ 2 2 \log 2 2log2减去 2 J S ( p data ∣ ∣ p G ) 2JS(p_{\text{data}} || p_G) 2JS(pdata∣∣pG),因此,生成器的目标变为最小化 Jensen-Shannon 散度。

J S ( p ∣ ∣ q ) = 1 2 D K L ( p ∣ ∣ m ) + 1 2 D K L ( q ∣ ∣ m ) JS(p || q) = \frac{1}{2} D_{KL}(p || m) + \frac{1}{2} D_{KL}(q || m) JS(p∣∣q)=21DKL(p∣∣m)+21DKL(q∣∣m)

其中,

m ( x ) = 1 2 ( p ( x ) + q ( x ) ) m(x) = \frac{1}{2}(p(x)+q(x)) m(x)=21(p(x)+q(x))

D K L ( p ∣ ∣ q ) = − ∑ x p ( x ) log ⁡ q ( x ) p ( x ) D_{KL}(p || q) = - \sum_x p(x) \log \frac{q(x)}{p(x)} DKL(p∣∣q)=xp(x)logp(x)q(x)

Wasserstein GAN (WGAN)

使用JS散度在GAN的训练中可能会遇到梯度消失的问题。具体来说,当生成的分布 P G P_G PG与真实的数据分布 p data p_{\text{data}} pdata没有重叠时,JS散度是常数,而不依赖于生成的分布。因此,判别器D在区分真实样本和生成样本时变得过于优秀,生成器G在更新时会遇到梯度消失的问题,即无法得到有效的反馈来改进其生成的样本。

解决这个问题的一种方法是改变GAN的目标函数,用Wasserstein距离替代JS散度。Wasserstein距离在两个分布没有重叠的时候仍然有意义,因此它不会遇到JS散度的问题。以下是Wasserstein GAN目标函数的推导:

假设我们有两个概率分布 p data p_{\text{data}} pdata p G p_G pG,它们在 R n R^n Rn上定义。Wasserstein距离定义为:

W ( p data , p G ) = inf ⁡ γ ∈ Π ( p data , p G ) E ( x , y ) ∼ γ [ ∣ ∣ x − y ∣ ∣ ] W(p_{\text{data}}, p_G) = \inf_{\gamma \in \Pi(p_{\text{data}}, p_G)} \mathbb{E}_{(x,y) \sim \gamma} [||x - y||] W(pdata,pG)=γΠ(pdata,pG)infE(x,y)γ[∣∣xy∣∣]

其中, Π ( p data , p G ) \Pi(p_{\text{data}}, p_G) Π(pdata,pG)是所有以 p data p_{\text{data}} pdata p G p_G pG为边缘分布的联合分布的集合。

现在,我们设 D D D是判别器,但在WGAN中,它通常被称为判别函数或者critic。它是一个满足1-Lipschitz条件的函数,即对于所有的 x x x y y y,有 ∣ D ( x ) − D ( y ) ∣ ≤ ∣ ∣ x − y ∣ ∣ |D(x) - D(y)| \leq ||x - y|| D(x)D(y)∣∣xy∣∣。Kantorovich-Rubinstein对偶定理告诉我们,我们可以等价地写出Wasserstein距离为:

W ( p data , p G ) = sup ⁡ ∣ ∣ D ∣ ∣ L ≤ 1 E x ∼ p data [ D ( x ) ] − E x ∼ p G [ D ( x ) ] W(p_{\text{data}}, p_G) = \sup_{||D||_L \leq 1} \mathbb{E}_{x \sim p_{\text{data}}} [D(x)] - \mathbb{E}_{x \sim p_G} [D(x)] W(pdata,pG)=∣∣DL1supExpdata[D(x)]ExpG[D(x)]

在这里,上确界(sup)是在所有满足1-Lipschitz条件的函数 D D D上取的。

然后,我们可以像普通GAN一样训练生成器和判别器(critic)。我们希望最大化判别器(critic)在真实数据和生成数据上的差别,并且最小化生成器使这个差别。因此,我们得到了以下的目标函数:

min ⁡ G max ⁡ ∣ ∣ D ∣ ∣ L ≤ 1 V ( D , G ) = E x ∼ p data [ D ( x ) ] − E z ∼ p z ( z ) [ D ( G ( z ) ) ] \min_G \max_{||D||_L \leq 1} V(D, G) = \mathbb{E}_{x \sim p_{\text{data}}} [D(x)] - \mathbb{E}_{z \sim p_z(z)} [D(G(z))] Gmin∣∣DL1maxV(D,G)=Expdata[D(x)]Ezpz(z)[D(G(z))]

在这里的第二个期望中, z z z是从先验噪声分布 p z p_z pz中采样的,然后被生成器 G G G映射(或转化)成一个“假”的样本 G ( z ) G(z) G(z),然后判别器 D D D对这个“假”的样本进行评分。所以,应该用 z ∼ p z ( z ) z \sim p_z(z) zpz(z),然后 D ( G ( z ) ) D(G(z)) D(G(z))

注意,这个目标函数与原始的GAN目标函数有所不同:我们没有对判别器(critic)的输出应用sigmoid函数,我们没有取对数,而且我们需要保证判别器(critic)满足1-Lipschitz条件。

这两部分的损失函数可以分开来看。

对于判别器D,我们的目标是最大化以下的目标函数:

E x ∼ p data [ D ( x ) ] − E z ∼ p z ( z ) [ D ( G ( z ) ) ] \mathbb{E}_{x \sim p_{\text{data}}} [D(x)] - \mathbb{E}_{z \sim p_z(z)} [D(G(z))] Expdata[D(x)]Ezpz(z)[D(G(z))]
这个目标函数表示判别器D尝试最大化对来自真实数据和生成器生成的数据的预测的差值。在此目标下,优秀的判别器将会赋予真实数据高的值,而生成的数据则会得到低的值。

对于生成器G,我们的目标是最小化以下的目标函数:

− E z ∼ p z ( z ) [ D ( G ( z ) ) ] - \mathbb{E}_{z \sim p_z(z)} [D(G(z))] Ezpz(z)[D(G(z))]

这个目标函数表示生成器G尝试最小化判别器对其生成的数据的预测。换句话说,生成器希望产生越来越真实的样本,使得判别器无法区分这些生成的样本和真实的样本。

在训练时,我们会交替优化这两个目标函数。通常,我们会在一个步骤中优化判别器,然后在下一个步骤中优化生成器。这种训练方式有助于保持生成器和判别器之间的平衡,防止一个过于强大以至于完全主导另一个。

在实践中,我们通常通过在训练过程中加入一个梯度惩罚项来保证1-Lipschitz条件。这种方法被称为Wasserstein GAN with Gradient Penalty (WGAN-GP)。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值