【深度学习】17. 深度生成模型:DCGAN与Wasserstein GAN公式深度推导

news2025/7/27 10:12:00

深度生成模型:DCGAN与Wasserstein GAN公式深度推导

深度卷积生成对抗网络 DCGAN

在原始 GAN 框架中,生成器和判别器通常使用全连接层构建,这限制了模型处理图像的能力。为此,Radford 等人在 2016 年提出了 DCGAN(Deep Convolutional GANs),将 CNN 架构引入 GAN 系统,在图像生成任务中取得巨大成功。

DCGAN 的网络结构

在这里插入图片描述

DCGAN 仍然包括两个模块:

  • 生成器(Generator)

    • 输入为一个随机向量 z z z,通常为 z ∼ N ( 0 , 1 ) z \sim \mathcal{N}(0, 1) zN(0,1)
    • 通过一系列反卷积(Fractional Strided Convolutions / Transposed Convolutions)层将低维噪声向量逐步上采样为图像;
    • 输出图像维度如 64 × 64 × 3 64 \times 64 \times 3 64×64×3
  • 判别器(Discriminator)

    • 接收图像(真实或伪造)作为输入;
    • 通过一系列普通卷积(strided convolutions)和 LeakyReLU 激活函数进行下采样;
    • 最后输出一个标量,表示输入图像为“真实图像”的概率。

图中展示了典型 DCGAN 结构:

  • 左侧:生成器网络,逐步上采样生成图像;
  • 右侧:判别器网络,逐步提取图像特征进行判断;
  • 右上角还展示了反卷积(Transposed Convolution)过程,直观说明如何将小尺寸特征图恢复成大尺寸图像。

DCGAN 的设计原则(五条黄金法则)

  1. 去除所有池化层(Pooling)

    • strided convolutions (discriminator) and fractional-strided convolutions (generator)

    • 在生成器中使用 Fractional Strided Convolution(即反卷积)进行上采样;

    • 在判别器中使用 Strided Convolution 进行下采样。

  2. 在生成器和判别器中都使用 Batch Normalization

    • 有助于稳定训练;
    • 防止梯度消失;
    • 加速收敛。
  3. 移除所有全连接隐藏层(fully-connected hidden layers)

    • 简化网络结构;
    • 提升可扩展性与泛化能力。
  4. 激活函数设计

    • 在生成器中,除了最后一层使用 Tanh,其余各层都使用 ReLU 激活;
    • 在判别器中,所有层都使用 LeakyReLU 激活,避免死神经。
  5. 输出范围规范化

    • 生成器输出图像通过 Tanh 映射到 [ − 1 , 1 ] [-1, 1] [1,1]
    • 因此训练图像也需要归一化处理至 [ − 1 , 1 ] [-1, 1] [1,1]

总结

DCGAN 通过引入卷积结构,使得 GAN 在图像领域具备更强建模能力:

  • 支持大尺寸图像生成;
  • 图像更加平滑、连贯、有结构;
  • 训练更稳定,调参更容易;
  • 为后续诸如 StyleGAN、Pix2Pix 等强大 GAN 模型奠定了基础。

来源于 Radford 等人发表于 ICLR 2016 的经典论文:
“Unsupervised Representation Learning with Deep Convolutional GANs”

GAN 的核心训练难题:梯度消失(Gradient Vanishing)

尽管 DCGAN 等架构提升了稳定性,但生成对抗网络在训练早期仍然面临一个经典难题:梯度消失问题(vanishing gradient)

原始目标函数

判别器的训练目标为:

J ( D ) = − E x ∼ p r [ log ⁡ D ( x ) ] − E x ∼ p g [ log ⁡ ( 1 − D ( x ) ) ] J^{(D)} = -\mathbb{E}_{x \sim p_r}[\log D(x)] - \mathbb{E}_{x \sim p_g}[\log(1 - D(x))] J(D)=Expr[logD(x)]Expg[log(1D(x))]

生成器的训练目标为:

J ( G ) = E x ∼ p g [ log ⁡ ( 1 − D ( x ) ) ] J^{(G)} = \mathbb{E}_{x \sim p_g}[\log(1 - D(x))] J(G)=Expg[log(1D(x))]

生成器尝试最大化 D ( G ( z ) ) D(G(z)) D(G(z)),使得判别器误判其为真实图像。

为什么会发生梯度消失?

在训练初期,生成器 G G G生成的图像往往非常粗糙,不具备真实数据的特征。此时:

  • 判别器 D D D很容易分辨出 G ( z ) G(z) G(z)是伪造的;
  • 因此 D ( G ( z ) ) ≈ 0 D(G(z)) \approx 0 D(G(z))0
  • 那么 log ⁡ ( 1 − D ( G ( z ) ) ) ≈ 0 \log(1 - D(G(z))) \approx 0 log(1D(G(z)))0,梯度也几乎为零;
  • 生成器难以获得有效的梯度信号进行优化。

本质悖论

In GAN, better discriminator leads to worse vanishing gradient in its generator!

  • 判别器越强,训练越快,越容易压垮生成器;
  • 生成器越弱,收到的训练信号越微弱;
  • 双方很难在初期同步进步,导致训练不稳定。

1. 原始 GAN 判别器的最优目标函数推导

我们先从 GAN 中判别器 D D D 的原始损失函数出发:

J ( D ) = − E x ∼ p r [ log ⁡ D ( x ) ] − E x ∼ p g [ log ⁡ ( 1 − D ( x ) ) ] J^{(D)} = -\mathbb{E}_{x \sim p_r}[\log D(x)] - \mathbb{E}_{x \sim p_g}[\log(1 - D(x))] J(D)=Expr[logD(x)]Expg[log(1D(x))]

这是判别器试图最大化其“判断正确”的期望值:

  • 第一项:希望对真实样本 x ∼ p r x \sim p_r xpr 输出 D ( x ) D(x) D(x) 尽可能大(接近 1);
  • 第二项:希望对生成样本 x ∼ p g x \sim p_g xpg 输出 D ( x ) D(x) D(x) 尽可能小(接近 0)。

我们将 J ( D ) J^{(D)} J(D) 看作对 D ( x ) D(x) D(x) 的函数,在每个点 x x x 上独立求偏导并令其为 0,即可求出最优判别器。

2. 最优判别器 D ∗ ( x ) D^*(x) D(x) 的解析表达式

J ( D ) J^{(D)} J(D) 取极大值时,对每个 x x x,最优解满足:

∂ J ( D ) ∂ D ( x ) = − p r ( x ) D ( x ) + p g ( x ) 1 − D ( x ) = 0 \frac{\partial J^{(D)}}{\partial D(x)} = -\frac{p_r(x)}{D(x)} + \frac{p_g(x)}{1 - D(x)} = 0 D(x)J(D)=D(x)pr(x)+1D(x)pg(x)=0

d d x log ⁡ x = 1 x \frac{d}{dx} \log x = \frac{1}{x} dxdlogx=x1

解该方程可得:
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 ) ≫ p g ( x ) p_r(x) \gg p_g(x) pr(x)pg(x),说明该点 x x x 更可能来自真实数据, D ∗ ( x ) → 1 D^*(x) \to 1 D(x)1
  • p g ( x ) ≫ p r ( x ) p_g(x) \gg p_r(x) pg(x)pr(x),说明该点更可能是伪造的, D ∗ ( x ) → 0 D^*(x) \to 0 D(x)0
  • 若两者相等, D ∗ ( x ) = 0.5 D^*(x) = 0.5 D(x)=0.5,即判别器无法判断。

3. 生成器目标函数下的 JS 散度

在 GAN 中,生成器的原始损失为:

J ( G ) = E x ∼ p g [ log ⁡ ( 1 − D ( x ) ) ] J^{(G)} = \mathbb{E}_{x \sim p_g}[\log(1 - D(x))] J(G)=Expg[log(1D(x))]

若将最优判别器 D ∗ ( x ) D^*(x) D(x) 代入,可得生成器最小化的目标函数为:

J ( G ) = E x ∼ p g [ log ⁡ ( 1 − p r ( x ) p r ( x ) + p g ( x ) ) ] = E x ∼ p g [ log ⁡ ( p g ( x ) p r ( x ) + p g ( x ) ) ] J^{(G)} = \mathbb{E}_{x \sim p_g} \left[\log\left(1 - \frac{p_r(x)}{p_r(x) + p_g(x)}\right)\right] = \mathbb{E}_{x \sim p_g} \left[\log\left(\frac{p_g(x)}{p_r(x) + p_g(x)}\right)\right] J(G)=Expg[log(1pr(x)+pg(x)pr(x))]=Expg[log(pr(x)+pg(x)pg(x))]

该函数与下面这个表达式一同构成 GAN 最优判别器目标:

J ( D ∗ ) = 2   J S ( p r ∥ p g ) − 2 log ⁡ 2 J^{(D^*)} = 2\,JS(p_r \| p_g) - 2\log 2 J(D)=2JS(prpg)2log2

即,在 D = D ∗ D=D^* D=D 时,GAN 的优化等价于最小化真实分布 p r p_r pr 与生成分布 p g p_g pg 之间的 Jensen-Shannon 散度(JS divergence)

4. Jensen-Shannon 散度的定义

JS 散度是衡量两个概率分布相似度的一种对称度量方式,定义为:

J S ( p ∥ q ) = 1 2 K L ( p ∥ m ) + 1 2 K L ( q ∥ m ) JS(p \| q) = \frac{1}{2}KL(p \| m) + \frac{1}{2}KL(q \| m) JS(pq)=21KL(pm)+21KL(qm)

其中, m ( x ) m(x) m(x) p p p q q q 的平均分布:

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

而 KL 散度(Kullback-Leibler Divergence)为:

K L ( p ∥ q ) = − ∑ x p ( x ) log ⁡ ( q ( x ) p ( x ) ) KL(p \| q) = -\sum_x p(x) \log\left(\frac{q(x)}{p(x)}\right) KL(pq)=xp(x)log(p(x)q(x))

特性:

  • JS 散度值域在 [ 0 , log ⁡ 2 ] [0, \log 2] [0,log2]
  • JS 散度为 0 当且仅当 p = q p = q p=q
  • p p p q q q 的支持集无交集,则 J S ( p ∥ q ) = log ⁡ 2 JS(p \| q) = \log 2 JS(pq)=log2
  • JS 散度的梯度在边界处为 0,这会导致训练困难(梯度消失)。

推导说明:为什么有

V ( D ∗ , G ) = K L ( p r ∥ m ) + K L ( p g ∥ m ) − 2 log ⁡ 2 V(D^*, G) = KL(p_r \| m) + KL(p_g \| m) - 2 \log 2 V(D,G)=KL(prm)+KL(pgm)2log2

背景:我们从最优判别器的对抗损失出发:
V ( D ∗ , G ) = E x ∼ p r [ log ⁡ ( p r ( x ) p r ( x ) + p g ( x ) ) ] + E x ∼ p g [ log ⁡ ( p g ( x ) p r ( x ) + p g ( x ) ) ] V(D^*, G) = \mathbb{E}_{x \sim p_r} \left[ \log \left( \frac{p_r(x)}{p_r(x) + p_g(x)} \right) \right] + \mathbb{E}_{x \sim p_g} \left[ \log \left( \frac{p_g(x)}{p_r(x) + p_g(x)} \right) \right] V(D,G)=Expr[log(pr(x)+pg(x)pr(x))]+Expg[log(pr(x)+pg(x)pg(x))]

关键技巧:定义中间分布:
m ( x ) = 1 2 ( p r ( x ) + p g ( x ) ) ⇒ p r ( x ) + p g ( x ) = 2 m ( x ) m(x) = \frac{1}{2}(p_r(x) + p_g(x)) \quad \Rightarrow \quad p_r(x) + p_g(x) = 2m(x) m(x)=21(pr(x)+pg(x))pr(x)+pg(x)=2m(x)

换分母
p r ( x ) p r ( x ) + p g ( x ) = p r ( x ) 2 m ( x ) , p g ( x ) p r ( x ) + p g ( x ) = p g ( x ) 2 m ( x ) \frac{p_r(x)}{p_r(x) + p_g(x)} = \frac{p_r(x)}{2m(x)}, \quad \frac{p_g(x)}{p_r(x) + p_g(x)} = \frac{p_g(x)}{2m(x)} pr(x)+pg(x)pr(x)=2m(x)pr(x),pr(x)+pg(x)pg(x)=2m(x)pg(x)

带入期望后
V ( D ∗ , G ) = E x ∼ p r [ log ⁡ ( p r ( x ) 2 m ( x ) ) ] + E x ∼ p g [ log ⁡ ( p g ( x ) 2 m ( x ) ) ] V(D^*, G) = \mathbb{E}_{x \sim p_r} \left[ \log \left( \frac{p_r(x)}{2m(x)} \right) \right] + \mathbb{E}_{x \sim p_g} \left[ \log \left( \frac{p_g(x)}{2m(x)} \right) \right] V(D,G)=Expr[log(2m(x)pr(x))]+Expg[log(2m(x)pg(x))]

拆开 log ⁡ \log log 用恒等式
log ⁡ ( p ( x ) 2 m ( x ) ) = log ⁡ ( p ( x ) m ( x ) ) − log ⁡ 2 \log \left( \frac{p(x)}{2m(x)} \right) = \log \left( \frac{p(x)}{m(x)} \right) - \log 2 log(2m(x)p(x))=log(m(x)p(x))log2

log ⁡ ( a b ) = log ⁡ a − log ⁡ b \log \left( \frac{a}{b} \right) = \log a - \log b log(ba)=logalogb

所以:
V ( D ∗ , G ) = K L ( p r ∥ m ) + K L ( p g ∥ m ) − 2 log ⁡ 2 V(D^*, G) = KL(p_r \| m) + KL(p_g \| m) - 2 \log 2 V(D,G)=KL(prm)+KL(pgm)2log2

小结:对抗损失在 D ∗ D^* D 时,等价于:
V ( D ∗ , G ) = 2 ⋅ J S ( p r ∥ p g ) − 2 log ⁡ 2 V(D^*, G) = 2 \cdot JS(p_r \| p_g) - 2 \log 2 V(D,G)=2JS(prpg)2log2

也就是说:GAN 实际上在最小化 JS 散度

5. 支持集不重叠时的问题

如图所示:

在这里插入图片描述

  • 图 A:两个分布完全不重叠, J S = log ⁡ 2 JS = \log 2 JS=log2
  • 图 B:两者有轻微重叠,JS 仍较大。

在这种情况下, J ( G ) J^{(G)} J(G) 的梯度为 0:

∇ θ g J ( G ) = 0 \nabla_{\theta_g} J^{(G)} = 0 θgJ(G)=0

这意味着:生成器无法收到任何学习信号!

这是原始 GAN 的根本性问题所在。

图 A:无重叠的支持集
  • 红色区域代表真实数据的概率密度 p r ( x ) p_r(x) pr(x)

  • 黄色区域代表生成器生成的数据密度 p g ( x ) p_g(x) pg(x)

  • 二者没有任何交集(支持集 disjoint):

    supp ( p r ) ∩ supp ( p g ) = ∅ \text{supp}(p_r) \cap \text{supp}(p_g) = \varnothing supp(pr)supp(pg)=

  • 此时最优判别器为:

    D ∗ ( x ) = { 1 x ∈ supp ( p r ) 0 x ∈ supp ( p g ) D^*(x) = \begin{cases} 1 & x \in \text{supp}(p_r) \\ 0 & x \in \text{supp}(p_g) \end{cases} D(x)={10xsupp(pr)xsupp(pg)

    1. 对于 K L ( p ∣ m ) KL(p | m) KL(pm)

    仅在 p ( x ) > 0 p(x) > 0 p(x)>0 的地方有贡献,此时 m ( x ) = 1 2 p ( x ) m(x) = \frac{1}{2}p(x) m(x)=21p(x),所以:

    K L ( p ∥ m ) = ∑ x ∈ supp ( p ) p ( x ) log ⁡ ( p ( x ) 1 2 p ( x ) ) = ∑ x ∈ supp ( p ) p ( x ) log ⁡ 2 = log ⁡ 2 KL(p \| m) = \sum_{x \in \text{supp}(p)} p(x) \log \left( \frac{p(x)}{\frac{1}{2}p(x)} \right) = \sum_{x \in \text{supp}(p)} p(x) \log 2 = \log 2 KL(pm)=xsupp(p)p(x)log(21p(x)p(x))=xsupp(p)p(x)log2=log2

    因为 ∑ x ∈ supp ( p ) p ( x ) = 1 \sum_{x \in \text{supp}(p)} p(x) = 1 xsupp(p)p(x)=1

  • 导致 V ( D ∗ , G ) = 2 ⋅ log ⁡ 1 2 = − 2 log ⁡ 2 V(D^*, G) = 2 \cdot \log \frac{1}{2} = -2 \log 2 V(D,G)=2log21=2log2,即:
    J S ( p r ∥ p g ) = log ⁡ 2 JS(p_r \| p_g) = \log 2 JS(prpg)=log2

    因为 JS 散度已达最大值,其导数(梯度)为 0,生成器 无法获得有效梯度,这就是梯度消失问题的本质

图 B:轻微重叠的支持集

  • 真实分布和生成分布有部分重叠:

    supp ( p r ) ∩ supp ( p g ) ≠ ∅ \text{supp}(p_r) \cap \text{supp}(p_g) \neq \varnothing supp(pr)supp(pg)=

  • 在重叠区域中, D ∗ ( x ) D^*(x) D(x) 不再是 0 或 1,而是一个概率:

    D ∗ ( x ) = p r ( x ) p r ( x ) + p g ( x ) ∈ ( 0 , 1 ) D^*(x) = \frac{p_r(x)}{p_r(x) + p_g(x)} \in (0,1) D(x)=pr(x)+pg(x)pr(x)(0,1)

  • 因此:

    J S ( p r ∥ p g ) < log ⁡ 2 JS(p_r \| p_g) < \log 2 JS(prpg)<log2

    梯度 ∇ θ g J ( G ) \nabla_{\theta_g} J^{(G)} θgJ(G) 不再为零,生成器可以继续更新

公式结合解释

从前面的推导我们知道:

V ( D ∗ , G ) = 2 ⋅ J S ( p r ∥ p g ) − 2 log ⁡ 2 V(D^*, G) = 2 \cdot JS(p_r \| p_g) - 2 \log 2 V(D,G)=2JS(prpg)2log2

  • 图 A: J S ( p r ∥ p g ) = log ⁡ 2 ⇒ V = − 2 log ⁡ 2 JS(p_r \| p_g) = \log 2 \Rightarrow V = -2 \log 2 JS(prpg)=log2V=2log2,梯度消失;
  • 图 B: J S ( p r ∥ p g ) < log ⁡ 2 ⇒ V > − 2 log ⁡ 2 JS(p_r \| p_g) < \log 2 \Rightarrow V > -2 \log 2 JS(prpg)<log2V>2log2,仍有学习信号。

Wasserstein GAN :从距离度量到训练对抗目标的革新

什么是分布距离?

为度量两个概率分布 P P P Q Q Q 的差异,常见方法包括:

  • KL 散度(Kullback–Leibler divergence):
    K L ( P ∥ Q ) = ∑ x P ( x ) log ⁡ ( P ( x ) Q ( x ) ) KL(P \| Q) = \sum_x P(x) \log \left( \frac{P(x)}{Q(x)} \right) KL(PQ)=xP(x)log(Q(x)P(x))

  • JS 散度(Jensen–Shannon divergence):
    J S ( P ∥ Q ) = 1 2 K L ( P ∥ P + Q 2 ) + 1 2 K L ( Q ∥ P + Q 2 ) JS(P \| Q) = \frac{1}{2} KL\left(P \| \frac{P+Q}{2} \right) + \frac{1}{2} KL\left(Q \| \frac{P+Q}{2} \right) JS(PQ)=21KL(P2P+Q)+21KL(Q2P+Q)

  • Wasserstein 距离(Earth-Mover Distance)
    W ( P ∥ Q ) = inf ⁡ γ ∈ Π ( P , Q ) E ( x , y ) ∼ γ [ ∥ x − y ∥ ] W(P \| Q) = \inf_{\gamma \in \Pi(P, Q)} \mathbb{E}_{(x, y) \sim \gamma}[\|x - y\|] W(PQ)=γΠ(P,Q)infE(x,y)γ[xy]

其中 γ \gamma γ 是所有边缘分布分别为 P P P Q Q Q 的联合分布集合 Π ( P , Q ) \Pi(P, Q) Π(P,Q)。可理解为:将 P P P 的质量“搬运”到 Q Q Q 所需的最小代价。

KL / JS / W 三种距离的对比示意

我们来考虑一个简单案例: P 1 P_1 P1 P 2 P_2 P2 是两个具有间隔 θ \theta θ 的分布。

距离类型数学形式特性
K L ( P 1 ∣ P 2 ) KL(P_1 | P_2) KL(P1P2) ∞ \infty (若 θ ≠ 0 \theta \ne 0 θ=0);0(若 θ = 0 \theta = 0 θ=0不连续;无梯度
J S ( P 1 ∣ P 2 ) JS(P_1 | P_2) JS(P1P2) log ⁡ 2 \log 2 log2(若 θ ≠ 0 \theta \ne 0 θ=0);0(若 θ = 0 \theta = 0 θ=0不连续;梯度为零
W ( P 1 , P 2 ) W(P_1, P_2) W(P1,P2)$\theta

结论:Wasserstein 距离对分布支持集是否重叠不敏感,始终提供有用的梯度。

Wasserstein GAN 正式引入

WGAN 引入 Earth-Mover 距离作为衡量真实分布 P r P_r Pr 和生成分布 P g P_g Pg 的距离:

W ( P r , P g ) = inf ⁡ γ ∈ Π ( P r , P g ) E ( x , y ) ∼ γ [ ∥ x − y ∥ ] W(P_r, P_g) = \inf_{\gamma \in \Pi(P_r, P_g)} \mathbb{E}_{(x, y) \sim \gamma}[\|x - y\|] W(Pr,Pg)=γΠ(Pr,Pg)infE(x,y)γ[xy]

但由于直接优化该形式极其困难,WGAN 利用其对偶形式重写:

W ( P r , P g ) = sup ⁡ ∥ f ∥ L ≤ 1 E x ∼ P r [ f ( x ) ] − E x ∼ P g [ f ( x ) ] W(P_r, P_g) = \sup_{\|f\|_L \le 1} \mathbb{E}_{x \sim P_r}[f(x)] - \mathbb{E}_{x \sim P_g}[f(x)] W(Pr,Pg)=fL1supExPr[f(x)]ExPg[f(x)]

这里:

  • f f f 是一类满足 Lipschitz 条件的函数;

  • ∥ f ∥ L ≤ 1 \|f\|_L \le 1 fL1 表示 f f f1-Lipschitz 连续函数

    ∣ ∣ f ( x ) − f ( y ) ∣ ∣ ≤ ∥ x − y ∥ ||f(x) - f(y)|| \le \|x - y\| ∣∣f(x)f(y)∣∣xy

  • “supremum” 表示在所有满足条件的函数中取最大值。

对于更一般的 K-Lipschitz 函数( ∣ ∣ f ∣ ∣ L ≤ K ||f||_L \le K ∣∣fLK),有:

W ( P r , P g ) = 1 K sup ⁡ ∥ f ∥ L ≤ K E x ∼ P r [ f ( x ) ] − E x ∼ P g [ f ( x ) ] W(P_r, P_g) = \frac{1}{K} \sup_{\|f\|_L \le K} \mathbb{E}_{x \sim P_r}[f(x)] - \mathbb{E}_{x \sim P_g}[f(x)] W(Pr,Pg)=K1fLKsupExPr[f(x)]ExPg[f(x)]

什么是 K-Lipschitz 函数?

函数 f f f 是 K-Lipschitz 的含义为:

∥ f ( x ) − f ( y ) ∥ ≤ K ⋅ ∥ x − y ∥ 对所有  x , y  成立 \|f(x) - f(y)\| \le K \cdot \|x - y\| \quad \text{对所有 } x, y \text{ 成立} f(x)f(y)Kxy对所有 x,y 成立

  • K = 1 K = 1 K=1,即为标准的 1-Lipschitz 函数;
  • Lipschitz 条件确保 f f f 的梯度幅度不会过大,提供优化稳定性。

这个约束是 WGAN 成立的理论基础,也是后续训练中判别器(critic)要满足的重要条件。

用神经网络近似 Lipschitz 函数

为近似 Lipschitz 函数族 { f } \{f\} {f},WGAN 引入判别器(或称 critic) f w f_w fw,令其参数 w w w 落在某个约束空间中(如 w ∈ [ − c , c ] w \in [-c, c] w[c,c]),以保证 f w f_w fw 是 Lipschitz。

最终形式为:

W ( P r , P g ) ≈ max ⁡ w ∈ W E x ∼ P r [ f w ( x ) ] − E x ∼ P g [ f w ( x ) ] W(P_r, P_g) \approx \max_{w \in \mathcal{W}} \mathbb{E}_{x \sim P_r}[f_w(x)] - \mathbb{E}_{x \sim P_g}[f_w(x)] W(Pr,Pg)wWmaxExPr[fw(x)]ExPg[fw(x)]

其中 W \mathcal{W} W 是所有 K K K-Lipschitz 参数的集合。

WGAN 做法:使用 weight clipping 强制 f w f_w fw 满足 Lipschitz 条件。

例如: W = [ − c , c ] l W =[−c, c]^l W=[c,c]l为了满足这一要求,WGAN通过应用权值裁剪(weight clipping)来强制D在紧化空间[-c, c]中的权值

WGAN 的训练目标

判别器(Critic)优化目标:

L D = E x ∼ P r [ f w ( x ) ] − E x ∼ P g [ f w ( x ) ] \mathcal{L}_D = \mathbb{E}_{x \sim P_r}[f_w(x)] - \mathbb{E}_{x \sim P_g}[f_w(x)] LD=ExPr[fw(x)]ExPg[fw(x)]

即最大化 Wasserstein 距离。

生成器优化目标:

L G = − E x ∼ P g [ f w ( x ) ] = − E z ∼ p ( z ) [ f w ( G ( z ) ) ] \mathcal{L}_G = -\mathbb{E}_{x \sim P_g}[f_w(x)] = -\mathbb{E}_{z \sim p(z)}[f_w(G(z))] LG=ExPg[fw(x)]=Ezp(z)[fw(G(z))]

即最小化 Wasserstein 距离。

WGAN 相比传统 GAN 的优势

指标原始 GANWGAN
判别器输出概率(0~1)实值(任意实数)
判别器损失JS 散度Wasserstein 距离
训练稳定性极差,易崩稳定,可控
梯度消失常见极少

WGAN 本质上是将原始 GAN 中的 JS 散度替换为 Wasserstein 距离,从而有效解决了梯度消失与训练不稳定的问题。

WGAN 训练算法流程

超参数设定
  • α \alpha α:学习率(建议 5 × 10 − 5 5 \times 10^{-5} 5×105
  • c c c:权重裁剪边界(如 ± 0.01 \pm 0.01 ±0.01
  • m m m:每个批次的数据量(如 64)
  • n critic n_{\text{critic}} ncritic:每次更新生成器前,critic 网络的更新次数(通常为 5)
整体流程
  1. 初始化参数:critic 的参数 w 0 w_0 w0,生成器参数 θ 0 \theta_0 θ0

  2. 迭代训练:直到 θ \theta θ 收敛:

    • Step 1:更新 critic(判别器) n critic n_{\text{critic}} ncritic

      1. 从真实数据分布 P r P_r Pr 中采样一个 minibatch { x ( i ) } \{x^{(i)}\} {x(i)}

      2. 从潜在分布 p ( z ) p(z) p(z) 中采样一组噪声 { z ( i ) } \{z^{(i)}\} {z(i)}

      3. 计算损失的梯度:
        g w ← ∇ w [ 1 m ∑ i = 1 m f w ( x ( i ) ) − f w ( g θ ( z ( i ) ) ) ] g_w \leftarrow \nabla_w \left[ \frac{1}{m} \sum_{i=1}^m f_w(x^{(i)}) - f_w(g_\theta(z^{(i)})) \right] gww[m1i=1mfw(x(i))fw(gθ(z(i)))]

      4. 用 RMSProp 或 SGD 执行梯度上升:
        w ← w + α ⋅ RMSProp ( w , g w ) w \leftarrow w + \alpha \cdot \text{RMSProp}(w, g_w) ww+αRMSProp(w,gw)

      5. 执行 weight clipping
        w ← clip ( w , − c , c ) w \leftarrow \text{clip}(w, -c, c) wclip(w,c,c)
        这一步保证 f w f_w fw 是 K-Lipschitz 函数(保持对偶形式成立)。

    • Step 2:更新生成器 G θ G_\theta Gθ 一次

      1. 从噪声分布 p ( z ) p(z) p(z) 中采样 z ( i ) z^{(i)} z(i)

      2. 计算生成器梯度(负 critic 输出):
        g θ ← − ∇ θ [ 1 m ∑ i = 1 m f w ( g θ ( z ( i ) ) ) ] g_\theta \leftarrow -\nabla_\theta \left[ \frac{1}{m} \sum_{i=1}^m f_w(g_\theta(z^{(i)})) \right] gθθ[m1i=1mfw(gθ(z(i)))]

      3. 执行梯度下降:
        θ ← θ − α ⋅ RMSProp ( θ , g θ ) \theta \leftarrow \theta - \alpha \cdot \text{RMSProp}(\theta, g_\theta) θθαRMSProp(θ,gθ)

有意义的损失指标(Meaningful Loss Metric)

GAN 的一个关键问题是:损失值是否能有效反映生成样本的质量?

Vanilla GAN 的问题

如下图所示,Vanilla GAN 使用 JS 散度(JSD estimate)作为训练目标,但其在训练过程中的表现不稳定且无法作为样本质量的衡量指标

在这里插入图片描述

  • 左图:MLP 生成器在训练过程中,生成样本逐渐变好,但 JSD 并没有显著下降。
  • 右图:DCGAN 生成器样本质量明显提升,但 JSD 曲线波动剧烈,甚至略有上升。

结论:JSD 损失和样本质量之间没有明显的正相关性,因此 JSD 并不是一个有意义的训练指标。

WGAN 的优势

相比之下,WGAN 使用 Wasserstein 距离作为训练目标,其数值变化与生成样本的质量变化高度一致:

在这里插入图片描述

  • 左图:MLP 生成器从模糊块逐渐生成清晰卧室图像,Wasserstein 距离稳定下降;
  • 右图:DCGAN 同样表现出 Wasserstein 距离逐步收敛,与图像质量一致。

结论:WGAN 的损失函数具有实际意义,能够真实反映训练进度与样本质量

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2397281.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

设计模式——命令设计模式(行为型)

摘要 本文介绍了命令设计模式&#xff0c;这是一种行为型设计模式&#xff0c;用于将请求封装为对象&#xff0c;实现请求的解耦和灵活控制。它包含命令接口、具体命令、接收者、调用者和客户端等角色&#xff0c;优点是解耦请求发送者与接收者&#xff0c;支持命令的排队、记…

03 APP 自动化-定位元素工具元素定位

文章目录 一、Appium常用元素定位工具1、U IAutomator View Android SDK 自带的定位工具2、Appium Desktop Inspector3、Weditor安装&#xff1a;Weditor工具的使用 4、uiautodev通过定位工具获取app页面元素有哪些属性 二、app 元素定位方法 一、Appium常用元素定位工具 1、U…

PABD 2025:大数据与智慧城市管理的融合之道

会议简介 2025年公共管理与大数据国际会议&#xff08;ICPMBD 2025&#xff09;确实在海口举办。本次会议将围绕公共管理与大数据的深度融合、数据分析在公共管理中的应用、大数据驱动的政策制定与优化等议题展开深入研讨。参会者将有机会聆听前沿学术报告&#xff0c;分享研究…

Golang持续集成与自动化测试和部署

概述 Golang是一门性能优异的静态类型语言&#xff0c;但因其奇快的编译速度&#xff0c;结合DevOps, 使得它也非常适合快速开发和迭代。 本文讲述如何使用Golang, 进行持续集成与自动化测试和部署。主要使用了以下相关技术&#xff1a; dep&#xff1a; 进行包的依赖管理gin…

mysql离线安装教程

1.下载地址: https://downloads.mysql.com/archives/community/ 2.上传安装包到系统目录,并解压 tar -xvf mysql-8.0.34-1.el7.x86_64.rpm-bundle.tar3.检查系统中是否存在mariadb的rpm包 rpm -qa|grep mariadb存在则删除 rpm -e xxx4.解压完后执行如下命令安装 sudo rpm -iv…

基于FPGA的VGA显示文字和动态数字基础例程,进而动态显示数据,类似温湿度等

基于FPGA的VGA显示文字和数字 前言一、VGA显示参数二、字模生成三、代码分析1.vga_char顶层2.vga_ctrl驱动文件3.vga_pic数据准备文件 总结 前言 结合正点原子以及野火的基础例程&#xff0c;理解了VGA本身基本协议&#xff0c;VGA本身显示像素为640*480&#xff0c;因此注意生…

力扣刷题Day 68:搜索插入位置(35)

1.题目描述 2.思路 方法1&#xff1a;回溯的二分查找。 方法2&#xff1a;看到了一个佬很简洁的写法&#xff0c;代码贴在下面了。 3.代码&#xff08;Python3&#xff09; 方法1&#xff1a; class Solution:def searchInsert(self, nums: List[int], target: int) ->…

使用Python绘制节日祝福——以端午节和儿童节为例

端午节 端午节总算是回家了&#xff0c;感觉时间过得真快&#xff0c;马上就毕业了&#xff0c;用Python弄了一个端午节元素的界面&#xff0c;虽然有点不像&#xff0c;祝大家端午安康。端午节粽子&#xff08;python&#xff09;_python画粽子-CSDN博客https://blog.csdn.net…

C#项目07-二维数组的随机创建

实现需求 创建二维数组&#xff0c;数组的列和宽为随机&#xff0c;数组内的数也是随机 知识点 1、Random类 Public Random rd new Random(); int Num_Int rd.Next(1, 100);2、数组上下限。 //定义数组 int[] G_Array new int[1,2,3,4];//一维数组 int[,] G_Array_T …

光伏功率预测 | LSTM多变量单步光伏功率预测(Matlab完整源码和数据)

光伏功率预测 | MATLAB实现基于LSTM长短期记忆神经网络的光伏功率预测 目录 光伏功率预测 | MATLAB实现基于LSTM长短期记忆神经网络的光伏功率预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 光伏功率预测 | LSTM多变量单步光伏功率预测&#xff08;Matlab完整源码和…

一步一步配置 Ubuntu Server 的 NodeJS 服务器详细实录——3. 服务器软件更新,以及常用软件安装

前言 前面&#xff0c;我们已经 安装好了 Ubuntu 服务器系统&#xff0c;并且 配置好了 ssh 免密登录服务器 &#xff0c;现在&#xff0c;我们要来进一步的设置服务器。 那么&#xff0c;本文&#xff0c;就是进行服务器的系统更新&#xff0c;以及常用软件的安装 调整 Ubu…

PyTorch 入门学习笔记

一、简介 PyTorch 是由 Meta&#xff08;原 Facebook&#xff09; 开源的深度学习框架。其前身 Torch 是一个基于 LuaJIT 的科学计算框架&#xff0c;核心功能是提供高效的张量&#xff08;Tensor&#xff09;操作和神经网络支持。由于 Lua 语言的生态限制&#xff0c;Torch 逐…

pycharm生成图片

文章目录 图片例子生成图片并储存&#xff0c;设置中文字体支持两条线绘制散点图和直方图绘制条形图&#xff08;bar&#xff09;绘制条形图&#xff08;横着的&#xff09;&#xff08;plt.barh&#xff09;分组的条形图 颜色和线条风格1. **颜色字符 (color)**其他颜色指定方…

Android 云手机横屏模式下真机键盘遮挡输入框问题处理

一、背景 打开横屏应用,点击云机EditText输入框,输入框被键盘遮挡,如下图&#xff1a; 未打开键盘状态: 点击第二个输入框,键盘遮挡了输入框&#xff1a; 二、解决方案&#xff08;推荐第三中方案,博主采用的也是第三种方案&#xff09; 博主这里整理了三种方案&#xff1a;…

Axure设计案例——科技感对比柱状图

想让数据对比展示摆脱平淡无奇&#xff0c;瞬间抓住观众的眼球吗&#xff1f;那就来看看这个Axure设计的科技感对比柱状图案例&#xff01;科技感设计风格运用独特元素打破传统对比柱状图的常规&#xff0c;营造出一种极具冲击力的视觉氛围。每一组柱状体都仿佛是科技战场上的士…

FPGA仿真中阻塞赋值(=)和非阻塞赋值(<=)区别

FPGA仿真中阻塞赋值和非阻塞赋值的区别 单独仿真小模块对但将小模块加入整个工程仿真不对就有可能是没有注意到仿真中阻塞赋值和非阻塞赋值的区别 目录 前言 一、简介 二、设计实例 三、仿真实例 1、仿真用非阻塞赋值 2、仿真用阻塞赋值 总结 前言 网上很多人介绍verilo…

LabVIEW轴角编码器自动检测

LabVIEW 开发轴角编码器自动检测系统&#xff0c;针对指控系统中高故障率的轴角编码器性能检测需求&#xff0c;通过模块化硬件架构与软件设计&#xff0c;实现编码器运转状态模拟、扭矩 / 转速实时监测、19 位并行编码采集译码、数据自动分析及报告生成等功能&#xff0c;解决…

MySQL数据库从0到1

目录 数据库概述 基本命令 查询命令 函数 表的操作 增删改数据和表结构 约束 事务 索引 视图 触发器 存储过程和函数 三范式 数据库概述 SQL语句的分类&#xff1a; DQL&#xff1a;查询语句&#xff0c;凡是select语句都是DQL。 DML&#xff1a;insert,delete,up…

WiFi万能钥匙鲲鹏服务器部署 TiDB 集群实战指南

作者&#xff1a; TiDBer_yangxi 原文来源&#xff1a; https://tidb.net/blog/15a234d0 一、环境准备 1. 硬件要求 服务器架构 &#xff1a;鲲鹏服务器&#xff08;ARM架构&#xff09;&#xff0c;TiDB 官方明确支持 ARM 架构服务器部署 推荐配置 &#xff08;生产环…

Vue 核心技术与实战智慧商城项目Day08-10

温馨提示&#xff1a;这个黑马的视频在b占可以找到&#xff0c;里面有完整的教学过程 然后这个项目有完整的代码&#xff0c;我已经上传了&#xff0c;如果审核成功大家就可以看了&#xff0c;但是需要审核多久我也不是很确定 1.项目演示 2. 项目收获 3. 创建项目 4. 调整初始化…