【深度学习】16. Deep Generative Models:生成对抗网络(GAN)

news2025/6/3 9:51:09

Deep Generative Models:生成对抗网络(GAN)

什么是生成建模(Generative Modeling)

生成模型的主要目标是从数据中学习其分布,从而具备“生成”数据的能力。两个关键任务:

  • 密度估计(Density Estimation):学习真实数据的概率分布 p ( x ) p(x) p(x)
  • 样本生成(Sample Generation):从模型学习的分布中采样,生成新样本。

换句话说,生成建模不是仅预测标签,而是要建模整个数据的生成过程,使模型能“想象”并产生新的样本。

图示说明了输入图像 x x x 是由真实分布 p ( x ) p(x) p(x) 生成的。我们希望构建一个模型,也能从噪声或潜变量中生成具有相同分布的新样本。

为什么研究生成建模?

逼真的生成任务

  • 模拟可能的未来规划(如股票市场)

  • 训练生成模型还可以对潜在表征进行推理,这些潜在表征可以作为通用特征

从多个角度说明生成模型的重要性:

  • 潜变量结构学习:生成模型能够发现数据中的隐藏因素,如风格、姿态、语义等。
  • 半监督学习能力强:即使标签很少,也可以利用未标注数据学到有意义的表示。
  • 数据建模能力强:可用于数据修复、风格迁移、图像翻译、图像上色等任务。
  • 表示学习(Representation Learning):通过对输入数据建模,生成模型学到的特征常常可迁移用于其他任务。
  • 未来模拟与预测:如视频预测、图像到视频生成等。

什么是生成对抗网络(GAN)

生成对抗网络是一种重要的深度生成模型,由两个神经网络组成:

  • 生成器 G G G:从随机变量(noise) z ∼ p ( z ) z \sim p(z) zp(z) 生成图像 G ( z ) G(z) G(z)
  • 判别器 D D D:判断图像 x x x 是否来自真实数据分布 p d a t a ( x ) p_{data}(x) pdata(x)

二者的训练过程是一个博弈(对抗)过程。

GAN 的目标函数

GAN 的优化目标是一个极小极大问题:

min ⁡ G max ⁡ D V ( D , G ) = E x ∼ p d a t a ( x ) [ log ⁡ D ( x ) ] + E z ∼ p ( z ) [ log ⁡ ( 1 − D ( 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)}[\log(1 - D(G(z)))] minGmaxDV(D,G)=Expdata(x)[logD(x)]+Ezp(z)[log(1D(G(z)))]

含义如下:

  • 第一项鼓励判别器 D D D 对真实图像 x x x 输出概率越接近 1 1 1 越好;
  • 第二项鼓励判别器对生成图像 G ( z ) G(z) G(z) 输出概率越接近 0 0 0 越好;
  • D的目标:最大化目标,使D(x)接近于1(真实),D(G(z))接近于0(假)
  • G的目标:最小化目标,使D(G(z))接近于1(鉴别器被骗以为生成的G(z)是真实的)

因此,判别器和生成器是两个对手:

  • 判别器 D D D 试图区分真假;
  • 生成器 G G G 则试图以假乱真。

当博弈达到平衡时,判别器无法分辨真假图像,即 D ( G ( z ) ) = 0.5 D(G(z)) = 0.5 D(G(z))=0.5

GAN 的训练直观理解

在这里插入图片描述

输入是noise,给到G,generated image + real image data as input,两个输入。D用来做binary classification.

可以将 GAN 的训练比喻为“造假者 vs 警察”的博弈:

  • 初始时,生成器 G G G 生成的图像非常粗糙,容易被判别器 D D D 识别;
  • 随着训练进行, G G G 不断改进生成策略, D D D 也在不断提升识别能力;
  • 最终双方达到均衡, G G G 的输出与真实数据无法区分, D D D 的输出变成 0.5 0.5 0.5

GAN 的总目标函数

生成器和判别器之间的博弈关系形式化为一个极小极大的对抗优化问题:

min ⁡ G max ⁡ D V ( D , G ) = E x ∼ p d a t a ( x ) [ log ⁡ D ( x ) ] + E z ∼ p ( z ) [ log ⁡ ( 1 − D ( 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)}[\log(1 - D(G(z)))] minGmaxDV(D,G)=Expdata(x)[logD(x)]+Ezp(z)[log(1D(G(z)))]

这个公式表示:

  • 判别器试图最大化该表达式,正确区分真实图像和伪造图像;
  • 生成器试图最小化该表达式,让伪造图像也被判断为真实;
  • 最终博弈平衡点是 p g ( x ) = p d a t a ( x ) p_g(x) = p_{data}(x) pg(x)=pdata(x) D ( x ) = 0.5 D(x) = 0.5 D(x)=0.5

交替训练策略(Alternate Optimization)

为了求解上述极小极大问题,采用以下 交替更新策略

1. Gradient Ascent on D

固定生成器参数 θ g \theta_g θg,更新判别器参数 θ d \theta_d θd,最大化以下目标:

max ⁡ θ d [ E x ∼ p d a t a log ⁡ D θ d ( x ) + E z ∼ p ( z ) log ⁡ ( 1 − D θ d ( G θ g ( z ) ) ) ] \max_{\theta_d} \left[ \mathbb{E}_{x \sim p_{data}} \log D_{\theta_d}(x) + \mathbb{E}_{z \sim p(z)} \log(1 - D_{\theta_d}(G_{\theta_g}(z))) \right] maxθd[ExpdatalogDθd(x)+Ezp(z)log(1Dθd(Gθg(z)))]

也就是说:

  • 判别器希望对真实样本 x x x 输出接近 1 1 1
  • 对伪造样本 G ( z ) G(z) G(z) 输出接近 0 0 0
  • 因为目标是最大化,所以需要对判别器使用 梯度上升

2. Gradient Descent on G

固定判别器参数 θ d \theta_d θd,优化生成器参数 θ g \theta_g θg,最小化如下损失函数:

$ \min_{\theta_g} \mathbb{E}{z \sim p(z)} \log(1 - D{\theta_d}(G_{\theta_g}(z))) $

这个目标使得生成器试图提升 D ( G ( z ) ) D(G(z)) D(G(z)),让判别器认为伪造图像也是真实的,即:

  • 尽可能让 D ( G ( z ) ) → 1 D(G(z)) \rightarrow 1 D(G(z))1
  • 所以生成器使用 梯度下降 来最小化该损失。

但注意,这一损失可能在训练初期导致梯度消失,因此实际训练中常采用非饱和形式(non-saturating loss):

min ⁡ θ g − E z ∼ p ( z ) log ⁡ D θ d ( G θ g ( z ) ) \min_{\theta_g} - \mathbb{E}_{z \sim p(z)} \log D_{\theta_d}(G_{\theta_g}(z)) minθgEzp(z)logDθd(Gθg(z))

算法流程

外层:训练轮数

for number of training iterations do

对所有训练轮数重复执行以下步骤(每轮包括 k k k 次判别器更新 + 1 次生成器更新)。

内层:判别器更新(k 次)

for k steps do

每轮训练中先更新 k k k 次判别器, k k k 是一个超参数(原论文中使用 k = 1 k = 1 k=1,以节省计算资源)。

每次判别器更新包含以下步骤:

  1. 采样 m m m 个噪声样本
    $ {z^{(1)}, \dots, z^{(m)}} \sim p_g(z) $

  2. 采样 m m m 个真实样本
    $ {x^{(1)}, \dots, x^{(m)}} \sim p_{data}(x) $

  3. 更新判别器参数(梯度上升)

    ∇ θ d 1 m ∑ i = 1 m [ log ⁡ D ( x ( i ) ) + log ⁡ ( 1 − D ( G ( z ( i ) ) ) ) ] \nabla_{\theta_d} \frac{1}{m} \sum_{i=1}^{m} \left[ \log D(x^{(i)}) + \log(1 - D(G(z^{(i)}))) \right] θdm1i=1m[logD(x(i))+log(1D(G(z(i))))]

此步骤最大化判别器输出正确分类的概率:真实图像输出高,伪造图像输出低。

end for

生成器更新(1 次)
  1. 采样 m m m 个噪声样本
    $ {z^{(1)}, \dots, z^{(m)}} \sim p_g(z) $

  2. 更新生成器参数(梯度下降)

    ∇ θ g 1 m ∑ i = 1 m log ⁡ ( 1 − D ( G ( z ( i ) ) ) ) \nabla_{\theta_g} \frac{1}{m} \sum_{i=1}^{m} \log \left(1 - D(G(z^{(i)})) \right) θgm1i=1mlog(1D(G(z(i))))

GAN 的训练过程可视化示例:A Simple Example

简单而直观的 1 维高斯分布示例,帮助我们理解 GAN 的对抗训练过程是如何逐步推进的。

图中包括四个子图(a)到(d),展示了生成分布 p g p_g pg 如何逐步接近真实分布 p d a t a p_{data} pdata,以及判别器 D ( x ) D(x) D(x) 的输出如何随着训练而变化。

在这里插入图片描述

图中元素说明

  • 黑色虚线:真实数据分布 p d a t a ( x ) p_{data}(x) pdata(x)
  • 绿色曲线:生成器生成的分布 p g ( x ) p_g(x) pg(x)
  • 蓝色曲线:判别器的输出 D ( x ) D(x) D(x),即当前判别器认为输入来自真实数据的概率;
  • 横轴:样本空间 x x x
  • 下方横线:表示潜变量 z z z 的均匀分布域;
  • 向上箭头:生成器 G ( z ) G(z) G(z) 将均匀分布映射到数据空间。

(a) 初始状态

  • 真实数据分布 p d a t a ( x ) p_{data}(x) pdata(x) 和生成分布 p g ( x ) p_g(x) pg(x) 相差很远;
  • 判别器 D ( x ) D(x) D(x) 在真实样本处输出接近 1,在伪造样本处输出接近 0;
  • 说明判别器能很好地区分真假样本。

(b) 中间阶段

  • 生成器开始学习, p g ( x ) p_g(x) pg(x) p d a t a ( x ) p_{data}(x) pdata(x) 靠近;
  • 判别器 D ( x ) D(x) D(x) 的输出逐渐平滑,对部分区域开始感到“困惑”;
  • 说明生成器在某些区域已能成功欺骗判别器。

© 接近收敛

  • 生成分布 p g ( x ) p_g(x) pg(x) 与真实分布 p d a t a ( x ) p_{data}(x) pdata(x) 几乎重合;
  • 判别器输出趋近于 0.5 0.5 0.5,无法有效判断真假;
  • 判别器的能力已接近上限。

(d) 理想收敛状态

  • p g ( x ) = p d a t a ( x ) p_g(x) = p_{data}(x) pg(x)=pdata(x)
  • 判别器对所有 x x x 的输出都为 D ( x ) = 0.5 D(x) = 0.5 D(x)=0.5
  • 说明两分布完全一致,GAN 达到理论最优状态。

下方生成机制解释

  • 均匀采样 z z z:例如在 [ − 1 , 1 ] [-1, 1] [1,1] 区间;
  • 生成器 G G G z z z 映射为 x = G ( z ) x = G(z) x=G(z)
  • G ( z ) G(z) G(z) 映射集中于高密度区域时,对应图中箭头密集;
  • G G G 映射至低密度区域,箭头稀疏。

文本解析与结论

文中说明如下关键结论:

  • 判别器 D D D 学习输出概率来识别样本真假;
  • 生成器 G G G 调整生成分布,使其逐步逼近真实分布;
  • p g = p d a t a p_g = p_{data} pg=pdata 时,GAN 达到 Nash 均衡;
  • 判别器无法区分两者,输出恒为 D ( x ) = 0.5 D(x) = 0.5 D(x)=0.5
  • 此时训练达成目标,GAN 成功生成真实感极强的样本。

核心公式

生成器定义为一个可微分函数:

x = G ( z ; θ ( G ) ) x = G(z; \theta^{(G)}) x=G(z;θ(G))

其中:

  • z z z 是从先验分布 p ( z ) p(z) p(z)(通常为均匀分布或高斯分布)中采样的随机变量;
  • θ ( G ) \theta^{(G)} θ(G) 是生成器的参数;
  • x x x 是生成样本,输出空间与真实数据空间相同;
  • G G G 是一个可微的神经网络,用于将潜变量 z z z 映射为样本 x x x

关键属性

  • 无需显式写出 p g ( x ) p_g(x) pg(x) 的公式
  • 只需构建一个能够从 p g p_g pg 分布中采样的生成器 G G G
  • 只要 G G G 可微,就可以使用梯度优化进行训练;
  • 这种方式称为隐式建模,相比显式建模(如 VAE)不要求明确分布函数。

GAN 的目标

我们有来自真实分布 p r p_r pr 的训练数据,目标是训练一个生成模型,使得其输出服从 p g p_g pg,并且有:

p g ≈ p r p_g \approx p_r pgpr

也就是说,我们不关心生成器输出的分布公式长什么样,只需要它能“以假乱真”。

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

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

相关文章

特伦斯 S75 电钢琴:重构演奏美学的极致表达

在数字音乐时代,电钢琴正从功能性乐器升级为融合艺术、科技与生活的美学载体。特伦斯 S75 电钢琴以极简主义哲学重构产品设计,将专业级演奏体验与现代家居美学深度融合,为音乐爱好者打造跨越技术边界的沉浸式艺术空间。 一、极简主义的视觉叙…

Java 文件操作 和 IO(4)-- Java文件内容操作(2)-- 字符流操作

Java 文件操作 和 IO(4)-- Java文件内容操作(2)-- 字符流操作 文章目录 Java 文件操作 和 IO(4)-- Java文件内容操作(2)-- 字符流操作观前提醒:1. Java中操作文件的简单介…

使用摄像头推流+VLC软件拉流

一、作用 使用摄像头创建rtsp链接,并使用VLC软件拉流显示。 二、步骤 1、安装FFmpeg库 下载地址:https://ffmpeg.org/download.htmlFFmpeg库的下载参考之前的博客,下载Win64版本即可:https://blog.csdn.net/beijixingcd/artic…

XCUITest 是什么

XCUITest(全称 Xcode UI Test)是苹果官方提供的 iOS/macOS UI 自动化测试框架,集成在 Xcode 开发工具中,专门用于测试 Swift/Objective-C 开发的应用程序。 1. XCUITest 的核心特点 ✅ 官方支持:苹果原生框架&#xf…

灌水论坛系统总体设计文档

一、实验题目 灌水论坛系统 二、实验目的 旨在通过一个相对完整且功能丰富的Web应用实例,全面地实践和巩固Web开发所需的各项核心技术和工程方法,从而提升其综合应用能力和解决实际开发问题的能力。它不仅仅是完成一个软件,更是一个学习、…

Mac M1编译OpenCV获取libopencv_java490.dylib文件

Window OpenCV下载地址 https://opencv.org/releases/OpenCV源码下载 https://github.com/opencv/opencv/tree/4.9.0 https://github.com/opencv/opencv_contrib/tree/4.9.0OpenCV依赖 brew install libjpeg libpng libtiff cmake3 ant freetype构建open CV cmake -G Ninja…

使用 Let‘s Encrypt 和 Certbot 为 Cloudflare 托管的域名申请 SSL 证书

一、准备工作 1. 确保域名解析在 Cloudflare 确保你的域名 jessi53.com 和 www.jessi53.com 的 DNS 记录已经正确配置在 Cloudflare 中,并且状态为 Active。 2. 安装 Certbot 在你的服务器上安装 Certbot 和 Cloudflare 插件。以下是基于 Debian/Ubuntu 和 Cent…

微信小程序关于截图、录屏拦截

1.安卓 安卓: 在需要禁止的页面添加 onShow() {if (wx.setVisualEffectOnCapture) {wx.setVisualEffectOnCapture({visualEffect: hidden,complete: function(res) {}})}},// 页面隐藏和销毁时需要释放防截屏录屏设置onHide() {if (wx.setVisualEffectOnCapture) {w…

基于51单片机的音乐盒键盘演奏proteus仿真

地址: https://pan.baidu.com/s/1tZCAxQQ7cvyzBfztQpk0UA 提取码:1234 仿真图: 芯片/模块的特点: AT89C52/AT89C51简介: AT89C51 是一款常用的 8 位单片机,由 Atmel 公司(现已被 Microchip 收…

【unity游戏开发——编辑器扩展】EditorUtility编辑器工具类实现如文件操作、进度条、弹窗等操作

注意:考虑到编辑器扩展的内容比较多,我将编辑器扩展的内容分开,并全部整合放在【unity游戏开发——编辑器扩展】专栏里,感兴趣的小伙伴可以前往逐一查看学习。 文章目录 前言一、确认弹窗1、确认弹窗1.1 主要API1.2 示例 2、三按钮…

Android之ListView

1:简单列表(ArrayAdapter) 1:运行的结果: 2:首先在MyListView里面创建一个按钮,点击的时候进行跳转。 这里让我吃惊的是,Button里面可以直接设置onClick .java里面的方法。 也即是点击这个按钮之后就会去…

《Spring Cloud Gateway 快速入门:从路由到自定义 Filter 的完整教程》​

1.网关介绍 在前面的学习中,我们通过Eureka和Nacos解决了辅助注册,使用Spring Cloud LoadBalance解决了负载均衡的问题,使用OpenFeign解决了远程调用的问题。 但是当前的所有微服务的接口都是直接对外暴露的,外部是可以直接访问…

第3节 Node.js 创建第一个应用

Node.js 非常强大,只需动手写几行代码就可以构建出整个HTTP服务器。事实上,我们的Web应用以及对应的Web服务器基本上是一样的。 在我们创建Node.js第一个"Hello, World!"应用前,让我们先了解下Node.js应用是由哪几部分组成的&…

我们来学mysql -- “数据备份还原”sh脚本

数据备份&还原 说明执行db_backup_cover.sh脚本 说明 环境准备:来源数据库(服务器A);目标数据库(服务器B)dbInfo.sh脚本记录基本信息 来源库、目标库的ip、port及执行路径 # MySQL 客户端和 mysqldump 的路径 MYSQL_CLIENT"/work/oracle/mysql…

【排序算法】快速排序详解--附详细流程代码

快速排序算法 介绍 快速排序(Quick Sort)是一种高效的分治排序算法,由英国计算机科学家 Tony Hoare 于 1960 年提出。它是实际应用中最常用的排序算法之一。快速排序的基本思想是:选择一个"基准"(pivot&am…

解决各个系统报错TDengine:no taos in java.library.path问题

windows 系统解决办法 在本地上安装一个TD的Windows客户端,注意安装的客户端版本一定要和服务端TD版本完全一致。(或者将 C:\TDengine\driver\taos.dll 拷贝到 C:\Windows\System32\ 目录下) 客户端各个历史版本下载链接:TDengin…

java helloWord java程序运行机制 用idea创建一个java项目 标识符 关键字 数据类型 字节

HelloWord public class Hello{public static void main(String[] args) {System.out.print("Hello,World!");} }java程序运行机制 用idea创建一个java项目 建立一个空项目 新建一个module 注释 标识符 关键字 标识符注意点 数据类型 public class Demo02 {public st…

免费文本转语音工具体验:祈风TTS使用

简介:语音生成的另一种方式 现在很多人通过视频记录生活,表达观点。拍摄剪辑不难,配音成了常见难题。部分人对自己的声音不够自信,也有人在特定场景下不便出声。文本转语音工具可以成为解决方案。 常见的TTS(Text To…

JS和TS的区别

JavaScript 与 TypeScript 的主要区别和特性对比 1. 基础定义 JavaScript 是一种动态、弱类型的编程语言,广泛应用于前端开发以及通过 Node.js 扩展到后端开发。TypeScript 则是 JavaScript 的超集,它在 JavaScript 的基础上添加了静态类型系统和其他增…

Python实现P-PSO优化算法优化BP神经网络分类模型项目实战

说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 随着人工智能技术的快速发展,神经网络在分类任务中展现了强大的性能。BP(Back Propagation&…