WGAN-GP 原理及实现(pytorch版)

WGAN-GP 原理及实现

  • 一、WGAN-GP 原理
    • 1.1 WGAN-GP 核心原理
    • 1.2 WGAN-GP 实现步骤
    • 1.3 总结
  • 二、WGAN-GP 实现
    • 2.1 导包
    • 2.2 数据加载和处理
    • 2.3 构建生成器
    • 2.4 构建判别器
    • 2.5 训练和保存模型
    • 2.6 图片转GIF

一、WGAN-GP 原理

Wasserstein GAN with Gradient Penalty (WGAN-GP) 是对原始 WGAN 的改进,通过梯度惩罚(Gradient Penalty)替代权重裁剪(Weight Clipping),解决了 WGAN 训练不稳定、权重裁剪导致梯度消失或爆炸的问题。


1.1 WGAN-GP 核心原理

(1) Wasserstein 距离(Earth-Mover 距离)

  • 原始 GAN 的 JS 散度在分布不重叠时梯度消失,而 WGAN 使用 Wasserstein 距离衡量生成分布 P g P_g Pg 和真实分布 P r P_r Pr 的距离:
    W ( P r , P g ) = inf ⁡ γ ∼ Π ( P r , P g ) E ( x , y ) ∼ γ [ ∥ x − y ∥ ] W(P_r, P_g) = \inf_{\gamma \sim \Pi(P_r, P_g)} \mathbb{E}_{(x,y)\sim \gamma} [\|x-y\|] W(Pr,Pg)=infγΠ(Pr,Pg)E(x,y)γ[xy]
  • 通过 Kantorovich-Rubinstein 对偶形式,转化为:
    W ( P r , P g ) = sup ⁡ ∥ D ∥ L ≤ 1 E x ∼ P r [ D ( x ) ] − E z ∼ P z [ D ( G ( z ) ) ] W(P_r, P_g) = \sup_{\|D\|_L \leq 1} \mathbb{E}_{x \sim P_r}[D(x)] - \mathbb{E}_{z \sim P_z}[D(G(z))] W(Pr,Pg)=supDL1ExPr[D(x)]EzPz[D(G(z))],其中 D D D 是 1-Lipschitz 函数(梯度范数不超过 1)

(2) 梯度惩罚(Gradient Penalty)

  • 原始 WGAN 的问题:通过权重裁剪强制判别器(Critic)满足 Lipschitz 约束,但会导致梯度不稳定或容量下降
  • WGAN-GP 的改进:直接对判别器的梯度施加惩罚项,强制其梯度范数接近 1: λ ⋅ E x ^ ∼ P x ^ \lambda \cdot \mathbb{E}_{\hat{x} \sim P_{\hat{x}}} λEx^Px^

你可能感兴趣的:(深度学习,pytorch,人工智能,机器学习,深度学习,python,神经网络,计算机视觉)