【深度学习】GAN生成对抗网络:原理、应用与发展

news2025/3/29 3:42:33

GAN生成对抗网络:原理、应用与发展

文章目录

  • GAN生成对抗网络:原理、应用与发展
    • 1. 引言
    • 2. GAN的基本原理
      • 2.1 核心思想
      • 2.2 数学表达
      • 2.3 训练过程
    • 3. GAN的主要变体
      • 3.1 DCGAN (Deep Convolutional GAN)
      • 3.2 CGAN (Conditional GAN)
      • 3.3 CycleGAN
      • 3.4 StyleGAN
      • 3.5 WGAN (Wasserstein GAN)
    • 4. GAN的应用场景
      • 4.1 图像生成与编辑
      • 4.2 文本到图像生成
      • 4.3 视频生成与预测
      • 4.4 数据增强
      • 4.5 异常检测
    • 5. GAN面临的挑战
      • 5.1 训练不稳定性
      • 5.2 评估困难
      • 5.3 计算资源需求高
    • 6. GAN的未来发展趋势
      • 6.1 与其他技术的融合
      • 6.2 可解释性研究
      • 6.3 低资源环境下的GAN
      • 6.4 多模态GAN
    • 7. 结论
    • 参考资料

1. 引言

生成对抗网络(Generative Adversarial Networks,简称GAN)自2014年由Ian Goodfellow等人提出以来,已经成为深度学习领域最具创新性和影响力的技术之一。GAN是一种生成模型,通过两个神经网络的“对抗”过程来生成逼真的数据,在图像生成风格迁移图像修复等多个领域展现出惊人的能力。本文将介绍GAN的基本原理、主要变体、应用场景以及未来发展趋势。

P.S. 关于另一种生成模型——扩散模型(Diffusion Model)的介绍可以参考我的另一篇文章:扩散模型(Diffusion Model)详解:原理、应用与当前进展。

2. GAN的基本原理

2.1 核心思想

GAN的核心思想可以类比为"造假者"与"鉴定者"之间的博弈:

  • 生成器(Generator):相当于造假者试图生成逼真的假数据,它接收一个随机的噪声 z z z,通过这个噪声生成图片,记作 G ( z ) G(z) G(z)
  • 判别器(Discriminator):相当于鉴定者,试图区分真实数据和生成的假数据,它的输入参数是 x x x x x x代表一张图片,它的输出 D ( x ) D(x) D(x)代表 x x x为真实图片的概率——如果为 1 1 1,就代表100%是“真实的图片”;而如果输出为 0 0 0,就代表它认为 x x x不可能是“真实的图片”。

两个网络通过对抗训练不断提升自己的能力:生成器努力生成更逼真的数据以欺骗判别器,判别器则努力提高自己的鉴别能力。这种两个网络 “魔高一尺,道高一丈” 的 内卷 对抗过程最终使得生成器能够产生高质量的、接近真实分布的数据。
这种博弈的最终结果是:在最理想的状态下,G可以生成足以“以假乱真”的图片G(z)。对于D来说,它难以判定G生成的图片究竟是不是真实的,因此D(G(z)) = 0.5。

举个例子:可以用GAN生成动漫风格的人物头像:具体做法可以参考这篇文章中的介绍内容:GAN学习指南:从原理入门到制作生成Demo,在这里我简单介绍一下这个例子(这个例子来源于这个项目:Chainerで顔イラストの自動生成),帮助大家更好的理解GAN的工作原理。
在这个例子中,“真实的图片”相当于是合乎要求的动漫风格的人物头像图片。
第1个epoch跑完,生成器生成的影像只有一点隐隐约约的动漫人物头像的轮廓就可以骗过判别器了:
第1个epoch跑完生成器的生成内容
于是判别器更新参数,这样生成器如果按照同样的参数生成的影像就无法骗过判别器了。于是生成器也更新参数,生成越来越“好”(与GT差距更小)的图片(下面各图依次是第5、10、200、300个epoch跑完生成器的生成内容):
第5个epoch跑完生成器的生成内容
第10个epoch跑完生成器的生成内容
第200个epoch跑完生成器的生成内容
第300个epoch跑完生成器的生成内容

2.2 数学表达

从数学角度看,GAN的训练过程可以表示为一个极小极大博弈(minimax game):

GAN的公式表达

其中:

  • G G G是生成器网络
  • D D D是判别器网络
  • p d a t a p_{data} pdata是真实数据分布
  • p z p_z pz是随机噪声的先验分布
  • G ( z ) G(z) G(z)是由生成器从噪声 z z z生成的数据
  • D ( x ) D(x) D(x)表示判别器认为 x x x是真实数据的概率

2.3 训练过程

GAN的训练通常包括以下步骤:

  1. 固定生成器G,训练判别器D以最大化目标函数。

判别器 D D D的目的: D ( x ) D(x) D(x)表示 D D D网络判断真实图片是否真实的概率(因为x就是真实的,所以对于 D D D来说,这个值越接近1越好)。 D ( G ( z ) ) D(G(z)) D(G(z)) D D D网络判断 G G G生成的图片(我们认为 G G G生成的“不是真实的图像”,这样就可以“激励” G G G生成的图像与“真实的图像”越来越接近)的为“真实”的概率,因此 D D D的能力越强, D ( x ) D(x) D(x)应该越大, D ( G ( x ) ) D(G(x)) D(G(x))应该越小,这时 V ( D , G ) V(D,G) V(D,G)应变大。因此可以看到公式的的最前面的记号是 m a x D max_D maxD

  1. 固定判别器D,训练生成器G以最小化目标函数。

生成器 G G G的目的: D ( G ( z ) ) D(G(z)) D(G(z)) D D D网络判断 G G G生成的图片的是否真实的概率, G G G希望自己生成的图片“越接近真实越好”。也就是说, G G G希望 D ( G ( z ) ) D(G(z)) D(G(z))尽可能得大,这时目标函数 V ( D , G ) V(D,G) V(D,G)会变小。因此可以看到公式的的最前面的记号是 m i n G min_G minG

  1. 反复交替上述两个步骤,直到达到平衡状态。

在最理想的状态下,G可以生成足以“以假乱真”的图片G(z)。对于D来说,它难以判定G生成的图片究竟是不是真实的,因此 D ( G ( z ) ) = 0.5 D(G(z)) = 0.5 D(G(z))=0.5

用随机梯度下降法训练D和G的算法为:
随机梯度下降法训练D和G的算法
请注意红框部分:
第一步训练D,D是希望V(G, D)越大越好,所以是加上梯度(ascending);
第二步训练G时,V(G, D)越小越好,所以是减去梯度(descending)。
上述两步训练过程交替进行。

注:本节所述方法基于GAN的开山之作:Goodfellow, I., et al. (2014). Generative Adversarial Networks. NIPS.,并参考了这篇文章:GAN学习指南:从原理入门到制作生成Demo 当中的讲解。

3. GAN的主要变体

3.1 DCGAN (Deep Convolutional GAN)

DCGAN将卷积神经网络引入GAN架构,使其更适合处理图像数据,并提高了训练稳定性。
DCGAN中的G网络示意,相等于普通CNN的逆过程
DCGAN的G和D用了两个卷积神经网络(CNN),其中的G网络相当于普通CNN的逆过程,同时对卷积神经网络的结构做了一些改变,以提高样本的质量和收敛的速度,这些改变有:

  • 取消所有pooling层。G网络中使用转置卷积(transposed convolutional layer)进行上采样,D网络中用加入stride的卷积代替pooling。
  • 在D和G中均使用batch normalization
  • 去掉FC层,使网络变为全卷积网络
  • G网络中使用ReLU作为激活函数,最后一层使用tanh作为激活函数
  • D网络中使用LeakyReLU作为激活函数

DCGAN原文:Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks 。

3.2 CGAN (Conditional GAN)

条件GAN通过引入额外的条件信息(如类别标签),使生成器能够生成特定类别的数据。

3.3 CycleGAN

CycleGAN实现了不需要配对数据的图像到图像的转换,如将照片转换为艺术画风格。

3.4 StyleGAN

StyleGAN系列通过引入自适应实例归一化和风格混合等技术,实现了高分辨率、可控的图像生成。

3.5 WGAN (Wasserstein GAN)

WGAN使用Wasserstein距离代替JS散度,解决了原始GAN训练不稳定和模式崩溃的问题。

4. GAN的应用场景

4.1 图像生成与编辑

  • 高清图像生成
  • 图像风格迁移
  • 图像修复与超分辨率重建
  • 图像编辑与属性操作

4.2 文本到图像生成

结合自然语言处理技术,根据文本描述生成相应的图像。

4.3 视频生成与预测

生成连续的视频帧或预测视频的未来帧。

4.4 数据增强

为机器学习任务生成额外的训练数据,提高模型的泛化能力。

4.5 异常检测

通过学习正常数据的分布,检测出异常样本。

5. GAN面临的挑战

5.1 训练不稳定性

GAN的训练过程容易出现模式崩溃、梯度消失等问题。

5.2 评估困难

缺乏统一的、客观的评估指标来衡量生成结果的质量。

5.3 计算资源需求高

高质量GAN模型通常需要大量的计算资源和训练时间。

6. GAN的未来发展趋势

6.1 与其他技术的融合

与强化学习、自监督学习等技术的结合,拓展应用场景。

6.2 可解释性研究

提高GAN内部机制的可解释性,理解生成过程的本质。

6.3 低资源环境下的GAN

开发更高效的GAN架构,降低训练和推理的资源需求。

6.4 多模态GAN

处理跨多种模态(图像、文本、音频等)的生成任务。

7. 结论

GAN作为深度学习领域的重要创新,不仅在学术界引起了广泛关注,也在工业界找到了丰富的应用场景。尽管面临一些挑战,但随着技术的不断进步,GAN及其变体将继续在人工智能领域发挥重要作用,推动生成模型的发展。

参考资料

  1. Goodfellow, I., et al. (2014). Generative Adversarial Networks. NIPS.
    【GAN开山之作】
  2. Radford, A., et al. (2015). Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks.
    【DCGAN】
  3. Arjovsky, M., et al. (2017). Wasserstein GAN.
  4. Zhu, J.-Y., et al. (2017). Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks.
  5. Karras, T., et al. (2019). A Style-Based Generator Architecture for Generative Adversarial Networks.

希望这篇文章对你有所帮助!如果你想要更详细地了解某个特定的GAN变体或应用场景,可以告诉我,我可以为你提供更深入的内容。

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

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

相关文章

Live555+Windows+MSys2 编译Androidso库和运行使用(二,实验篇)

文章目录 实验下载推流服务端版本运行 摘要:书接上回 https://blog.csdn.net/qq_20330595/article/details/146412411?spm1001.2014.3001.5502 我们先做几个试验,方便我们理解rtsp推流,先把采集和播放体验一下,我们最后回到代码…

工作杂谈(十七)——研发阶段术语

EVT/DVT/PVT/MP是指在制造行业一个产品研发导入从试产到量产的不同阶段:   EVT:Engineering Verification Test工程验证测试阶段   DVT:Design Verification Test设计验证测试   PVT:Production Verification Test 小批量生…

2025 polarctf春季个人挑战赛web方向wp

来个弹窗 先用最基础的xss弹窗试一下 <script>alert("xss")</script>没有内容&#xff0c;猜测过滤了script&#xff0c;双写绕过一下 <scrscriptipt>alert("xss")</scscriptript>background 查看网页源代码 查看一下js文件 类…

RabbitMQ 学习整理1 - 基础使用

项目代码&#xff1a;RabbitMQDemo: 学习RabbitMQ的一些整理 基本概念 RabbitMQ是一种基于AMQP协议的消息队列实现框架RabbitMQ可以用于在系统与系统之间或者微服务节点之间&#xff0c;进行消息缓存&#xff0c;消息广播&#xff0c;消息分配以及限流消峰处理RabbitMQ-Serve…

分布式渲染与云渲染:技术与应用的黄金搭档

一、核心概念&#xff1a;先区分再关联 分布式渲染是通过多台设备并行计算拆分渲染任务的技术&#xff08;如将一帧拆分为 64 个小块&#xff0c;64 台电脑同时渲染&#xff09;&#xff1b; 云渲染是基于云计算的渲染服务&#xff0c;本质是分布式渲染的商业化落地—— 用户无…

【实战ES】实战 Elasticsearch:快速上手与深度实践-5.2.1 多字段权重控制(标题、品牌、类目)

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 电商商品搜索实战&#xff1a;多字段权重控制策略1. 业务场景与核心挑战1.1 典型搜索问题1.2 权重失衡的影响数据 2. 权重控制核心方案2.1 字段权重分配矩阵2.2 多策略组合方…

如何避免测试数据准备不充分或不可复用

避免测试数据准备不充分或不可复用的关键方法包括明确数据需求、统一数据管理工具、建立数据复用机制、定期维护更新测试数据以及加强团队沟通与协作。 其中&#xff0c;统一数据管理工具对确保数据质量和复用性尤为重要。例如&#xff0c;许多团队采用专门的测试数据管理工具以…

使用AI一步一步实现若依(23)

功能23&#xff1a;从后端获取路由/菜单数据 功能22&#xff1a;用户管理 功能21&#xff1a;使用axios发送请求 功能20&#xff1a;使用分页插件 功能19&#xff1a;集成MyBatis-Plus 功能18&#xff1a;创建后端工程 功能17&#xff1a;菜单管理 功能16&#xff1a;角色管理…

第一天学爬虫

阅读提示&#xff1a;我今天才开始尝试爬虫&#xff0c;写的不好请见谅。 一、准备工具 requests库&#xff1a;发送HTTP请求并获取网页内容。BeautifulSoup库&#xff1a;解析HTML页面并提取数据。pandas库&#xff1a;保存抓取到的数据到CSV文件中。 二、爬取步骤 发送请求…

W、M、C练题笔记(持续更新中)

web here are the flag 点击&#xff0c;页面跳转404.php&#xff0c;用bp抓包访问/flag.php页面&#xff0c;得到flag用base64解码 TryToFindFlag 打开后查看源代码 发现是robots协议&#xff0c;访问robots.txt 访问flllaaa......&#xff0c;得到空白页面&#xff0c;查看…

CVE-2021-45232未授权接口练习笔记

CVE-2021-45232 是 Apache APISIX Dashboard 中的一个严重权限漏洞&#xff0c;类似于攻击者无需密码即可拿到整个网关系统的“万能钥匙”。攻击者利用此漏洞&#xff0c;可直接操控网关流量转发规则&#xff0c;甚至远程执行代码&#xff0c;引发服务器沦陷。 默认账户密码导致…

贪心算法——c#

贪心算法通俗解释 贪心算法是一种"每一步都选择当前最优解"的算法策略。它不关心全局是否最优&#xff0c;而是通过局部最优的累积来逼近最终解。优点是简单高效&#xff0c;缺点是可能无法得到全局最优解。 一句话秒懂 自动售货机找零钱&#xff1a;用最少数量的…

Retrofit中scalars转换html为字符串

简介 在Retrofit中&#xff0c;如果你想直接获取HTML或其他文本格式的响应内容而不是将其映射到一个模型类&#xff0c;ScalarsConverterFactory 就派上用场了。ScalarsConverterFactory 是一个转换器工厂&#xff0c;它能够将响应体转换为Java基本类型如String、Integer或Byte…

【微服务架构】SpringCloud(七):配置中心 Spring Cloud Config

文章目录 配置中心为什么需要配置中心配置中心介绍 服务搭建基于GITHUB1.创建仓库2.新建微服务作为配置中心服务3.启动测试拉取 匹配规则分支读取 客户端配置配置文件引入依赖使用远程配置 刷新配置手动配置热更新自动刷新erlang安装RabbitMQ安装环境变量管理界面服务配置测试 …

Linux学习笔记(应用篇二)

基于I.MX6ULL.MINI开发板 开发板与电脑相互通信电脑与开发板互传文件 开发板与电脑相互通信 用网线将电脑与开发板连接 本人使用的是Ubuntu系统&#xff0c;不是虚拟机 一般来说刚开始电脑和开发板是ping不通的 首先查看电脑的 IP WinR&#xff0c;cmd调出终端 我使用的是…

记录一次部署k3s后,服务404 page not found,nginx显示正常

服务部署k3s后&#xff0c;正常入口端怎么返回都是80&#xff0c;且返回错误 TRAEFIK DEFAULT CERT ERR_CERT_AUTHORITY_INVALID ngnix显示也是正常&#xff0c;怎么找也找不到问题 后来通过 iptables -L -n -t nat|grep 80 发现入口端流量被DNAT转到新的服务 而k3s中&#…

mac上安装nvm及nvm的基本语法使用!!

种一棵树&#xff0c;最好是十年前&#xff0c;其次是现在&#xff01;想要改变&#xff0c;从此刻开始&#xff0c;一切都不晚&#xff01; 目录 nvm是什么&#xff1f;前提条件&#xff1a;安装homebrew如果系统已经有node版本&#xff1a;在mac上安装nvm&#xff1a;用nvm安…

(基本常识)C++中const与引用——面试常问

作者&#xff1a;求一个demo 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 内容通俗易懂&#xff0c;没有废话&#xff0c;文章最后是面试常问内容&#xff08;建议通过标题目录学习&#xff09; 废话不多…

dfs(深度优先)——太抽象了

1. 两种方法 #include<bits/stdc.h> using namespace std; //void dfs(int index,int n,vector<int> current) //{ // if(index>n){ // for(int i0;i<current.size();i){ // cout<<current[i]<<" "; // } // cout<<endl;…

python --face_recognition(人脸识别,检测,特征提取,绘制鼻子,眼睛,嘴巴,眉毛)/活体检测

dlib 安装方法 之前博文 https://blog.csdn.net/weixin_44634704/article/details/141332644 环境: python3.8 opencv-python4.11.0.86 face_recognition1.3.0 dlib19.24.6人脸检测 import cv2 import face_recognition# 读取人脸图片 img cv2.imread(r"C:\Users\123\…