【神经网络】GAN:生成对抗网络

GAN:生成对抗网络

Generator(生成器)概念

和传统的神经网络不同,Generator除了接受x的输入之外,还会接受一个简单的分布作为z进行输入,从而使得网络的输出也是一个复杂的分布

为什么输出需要时一个分布呢?以视频预测为例,比如说在糖豆人游戏中,我们需要预测视频的接下来的10帧是怎么样的

问题是传统的神经网络(NN)训练出来的结果,在拐角处,一个糖豆人会分裂为两个糖豆人,一个向左一个向右,这是因为在普通NN中,糖豆人向左和向右都有可能,是概率不同,因此他将这两个结果都显示了出来

更抽象地说,当我们的输出需要有一些“创造力”,也就是面对一个输入,需要有多个混合的输出的时候,我们就需要Generator,比如说在画图方面,同样输入“白发红瞳”,不同的人会画出不同的样子

因此其输入反而是一个相对低维度的向量,而输出是一个很高维度的向量。比如说一个一维向量代表了生成动漫人物的特征(发色、瞳距、表情等),而输出则是一张动漫图片,这肯定比输入要高纬度。刚开始的低维输入指的是x,而为了给生成器一个基准,我们还会输入一些动漫图片的采样,这个就是z

GAN

除了Generator之外,还需要一个Discriminator(鉴别器),他会输出一个数字,用于评判输出符合输入的程度。

以动画生成为例:
在GAN中,第一次迭代几乎是随机生成的,因此一般会生成一塌糊涂,而鉴别器则会给出很低的分数,比如鉴别器通过是否有眼睛判断是否是动漫
下一次迭代中,生成器会进行优化,尽量去满足第一代鉴别器的要求,使得在鉴别器Gen 1中得到较高的分数
而鉴别器也会进化,采用更加复杂的策略来进行评判

以此类推,不断进化,最后使得生成的结果越来越像输入x和z

进一步详细说明,刚开始我们会传入x和一个分布z到GAN中
Step 1
固定生成器,训练鉴别器

这个z实际上是一些动漫图片的采样,因为如果是纯随机生成的一代GAN,估计会跟电视坏了一样,因此给一些适当的基准是好的

接着我们用真正的动漫图片作为数据集1,并且对比数据集1和GAN生成的图片的差异,用这个去生成能够将真实数据(数据集1)和GAN生成图片分离开来的鉴别器

Step 2
固定鉴别器Discriminator ,训练生成器,使得生成器产生出来的图片能够“欺骗”鉴别器,因为鉴别器参数已经被固定了,所以生成器可以不断改变自身参数,生成出鉴别器更喜欢的图像,从而提高鉴别器分数

反复进行Step1和Step2,使得他们不断进化。也就是生成器不断调整参数使得它能够“欺骗”鉴别器,使得鉴别器认为它生成的图片就是一张真实的动漫图片;而鉴别器的任务则是仔细寻找生成图片和真实图片的区别,使得它能够区分生成的图

Generator详解

以一维向量为例,z作为一个随机采样的分布,他采样是相对平均的,而 P d a t a P_{data} Pdata表示的是真实数据,可以看到,经过生成器之后,生成出来的 P G P_G PG已经很接近 P d a t a P_{data} Pdata

简单来说,生成器的评判标准和最优化反向,是让生成结果 P G P_G PG尽量接近 P d a t a P_{data} Pdata,公式如下
G ∗ = a r g m i n G D i v ( P G , P d a t a ) G^* = arg\:min_G\: Div(P_G, P_{data}) G=argminGDiv(PG,Pdata)
也就是要对G进行取值,使得Div(P_G, P_{data})最小,也就是使得 P G P_G PG P d a t a P_{data} Pdata更接近 。

对鉴别器D的训练也是如此,分别对 P G P_G PG P d a t a P_{data} Pdata进行采样。当 P G P_G PG P d a t a P_{data} Pdata中的点比较接近的时候, V ( D , G ) V(D,G) V(D,G)是较小的。但是对于鉴别器来说,他的任务是要将生成的图片和真实的图片区分开来,也就是 P G P_G PG P d a t a P_{data} Pdata分得越开越好,因此 m a x D V ( D , G ) max_D\:V(D,G) maxDV(D,G),也就是寻找参数D,使得 V ( D , G ) V(D,G) V(D,G)最大

实际上,在公式 G ∗ = a r g min ⁡ G D i v ( P G , P d a t a ) G^* = arg\:\min_G\: Div(P_G, P_{data}) G=argminGDiv(PG,Pdata)中, D i v Div Div函数是很难计算的,但好消息是 D i v ( ) Div() Div()的结果和 m a x D V ( D , G ) max_D\:V(D,G) maxDV(D,G)是近似的(在此不作数学证明),因此 G ∗ G* G可以写作
G ∗ = a r g min ⁡ G max ⁡ D ( D , G ) G^* = arg\:\min\limits_{G}\: \max_D\:(D,G) G=argGminDmax(D,G)
也就是说,生成器要寻找参数G,使得 max ⁡ D ( D , G ) \max_D\:(D,G) maxD(D,G)最小,而鉴别器需要寻找参数D,使得 D ( D , G ) D\:(D,G) D(D,G)最大。这就是GAN的对抗过程,对应上面介绍的step1和step2,因此方程G*就是GAN的最优化方程

GAN训练小技巧(施工中)

Wasserstein distance

对于 P G P_G PG P d a t a P_{data} Pdata,他们的重叠空间可能及其小。如果数据维度越高,那想要重合的难度也就越高。

第二个是因为在对 P G P_G PG P d a t a P_{data} Pdata处理的时候,我们都是进行采样处理,很难知道两个分布的全貌,这也使得两个分布明明是重叠的,但我们仅靠采样判断的话,看似是可以画一条线将他们分开的。 P G P_G PG P d a t a P_{data} Pdata部分重叠代表着生成器在当前G1的参数下生成的内容是和真实样本相近的,但是在鉴别器上,他看起来和完全无重叠的情况一样,也就是鉴别器会认为他们完全不相像,这会使得生成器认为G1参数很烂,从而不采用它

最简单的解决方案就是直接增加采样数量,但是这会增加训练时间

后来有一种新方法称之为Wasserstein distance
这种方法类似一种推土机,会整体地考虑两个点集之间的距离,而非直接使用二分,其最优化公式如下
max ⁡ D ∈ 1 − L i p s c h i t z E x P d a t a [ D ( x ) ] − E x P G [ D ( x ) ] \max_{D\in1-Lipschitz}{E_{x~P_{data}}[D(x)]-E_{x~P_{G}}[D(x)]} D1LipschitzmaxEx Pdata[D(x)]Ex PG[D(x)]

GAN

GAN由生成器和鉴别器组成,这也导致只要有其中一方出现问题,就会导致整个系统瘫痪。

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

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

相关文章

VScode + opencv(cmake编译) + c++ + win配置教程

1、下载opencv 2、下载CMake 3、下载MinGW 放到一个文件夹中 并解压另外两个文件 4、cmake编译opencv 新建文件夹mingw-build 双击cmake-gui 程序会开始自动生成Makefiles等文件配置,需要耐心等待一段时间。 简单总结下:finish->configuring …

Linux的make和Makefile

目录 一、 介绍二、快速使用三、依赖关系和依赖方法四、语法 一、 介绍 1、makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。 2、make是一个命令工具&…

Python异常处理:三种不同方法的探索与最佳实践

Python异常处理:三种不同方法的探索与最佳实践 前言 本文旨在探讨Python中三种不同的异常处理方法。通过深入理解各种异常处理策略,我们可以更好地应对不同的编程场景,选择最适合自己需求的方法。 异常处理在编程中扮演着至关重要的角色。合…

Win10共享打印机,别人连接不上出现无法连接到打印机错误码0x0000011b

环境: Win10 专业版 惠普L1119 问题描述: Win10共享打印机,别人连接不上出现无法连接到打印机错误码0x0000011b 解决方案: 1.打开我这台电脑的注册表找到 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Print在右侧…

JVM之类加载器

文章目录 版权声明类加载器类加载器的分类启动类加载器拓展类加载器&应用程序类加载器 双亲委派机制解决三个问题 打破双亲委派机制自定义类加载器案例演示线程上下文类加载器案例梳理OSGi模块化 版权声明 本博客的内容基于我个人学习黑马程序员课程的学习笔记整理而成。我…

KVM虚拟机迁移原理与实践

虚拟机迁移 迁移(migration)包括系统整体的迁移和某个工作负载的迁移,系统整体迁移是将系统上的所有软件,包括操作系统,完全复制到另一台物理硬件机器上,而工作负载迁移仅仅迁移特定的工作负载。 虚拟化技术的出现,丰…

Linux学习第二枪(yum,vim,g++/gcc,makefile的使用)

前言:在我的上一篇Linux博客我已经讲了基础指令和权限,现在我们来学习如何在Linux上运行和执行代码 目录 一,yum 二,vim 1)命令行模式 2)插入模式 3)底行模式 三,gcc/g 四&a…

MATLAB的编程与应用,匿名函数、嵌套函数、蒙特卡洛法的掌握与使用

目录 1.匿名函数 1.1.匿名函数的定义与分类 1.2.匿名函数在积分和优化中应用 2.嵌套函数 2.1.嵌套函数的定义与分类 2.2.嵌套函数彼此调用关系 2.3.嵌套函数在积分和微分中应用 3.微分和积分 4.蒙特卡洛法 4.1.圆周率的模拟 4.2.计算N重积分(均匀分布&am…

计算机提示找不到xinput1_3.dll怎么办?6个xinput1_3.dll丢失完美解决方案分享

xinput1_3.dll是Windows操作系统中的一个重要动态链接库文件,它负责处理游戏控制器和其他输入设备的相关功能。当计算机出现xinput1_3.dll缺失的问题时,可能会导致无法正常使用游戏控制器或其他输入设备。下面是针对这个问题的6个解决方法: 方…

微服务-我对Spring Clound的理解

官网:https://spring.io/projects/spring-cloud 官方说法:Spring Cloud 为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理、服务发现、熔断器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话…

分布式搜索引擎ES

文章目录 初识elasticsearch了解ES倒排索引正向索引倒排索引正向和倒排 es的一些概念文档和字段索引和映射mysql与elasticsearch 安装ES部署kibana安装IK分词器扩展词词典停用词词典 索引库操作mapping映射属性索引库的CRUD创建索引库和映射查询索引库修改索引库删除索引库 文档…

ChatGPT 如何改变科研之路

《Nature》全球博士后调查[1]中约有三分之一的受访者正在使用人工智能聊天机器人来帮助完善文本、生成或编辑代码、整理其领域的文献等等。 来自巴西的 Rafael Bretas 在日本生活了十多年,日语说得很好。书面日语的各个方面,例如严格的礼貌等级制度&…

【Linux基础IO篇】用户缓冲区、文件系统、以及软硬链接

【Linux基础IO篇】用户缓冲区、文件系统、以及软硬链接 目录 【Linux基础IO篇】用户缓冲区、文件系统、以及软硬链接深入理解用户缓冲区缓冲区刷新问题缓冲区存在的意义 File模拟实现C语言中文件标准库 文件系统认识磁盘对目录的理解 软硬链接软硬链接的删除文件的三个时间 作者…

2023.11.11 hive中的内外部表的区别

一.内部表操作 ------------------------------1内部---------------------------- --建库 create database hive2; --用库 use hive2; --删表 drop table t1; --建表 create table if not exists t1(id int,name string,gender string ); --复制内部表 --复制表结构:CREATE T…

计算机视觉中目标检测的数据预处理

本文涵盖了在解决计算机视觉中的目标检测问题时,对图像数据执行的预处理步骤。 首先,让我们从计算机视觉中为目标检测选择正确的数据开始。在选择计算机视觉中的目标检测最佳图像时,您需要选择那些在训练强大且准确的模型方面提供最大价值的图…

基于ubuntu 22, jdk 8x64搭建图数据库环境 hugegraph--google镜像chatgpt

基于ubuntu 22, jdk 8x64搭建图数据库环境 hugegraph download 环境 uname -a #Linux whiltez 5.15.0-46-generic #49-Ubuntu SMP Thu Aug 4 18:03:25 UTC 2022 x86_64 x86_64 x86_64 GNU/Linuxwhich javac #/adoptopen-jdk8u332-b09/bin/javac which java #/adoptopen-jdk8u33…

2023年05月 Python(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 下列程序段的运行结果是?( ) def s(n):if n==0:return 1else:

畅通工程之局部最小花费问题 (C++)

目录 题目&#xff1a; 思路&#xff1a; 代码&#xff1a; 结果 题目&#xff1a; 思路&#xff1a; 详细思路都在代码注释里 。 代码&#xff1a; #include<iostream>//无向图邻接矩阵 #include<map> #include<algorithm> #define mvnum 1005 using …

​​​​​​​​​​​​​​汽车网络信息安全分析方法论

目录 1.典型信息安全分析方法 1.1 HEAVENS威胁分析模型 1.2 OCTAVE威胁分析方法 1.3 Attack Trees分析方法 2. 功能安全与信息安全的关系讨论 与Safety的典型分析方法一样&#xff0c;Security也有一些典型的信息安全威胁分析方法(TARA分析)&#xff0c;根据SAE J3061、I…

cortex-A7核 中断实验(按键中断实验)

1.选择按键触发方式 下降沿 2.解决消抖的方法 1&#xff09;ARM中&#xff1a;延时消抖 2&#xff09;linux驱动开发&#xff1a;定时器函数 3.框图 内部流程框图&#xff1a; 需要RCC GPIO EXTI GIC章节 中断触发流程&#xff1a; 4.RCC 章节 1&#xff09;使能GPIOF组 …