【GAN】生成对抗网络Generative Adversarial Networks理解摘要

news2024/11/18 23:24:23

【Pytorch】生成对抗网络实战_pytorch生成对抗网络-CSDN博客

【损失函数】KL散度与交叉熵理解-CSDN博客

  [1406.2661] Generative Adversarial Networks (arxiv.org)

GAN本质是对抗或者说竞争,通过生成器和鉴别器的竞争获取有效地结果,换句话说,GAN是在养蛊,大量数据和批次的训练最终培养出最合适的蛊王,而不合适的死于对抗。

 

 

目录

GAN的主要思想

GAN的网络结构

GAN的损失函数

优化判别器

优化生成器


GAN的主要思想

GAN模型的思想比较简单,其先假设一个生成图片的神经网络,称为生成器,设为G,它的作用是将随机分布的噪声映射到图像域,简单来说就是神经网络的输入是随机生成的噪声,然后输出是需要的图像;又假设了一个判断图像是真实的图像还是由生成器生成图像的神经网络,称为鉴别器,设为D,它的作用是判断一副图像是真实的还是由生成器生成的,简单来讲就是输入是一副图像,然后输出是0或1,0表示该图像是由生成器生成的,1表示它是真实的图像。

GAN的网络结构

中 G 表示生成器,D 表示判别器,D(x) 输出 [0,1] 之间的数,表示判别器 D 判断数据 x 是真实样本的概率。D(x) 的 label 是 0 和 1,0 表示生成器生成的虚假数据 Xfeak,1 表示 从数据集中采样的真实样本 Xreal。GAN 训练的直接目标有两个:

• 使生成器 G 能够尽可能生成贴近真实样本的虚假数据 

• 使判别器 D 能尽量好地区分真实样本和虚假数据

GAN的损失函数

真实数据分布是p_{data},随机噪声的分布是p_z,GAN 的损失函数为:

\operatorname*{min}_{G}\operatorname*{max}_{D}V(D,G)=\operatorname{E}_{x\sim p_{data}(x)}[\log D(x)]+\operatorname{E}_{z\sim p_{z}(z)}[\log(1-D(G(z)))]

其中 D(x) 表示判别器 D 判定 x 是真实样本的概率,D(G(z)) 表示 D 判定 G(z) 是真实样本的概率。

如果分类器 G 的性能好,在判别器 D 的性能固定的情况下;G(z) 贴近真实样本的概 率较高,则 V(D,G) 更小;如果判别器 D 的性能好,在分类器 G 的性能固定的情况下;则 D(x) 更大,D(G(z)) 更小,则 V(D,G) 更大。

因此生成器 G 的优化目标是{min}_{G}\operatorname*V(D,G),而判别器 D 的优化目标是{max}_{D}V(D,G)。因此此 G 和 D 产生了对抗关系,这也就是生成对抗网络名字的由来。网络希望找到一个 V (G, D), 使其对于生成器来说最小而对于判别器来说最大。

由于 GAN 需要同时训练生成器和判别器,在实际训练中,GAN 先固定生成器,求出最优的判别器 D∗;然后在判别器固定为 D∗ 时求出最优的生成器 G∗。

优化判别器

先假设生成器 G 固定,计算最优的判别器 D∗

\operatorname*{max}_{D}V(D,G)=\operatorname{E}_{x\sim p_{data}(x)}[\log D(x)]+\operatorname{E}_{z\sim p_{z}(z)}[\log(1-D(G(z)))]

x\sim p_{data}(x)为x 服从数据集数据的分布,x 是训练集里的图像数据,即真实的图像。

D(x)为图像数据输入鉴别器D后对应的输出,是一个处于0~1之间的数 。

z\sim p_{z}(z),为z服从随机噪声的分布,z是随机生成的噪声数据,即非真噪声。

G(z)为z输入生成器G后对应的输出,也就是生成器根据噪声生成的(假)图像。

D(G(z))为(假)图像输入鉴别器D后对应的输出,是一个处于0~1之间的数 。

这一步的目的就是优化鉴别器D使得上面这两个平均最大,实际上就是使得log(D(x))尽可能大,也就是D(x)尽可能大,实际意义就是对于真实的图像数据输入,鉴别器应使得输出尽可能接近1,即把它判别为真,然后log(1-D(G(z)))尽可能大,也就是1-D(G(z))尽可能大,也就是D(G(z))尽可能小,实际意义就是对于生成器生成的图像数据输入,鉴别器应使得输出尽可能接近0,即把它判断为假。可以从更严谨的公式推导说明这一点:

$\begin{aligned} V(G,D)& =E_{x\sim p_{data}}[logD(x)]+E_{z\sim p_z}[log(1-D(G(z)))] \\ &=E_{x\thicksim p_{data}}[logD(x)]+E_{x\thicksim p_g}[log(1-D(x))] \\ &=\int p_{data}(x)logD(x)dx+\int p_g(x)log(1-D(x))dx \\ &=\int[ p_{data}(x)logD(x)+p_g(x)log(1-D(x)) ]dx \end{aligned}$

第二行进行了变量替换x = G(z)^2,且p_gp_{data} 是两个不同的分布。目标是找到使积分项 f(x)=p_{data}(x)logD(x)+p_g(x)log(1-D(x))最大的 D∗,且 D∗ 应该与 x 无关, 而是与 p_gp_{data} 相关。由于p_{data}已知,且我们假设 G 固定,则p_g也是固定的,所以只需 使 f(x) 对 D(x) 求导等于 0 即可求出 D∗。即

$\frac{df(x)}{dD(x)}=\frac{p_{data}(x)}{D(x)}-\frac{p_g(x)}{1-D(x)}=0$

从而解得

$D^*=\frac{p_{data}(x)}{p_{data}(x)+p_g(x)}$

从严谨的公式推导层面说明,GAN 的最终目标是训练出一个性能优异的生成器,当生成器生成的数据的分布p_g 与真实数据的分布p_{data}非常接近时,D^\ast =\frac{1}{2},即判别器无法判别生成器生成的数据的真伪。

优化生成器

基于最优的判别器 D∗,计算最优的判别器 G∗

\operatorname*{min}_{G}V(D,G)=\operatorname{E}_{x\sim p_{data}(x)}[\log D(x)]+\operatorname{E}_{z\sim p_{z}(z)}[\log(1-D(G(z)))]

优化生成器G,即使得log(1-D(G(z)))尽可能小,也就是D(G(z))尽可能大,实际意义就是对于生成器G生成的图像判别器判别结果尽可能接近1,即尽可能接近真实图像。

将D∗ 代入V(G,D)可以得到

$\begin{aligned} V(G,D^{*})& =\int p_{data}(x)logD^*(x)dx+\int p_g(x)log(1-D^*(x))dx \\ &=\int p_{data}(x)log\frac{p_{data}(x)}{p_{data}(x)+p_g(x)}dx+\int p_g(x)log\frac{p_g(x)}{p_{data}(x)+p_g(x)}dx \\ &=\int p_{data}(x)log\frac{p_{data}(x)}{\frac{p_{data}(x)+p_g(x)}2}dx+\int p_g(x)log\frac{p_g(x)}{\frac{p_{data}(x)+p_g(x)}2}dx-log4 \\ &=D_{KL}[p_{data}(x)||\frac{p_{data}(x)+p_g(x)}2]+D_{KL}[p_g(x)||\frac{p_{data}(x)+p_g(x)}2]-log4 \\ &=2\cdot D_{JS}[p_{data}(x)||p_g(x)]-log4 \\ &\geq-log4 \end{aligned}$

其中D_{JS}为JS散度,全称为Jensen-Shannon散度,是一种衡量两个概率分布相似程度的方法。JS 散度 D_{JS}是基于 KL 散度计算的,它与 KL 散度一样具有非负性;但与 KL 散度不 同的是,JS 散度具有对称性。关于KL散度,可以参照【损失函数】KL散度与交叉熵理解-CSDN博客

定义 M (x) = \frac{1}{2} (P (x) + Q(x)),从而两个分布 P (x) 和 Q(x) 之间的 JS 散度为:

\begin{aligned} D_{JS}[P(x)||Q(x)]& =\frac12D_{KL}[P(x)||M(x)]+\frac12D_{KL}[Q(x)||M(x)] \\ &=\frac12\int P(x)\left.log\frac{P(x)}{M(x)}dx+\frac12\int Q(x)\right.log\frac{Q(x)}{M(x)}dx \\ &=\frac12\int P(x)\left.log\frac{P(x)}{\frac{P(x)+Q(x)}2}dx+\frac12\int Q(x)\right.log\frac{Q(x)}{\frac{P(x)+Q(x)}2}dx \\ &\in[0,1] \end{aligned}

因此当且仅当p_{data} =p_g时,D_{JS}\left[p_{data}(x)||p_g(x) \right]=0,V(G,D^\ast)=-log4,G=G^\ast

上面两步分布进行,即先优化判别器,再优化生成器。依据这种逻辑多次训练后的生成器生成的数据服从的分布将逐渐有效拟合真实数据。https://arxiv.org/abs/1406.2661​​​​​​​

上图中,黑色散点表示生成器生成的数据服从的分布,绿色线条表示真实数据服从的分布,经过迭代训练,生成器生成的数据服从的分布同真实数据的分布逐渐接近,几乎完全重合。

从而基于这样的损失函数思路,生成的图像将达到较好的逼真效果。https://arxiv.org/abs/1406.2661

 

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

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

相关文章

Unity 与虚幻引擎对比:两大游戏开发引擎的优劣分析

在游戏开发领域,Unity 和虚幻引擎(Unreal Engine)是两款最为知名且广泛使用的引擎。它们各有特点,适合不同类型的开发者和项目。在这篇博客中,我们将深入探讨这两大引擎的核心功能、适用场景、优缺点,以及如…

【Python】Django Grappelli:打造优雅且现代化的 Django 管理后台

在 Django 开发中,默认的 Django Admin 界面尽管功能强大且能满足大多数管理需求,但其界面设计相对基础,尤其在用户体验和视觉呈现上显得较为简约。在一些项目中,开发者可能需要更加现代化且美观的后台界面。这时,Djan…

轻松映射 JavaBean 属性:Hutool BeanUtils 的 toBean 方法使用体验分享

欢迎点点关注:程序猿方,会不定期分享实用技术文章,共同探讨编程魅力! BeanUtils中create()的使用 我们在编程过程中,一个JavaBean对象通常包含了大量的属性,需要把数据库查询的Entity数据,映射…

5.使用 VSCode 过程中的英语积累 - Go 菜单(每一次重点积累 5 个单词)

前言 学习可以不局限于传统的书籍和课堂,各种生活的元素也都可以做为我们的学习对象,本文将利用 VSCode 页面上的各种英文元素来做英语的积累,如此做有 3 大利 这些软件在我们工作中是时时刻刻接触的,借此做英语积累再合适不过&a…

大模型推理任务Nvidia GPU选型指南

大型语言模型 (LLM)(如 GPT-4、BERT 和其他基于 Transformer 的模型)彻底改变了 AI 格局。这些模型需要大量计算资源来进行训练和推理。选择合适的 GPU 进行 LLM 推理可以极大地影响性能、成本效益和可扩展性。 在本文中,我们将探索最适合 L…

【开源免费】基于SpringBoot+Vue.JS美容院管理系统(JAVA毕业设计)

博主说明:本文项目编号 T 055 ,文末自助获取源码 \color{red}{T055,文末自助获取源码} T055,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析…

pcs集群表决盘故障导致主机reboot

建议重建fence设备并配置 PCSOracle HA实战安装配置参考 - 墨天轮

Bluetooth Core 6.0中以Central设备发起Channel Sounding详细流程介绍

当BLE设备间完成连接后,由发起态进入连接态的设备被称为Central device,而由广播态进入连接态的设备被称为peripheral device。当双方设备按照Vol 6, Part D:6.34 Channel Sounding setup phase完成BLE CS的设置后,双方就可以发起…

QT界面制作

作业 1> 创建一个新项目,将默认提供的程序都注释上意义 pro文件 QT core gui #引入类库 core,gui greaterThan(QT_MAJOR_VERSION, 4): QT widgets #超过版本4会加上widgetsCONFIG c11 #支持c11新特性# The following define makes your …

第二节—类与对象(上)

1.面向过程和面向对象初步认识 C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。 C是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成 2.…

Java中的哈希函数

在Java的世界里,哈希函数是一个核心概念,它不仅在数据结构中扮演着重要角色,如哈希表(HashMap、HashSet等),还在安全领域,如密码存储和消息摘要中发挥着至关重要的作用。本文将深入探讨Java中的…

千兆网络变压器HX84801SP POE应用主板

千兆网络变压器HX84801SP POE应用主板: 随着网络时代科技飞速发展,2G到5G时代短短10年实现了目标。 千兆POE交换机是一种高速网络设备,适用于各种网络环境,尤其是需要高带宽和快速数据传输的场合。 千兆网络变压器POE交换机通常采…

HTML基础用法介绍二

目录: 列表 无序列表有序列表定义列表 表格 表格单元格合并 input标签 属性值text和password的使用 输入框中占位文本的使用 属性值radio的使用属性值checkbox的使用属性值file的使用 下拉菜单 文本域 label标签 字符实体 🚘正片开始 无序列表 …

手机/平板端 Wallpaper 动态壁纸文件获取及白嫖使用指南

Wallpaper 动态壁纸文件获取及使用指南 目录 壁纸文件获取手机 / 平板使用手机 / 平板效果预览注意事项PC/Mac 使用 1. 壁纸文件获取链接 链接:夸克网盘分享 复制链接到浏览器打开并转存下载即可。 (主页往期视频的 4K 原图和 mpkg 动态壁纸文件&#xf…

IO端口与IO接口

I/O端口和I/O接口是计算机系统中用于连接外部设备的关键组成部分,两者密切相关,但又有明显的区别: I/O端口 (I/O Port): 定义: I/O端口是内存地址空间中的一组特殊地址,用于与外部设备进行数据交换。CPU通过向这些特定的地址写入…

【C语言】单片机map表详细解析

1、RO Size、RW Size、ROM Size分别是什么 首先将map文件翻到最下面,可以看到 1.1 RO Size:只读段 Code:程序的代码部分(也就是 .text 段),它存放了程序的指令和可执行代码。 RO Data:只读…

MQ基础:RabbitMQ真面目

同步调用方式,指的是发送方直接发送给接收方的形式。而这种方式在某些情况下可能出现问题,比如当业务逻辑变得复杂,同步的方式需要等待上一条指令被接收后才会继续,对性能的影响很大。 异步的方式,增加了一个消息代理…

网络编程(12)——完善粘包处理操作(id字段)

十二、day12 之前的粘包处理是基于消息头包含的消息体长度进行对应的切包操作,但并不完整。一般来说,消息头仅包含数据域的长度,但是如果要进行逻辑处理,就需要传递一个id字段表示要处理的消息id,当然可以不在包头传i…

【Godot4.3】简单物理模拟之圆粒子碰撞检测

概述 最近开始研究游戏物理的内容,研究运动、速度、加速度之类的内容。也开始模仿一些简单的粒子模拟。这些都是一些基础、简单且古老的算法,但是对于理解游戏内的物理模拟很有帮助。甚至你可以在js、Python或者其他程序语言中实现它们。 图形的碰撞检…

Linux操作系统中SpringGateway

1、SpringGateway简介 核心功能有三个: 路由:用于设置转发地址的 断言:用来判断真实应该请求什么地址 过滤器:可以过滤地址和处理参数 1、什么是网关 网关是后台服务的统一入口,类似于平时网络里提到的网关。 2…