WGAN(Wassertein GAN)

WGAN

E x ∼ P g [ log ⁡ ( 1 − D ( x ) ) ] E x ∼ P g [ − log ⁡ D ( x ) ] \begin{aligned} & \mathbb{E}_{x \sim P_g}[\log (1-D(x))] \\ & \mathbb{E}_{x \sim P_g}[-\log D(x)] \end{aligned} ExPg[log(1D(x))]ExPg[logD(x)]
原始 GAN 中判别器; 在 WGAN 两篇论文中称为 “the - log D alternative” 或 “the - log D trick”。WGAN 前作分别分析了这两种形式的原始 GAN 各自的问题所在 .

第一种原始 GAN 形式的问题

原始 GAN 中判别器要最小化如下损失函数,尽可能把真实样本分为正例,生成样本分为负例:
− E x ∼ P r [ log ⁡ D ( x ) ] − E x ∼ P g [ log ⁡ ( 1 − D ( x ) ) ] -\mathbb{E}_{x \sim P_r}[\log D(x)]-\mathbb{E}_{x \sim P_g}[\log (1-D(x))] ExPr[logD(x)]ExPg[log(1D(x))]
一句话概括:判别器越好,生成器梯度消失越严重。

在生成器 G 固定参数时最优的判别器 D 应该是什么,对于一个具体样本 x x x 它对公式 1 损失函数的贡献是
− P r ( x ) log ⁡ D ( x ) − P g ( x ) log ⁡ [ 1 − D ( x ) ] -P_r(x) \log D(x)-P_g(x) \log [1-D(x)] Pr(x)logD(x)Pg(x)log[1D(x)]

− P r ( x ) D ( x ) + P g ( x ) 1 − D ( x ) = 0 -\frac{P_r(x)}{D(x)}+\frac{P_g(x)}{1-D(x)}=0 D(x)Pr(x)+1D(x)Pg(x)=0

D ∗ ( x ) = P r ( x ) P r ( x ) + P g ( x ) D^*(x)=\frac{P_r(x)}{P_r(x)+P_g(x)} D(x)=Pr(x)+Pg(x)Pr(x)

如果 P r ( x ) = 0 P_r(x)=0 Pr(x)=0 P g ( x ) ≠ 0 P_g(x)\neq0 Pg(x)=0 最优判别器就应该非常自信地给出概率 0;如果 P r ( x ) = P g ( x ) P_r(x)=P_g(x) Pr(x)=Pg(x)

说明该样本是真是假的可能性刚好一半一半,此时最优判别器也应该给出概率 0.5。

GAN 训练有一个 trick,就是别把判别器训练得太好,否则在实验中生成器会完全学不动(loss 降不下去),为了探究背后的原因,我们就可以看看在极端情况 —— 判别器最优时,生成器的损失函数变成什么。给公式 2 加上一个不依赖于生成器的项,使之变成

D ∗ ( x ) D^*(x) D(x) 带入 公式1 得到
E x ∼ P r log ⁡ P r ( x ) 1 2 [ P r ( x ) + P g ( x ) ] + E x ∼ P g log ⁡ P g ( x ) 1 2 [ P r ( x ) + P g ( x ) ] − 2 log ⁡ 2 \mathbb{E}_{x \sim P_r} \log \frac{P_r(x)}{\frac{1}{2}\left[P_r(x)+P_g(x)\right]}+\mathbb{E}_{x \sim P_g} \log \frac{P_g(x)}{\frac{1}{2}\left[P_r(x)+P_g(x)\right]}-2 \log 2 ExPrlog21[Pr(x)+Pg(x)]Pr(x)+ExPglog21[Pr(x)+Pg(x)]Pg(x)2log2

K L ( P 1 ∥ P 2 ) = E x ∼ P 1 log ⁡ P 1 P 2 J S ( P 1 ∥ P 2 ) = 1 2 K L ( P 1 ∥ P 1 + P 2 2 ) + 1 2 K L ( P 2 ∥ P 1 + P 2 2 ) \begin{aligned} & K L\left(P_1 \| P_2\right)=\mathbb{E}_{x \sim P_1} \log \frac{P_1}{P_2} \\ & J S\left(P_1 \| P_2\right)=\frac{1}{2} K L\left(P_1 \| \frac{P_1+P_2}{2}\right)+\frac{1}{2} K L\left(P_2 \| \frac{P_1+P_2}{2}\right) \end{aligned} KL(P1P2)=ExP1logP2P1JS(P1P2)=21

上一篇:前端uni-app篇之在uni-app中实现图片瀑布流布局并进行性能优化


下一篇:C++17 filesystem 库 学习笔记