理解WGAN 和 Spectral Normalization(归一化)

本文深入探讨了传统GAN在训练过程中遇到的梯度消失问题,原因是JS散度在分布无交集时失效。为解决这一问题,Wasserstein GAN(WGAN)引入Wasserstein距离作为衡量分布差异的指标,它能有效处理分布无交集的情况。WGAN通过确保判别器满足Lipschitz连续性条件,避免了梯度消失,其中谱归一化是一种有效的实现方法。文章还介绍了SVD分解和瑞利商在计算谱范数中的应用,以及如何通过谱范数保持参数矩阵的Lipschitz连续性。

传统的Gan存在的问题

传统的判别器损失

m a x D   V ( D , G ) = E x ∼ P r ( x ) [ l o g   D ( x ) ] + E z ∼ P g   ( x ) [ l o g ( 1 − D ( x ) ) ] ( 1 ) \hspace{2em}\mathop{max}\limits_{D}\space V(D,G) = \mathbb{E}_{x\sim P_{r}(x)}[log\space D(x)] + \mathbb{E}_{z \sim P_g \space (x)}[log(1-D(x))] \hspace{4em}(1) Dmax V(D,G)=ExPr(x)[log D(x)]+EzPg (x)[log(1D(x))](1)

设判别器的输入数据 x x x 来源于真实数据分布的概率为 P r ( x ) P_r(x) Pr(x) ,来源于生成数据分布的概率为 P g ( x ) P_g(x) Pg(x)

则判别器损失可以表示为:
D L o s s = − [ P r ( x )   l o g D ( x ) + P g ( x )   l o g ( 1 − D ( x ) ) ] ( 2 ) \hspace{4em}D_{Loss} = -[P_r(x)\space logD(x)+P_g(x)\space log(1-D(x))]\hspace{7em}(2) DLoss=[Pr(x) logD(x)+Pg(x) log(1D(x))](2)
D ( x ) D(x) D(x)导数为0,化简可得:
D ( x ) = P r ( x ) P r ( x ) + P g ( x ) ( 3 ) \hspace{11em}D(x) = \frac{P_r(x)}{P_r(x)+P_g(x)}\hspace{11em}(3) D(x)=Pr(x)+Pg(x)Pr(x)(3)
当输入数据来自真实分布的概率 P r ( x ) P_r(x) Pr(x) 与来自生成数据分布的概率 P g ( x ) P_g(x) Pg(x)相同时,即 P r ( x ) = P g ( x ) P_r(x)=P_g(x) Pr(x)=Pg(x)

时,生成器生成的图片效果最好,真假难辨。将 (3) 式代入 (1) 式得:
E x ∼ P r ( x )   l o g P r ( x ) 1 2 [ P r ( x ) + P g ( x ) ]   + E x ∼ P g ( x )   l o g P g ( x ) 1 2 [ P r ( x ) + P g ( x ) ]   − 2 l o g 2 ( 4 ) \mathbb{E}_{x\sim P_r(x)}\space log\frac{P_r(x)}{\frac{1}{2}[P_r(x)+P_g(x)]}\space + \mathbb{E}_{x\sim P_g(x)}\space log\frac{P_g(x)}{\frac{1}{2}[P_r(x)+P_g(x)]}\space - 2log2 \hspace{2em}(4) ExPr(x) log21[Pr(x)+Pg(x)]Pr(x) +ExPg(x) log21[Pr(x)+Pg(x)]Pg(x) 2log2(4)
J S JS JS 散度 和 K L KL KL散度的公式:
D K L ( P 1 ∣ ∣ P 2 ) = ∑ P 1   l o g P 1 P 2 = E x ∼ P 1   l o g P 1 P 2 ( 5 ) D J S = 1 2 D K L ( P 1 ∣ ∣ P 1 + P 2 2 )   + 1 2 D K L ( P 2 ∣ ∣ P 1 + P 2 2 ) ( 6 ) \hspace{8em}D_{KL}(P_1||P_2) =\sum P_1\space log\frac{P_1}{P_2}= \mathbb{E}_{x\sim P_1}\space log\frac{P_1}{P_2}\hspace{5em}(5)\\ \hspace{5em} D_{JS} = \frac{1}{2}D_{KL}(P_1||\frac{P_1+P_2}{2})\space +\frac{1}{2}D_{KL}(P_2||\frac{P_1+P_2}{2})\hspace{5em}(6) DKL(P1P2)=P1 logP2P1=ExP1 

归一化Spectral Normalization权重裁剪(Weight Clipping)是深度学习中用于稳定训练过程、控制模型复杂度的两种重要技术,尤其在生成对抗网络(GANs)其他需要约束参数空间的任务中应用广泛。两者的核心目标都是限制神经网络中权重矩阵的变化范围,但其实现方式应用场景存在显著差异。 ### 谱归一化的作用与机制 谱归一化通过限制权重矩阵的最大奇异值来实现对 Lipschitz 常数的约束,从而保证模型的稳定性[^4]。具体而言,在每次更新权重时,谱归一化会对权重矩阵进行归一化操作,使其谱范数(即最大奇异值)等于1。这一操作有助于防止梯度爆炸问题,并提高 GAN 训练的收敛性。 谱归一化的一个典型应用是在 Wasserstein GAN with Gradient Penalty(WGAN-GP)中替代传统的权重裁剪,以避免参数被强制限制在一个非常小的范围内,从而保持模型表达能力的同时增强训练稳定性。 ### 权重裁剪的作用与机制 权重裁剪是一种更直接的参数约束方法,其核心思想是将权重的取值限制在一个固定的区间内(如 [-c, c]),通常在优化过程中对每个参数进行裁剪处理。这种方法简单易行,曾被广泛应用于早期的 Wasserstein GAN 实现中。 然而,权重裁剪容易导致两个主要问题:一是限制了模型的表达能力,因为权重被强制压缩到一个较小的范围内;二是可能引发梯度震荡或停滞,影响训练效率最终性能。 ### 谱归一化与权重裁剪的对比 | 特性 | 谱归一化 | 权重裁剪 | |------|-----------|------------| | **原理** | 通过对权重矩阵进行奇异值分解,限制其最大奇异值 | 直接限制权重的数值范围 | | **对模型表达能力的影响** | 影响较小,保留更多模型容量 | 显著限制模型表达能力 | | **训练稳定性** | 提升训练稳定性,尤其适用于 GANs | 在一定程度上提升稳定性,但可能导致震荡 | | **实现复杂度** | 较高,需进行奇异值近似计算 | 简单,易于实现 | | **梯度传播影响** | 减少梯度爆炸风险 | 可能引起梯度震荡或消失 | ### 应用示例 在 PyTorch 中,可以使用 `torch.nn.utils.spectral_norm` 对线性层或卷积层施加谱归一化: ```python import torch from torch import nn # 使用谱归一化的线性层 linear_layer = nn.Linear(256, 512) spectral_normalized_linear = nn.utils.spectral_norm(linear_layer) # 使用谱归一化的卷积层 conv_layer = nn.Conv2d(3, 64, kernel_size=4, stride=2, padding=1) spectral_normalized_conv = nn.utils.spectral_norm(conv_layer) ``` 相比之下,权重裁剪的实现更为简单,通常在优化器更新后手动执行: ```python for p in model.parameters(): p.data.clamp_(-0.01, 0.01) ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

daimashiren

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值