GAN生成对抗网络介绍

news2025/1/23 17:36:29

GAN简介

GAN 全称是Generative Adversarial Networks,即生成对抗网络
“生成”表示它是一个生成模型,而“对抗”代表它的训练是处于一种对抗博弈状态中的。
一个可以自己创造数据的网络!

判别模型与生成模型

判别模型(Discriminative Model)

主要目标是对给定输入数据直接进行建模,以便预测输出的标签或类别。
判别模型学习得到的是条件概率分布 p ( y ∣ x ) p(y|x) p(yx)给定x后使得正确标签y的概率最大
常见的判别模型包括逻辑回归、支持向量机(SVM)、神经网络等。

当输入一张训练集图片x时,判别模型输出分类标签y。模型学习的是输入图片x与输出的类别标签的映射关系。即学习的目的是在输入图片x的条件下,尽量增大模型输出分类标签y的概率。

生成模型(Generative Model)

主要目标是学习输入数据的分布,以便能够生成与输入数据类似的新数据。
生成模型学习得到的是联合概率分布 p ( x , y ) p(x,y) p(x,y),即特征x和标签y共同出现的概率;根据贝叶斯公式: p ( x , y ) = p ( y ∣ x ) ∗ p ( x ) p(x,y) = p(y|x) * p(x) p(x,y)=p(yx)p(x),它得学习p(x);关心数据和如何产生,如何分布,最终学会拟合训练数据的分布
典型的生成模型有朴素贝叶斯、隐马尔可夫模型(HMM)、生成对抗网络(GAN)等。

没有约束条件的生成模型是无监督模型,将给定的简单先验分布π(z)(通常是高斯分布),映射为训练集图片的像素概率分布p(x),即输出一张服从p(x)分布的具有训练集特征的图片。模型学习的是先验分布π(z)与训练集像素概率分布p(x)的映射关系。

山羊绵羊的例子
要确定一只羊是山羊还是绵羊
判别模型:用判别式模型的方法是从历史数据中学习到模型,然后通过提取这只羊的特征来预测出这只羊是山羊的概率,是绵羊的概率。

生成模型:则是根据山羊的特征首先学习出一个山羊的模型,根据绵羊的特征学习出一个绵羊的模型,然后从这只羊中提取特征,放到山羊模型中看概率是多少,再放到绵羊模型中看概率是多少,哪个大就是哪个。

在这里插入图片描述

从图中可以看出,判别模型就是在不同的类别中划分一条界限(决策边界),
而生成模型就是用不同的区域(概率分布函数)把不同类型的数据"围住" 。

为什么需要GAN?

GAN与前面CNN、RNN的最主要区别在训练方式上——无监督学习。
一句话来概括 GAN 的设计动机就是——自动化
1.从人工提取特征——到自动提取特征

  • 深度学习最特别最厉害的地方就是能够自己学习特征提取。
  • 机器的超强算力可以解决很多人工无法解决的问题。自动化后,学习能力更强,适应性也更强。
    2.从人工判断生成结果的好坏——到自动判断和优化
  • 监督学习中,训练集需要大量的人工标注数据,这个过程是成本很高且效率很低的。
  • 而人工判断生成结果的好坏也是如此,有成本高和效率低的问题。
  • 而 GAN 能自动完成这个过程,且不断的优化,这是一种效率非常高,且成本很低的方式。

监督学习与无监督学习

监督学习:在有监督学习中,模型通过输入数据和相应的标签进行训练。训练数据包含了输入-输出对,模型的目标是学习将输入映射到正确的输出。需要人工标注数据,人类去告诉算法该做什么和不该做什么,限制了算法的潜力。
无监督学习:在无监督学习中,模型接收的训练数据没有标签。模型的目标通常是从无标签的数据中学习并发现数据的内在结构和潜在模式,不依赖标签数据进行学习。


GAN的基本结构

在这里插入图片描述

GAN的基本结构

生成器 + 判别器 = GAN


我们现在拥有大量的手写数字的数据集,我们希望通过GAN生成一些能够以假乱真的手写字图片。
主要由如下两个部分组成:
定义一个模型来作为生成器(上图中蓝色部分Generator),能够输入一个向量,输出手写数字大小的像素图像。
定义一个分类器来作为判别器(上图中红色部分Discriminator)用来判别图片是真的还是假的(或者说是来自数据集中的还是生成器中生成的),输入为手写图片,输出为判别图片的标签。

生成器的目标是生成尽可能真实的数据,以欺骗判别器,
判别器的目标是尽可能准确地区分出真实数据和生成器生成的假数据。

举例——GAN在生成手写数字识别数据上的应用

GAN性能的提升从生成器G和判别器D进行左右互搏、交替完善的过程得到的。
所以其生成G网络和判别D网络的能力应该设计得相近,复杂度也差不多。

使用全连接神经网络实现GAN
生成器G中首先是输入一个 100 × 1 100 × 1 100×1 的随机噪音Z ,然后通过三个隐藏层,最终在输出层输出一个尺寸为 784 × 1 784 × 1 784×1 的假样本。
而在判别器D中,首先是输入一个 784 × 1 784 × 1 784×1 的真实样本 x 或 生成的假样本 G(z),然后通过三个隐藏层,最终在输出层输出一个 1 × 1 1 × 1 1×1 的值,也就是输出一个数值,这个值就相当于判别器给真实样本 x 或生成的假样本 G(z)的分值。
在这里插入图片描述

使用卷积神经网络实现GAN——DCGAN(深度卷积生成对抗网络)
这个项目中的生成器,采用了两个全连接层接两组上采样和转置卷积层,将输入的噪声Z逐渐转化为 1 × 28 × 28 1×28×28 1×28×28的单通道图片输出。
在这里插入图片描述

判别器的结构正好相反,先通过两组卷积和池化层将输入的图片转化为越来越小的特征图,再经过两层全连接层,输出图片是真是假的二分类结果。
在这里插入图片描述


GAN的基本思想

GAN的基本思想是训练两个互相对抗的神经网络,一个是生成器(Generator)用来生成伪造的数据,另一个是判别器(Discriminator)用来鉴别数据。
它们被设计为竞争对手。判别器经过训练后,可以将训练集中的数据分类为真实数据,将生成器产生的数据分类为伪造数据;生成器在训练后,能创建可以以假乱真的数据来欺骗判别器。最终要得到的是 效果提升到很高很好的生成模型。通过学习和对抗,最终达到一种纳什均衡的状态
GAN的核心思想是通过学习真实训练数据,生成“以假乱真”的数据。

Tips: 之所以要训练k次(k为大于等于1的整数)判别器,再训练生成器,是因为要先拥有一个好的判别器,使得能够较好地区分出真实样本和生成样本之后,才好更为准确地对生成器进行更新

纳什均衡,它是指博弈中这样的局面,对于每个参与者来说,只要其他人不改变策略,他就无法改善自己的状况。对应的,对于GAN,情况就是生成器 G 恢复了训练数据的分布(造出了和真实数据一模一样的样本),判别器再也判别不出来结果,准确率为 50%,约等于乱猜。这时双方网络都得到利益最大化,不再改变自己的策略,也就是不再更新自己的权重。)

在这里插入图片描述

上图中: 黑色点线为训练集数据分布曲线 蓝色点线为判别器输出的分布曲线 绿色实线为生成器输出的分布曲线
z表示噪声,展示的是生成器映射前的简单概率分布(一般是高斯分布)的范围和密度 x展示的是z通过生成器映射后学到的训练集的概率分布的范围和密度

(a) 判别器与生成器均未训练呈随机分布
(b) 判别器经过训练,输出的分布在靠近训练集“真”数据分布的区间趋近于1(真),在靠近生成器生成的“假”数据分布的区间趋近于0(假)
© 生成器根据判别器输出的(真假)分布,更新参数,使自己的输出分布趋近于训练集“真”数据的分布。
经过**(b)©(b)©…**步骤的循环交替。判别器的输出分布随着生成器输出的分布与训练集分布的接近而更加平缓;生成器输出的分布则在判别器输出分布的指引下逐渐趋近于训练集“真”数据的分布。
(d) 训练完成时,生成器输出的分布完美拟合了训练集数据的分布,判别器的输出由于生成器的完美拟合而无法判别生成器输出的真伪而呈一条取值约为0.5(真假之间)的直线。


GAN的训练

训练判别器

  • 判别器对真实数据和来自生成器生成的假数据进行分类
  • 判别器的损失函数将惩罚由判别器产生的误判,比如把真实实例判定成假,或者把假的实例判定为真
  • 判别器通过对来自于判别器网络损失函数计算的损失进行反向传播,使用误差反向传播机制来计算损失和更新权重参数
    在判别器训练时,生成器不会训练,即在生成器为判别器生成示例数据时,生成器的权重保持恒定,pytorch中通过使用detach()不计算生成器的梯度

训练生成器——使用判别器训练生成器

  • 随机噪音采样作为输入
  • 生成器从采样的随机噪音采样里生成输出
  • 让判断器判断上述输出是“真”或“假”,以此作为生成器的输出
  • 从判别器的分类输出计算误差损失
  • 穿过判别器和生成器的反向传播,从而获得梯度
  • 使用梯度来更新生成器的权重

交替训练
生成器和判别器有不同的训练流程,那么如何才能作为一个整体来训练GAN呢?GAN的训练有交替阶段,

  • 判别器训练一个或者多个迭代。
  • 生成器训练一个或者多个迭代。
  • 不断重复1和2步来训练生成器和判别器。

在判别器训练的阶段,保持生成器不变。因为判别器训练会尝试从仿冒数据里分辨出真实数据,判别器必须学习如何识别生成器的缺陷。这就是经过完整训练的生成器和只能生成随机输出的未训练生成器的不同之处。
类似地,在生成器训练的阶段,保持判别器不变。否则,生成器像尝试击中移动目标一样,可能永远无法收敛。

收敛
随着训练进行,生成器不断改善,相对地,由于不能再轻易地识别出真实数据和假冒数据的,判别器的表现越来越差。当生成器生成数据具有和真实数据相同的分布时,判别器的正确率只有50%。基本上和抛一枚硬币来预测正反一样的概率一样。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三步训练循环
第1步——用实际数据集训练判别器;向判别器展示一个真实的样本数据,告诉它该样本的分类应该是1.0【正面样本】
第2步——用生成数据集训练判别器;向判别器显示一个生成器的输出,告诉它该样本的分类应该是0.0【负面样本】
第3步——训练生成器;向判别器显示一个生成器的输出,告诉生成器结果应该是1.0

怎样进行权重更新?
BP误差反向传播算法+梯度下降法,调整参数

在这里插入图片描述

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

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

相关文章

Uniapp软件库源码-全新带勋章等

测试环境:php7.1。ng1.2,MySQL 5.6 常见问题: 配置好登录后转圈圈,检查环境及伪静态以及后台创建好应用 上传图片不了,检查php拓展fileinfo 以及public文件权限 App个人主页随机背景图,在前端uitl文件夹里面…

第9章-第2节-Java中的反射机制

1、概念: 反射机制:是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意属性和方法;这种动态获取信息以及动态调用对象方法的功能称为 java…

记录汇川:H5U于Factory IO测试13

主程序: 子程序: IO映射 子程序: 辅助出料 子程序: 模式选择 子程序: 示教程序 子程序: 手动程序 子程序: 统计程序 子程序: 异常报警 子程序: 自动程序: F…

Linux前后端项目部署

目录 1.jdk&tomcat安装 配置并且测试jdk安装 修改tomcat 配置文件 登入tomcat 发布 安装mysql 导入sql数据 发布项目war包 redis安装 nginx安装 配置nginx域名映射 部署前端项目 centos 7的服务安装 安装jdk 安装tomcat 安装Mysql 安装redis 安装nginx 前后…

STM32的FMC独立管理和控制外部存储器

在STM32中,FMC(Flexible Memory Controller)是一个功能强大的外部存储器控制器,用于管理和控制外部存储器设备,如SRAM、SDRAM、NOR Flash等。FMC允许将多个存储器设备连接到微控制器,并通过不同的片选线进行…

蝉妈妈简单使用

蝉妈妈使用教程 热点视频 如何通过蝉妈妈分析数据 如何使用

Python超详细基础文件操作(详解版)

一、文件操作 1. 文件打开与关闭 1.1 打开文件 在Python中,你可以使用 open() 函数来打开文件。 以下是一个简单的例子: # 打开文件(默认为只读模式) file_path example.txt with open(file_path, r) as file:# 执行文件操作…

深入理解 Spark(四)Spark 内存管理模型

Spark 中的内存管理和资源管理模型 Executor 进程作为一个 JVM 进程,其内存管理建立在 JVM 的内存管理之上,整个大致包含两种方式:堆内内存和堆外内存。 一个 Executor 当中的所有 Task 是共享堆内内存的。一个 Work 中的多个 Executor 中的…

centos源码编译安装nginx1.25.3脚本

Nginx是常见的反向代理服务器,以为经常要安装,所以做了一个install-nginx.sh 脚本,一个命令安装nginx #!/bin/sh # https://nginx.org/ # 本脚本自动安装 nginxr 软件到/usr/local/nginx 路径 # 安装成功后执行/usr/local/nginx/sbin/nginx即…

Javascript——vue下载blob文档流

<el-table-column label"操作" fixed"right" width"150" showOverflowTooltip><template slot-scope"scope"><el-button type"text" v-has"stbsd-gjcx-down" class"edit-button" click&…

[NAND Flash 5.5] PLC NAND 虽来但远

依公知及经验整理,原创保护,禁止转载。 专栏 《深入理解NAND Flash》 <<<< 返回总目录 <<<< 前言 图片来源: 存储随笔 2022年8月份在美国FMS峰会上,Solidigm公司(前身为Intel NAND部门)展示了全球第一款基于PLC NAND研发的SSD。这也标志着,PLC…

第 12 章 多路查找树

文章目录 12.1 二叉树与B 树12.1.1 二叉树的问题分析12.1.2 多叉树12.1.3 B 树的基本介绍 12.2 2-3 树12.2.1 2-3 树是最简单的 B 树结构, 具有如下特点:12.2.2 2-3 树应用案例12.2.3 其它说明 12.3 B 树、B树和 B*树12.3.1 B 树的介绍12.3.2 B 树的介绍12.3.3 B树的介绍12.3.4…

FL studio破解版 V20.8.3 最新中文破解版

FL Studio是一款功能强大的水果音乐制作软件&#xff0c;为用户提供了一个全能的数字音频工作站&#xff0c;软件提供了编曲、剪辑、录音、混音等功能&#xff0c;满足用户的各种音乐制作需求。软件已经成功破解&#xff0c;全中文的软件界面&#xff0c;去除了试用时间限制&am…

vscode(visual studio code) 免密登陆服务器

1.生成密钥 首先&#xff0c;在本地&#xff0c;打开命令输入框&#xff1a; WinR–>弹出输入框&#xff0c;输入cmd,打开命令框。 然后&#xff0c;在命令框&#xff0c;输入 ssh-keygen -t rsa -C "love"按两次回车键&#xff0c;问你是否重写&#xff0c;选择…

【AUTOSAR】--01 AUTOSAR网络管理基础

AUTOSAR网络管理做了几个项目了&#xff0c;但发现还是有些理解不够深入的地方&#xff0c;最近趁着有个新项目也要做AUTOSAR网络管理&#xff0c;再从头梳理一下AUTOSAR网络管理&#xff0c;预计用2-3篇文章&#xff0c;把AUTOSAR网络重新梳理完成。 这是第一篇&#xff0c;主…

高效构建Java应用:Maven入门和进阶(二)

高效构建Java应用&#xff1a;Maven入门和进阶&#xff08;二&#xff09; 二.基于IDEA的Maven的工程创建2.1 梳理Maven工程GAVP属性2.2 Idea构建Maven JavaSE工程2.3 Idea构建Maven JavaEE工程2.4 Maven工程项目结构说明 二.基于IDEA的Maven的工程创建 2.1 梳理Maven工程GAVP…

H7303 无电感,线性恒流,低压差,大电流,车灯/台灯 9V 12V 24V 30V

线性恒流芯片是一种用于控制电流的电子元件&#xff0c;通常用于驱动LED等器件。它的工作原理是通过维持输出电流的恒定来保持被驱动器件的亮度或功率稳定。 具体来说&#xff0c;线性恒流芯片会监测输出电流并调整电压以保持恒定的电流流过被驱动器件。以下是其基本工作步骤&…

SAP SD-DN-MM 交货单相关物料凭证的视图的日期问题

眼下有个需求 获取交货单对应的物料凭证的过账日期BLDAT。 同步BW数据过去 新增一个数据库视图 但是实际使用时&#xff0c;有效部分仅本月&#xff0c;再选择条件里面要加上 MATdoc-bldat > sy-datum - sydatum6(2). 于是使用ST05 跟踪了一下&#xff0c;发现在DD28S…

电影《潜行》中说的蜜罐是什么(网络安全知识)

近期刘德华、彭于晏主演的电影《潜行》在网上掀起了轩然大波&#xff0c;电影中有提到网络蜜罐&#xff0c;这引起了很多观众的疑问&#xff0c;蜜罐到底是什么&#xff1f; 从字面意思上来看&#xff0c;蜜罐就是为黑客设下的诱饵。这是一种具有牺牲性质的计算机系统&#xff…

PVE虚拟机配置文件恢复

一、pve 创建的虚拟机的配置文件位置 在宿主机的 /etc/pve/qemu-server&#xff0c;这里有创建虚拟机的相关硬件信息。 rootpve1:/etc/pve/qemu-server# pwd /etc/pve/qemu-server二、故障现象 在命令行执行qm list不显示虚拟机&#xff0c;查看 宿主机的 /etc/pve/qemu-ser…