【知识点】GAN的常用的损失函数有哪些 ?
编辑
2025-05-27
深度学习
00

目录

1. 原始GAN损失(Vanilla GAN)
组成
为什么要用 log 函数?
生成器损失为什么加负号?
判别器损失和交叉熵损失有什么关系
(1). 交叉熵损失的标准形式
(2). 判别器损失的对应关系
2. 最小二乘GAN(Least Squares GAN, LSGAN)
为什么要发明最小二乘GAN?
(1)最小二乘GAN可以解决梯度消失问题
(2)最小二乘GAN有更平滑的优化目标
(3)最小二乘GAN的生成器目标的直观性
3. Wasserstein GAN(WGAN)
Wasserstein GAN有什么特点?
4. WGAN-GP(Wasserstein GAN with Gradient Penalty)
5. Hinge Loss GAN
存在的意义
6. Relativistic GAN
7. Fisher GAN
其他变种
如何选择损失函数?
总结

GAN(生成对抗网络)的损失函数设计直接影响模型的训练效果和生成质量。以下是常用的损失函数及其特点:


1. 原始GAN损失(Vanilla GAN)

生成对抗网络(Generative Adversarial Networks, GAN)由Ian Goodfellow等人于2014年提出,通过生成器与判别器的对抗博弈实现数据分布建模,开创了无监督学习生成高质量样本的新范式。

组成

  • 判别器损失
    LD=Expdata[logD(x)]+Ezpz[log(1D(G(z)))]\mathcal{L}_D = \mathbb{E}_{x \sim p_{\text{data}}}[\log D(x)] + \mathbb{E}_{z \sim p_z}[\log(1 - D(G(z)))]
  • 生成器损失(生成器希望最大化判别器对生成样本的误判概率)
    LG=Ezpz[logD(G(z))]\mathcal{L}_G = -\mathbb{E}_{z \sim p_z}[\log D(G(z))]

其中:

  • xx:
    真实数据样本,从真实数据分布 pdatap_{\text{data}} 中采样得到(例如真实图片、文本等)。

  • zz:
    输入噪声向量,通常从简单的先验分布(如高斯分布 pzp_z 或均匀分布)中采样得到,用于生成器生成数据。

  • D(x)D(x):
    判别器(Discriminator)的输出,表示判别器认为输入 xx 是真实数据的概率。

    • 目标:对于真实样本 xxD(x)D(x) 应接近 1。
  • G(z)G(z):
    生成器(Generator)的输出,表示以噪声 zz 为输入生成的假数据(例如生成图像)。

  • D(G(z))D(G(z)):
    判别器对生成器输出 G(z)G(z) 的判断结果,表示判别器认为该假数据是真实的概率。

    • 目标:对于假数据 G(z)G(z)D(G(z))D(G(z)) 应接近 0。
  • pdatap_{\text{data}}:
    真实数据的分布(未知,通过训练数据近似)。

  • pzp_z:
    输入噪声的先验分布(通常是已知的简单分布,如高斯分布)。

  • 特点

    • 基于二元交叉熵(Binary Cross-Entropy),判别器输出概率值(0~1)。
    • 容易出现梯度消失(生成器初期难以学习)和模式崩溃(Mode Collapse)。

为什么要用 log 函数?

单调性:在 x>0x > 0 时,对数函数是单调递增的,但增速逐渐减缓。

导数

ddxln(x)=1x\frac{d}{dx} \ln(x) = \frac{1}{x}

这个性质使得对数在优化问题中易于求导。

判别器损失函数的含义

  • D(x)1D(x) \to 1 时,logD(x)0\log D(x) \to 0(损失较小)。
  • D(x)0D(x) \to 0 时,logD(x)\log D(x) \to -\infty(损失极大)。
  • logD(x)\log D(x) 判别器需要通过最大化 logD(x)\log D(x) 来“奖励”自己正确识别真实数据的能力。
  • log(1D(G(z)))\log(1 - D(G(z))) 判别器需要通过最大化这项来“惩罚”自己误判生成数据为真实数据的行为。

生成器损失为什么加负号?

在优化中,我们通常最小化损失函数,因此需要将最大化问题转化为最小化问题。对目标函数取负号即可:

minG(Ezpz[logD(G(z))]).\min_G \left(-\mathbb{E}_{z \sim p_z}[\log D(G(z))] \right).

这就是生成器损失函数 LG=Ezpz[logD(G(z))]\mathcal{L}_G = -\mathbb{E}_{z \sim p_z}[\log D(G(z))] 的来源。

判别器损失和交叉熵损失有什么关系

(1). 交叉熵损失的标准形式

对于二分类问题,真实标签 y{0,1}y \in \{0,1\},预测概率 y^(0,1)\hat{y} \in (0,1),交叉熵损失为:

LCE=Ey,y^[ylogy^+(1y)log(1y^)].\mathcal{L}_{\text{CE}} = -\mathbb{E}_{y, \hat{y}}\left[ y \log \hat{y} + (1-y) \log(1-\hat{y}) \right].
  • y=1y=1 时,损失为 logy^-\log \hat{y}(鼓励 y^1\hat{y} \to 1);
  • y=0y=0 时,损失为 log(1y^)-\log(1-\hat{y})(鼓励 y^0\hat{y} \to 0)。

(2). 判别器损失的对应关系

GAN 中判别器的目标是区分真实样本 xx(标签 y=1y=1)和生成样本 G(z)G(z)(标签 y=0y=0)。其损失函数为:

LD=Expdata[logD(x)]+Ezpz[log(1D(G(z)))].\mathcal{L}_D = \mathbb{E}_{x \sim p_{\text{data}}}[\log D(x)] + \mathbb{E}_{z \sim p_z}[\log(1 - D(G(z)))].
  • 第一项 logD(x)\log D(x):对应 y=1y=1 的损失项,鼓励判别器将真实样本分类为 1;
  • 第二项 log(1D(G(z)))\log(1-D(G(z))):对应 y=0y=0 的损失项,鼓励判别器将生成样本分类为 0。

对比交叉熵损失

LD=LCE.\mathcal{L}_D = -\mathcal{L}_{\text{CE}}.

LD\mathcal{L}_D 是交叉熵损失的负值。判别器通过最大化 LD\mathcal{L}_D 来等价于最小化标准交叉熵损失 LCE\mathcal{L}_{\text{CE}}


2. 最小二乘GAN(Least Squares GAN, LSGAN)

最小二乘GAN(Least Squares GAN, LSGAN) 是由 Xudong Mao 等人 在 2017 年的论文《Least Squares Generative Adversarial Networks 》中首次提出的。

  • 判别器损失
    LD=12Expdata[(D(x)1)2]+12Ezpz[(D(G(z)))2]\mathcal{L}_D = \frac{1}{2}\mathbb{E}_{x \sim p_{\text{data}}}[(D(x) - 1)^2] + \frac{1}{2}\mathbb{E}_{z \sim p_z}[(D(G(z)))^2]
  • 生成器损失
    LG=12Ezpz[(D(G(z))1)2]\mathcal{L}_G = \frac{1}{2}\mathbb{E}_{z \sim p_z}[(D(G(z)) - 1)^2]
  • 特点
    • 使用均方误差(MSE)替代交叉熵,缓解梯度消失问题。
    • 生成器目标是让判别器输出接近1(真实标签),而非最大化 logD(G(z))\log D(G(z))

为什么要发明最小二乘GAN?

(1)最小二乘GAN可以解决梯度消失问题

传统GAN有问题:交叉熵损失的饱和性
传统GAN生成器的损失为:

LG=Ezpz[log(1D(G(z)))]\mathcal{L}_G = \mathbb{E}_{z \sim p_z}[\log(1 - D(G(z)))]

当生成器生成的样本质量较差时,判别器会强烈拒绝(即 D(G(z))0D(G(z)) \approx 0),此时 log(1D(G(z)))\log(1 - D(G(z))) 的梯度趋近于0(因为导数 Dlog(1D)=11D\frac{\partial}{\partial D} \log(1-D) = -\frac{1}{1-D},当 D0D \to 0 时梯度接近 -1,但链式法则中生成器参数的梯度可能被削弱),导致生成器无法更新。

MSE损失的非饱和性

LSGAN的生成器损失为:

LG=12Ezpz[(D(G(z))1)2]\mathcal{L}_G = \frac{1}{2}\mathbb{E}_{z \sim p_z}[(D(G(z)) - 1)^2]

即使生成器生成的样本被判别器标记为0(完全错误),损失值为 (01)2=1(0-1)^2=1,且梯度为 D(G(z))1D(G(z)) - 1,始终存在明确的方向引导生成器更新(梯度不会消失)。

(2)最小二乘GAN有更平滑的优化目标
  • 连续的距离惩罚
    LSGAN的判别器损失:
    LD=12Expdata[(D(x)1)2]+12Ezpz[D(G(z))2]\mathcal{L}_D = \frac{1}{2}\mathbb{E}_{x \sim p_{\text{data}}}[(D(x) - 1)^2] + \frac{1}{2}\mathbb{E}_{z \sim p_z}[D(G(z))^2]
    要求判别器对真实样本输出严格等于1,对生成样本输出严格等于0。这使得判别器不仅需要分类正确,还需要对样本到决策边界的距离进行建模,形成更平滑的损失曲面,避免局部极值陷阱。

(3)最小二乘GAN的生成器目标的直观性
  • 传统GAN的生成器目标
    通过最大化 logD(G(z))\log D(G(z)) 间接推动生成样本被判别器接受,但对梯度方向的利用不够直接。
  • LSGAN的生成器目标
    显式要求生成样本的判别器输出 D(G(z))D(G(z)) 接近期望标签1,优化目标更直观。这种形式与回归任务类似,梯度信号更稳定。

3. Wasserstein GAN(WGAN)

Wasserstein GAN(WGAN) 是由 Martin Arjovsky、Soumith Chintala 和 Léon Bottou 三位研究者在 2017年 提出的。

  • 判别器损失
    LD=Expdata[D(x)]Ezpz[D(G(z))]\mathcal{L}_D = \mathbb{E}_{x \sim p_{\text{data}}}[D(x)] - \mathbb{E}_{z \sim p_z}[D(G(z))]
  • 生成器损失
    LG=Ezpz[D(G(z))]\mathcal{L}_G = -\mathbb{E}_{z \sim p_z}[D(G(z))]
  • 关键改进
    • 判别器输出不再是概率,而是实数,衡量样本“真实性”的分数。
    • 需要满足Lipschitz连续性约束,通常通过 权重裁剪(Weight Clipping)梯度惩罚(WGAN-GP) 实现。

Wasserstein GAN有什么特点?

Wasserstein GAN(WGAN)的提出主要是为了解决传统生成对抗网络(GAN)在训练过程中存在的梯度消失、模式崩溃和训练不稳定等问题。传统GAN基于Jensen-Shannon散度(JS散度)构建目标函数,当生成分布与真实分布完全不重叠时,JS散度会失去梯度信号,导致生成器无法更新;同时,判别器的饱和特性容易引发模式崩溃(生成器过度聚焦于单一模式)和训练震荡。为克服这些问题,WGAN引入了Wasserstein距离(也称Earth Mover距离),通过衡量两个分布之间的“搬运成本”来提供更稳定且有意义的梯度信号。这一距离度量在数学上具有连续性和光滑性,即使分布间无重叠也能保持梯度流动,从而有效缓解梯度消失问题,并使损失函数值与生成质量呈现直接关联性,便于训练监控。

WGAN的核心改进在于对判别器的重构及其优化约束的设计。首先,判别器不再输出概率值,而是输出实数分数,用于衡量样本的“真实性”程度。其次,为满足Wasserstein距离的理论要求,判别器需满足1-Lipschitz连续性条件(即函数变化率不超过1)。早期WGAN通过权重裁剪(Weight Clipping)强制限制参数范围,但这种方法可能导致优化困难;后续改进版本WGAN-GP则引入梯度惩罚(Gradient Penalty),通过对中间样本的梯度模长施加约束,更灵活且高效地实现Lipschitz条件。最终,WGAN的判别器目标是最小化真实样本与生成样本分数的差距,而生成器则通过最小化生成样本的判别分数来逼近真实分布。

这一改进带来了显著的实际效果:一方面,训练过程更加稳定,判别器损失值能持续反映生成质量的提升,避免传统GAN中常见的震荡或发散现象;另一方面,生成结果的多样性和真实性得到增强,模式崩溃问题大幅缓解。从数学本质看,WGAN通过Kantorovich-Rubinstein对偶定理将Wasserstein距离转化为判别器的优化问题,使其能够直接逼近分布间的最优搬运成本,为生成模型的理论分析和工程实践提供了更坚实的基础。WGAN及其改进版本(如WGAN-GP)成为GAN研究的重要里程碑,推动了生成对抗网络在图像生成、风格迁移等领域的广泛应用。


4. WGAN-GP(Wasserstein GAN with Gradient Penalty)

WGAN-GP(Wasserstein GAN with Gradient Penalty) 是由 Ishaan Gulrajani 等人 在 2017年 提出的。

  • 梯度惩罚项

    LGP=λEx^px^[(x^D(x^)21)2]\mathcal{L}_{\text{GP}} = \lambda \mathbb{E}_{\hat{x} \sim p_{\hat{x}}}[(\|\nabla_{\hat{x}} D(\hat{x})\|_2 - 1)^2]

    其中:

    • x^\hat{x} 是从真实数据 xx 和生成数据 G(z)G(z) 之间随机插值得到的样本。
    • λ\lambda 是一个超参数(通常设为 10)。
    • 目标是让判别器 DD 的梯度范数接近 1。
  • 总判别器损失

    LD=Expdata[D(x)]Ezpz[D(G(z))]+LGP\mathcal{L}_D = \mathbb{E}_{x \sim p_{\text{data}}}[D(x)] - \mathbb{E}_{z \sim p_z}[D(G(z))] + \mathcal{L}_{\text{GP}}
  • 特点

    • 解决WGAN的权重裁剪不稳定问题,梯度惩罚使训练更平滑。
    • 当前最广泛使用的稳定训练方法之一。

5. Hinge Loss GAN

  • 判别器损失

    LD=Expdata[max(0,1D(x))]+Ezpz[max(0,1+D(G(z)))]\mathcal{L}_D = \mathbb{E}_{x \sim p_{\text{data}}}[\max(0, 1 - D(x))] + \mathbb{E}_{z \sim p_z}[\max(0, 1 + D(G(z)))]
    • 第一项鼓励真实样本得分大于等于 1
    • 第二项鼓励生成样本得分小于等于 -1
  • 生成器损失

    LG=Ezpz[D(G(z))]\mathcal{L}_G = -\mathbb{E}_{z \sim p_z}[D(G(z))]
  • 特点

    • 简化版损失,判别器输出范围更宽松,适合大尺度图像生成(如StyleGAN系列)。
    • 与Hinge Loss在分类任务中的思想类似,最大化间隔(Margin)。

存在的意义

Wasserstein GAN (WGAN) 引入了 Wasserstein 距离,理论上更稳定,但实现上需要权重裁剪(weight clipping)或者梯度惩罚(GP),限制了模型灵活性。

Hinge Loss GAN 的特点与优势

特点解释
训练更稳定损失函数不依赖于指数函数(如交叉熵),避免梯度爆炸/消失问题
输出范围宽松判别器不需要输出 [0,1] 的概率,可以是任意实数,适合大规模图像生成
最大间隔思想类似 SVM,提升鲁棒性,防止过拟合
适合大图像生成在 StyleGAN、BigGAN 等大型模型中广泛应用

6. Relativistic GAN

基于 Hinge Loss 改进而来,它将“相对性”引入到损失函数中

  • 核心思想:判别器同时比较真实样本和生成样本的相对真实性。
  • Relativistic Hinge Loss
    • 判别器损失:
      LD=Expdata[max(0,1D(x)+Ezpz[D(G(z))])]+Ezpz[max(0,1+D(G(z))Expdata[D(x)])]\mathcal{L}_D = \mathbb{E}_{x \sim p_{\text{data}}}[\max(0, 1 - D(x) + \mathbb{E}_{z \sim p_z}[D(G(z))] )] + \mathbb{E}_{z \sim p_z}[\max(0, 1 + D(G(z)) - \mathbb{E}_{x \sim p_{\text{data}}}[D(x)] )]
    • 生成器损失:
      LG=Ezpz[D(G(z))]+Expdata[D(x)]\mathcal{L}_G = -\mathbb{E}_{z \sim p_z}[D(G(z))] + \mathbb{E}_{x \sim p_{\text{data}}}[D(x)]
  • 特点
    • 提升生成质量,尤其在低数据量场景下表现更好。

7. Fisher GAN

  • 核心思想:通过约束判别器输出的一阶矩(均值)和二阶矩(方差)来稳定训练。
  • 损失形式
    • 判别器损失包含均值约束和方差约束项。
    • 生成器损失为 E[D(G(z))]-\mathbb{E}[D(G(z))]
  • 特点
    • 不需要额外的网络或损失项,通过动态调整判别器输出分布实现稳定。

其他变种

  • f-GAN:基于f散度理论的通用框架,涵盖KL散度、JS散度等不同目标。
  • DRAGAN:引入梯度惩罚的另一种形式,增强判别器的泛化能力。
  • Spectral Normalization GAN (SN-GAN):通过谱归一化约束判别器权重,替代WGAN-GP。

如何选择损失函数?

  1. 稳定训练优先:WGAN-GP、Hinge Loss、Spectral Normalization。
  2. 高质量图像生成:Hinge Loss(StyleGAN)、Relativistic GAN。
  3. 理论严谨性:WGAN(基于Wasserstein距离)。
  4. 简单易实现:LSGAN、Hinge Loss。

总结

不同损失函数的核心差异在于对 判别器目标生成器目标 的定义,以及如何缓解模式崩溃和梯度消失。实际应用中,WGAN-GP和Hinge Loss是当前最主流的选择,而Relativistic GAN在高端生成任务(如StyleGAN)中表现优异。选择时需结合具体任务需求(如训练稳定性、生成质量)和计算资源进行权衡。

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Dong

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!