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

【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.mzph.cn/pingmian/54952.shtml

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

相关文章

每日一练 2024.9.29(2)

目录 解题思路与代码实现 题目分析 一、解题策略 关键步骤: 二、代码实现 三、代码解析 四、复杂度分析 五、运行示例 示例1: 示例2: 六、总结 解题思路与代码实现 题目分析 这道题目要求我们找到字符串列表 strs 中的相似字符组…

C++——vector

1.简介 2.成员函数 2.1构造函数 void test_vector1() {//1.无参构造vector<int> v1;cout << v1.capacity() << endl;//2.传参构造vector<int> v2(10,1);//3.迭代器构造vector<int> v3(v2.begin(), v2.end());//也可以使用其它容器的迭代器区间来…

scrapy快速上手

安装 除了scrapy本身还要安装两个库 pip install scrapy pip install pywin32 pip install wheel 创建项目 在要创建项目的地方打开powershell scrapy startproject 项目名 我们得到这样的项目结构&#xff0c;功能如下 scrapy.cfg 项目的主配置信息 …

DMA传输原理详解

DMA-(Data Memory Access) 作用 直接存储器存取(DMA)用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传 输。无须CPU干预&#xff0c;数据可以通过DMA快速地移动&#xff0c;这就节省了CPU的资源来做其他操作。两个DMA控制器有12个通道(DMA1有7个通道&#xff0c;…

LeetCode[中等] 17. 电话号码的字母组合

给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 思路 回溯法 log&#xff1a;当前结果数组&#xff1b;level&#xff1a…

第五届计算机科学与管理科技国际学术会议(ICCSMT 2024)

梁哲&#xff0c;同济大学长聘特聘教授&#xff0c;国家杰青、首届国家杰青延续项目获得者、上海市曙光学者、上海市优秀学术带头人。本科毕业于新加坡国立大计算机工程系、硕士毕业于新加坡国立大学工业与系统工程系、博士毕业于美国新泽西州立大学工业工程系。理论研究主要集…

修改Opcenter EXFN 页面超时时间(Adjust UI Session Extend Token)

如果你想修改Opcenter EXFN中页面Session的超时时间&#xff0c;你可以按照如下步骤修改SessionAge 这个参数&#xff1a; 管理员运行CMD执行以下命令 umconf -getconfig -file C:\temp\config.json如果第2步有报错&#xff0c;则执行步骤4;如果没有报错则执行第5步如果第2步…

探索光耦:光耦在电脑电源中的应用及其重要性

随着计算机技术的飞速发展&#xff0c;电脑已成为现代生活和工作中不可或缺的工具。无论是日常办公、游戏娱乐还是复杂的图像处理&#xff0c;电脑电源的稳定性和安全性都至关重要。作为电脑电源的核心部件之一&#xff0c;光耦&#xff08;光电耦合器&#xff09;在提升电源性…

JavaScript网页设计案例:互动式简历网站

JavaScript网页设计案例&#xff1a;互动式简历网站 在现代网页设计中&#xff0c;JavaScript 是实现交互和动态效果的关键技术。本文将通过一个完整的案例&#xff0c;展示如何使用 JavaScript 构建一个交互式的个人简历网页。本文不仅会涵盖 HTML 和 CSS 的使用&#xff0c;…

android和ios双端应用性能的测试工具

1.工具介绍 基于日常工作的需要&#xff0c;开发了一款新的android和ios端应用性能测试工具&#xff0c;本工具在数据测试方面与所流行的工具没有区别。欢迎下载使用体验。 本工具为筋斗云&#xff0c;工具说明 本工具无侵入&#xff0c;不需要root&#xff0c;低延迟…

(十七)、Mac 安装k8s

文章目录 1、Enable Kubernetes2、查看k8s运行状态3、启用 kubernetes-dashboard3.1、如果启动成功&#xff0c;可以在浏览器访问3.2、如果没有跳转&#xff0c;需要单独安装 kubernetes-dashboard3.2.1、方式一&#xff1a;一步到位3.2.2、方式二&#xff1a;逐步进行 1、Enab…

如何恢复被删除的 GitLab 项目?

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料&#xff1a; 极狐GitLab 官网极狐…

发明专利实用新型专利外观设计专利

发明专利是对一种新产品、新方法或其改进所提出的技术方案进行保护的一种知识产权形式。发明专利对于技术创新有着较高的要求&#xff0c;通常涉及到较复杂的技术内容和较长期的研发工作。以下是有关发明专利的基本信息&#xff1a; 1. 保护对象 发明专利可以保护产品、方法或…

time命令:轻松测量Linux命令执行时间!

一、命令简介 用途&#xff1a; 用于测量 Linux 命令执行的时间&#xff0c;包括实际时间、用户 CPU 时间和系统 CPU 时间。刚开始以为是用来“看现在几点钟”的 &#x1f972;。标签&#xff1a; 实用工具&#xff0c;性能分析。 ‍ 二、命令参数 2.1 命令格式 time [选项…

进程的那些事--实现shell

目录 前言 一、预备知识 二、实现步骤 1.思路 2.实现 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 学习的本质就是变现 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、预备知识 char * fgets ( char * str, i…

【C语言】__attribute__((packed))与#pragma pack

1、简介 在 C 语言中&#xff0c;自动对齐是指编译器会根据不同的数据类型自动调整它们在内存中的位置&#xff0c;确保它们按照特定的字节边界存储。这种做法可以让处理器更高效地读取和存储数据。 举个例子&#xff0c;像 int 这样的 4 字节数据通常会被对齐到 4 字节的边界上…

计算一个矩阵的逆矩阵的方法

计算一个矩阵的逆矩阵&#xff0c;主要适用于方阵&#xff08;行数与列数相同的矩阵&#xff09;&#xff0c;且只有非奇异矩阵&#xff08;行列式不为零的矩阵&#xff09;才有逆矩阵。逆矩阵 A − 1 A^{-1} A−1 满足以下条件&#xff1a; A A − 1 A − 1 A I A \time…

极狐GitLab 17.4 重点功能解读【一】

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料&#xff1a; 极狐GitLab 官网极狐…

js中正则表达式中【exec】用法深度解读

exec() 是 JavaScript 正则表达式对象&#xff08;RegExp&#xff09;中的一个方法&#xff0c;用于匹配字符串中的特定模式&#xff0c;并返回匹配结果。它比 test() 和 match() 更强大&#xff0c;因为它不仅仅返回匹配成功与否&#xff0c;还返回匹配的具体内容及其相关信息…

讯飞星火编排创建智能体学习(二)决策节点

目录 概述 决策节点 文生图节点 连接节点 测试结果 概述 在上一篇博文讯飞星火编排创建智能体学习&#xff08;一&#xff09;最简单的智能体构建-CSDN博客&#xff0c;我介绍了编排创作智能体&#xff0c;这篇来介绍一下“决策节点”。 决策节点 在编排创作智能体中&…