【神经网络】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.rhkb.cn/news/188498.html

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

相关文章

关于session的不断变化问题

今天在帮同学解决一个小问题,差点阴沟翻船。 问题再现:他从github上拉了一个项目下来跑,结果发生跑不通问题出现在验证码一直不对。 我一看项目源码,验证码生成后存储再session中了,等用户发送请求验证的时候sessionI…

【刷题】力扣每日一题 : 381、2300、765

前言 本篇文章用于记录在做力扣每日一题的时候遇到的一些知识点以及自己的思路 381 题干 题目链接 我的思路及做题过程 思路1 我的想法是 记录每个字符串的字母出现个数 然后比较两个字符串是否有字母同时出现 class Solution { public:int judge(string s1, string s2…

vscode因为大文件而无限崩溃的问题,窗口意外终止(原因:“oom“,代码:“-536870904“

复制了一大堆的代码(好几兆)到一个文件里,然后就导致 vscode 卡死, 之后就算把该文件删掉了,打开vscode还是会默认打开该文件而卡死 解决办法: win R 输入 %appdata%/code/ 删除该文件夹下的 backups/ 文件…

索尼RSV文件怎么恢复为MP4视频

索尼相机RSV是什么文件? 如果您的相机是索尼SONY A7S3,A7M4,FX3,FX3,FX6,或FX9等,有时录像会产生一个RSV文件,而没有MP4视频文件。RSV其实是MP4的前期文件,经我对RSV文件…

CSS特效006:绘制不断跳动的心形

css实战中,怎么绘制不断跳动的心形呢? 绘图的时候主要用到了transform: rotate(-45deg); transform-origin: 0 100%; transform: rotate(45deg); transform-origin: 100% 100%; 动画使用keyframes 时间上为infinite。 效果图 源代码 /* * Author: 大剑…

切换数据库的临时表空间为temp1 / 切换数据库的undo表空间为 undotbs01

目录 ​编辑 一、切换临时表空间 1、登录数据库 2、查询默认临时表空间 3、创建临时表空间temp1(我们的目标表空间) 4、修改默认temp表空间 5、查询用户默认临时表空间 6、命令总结: 二、切换数据库的undo表空间 1、查询默认undo表…

【iOS开发】iOS App的加固保护原理:使用ipaguard混淆加固

​ 摘要 在开发iOS应用时,保护应用程序的安全是非常重要的。本文将介绍一种使用ipaguard混淆加固的方法来保护iOS应用的安全。通过字符串混淆、类名和方法名混淆、程序结构混淆加密以及反调试、反注入等主动保护策略,可以有效地保护应用程序的安全性。 …

SparkSQL语法优化

SparkSQL在整个执行计划处理的过程中,使用了Catalyst 优化器。 1 基于RBO的优化 在Spark 3.0 版本中,Catalyst 总共有 81 条优化规则(Rules),分成 27 组(Batches),其中有些规则会被归…

2.docker镜像的导入导出

目录 概述docker 常用命令下载导出导入镜像结束 概述 docker 常用命令 本章节使用到的命令,总结在此,后面有使用案例。 命令作用docker images显示镜像docker rmi $(docker images -q)删除系统上所有的镜像docker rmi -f强制删除多个镜像 &#xff1a…

LeetCode146.LRU缓存

写了一个小时,终于把示例跑过了,没想到啊提交之后第19/22个测试用例没过 我把测试用例的输出复制在word上看看和我的有什么不同,没想到有18页的word,然后我一直检查终于找出了问题,而且这个bug真的太活该了&#xff0c…

云栖大会丨桑文锋:打造云原生数字化客户经营引擎

近日,2023 云栖大会在杭州举办。今年云栖大会回归了 2015 的主题:「计算,为了无法计算的价值」。神策数据创始人 & CEO 桑文锋受邀出席「生态产品与伙伴赋能」技术主题,并以「打造云原生数字化客户经营引擎」为主题进行演讲。…

男科医院服务预约小程序的作用是什么

医院的需求度从来都很高,随着技术发展,不少科目随之衍生出新的医院的,比如男科医院、妇科医院等,这使得目标群体更加精准,同时也赋能用户可以快速享受到服务。 当然相应的男科医院在实际经营中也面临痛点:…

微服务-我对Spring Clound的理解

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

什么是Amazon Simple Email Service(SES 群发邮件)

Amazon Simple Email Service(Amazon SES)让您可以使用 Amazon SES API 或 SMTP 接口放心地联络到客户,而无需使用本地简单邮件传输协议(Simple Mail Transfer Protocol,SMTP)电子邮件服务器。 目录 什么是…

最新支付宝转卡码生成之转账源代码(隐藏部分卡号)

一、需要准备好自己的卡号、名称、以及对应的姓名 二、然后将自己的信息填入下面的代码中 三、然后将拼接好的代码,利用转码技术生产对应的二维码 四、这样一个跳转银行卡二维码的转账码就做好了 效果演示:如下 支付宝扫码、跳转码、转卡码、隐藏卡号…

classification_report分类报告的含义

classification_report分类报告 基础知识混淆矩阵(Confusion Matrix)TP、TN、FP、FN精度(Precision)准确率(Accuracy)召回率(Recall)F1分数(F1-score) classi…

Linux编辑器---vim的使用

Vim是一个高度可配置的文本编辑器,它是操作Linux的一款利器,旨在高效地创建和更改任何类型的文本。这款编辑器起源于"vi",并在此基础上发展出了众多新的特性。Vim被普遍推崇为类Vi编辑器中最好的一个,事实上真正的劲敌来…

asp.net core自定义异常过滤器并记录到Log4Net日志

1.创建异常过滤器特性 using Log4Net.Controllers; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Filters;namespace Log4NetTest {public class CustomerExceptionFilterAttribute : Attribute, IExceptionFilter{private readonly ILogger<CustomerE…

docker通过nginx代理tomcat-域名重定向

通过昨天的调试&#xff0c;今天做这个域名就简单了&#xff0c; 正常我们访问网站一般都是通过域名比如&#xff0c;www.baidu.com对吧&#xff0c;有人也通过ip&#xff0c;那么这个怎么做呢&#xff1f;物理机windows可以通过域名访问虚拟机linux的nginx代理转向tomcat服务…

【多线程 - 01、概述】

进程 几乎所有的操作系统都支持进程概念&#xff0c;进程是处于运行过程中的程序&#xff0c;进程是操作系统中进行资源分配的基本单位。 三个基本特征 独立性&#xff1a;指进程实体是一个能独立运行、独立获得资源和独立接受调度的基本单位。而对于未建立任何进程的程序&…