郭震 AI公众号:郭震AI

13 只生成改善GAN训练之使用不同的损失函数

发布日期:

最近更新:

分类: GAN网络从零教程

预计阅读: 5 分钟

阅读次数: 0

预计阅读5 分钟
结构重点8 个
图文要点6 张
正文规模2.2k 字

整理说明

这篇内容怎么整理

郭震 · 2026-06-04

独立整理围绕 8 个结构重点拆成环境、步骤、验证点和常见误区,尽量让读者能照着复现。
图文对照保留 6 张和配置、流程、判断结果有关的图片,方便快速定位正文重点。
持续校对工具、模型和命令变化较快,后续优先修正入口、参数和风险提醒。

阅读路线

先按这条路线读

先抓住主线,再回到代码、配置和图文细节,读起来会更稳。

图文要点

先看本文图文节点

按图先建立主线,再跳回正文核对步骤、配置和判断标准。

只生成改善GAN训练之使用不同的损失函数结构图查看大图
只生成改善GAN训练之使用不同的损失函数结构图

GAN 的关键是生成器和判别器互相推动,学习时要同时看结构、训练和样本质量。阅读时可以按「GAN的基本概念回顾 -> GAN的基本损失函数 -> 不同损失函数的尝试 -> 最小-最大损失」建立结构,再回到正文里的代码、案例或指标做验证。

只生成改善GAN训练之使用不同的损失函数核对图查看大图
只生成改善GAN训练之使用不同的损失函数核对图

读完后,用一个真实小任务复查:输入是什么,处理环节在哪里,输出是否可验收;失败时先查「GAN的基本概念回顾」,再查「GAN的基本损失函数」。

在上一篇文章中,我们讨论了GAN模型的训练过程及其评估方法。在本篇中,我们将探讨如何通过调整损失函数来改善GAN的训练效果。损失函数的选取对于生成对抗网络的训练成败起着至关重要的作用。

1. GAN的基本概念回顾

在深入讨论不同损失函数之前,我们首先简要回顾一下GAN的基本组成部分。Generative Adversarial Network(生成对抗网络)由两个主要部分组成:

GAN损失函数判断卡查看大图
GAN损失函数判断卡

比较 GAN 损失函数时,先看梯度是否稳定、判别器是否过强、生成样本质量和模式坍塌风险。

  • 生成器(Generator):负责生成逼真的数据样本。
  • 判别器(Discriminator):负责判断输入样本是真实数据还是生成数据。

其训练目标是使生成器生成的数据样本能够以假乱真,而判别器则尽量正确识别这两者。

2. GAN的基本损失函数

最早的GAN论文中使用的损失函数为对抗损失,其形式如下:

生成对抗网络阅读地图卡查看大图
生成对抗网络阅读地图卡

学习《只生成改善GAN训练之使用不同的损失函数》不必一口气吃完所有细节。先挑一个能动手验证的小问题,再顺着图和正文补齐概念。

对抗损失的目标是最小化生成器损失同时最大化判别器损失,具体可以用以下公式表示:

minGmaxDV(D,G)=Expdata(x)[logD(x)]+Ezpz(z)[log(1D(G(z)))]\min_G \max_D V(D, G) = \mathbb{E}_{x \sim p_{data}(x)}[\log D(x)] + \mathbb{E}_{z \sim p_z(z)}[\log(1 - D(G(z)))]

其中:

  • ( x ) 为真实样本
  • ( z ) 为从潜在空间生成的噪声样本
  • ( D(x) ) 为判别器对于真实样本的预测值
  • ( D(G(z)) ) 为判别器对于生成样本的预测值

尽管此损失函数在许多情况下有效,但在实践中却存在一些问题,例如训练不稳定、模式崩溃等。因此我们可以考虑其他损失函数来改善训练效果。

3. 不同损失函数的尝试

3.1. 最小-最大损失(Minimax Loss)

使用最小-最大损失函数的GAN可以通过以下形式构建:

minGmaxDV(D,G)=Expdata(x)[D(x)]Ezpz(z)[D(G(z))]\min_G \max_D V(D, G) = \mathbb{E}_{x \sim p_{data}(x)}[D(x)] - \mathbb{E}_{z \sim p_z(z)}[D(G(z))]

这种形式直接反映了生成器生成样本的优劣,判别器的损失可以约束生成器更快速地收敛。

3.2. 二元交叉熵损失(Binary Cross-Entropy Loss)

这一损失函数的定义为:

LD=12(Expdata(x)[logD(x)]+Ezpz(z)[log(1D(G(z)))])L_D = - \frac{1}{2} \left( \mathbb{E}_{x \sim p_{data}(x)}[\log D(x)] + \mathbb{E}_{z \sim p_z(z)}[\log(1 - D(G(z)))] \right) LG=Ezpz(z)[logD(G(z))]L_G = - \mathbb{E}_{z \sim p_z(z)}[\log D(G(z))]

使用二元交叉熵能够显著提高判别器和生成器的稳定性,尤其在样本数量较大的情况下。

3.3. Wasserstein GAN(WGAN)损失

WGAN的损失函数基于Wasserstein距离,显著改善了收敛性和稳定性。WGAN的判别器(通常称为critic)损失定义为:

LD=Expdata(x)[D(x)]+Ezpz(z)[D(G(z))]L_D = - \mathbb{E}_{x \sim p_{data}(x)}[D(x)] + \mathbb{E}_{z \sim p_z(z)}[D(G(z))]

生成器的损失函数定义为:

LG=Ezpz(z)[D(G(z))]L_G = - \mathbb{E}_{z \sim p_z(z)}[D(G(z))]

WGAN有助于解决模式崩溃问题,并在生成样本分布与真实样本分布更接近时实现了更好的性能。

4. 案例分析

比较不同损失函数的有效性,我们可以使用包含MNIST数据集的小型项目作为案例。以下是实现代码的简要示例,展示了如何设置不同的损失函数。

import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms
from torch.utils.data import DataLoader

# 生成器和判别器的简单实现
class Generator(nn.Module):
    # ... 生成器网络结构...

class Discriminator(nn.Module):
    # ... 判别器网络结构...

# 初始化模型
generator = Generator()
discriminator = Discriminator()

# 选择损失函数
loss_function = nn.BCEWithLogitsLoss()  # 使用二元交叉熵
# 或者使用自定义的WGAN损失

# 训练循环示例
for epoch in range(num_epochs):
    for real_data in dataloader:
        # 训练判别器和生成器
        # 判别真实数据处理
        # 判别生成数据处理
        # 优化步骤

在这个简化的代码示例中,我们可以根据选择的损失函数调整生成器和判别器的训练策略。通过直观的实验对比,我们能够评估不同损失函数的表现。

只生成改善GAN训练之使用不同的损失函数应用复盘卡查看大图
只生成改善GAN训练之使用不同的损失函数应用复盘卡

复习《只生成改善GAN训练之使用不同的损失函数》时,建议把关键概念、操作步骤和可见结果放在同一页里回看。

只生成改善GAN训练之使用不同的损失函数应用检查卡查看大图
只生成改善GAN训练之使用不同的损失函数应用检查卡

练习《只生成改善GAN训练之使用不同的损失函数》时,建议把输入条件、处理动作和可见结果写在一起,方便下次复查。

5. 总结

在本篇文章中,我们探讨了通过改变损失函数来改善GAN训练的方法。从最基本的对抗损失,到更加稳定的Wasserstein损失,选用合适的损失函数极大地影响了GAN的训练动态和生成效果。随着这一主题的深入,下一篇文章将讨论通过引入正则化技术进一步改善GAN的训练表现。

希望这些调整和案例能够帮助你更好地理解如何通过不同损失函数来改善GAN的训练过程!

继续阅读

从这篇继续找到相关教程

AI 教程总索引

常见问题

读前先确认这三点

只生成改善GAN训练之使用不同的损失函数适合谁读?

这是 GAN 网络教程 系列第 13 / 21 篇,适合正在学习GAN 网络教程,并且需要把概念落到操作步骤或判断标准里的读者。

读这篇GAN 网络教程要多久?

按中文技术文章阅读速度估算,通读大约 5 分钟;如果要跟着复现,建议把命令、配置和结果检查分开做。

这篇文章里的图文节点怎么用?

正文里有 6 个图文节点,可以先用它们抓住流程、配置和判断点,再回到对应段落细读。

分享文章

转发到常用平台

微信/朋友圈可先复制链接

相关教程

AI 教程总索引

继续阅读

继续找到相关 AI 教程

返回栏目

Reader Messages

读者留言

有问题、补充资料或实测结果,可以直接留下。这里不需要登录。

最多 800 字

为了防刷,每条留言会做长度、链接数量和提交频率限制。

0/800

留言列表

0
正在加载留言...