GAN详解

news2025/7/19 1:54:00

前言

GAN是当今作为火热的生成式算法,由Ian Goodfellow,Yoshua Bengio等人在2014年提出的,Yan LeCun表示道GAN是“adversarial training is the coolest thing since sliced bread”。它使用两个神经网络,将一个神经网络与另一个神经网络进行对抗,通过GAN我们可以生成足以以假乱真的图像,GAN被广泛的应用在图像生成,语音生成等场景中。例如经典的换脸应用DeepFakes背后的技术便是GAN.

一个神经网咯与另一个神经网络进行对抗

判别式算法和生成式算法

在了解GAN之前,我们有必要先了解什么是判别式算法和生成式算法。判别式算法是指给定实例的一些特征,我们根据这些特征来判断器所属类别,它建模时特征和标签之间的关系。例如在MNIST数据集上,我们需要判断一个图片是哪一个数字,我们可以用后验概率来建模判别算法。假定一个数据特征是 x x x,它的标签是 y y y,判别算法指的是在给定 x x x的前提下,标签是 y y y的概率。
表示为 P ( y ∣ x ) P(y|x) P(yx),生成算法并不关系数据标签是什么,其关系的是能否生成和数据 x x x同一个分布的特征。

GAN详解

逻辑基础

GAN是一个由两个模型组成的系统判别器( D D D )和生成器( G G G。判别器的任务是判断输入图像是源自数据集中还是由机器生成的。判别器一般使用二分类的神经网络来构建,一般将取自数据集的样本视为正样本,而生成的样本标注为负样本。生成器的任务是接收随机噪声,然后使用反卷积网络来创建一个图像。生成器的随机输入可以看做一个种子,相同的种子会得到相同的生成图像,不同的种子则得到的图像不同,大量种子的作用是保证生成图像的多样性。在最原始的GAN论文中,它都是使用了MLP搭建生成模型和判别模型。

  • 判别器的任务是:判断输入图像时源自数据集中还是由机器生成的。一般使用二分类神经网络来构建,将取自数据集的样本视为正样本,生成的样本视为负样本
  • 生成器的任务是:接收随机噪声,然后使用反卷积神经网络创建一个图像。
  • 生成器的随机输入可以看做一个种子。
  • 相同的种子会得到相同的生成图像
  • 不同的种子则得到的图像不同,大量种子的作用是保证生成图像的多样性。
    • 在原始的GAN论文中,其都是使用NLP搭建了生成模型和判别模型

GAN的双系统,目的是让生成器尽量的去迷惑判别器。同时,让判别器尽可能的对输入图像的来源进行判断。两个模型之间是互相对抗的关系,它们都通过试图击败对方来使自己变得更好,生成器可以通过判别器得到其生成的图像和数据集图像分布是否一致的反馈。而判别模型则可以通过生成器得到更多的训练样本

在这里插入图片描述

GAN训练

GAN生成器和判别器可以通过博弈的手段不断的对两个模型进行迭代优化。其基本流程如下:

  • 初始判别器参数为 θ D \theta_D θD和生成器参数 θ G \theta_G θG
  • 从分布为 p d a t a ( x ) p_{data}(x) pdata(x)数据集中采样 m m m个真实样本,
  • { x 1 , ⋯   , x m x^{1},\cdots,x^{m} x1,,xm},并且使用生成器获得 m m m个生成样本。
  • $在这里插入图片描述
    $
    *m个真实样本,m个噪声样本。生成样本。
  • 固定生成器,使用梯度上升策略训练判别器,使其能够更好的判断样本是否为真实样本还是生成样本
    在这里插入图片描述
  • 循环多次对判别器训练后,我们使用较小的学习率来对生成器进行优化,生成器使用梯度下降策略进行优化。如式2所示:
  • 在这里插入图片描述
    • 多次更新之后,我们的理想状态是生成器生成一个判别器无法分辨得样本,即最终判别器得分类准确率为0.5

这里只所以先循环多次优化判别器,在优化生成器,是因为,我们想要先拥有一个有一定效果得判别器。其能够比较正确得区分真实样本和生成样本,这样,我们才能够根据判别函数得反馈来对生成器进行优化。如图2所示:
在这里插入图片描述
GAN在训练过程中判别器和生成器的分布变化。
图2中的黑色虚线是真实样本的分布情况,绿色实线是生成样本的分布蓝色虚线是判别器判别概率的分布情况。 是噪声, 到 的变化是生成器将噪音数据映射到生成数据的过程。从图2中可以看出,(a)是出于初始状态,此时生成样本和真实样本的差距比较大,而且判别器也不能对它们进行很好的区分,因此我们需要先对判别器进行优化。在对判别器优化了若干个Epoch后,来到了(b)状态,此时判别器已能够很好的区分真实样本和生成样本。此时生成样本和真实样本的分布差异还是非常明显的,因此我们需要对生成器进行优化。经过训练后真实样本和生成样本的差异缩小了很多,也就是状态©。经过若干轮的对判别器很生成器的训练后,我们希望生成样本和真实样本的分布已经完全一致,而此时判别器也无法再区分它们了。

GAN的损失函数

GAN的一个难点是其损失函数以及其背后的数学原理,对于这一部分内容中介绍的并不是非常清楚,现在很多技术在推导论文公式时,其都犯了一个重要的错误,即假设生成器 G G G是可逆的,然而这个假设并不成立,因此,其证明是存在漏洞的,我们这里将给出GAN的正确证明方式。
GAN的目标是让生成器生成足以欺骗判别式的样本,从数学角度将,我们希望生成样本与真实样本拥有相同的概率分布。也可以说生成样本和真实样本拥有相同的密度函数,即:
P G ( x ) = p d a t a ( x ) P_{G}(x) = p_{data}(x) PG(x)=pdata(x).
这个结论很重要,因为其是GAN的理论基础,也是我们之后要讨论的GAN的证明策略,即定义了一个优化问题。我们寻找一个
G G G满足 P G ( x ) = P d a t a ( x ) P_{G}(x) = P_{data}(x) PG(x)=Pdata(x),如果我们知道生成样本是否满足这个关系,那么我们便可以使用 S G D SGD SGD G G G进行优化。
GAN的损失函数源自于二分类对数似然函数的交叉熵损失函数,其表示为式3,其中第一项作用是用来使正样本识别结果尽量为 1 1 1,第二项的作用是使得负样本的预测尽量为0
L = − 1 N i [ y i l o g p i + ( 1 − y i ) ] l o g ( 1 − p i ) L =-\frac{1}{N_i}[y_ilogp_i + (1 - y_i)]log(1 - p_i) L=Ni1[yilogpi+(1yi)]log(1pi)
根据前面介绍的GAN定理,首先,我们要求判别器D能够满足 p d a t a ( x ) p_{data}(x) pdata(x)能够满足分布的样本识别为正样本,因此有上式为:
其中 E E E表示期望,这一项取自于对数似然函数正类,最大化这一项能偶使判别器将真实样本 x x x预测为1,
x   P d a t a ( x ) x ~ P_{data}(x) x Pdata(x)时,我们有 D ( x ) = 1 D(x) = 1 D(x)=1
在这里插入图片描述
损失函数是另一项与生成器有关的,这一项来自于对数似然函数的负类,表示式子为5.,通过最大化5式子,我们可以使用 D ( G ( z ) ) D(G(z)) D(G(z))的值趋近于0,也就是希望判别式能够将生成式样本预测为负类
在这里插入图片描述
判别器优化目标便是最大化两项之和,表示为 V ( G , D ) V(G,D) V(G,D),因为,我们有:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

理论证明

为证明GAN最终收敛的结果是我们需要的,我们必须证明 G A N GAN GAN满足两个性质:

  • 对于任意给定的 G G G,我们可以找到最优的判别器 D G ∗ D_G^{*} DG;
  • 对于全局最优的 G ∗ G^{*} G 我们希望生成数据分布与真实数据分布一致,即 p G = p d a t a p_{G} = p_{data} pG=pdata

最优判别器

  • 推论1: 对于任意的固定生成器 G G G,最优判别器 D G ∗ D_G^{*} DG满足式:
  • D G ∗ = P d a t a P d a t a + P G D_G^{*} = \frac{P_{data}}{P_{data} + P_G} DG=Pdata+PGPdata
    证明,对于式6的期望形式,我们将其改变为积分形式,表示方式如下:
    在这里插入图片描述
    根据LOTUS定理,我们可以得到 V ( G , D ) V(G,D) V(G,D)的另一种表达形式:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    为了找到最大值,我们对上式进行求导,并得到导数等于0的点:
    在这里插入图片描述
    如果 a + b ≠ 0 a + b \not= 0 a+b=0 我们继续球上式的二阶导数。
    在这里插入图片描述
    在这里插入图片描述

最优生成器

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

总结

GAN是深度学习领域最主要的生成模型之一,GAN对深度学习的贡献,可以从三点出发,生成(G)、对抗(A)、网络(N)
G:机器学习大直可以分为生成模型和判别模型两类,在之前的深度学习中,判别模型得到了充分的发展,例如在CV领域中的物体分离,人脸识别、NLP领域中的机器翻译,文本分类等。它们都是经典的判别模型,对于判别模型,损失函数是非常好构建的,我们以损失函数为目标,模型优化起来也不是那么困难,而对于生成模型而言,器目标构建起来就非常困难,因为衡量生成样本的质量不能其与训练集的某个数值关系。一个高质量的生成样本必然从各个角度上都是非常优秀的,例如,我们要生成一只猫,其从整体上的轮廓到具体的毛发细节,每一个环节都非常重要,而要做到这一点,GAN正式采用了对抗思想

  • A:我们对一个生成样本的质量评估,往往是一个很难量化的指标,但是这种无法量化任务的深度学习就无能为了 吗。GAN给出了否定的答案,GAN提出了把评估生成样本的质量和任务也交给一个模型去做,这个模型都是判别器,这个判别器和生成样本的生成器都通过对抗的方式不断的通过对方的反馈来提升自己,这种及是敌人**,又是友的关系正式GAN最具创新的地方。
    N:GAN的理论基础是生成对抗,那GAN的容量基础则是神经网络,比起传统方法,GAN拥有更强的建模能力,尤其是在处理非结构化数据上
    更是远胜于传统机器学习方法**。正如依赖于GAN的强大建模能力,其生成器和判别器才能通过不断的迭代无限逼近全局最优解
    在2014年**,GAN迎来了蓬勃的发展,在CV领域,诞生了BigGAN.
    CycleGAN.等经典算法,也诞生了AI换脸。高请重建,黑白电影上色等重要应用。此外
    GAN在NLP和语音领域也取得了比较重要的成果,例如NLP领域的SeqGAN,NDG,语音领域的WaveGAN**等。

总结

慢慢的将各种模型啥的都研究透彻,各种模型啥的都好好研究一波,争取在把模型的精髓都学习一遍。全部都将其搞定都行啦的回事与打算。

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

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

相关文章

ArcGIS中ArcMap栅格图层0值设置为NoData值的简便方法

本文介绍在ArcMap软件中,将栅格图层中的0值或其他指定数值作为NoData值的方法。 在处理栅格图像时,有时会发现如下图所示的情况——我们对某一个区域的栅格数据进行分类着色后,其周边区域(即下图中浅蓝色的区域)原本应…

C语言学习记录(十五)C预处理器和C库

文章目录一、C预处理器1.1 翻译程序1.2 明示常量:#define1.3 在#define中使用参数1.4 文件包含:#include1.5 其他指令1.5.1 #undef指令1.5.2 从C预处理角度看已定义1.5.3 条件编译1.5.3.1 #ifdef、#else和#endif指令1.5.3.2 #ifndef1.5.3.3 #if和elif指令…

Gof23-创建型-工厂-单例-抽象工厂-建造-原型以及UML的绘制

创建型的设计模式工厂模式单例模式抽象工厂建造者模式原型模式UML图形的绘制工厂模式 工厂模式 Factory Pattern 适用的场景:统一的接口作为统一的零件,实现类作为零件的组合,将实例产品类的生产交给工厂,用户只需要面对工程提取…

XML的创建和读取

rapidxml是一个快速的xml库,由C模板实现的高效率xml解析库,同时也是boost库的property_tree的内置解析库。 当使用rapidxml时,只需要把rapidxml.hpp 、 rapidxml_print.hpp 和 rapidxml_utils.hpp 三个文件拷贝到你的工程目录下,就…

Pytorch中KL loss

1. 概念 KL散度可以用来衡量两个概率分布之间的相似性,两个概率分布越相近,KL散度越小。 上述公式表示P为真实事件的概率分布,Q为理论拟合出来的该事件的概率分布。D(P||Q)(P拟合Q)和D(Q||P)(Q拟合P&…

ajax之Content-Type示例

参考资料: Content-Type详解【SpringBoot】SpringBoot接收请求的n种姿势 目录前期准备0. Content-Type概念解释1. application/x-www-form-urlencoded1.1 form表单示例1.2 jQuery的ajax示例2. application/json2.1 指定contentType为json,不使用RequestBody接收2.2 不指定cont…

01 OSI七层网络排查 troubleshooting 思路及对应工具

文章目录1 .前言2. OSI 的七层模型,和 TCP/IP 的四层 / 五层模型区别2.1 网络专业术语2.2 TLS 解释2.3 什么是TCP 流?3. 网络各层排查工具3.1 应用层3.1.1 浏览器的开发者工具3.1.1.1 找到有问题的服务端IP3.1.1.2 辅助排查网页慢的问题3.1.1.3 解决失效…

嵌入式数据库sqlite3

一、数据库 数据库的基本概念 常用的数据库 大型数据库 Oracle公司是最早开发关系数据库的厂商之一,其产品支持最广泛的操作系统平台。目前Oracle关系数据库产品的市场占有率名列前茅。 IBM 的DB2是第一个具备网上功能的多媒体关系数据库管理系统,支…

bootstrap学习(四)

bootstrap中图片、按钮、表单 按钮: 不加样式的按钮: 在bootstrap中a标签也可以生成按钮: 默认按钮尺寸可以不加,它是自动显示默认尺寸 加btn-block:class 图片: 表单: 垂直表单:…

【语音识别】MFCC+VAD端点检测智能语音门禁系统【含GUI Matlab源码 451期】

⛄一、MFCC简介 1 引言 语音识别是一种模式识别, 就是让机器通过识别和理解过程把语音信号转变为相应的文本或命令的技术。语音识别技术主要包括特征提取技术、模式匹配准则及模型训练技术3个方面。目前一些语音识别系统的适应性比较差, 主要体现在对环境依赖性强, 因此要提高…

[mysql] 深入分析MySQL版本控制MVCC规则--实测 (mysql 8.0 innodb引擎)

背景:基于之前的一篇文章 可重复读:可重复读隔离级别的实现是每个事务在打开时都会生成一个一致的视图。 当其他事务提交时,不会影响当前事务中的数据。 为了保证这一点,MySQL是通过多版本控制机制MVCC来实现的; 我们亲…

Go语言面试题合集(2022)

基础语法 Go 支持默认参数或可选参数吗? 不支持。但是可以利用结构体参数,或者…传入参数切片数组。 // 这个函数可以传入任意数量的整型参数 func sum(nums ...int) {total : 0for _, num : range nums {total num}fmt.Println(total) }Go 语言 tag…

pandas算术运算、逻辑运算、统计运算describe()函数、统计函数、累计统计函数及自定义函数运算

一、pandas算术运算 直接对数据进行加、减、乘、除等运算,可使用函数add()、sub()、mul()、div()或、-、、 代码如下 数据生成 import pandas as pd import numpy as np# 数据生成代码 num np.random.randint(50, 100, (3, 5))# 传入标签索引 column [第一列, …

[hadoop全分布部署]安装Hadoop、配置Hadoop 配置文件①

👨‍🎓👨‍🎓博主:发量不足 个人简介:耐心,自信来源于你强大的思想和知识基础!! 📑📑本期更新内容:安装Hadoop、配置Hadoop 配置文件…

基于SSM的高校课程评价系统

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

一文带你深入理解【Java基础】· 注解

写在前面 Hello大家好, 我是【麟-小白】,一位软件工程专业的学生,喜好计算机知识。希望大家能够一起学习进步呀!本人是一名在读大学生,专业水平有限,如发现错误或不足之处,请多多指正&#xff0…

多线程编程【条件变量】

条件变量📖1. 为什么需要条件变量?📖2. 条件变量概念📖3. 发信号时总是持有锁📖4. 生产者消费者问题📖5. 基于阻塞队列的生产者消费者模型📖1. 为什么需要条件变量? 在很多情况下&a…

Android开发音效增强中铃声播放Ringtone及声音池调度SoundPool的讲解及实战(超详细 附源码)

需要源码请点赞关注收藏后评论区留下QQ~~~ 一、铃声播放 虽然媒体播放器MediaPlayer既可用来播放视频,也可以用来播放音频,但是在具体的使用场合,MediaPlayer存在某些播音方面的不足之处 包括以下几点 1:初始化比较消耗资源 尤其…

软件开发工程师笔试记录--关键路径,浮点数计算,地址变换,中断向量,I/O接口,海明码

时间:2022年11月26日 10:00 -11:00 (可提前登录15分钟) 公司:XX(rongyu) 岗位:软件开发工程师(我的简历语言是Java) 题型:选择题&…

一次应用多次fgc原因的排查及解决

应用多次fgc性能排查(一次抢购引起的性能问题) 大家好我是魔性的茶叶,今天分享一个项目jvm多次fgc的整个排查流程 上班后不久运维突然通知我们组,有一个应用在短时间内多次fgc,即将处于挂掉的状态。 首先我登录skyw…