生成对抗网络

news2024/12/28 17:59:20

1 GAN基本概念

1.1 GAN介绍

GAN的英文全称是Generative Adversarial Network,中文名是生成对抗网络。它由两个部分组成,生成器和鉴别器(又称判别器),生成网络(Generator)负责生成模拟数据;判别网络Discriminator)负责判断输入的数据是真实的还是生成的。生成网络要不断优化自己生成的数据让判别网络判断不出来,判别网络也要优化自己让自己判断得更准确。它们之间的关系可以用竞争或敌对关系来描述。

​ 在GAN的原作中,作者将生成器比喻为印假钞票的犯罪分子,判别器则类比为警察。犯罪分子努力让钞票看起来逼真,警察则不断提升对于假钞的辨识能力。二者互相博弈,随着时间的进行,都会越来越强。那么类比于图像生成任务,生成器不断生成尽可能逼真的假图像。判别器则判断图像是否是真实的图像,还是生成的图像,二者不断博弈优化。最终生成器生成的图像使得判别器完全无法判别真假。

1.2 GAN的基本架构图

生成器负责依据随机向量产生内容,这些内容可以是图片、文字,也可以是音乐,具体什么取决于你想要创造什么;判别器负责判别接收的内容是否是真实的,通常他会给出一个概率,代表内容的真实度。

对抗是指GAN的交替训练的过程,对于原始的GAN,以图片生成为例子,由高斯分布随机采样得到的噪声通过生成器得到了生成的假图片,将假图片和真图片一起随机抽取送入判别器判别,让它学习区分两者,给真的高分,给假的低分,当判别器能够熟练判断现有的数据后,再让生成器以从判别器处获得高分为目标,不断生成更好的假图片,直到能骗过判别器,重复这一过程,直到判别器对任何图片的预测概率都接近0.5,也就是无法判别图片的真假,就可以停止训练了。对抗式过程的最终目标是尽可能逼真地模拟数据集的分布。

 我们训练一个GAN的最终目标就是获得一个足够好的生成器,也就生成一个足够已经乱真的内容

 1.3 GAN原理简述

生成器和判别器都是神经网络,它们在训练阶段都相互竞争。重复这些步骤,在这个过程中,生成器和鉴别器在每次重复后在各自的工作中变得越来越好。

Generator 

GAN中的Generator是一种神经网络,给定一组随机的值,通过一系列非线性计算产生真实的图像。该生成器产生假图像 Xfake​,其中随机向量Z,服从多元高斯分布采样。 生成器的输入是服从多元正态分布或高斯分布采样,并生成一个等于原始图像Xreal​大小的输出。如下是一个以随机矢量为输入,生成假数字图像的生成器的流程图。

生成器的作用是:  欺骗的判别器、产生逼真的图像、训练完成后能实现高性能生成效果。

 

Discriminator

在GAN中判别器基于判别建模的概念,它试图用特定的标签对数据集中的不同类进行分类。因此,在本质上,它类似于一个监督分类问题。此外,判别器对观察结果的分类能力不仅限于图像,还包括视频、文本和许多其他领域(多模态)。以下是判别器将生成器生成的图像,分类判断真假的流程图。

判别器的作用是解决一个二值分类问题,学习区分真假图像:预测观察结果是由生成器(假的)生成,还是来自原始数据分布(真实的),在此过程中,它学习一组参数或权重。随着训练的进行,权重也在不断更新。

 

2 GAN的样本生成过程

 GAN模型不是一上来就能实现具体功能的,需要经历一个训练的过程。我将其训练前后状态称为“原始的GAN模型”和“成熟的GAN模型”,原始的GAN模型要经过一个训练的过程成为一个成熟的GAN模型,而这个“成熟的GAN模型”才是我们实际应用的GAN模型。这个训练过程具体是训练生成网络(Generator)和判别网络(Discriminator)。

生成器G是一个生成图片的网络,它接收一个随机的噪声 z ,通过这个噪声生成图片,生成的图片记做G(z)。判别器D判别一张图片是不是“真实的”。它的输入是 x , x 代表一张图片(其中,x  包含生成图片和真实图片,对于生成图片有 x=G(z) ,输出D(x)代表 x为真实图片的概率,如果为1,就代表100%是真实的图片,而输出为0,就代表图片0%是真的(或者说100%是假的)

 

2.1 训练过程

    生成器和鉴别器一对博弈关系:鉴别器惩罚生成器,鉴别器收益,生成器损失;生成器进化,使鉴别器对自己惩罚小,生成器收益,鉴别器损失。

具体过程:生成器生成假数据,然后将生成的假数据和真数据都输入判别器,判别器要判断出哪些是真的哪些是假的。判别器第一次判别出来的肯定有很大的误差,然后我们根据误差来优化判别器。现在判别器水平提高了,生成器生成的数据很难再骗过判别器了,所以我们得反过来优化生成器,之后生成器水平提高了,然后反过来继续训练判别器,判别器水平又提高了,再反过来训练生成器,就这样循环往复,直到达到纳什均衡。

2.2 损失函数

生成模型捕获数据的分布,并以尝试最大化判别器出错的概率的方式进行训练。另一方面,判别器基于一个模型,该模型估计它获得的样本是从训练数据而不是从生成器接收的概率。GAN 被表述为一个极小极大游戏,其中判别器试图最小化其奖励V(D, G),而生成器试图最小化判别器的奖励,或者换句话说,最大化其损失。

对于生成网络G,其输入的 z

它可以用以下公式在数学上描述。

  生成网络的损失函数L_{G}=H(1,D(G(z)))

 上式中,G 代表生成网络,D 代表判别网络,H 代表交叉熵,z 是输入随机数据。D(G(z)) 是对生成数据的判断概率,1代表数据绝对真实,0代表数据绝对虚假。H(1,D(G(z))) 代表判断结果与1的距离。显然生成网络想取得良好的效果,那就要做到,让判别器将生成数据判别为真数据(即D(G(z))与1的距离越小越好)。

   判别网络的损失函数L_{D}=H(1,D(x))+H(0,D(G(z)))
上式中,x是真实数据,这里要注意的是,H(1,D(x))代表真实数据与1的距离,H(0,D(G(z)))代表生成数据与0的距离。显然,识别网络要想取得良好的效果,那么就要做到,在它眼里,真实数据就是真实数据,生成数据就是虚假数据(即真实数据与1的距离小,生成数据与0的距离小)。

 

   优化原理:生成网络和判别网络有了损失函数,就可以基于各自的损失函数,利用误差反向传播(Backpropagation)(BP)反向传播算法和最优化方法(如梯度下降法)来实现参数的调整),不断提高生成网络和判别网络的性能(最终生成网络和判别网络的成熟状态就是学习到了合理的映射函数)。
 

采用Binary Cross-Entropy(BCE)损失函数对判别器进行训练。

以深度卷积神将网络为例(DCGAN)
生成网络:卷积神经网络+反卷积神经网络(前者负责提取图像特征,后者负责根据输入的特征重新生成图像(即假数据))。
判别网络:卷积神经网络+全连接层处理(传统神经网络)(前者负责提取图像特征,后者负责判别真假。)

GAN的应用  

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

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

相关文章

【Python】异常处理 ④ ( 异常处理 else 语句 | 异常处理 finally 语句 )

文章目录 一、Python 异常捕获 else 语句1、异常捕获 else 语句2、代码示例 - 没有触发 else 语句的情况3、代码示例 - 触发 else 语句的情况 二、Python 异常捕获 finally 语句1、异常捕获 finally 语句2、代码示例 - 出现异常后执行 finally 语句 一、Python 异常捕获 else 语…

展示和标注图像:探索Gradio AnnotatedImage模块的功能

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…

代码生成器原理分析

代码生成器原理分析 理解代码生成器的需求和实现思路掌握freemaker的使用 理解数据库中的元数据完成环境搭建工作 浅谈代码生成器 概述 在项目开发过程中,关注点更多是在业务功能的开发及保证业务流程的正确性上,对于重复性的代码编写占据了程 序员…

指标综合评价(定性指标定量化、指标正相关化、赋权重)

目录 一、定性指标定量化 二、将指标同型化 线性比例变换法 极差变换法 二、评价指标赋予权重 三、综合评价 战斗机性能的综合评价问题 例:战斗机的性能指标主要包括最大速度、飞行半径、最大负载、隐身性能、垂直起降性能、可靠性、灵敏度等指标和相关费用。…

Vue+Element UI 生鲜管理系统简介及项目搭建,页面布局(一)

文章目录 浅谈一、背景二、搭建创建vue项目vue项目结构简介安装Element UI库安装axios安装querystring安装normalize.css安装echarts运行删除无用组件基础css样式导入 三、页面布局配置路由布局flex布局(弹性盒子)固定布局固定布局配置路由 浅谈 自从入…

【Rust】2、实战:文件、网络、时间、进程-线程-容器、内核、信号-中断-异常

文章目录 七、文件和存储7.2 serde 与 bincode 序列化7.3 实现一个 hexdump7.4 操作文件7.4.1 打开文件7.4.2 用 std::fs::Path 交互 7.5 基于 append 模式实现 kv数据库7.5.1 kv 模型7.5.2 命令行接口 7.6 前端代码7.6.1 用条件编译定制要编译的内容 7.7 核心:LIBA…

【Java高级语法】(十五)lambda表达式:给你一颗语法糖Lambda,解析函数式编程的杰作~

Java高级语法详解之lambda表达式 1️⃣ 概念2️⃣ 优势和缺点3️⃣ 使用3.1 语法结构3.2 案例3.2.1 无参Lambda3.2.2 带有一个参数3.2.3 带有多个参数3.2.4 方法引用的简化形式 4️⃣ 应用场景5️⃣ 优化技巧6️⃣ 原理7️⃣ 注意性能问题🌾 总结 1️⃣ 概念 Java …

架构设计第十一讲:架构之高并发:限流

架构设计第十一讲:架构之高并发:限流 每个系统都有服务的上线,所以当流量超过服务极限能力时,系统可能会出现卡死、崩溃的情况,所以就有了降级和限流。限流其实就是:当高并发或者瞬时高并发时,为…

rabbitmq第三课-RabbitMQ高级功能详解以及常用插件实战

一、选择合适的队列. 实际上是可以选择三种队列类型的,classic经典队列,Quorum仲裁队列,Stream流式队列。 后面这两种队列也是RabbitMQ在最近的几个大的版本中推出的新的队列类型。3.8.x推出了Quorum仲裁队列,3.9.x推出了Stream流…

MyBatis何时使用一级缓存,何时使用二级缓存?

Mybatis设计2级缓存来提升数据检索效率,避免每次都查询数据库。 一、一级缓存 一级缓存 Mybatis 的一级缓存是指 SQLSession,一级缓存的作用域是 SQlSession , Mabits 默认开启一级缓存。 在同一个SqlSession中,执行相同的SQL查询时&#x…

基于STM32CUBEMX驱动TOF模块VL6180与VL6180X(2)----修改测量范围

概述 当使用VL6180传感器进行测距时,可以通过修改缩放因子来改变可测量的距离范围。VL6180是一种基于飞行时间原理的传感器,通过测量光信号的往返时间来确定物体与传感器之间的距离。 默认情况下,VL6180传感器的测距范围约为0至200毫米。然…

显卡检测工具:GPU-Z

今天小编为大家测试了一款轻量级的GPU显卡的测试工具,可以查看GPU的详细信息,以供各位同学们学习。 一、简单介绍 GPU-Z是一款方便实用的软件工具,专门为用户提供视频卡和GPU的详尽信息。它具有轻巧的特点,不需要安装即可使用&am…

2023版智慧高速智慧公路总体建设方案,售前人员必备方案

导读:原文《智慧高速智慧公路总体建设方案》共83页PPT(获取来源见文尾),本文精选其中精华及架构部分,逻辑清晰、内容完整,为快速形成售前方案提供参考。 如需获取完整的电子版内容参考学习 您可以关注评论…

【雷达原理】基本雷达方程的推导

基本雷达方程 一、研究目的二、推导过程1、基本雷达方程常用的表达形式2、计算案例3、仿真代码 参考文献 一、研究目的 雷达方程定量地描述了作用距离与雷达参数及目标特性之间的关系。 研究雷达方程主要有以下作用: (1)根据雷达参数来估算雷…

慕课:笔记

课程链接:直面JavaScript中的30个疑难杂症_JavaScript面试题-慕课网 第二章:数据类型 数据类型是每门编程语言的必修之课,你是否对JavaScript的数据类型和检测存在困惑,本章节将为你揭晓其中的奥秘,让你对数据类型有…

矩阵压缩算法

当矩阵中存在着重复元素时,为了节省空间会采用压缩算法,关键在于原矩阵空间与压缩后数据结构的对应; 1.对称压缩:数据沿对角线对称的情况; 将矩阵压缩为一维数组,数组的长度是: 对于num[n][n…

VMware虚拟机暴露端口至公网方法流程详解

目录 需求背景 解决方法 准备工作 虚拟机ip设置方法 需求背景 一台电脑需要连接另一台电脑上的虚拟机的端口,直接ping是无法ping通的,因为本地虚拟机的端口未暴露至公网。 解决方法 虚拟机:CentOS 7 64 Linux 本机:Window…

C专家编程 —— 运行时数据结构

文章目录 代码和数据段代码与可执行文件中对应的位置可执行文件中的段在内存中的布局加入动态链接库的内存空间布局堆栈段的作用过程活动记录函数调用过程记录举例 static和auto关键字 汇编嵌入C代码 代码和数据 代码和数据的区别可以理解为编译时和运行时的分界线。 代码&…

guacamole 纯web rdp预研:相关JAVA基础

文章目录 guacamole 纯web rdp预研:相关JAVA基础1. pom.xml2 scm标签3 application/octet-stream4. tomcat webapps下war包5 maven-assembly-plugin maven assembly插件介绍什么是assembly? 6. Mavenz中的source插件的使用和注意事项。7. Maven私库安装与配置8. 配置…

深度学习之目标检测R-CNN模型算法流程详解说明(超详细理论篇)

1.R-CNN论文背景 2. R-CNN算法流程 3. R-CNN创新点 一、R-CNN论文背景 论文网址https://openaccess.thecvf.com/content_cvpr_2014/papers/Girshick_Rich_Feature_Hierarchies_2014_CVPR_paper.pdf   RCNN(Region-based Convolutional Neural Networks&#xff…