GANs系列:GAN生成式对抗网络原理以及数学表达式解剖
一、GAN介绍
生成式对抗网络(GAN, Generative Adversarial Networks )是一种深度学习模型,是近年来复杂分布上无监督学习最具前景的方法之一。模型通过框架中(至少)两个模块:生成模型(Generative Model)和判别模型(Discriminative Model)的互相博弈学习产生相当好的输出。原始 GAN理论中,并不要求 G 和 D 都是神经网络,只需要是能拟合相应生成和判别的函数即可。但实用中一般均使用深度神经网络作为 G 和 D 。一个优秀的GAN应用需要有良好的训练方法,否则可能由于神经网络模型的自由性而导致输出不理想。(来自百度百科)
咳咳咳!!下面工作原理的介绍是干货,仔细看!
二、GAN工作原理
生成式对抗网络,顾名思义,既有生成又有对抗(怎么对抗?想象两个人扳手腕)
GAN主要有生成器神经网络(Generator Nerual Network) 和鉴别器神经网络(Discriminator Neural Network)组成。下文分别简称为生成器和鉴别器【有些人也翻译为判别器】
生成网络采用随机输入,尝试输出数据样本。在上图中,我们可以看到生成器G(z)从p(z)获取了输入z,其中z是来自概率分布p(z)的样本。生成器根据输入的样本数据随机产生一个数据,将其送入鉴别器D(x)。
鉴别网络的任务是接收真实数据或者生成数据,并尝试预测输入是真实(真的)还是生成(假的)的。它需要一个来自pdata(x)的输入x,其中pdata(x)是我们的真实数据分布。 D(x)然后使用Sigmoid函数解决二元分类问题,并输出0到1的值。
【Sigmoid函数是常用的激活函数,它可以把输入的数据映射到(0,1)区间,对数学不感冒的同学记住它是个工具人就行啦!!】
再来看个头疼的东西,就是它的数学公式表达
和大家一样,我看到这一长串,心里想:握草!这是个啥玩意。
别担心别担心,其实这就是个纸老虎,看不懂也不影响大家后面的Code。
首先来看加号前面的一项
E代表的是熵(Entropy),X~Pdata(x)代表是x来自于Pdata【真实数据分布】,D(x):鉴别器
所以第一项想要表示的意思就是来自实际分布的数据通过鉴别器的熵
因为数据是来自真实的数据,所以鉴别器肯定想将其最大化为1
更通俗来讲,第一项的含义就是鉴别器鉴别出真实数据的概率,我们的优化目标是希望这个概率越大越好。也就是说,对于服从Pdata分布的图片x,鉴别器应该给出预测结构D(X)=1
你可以有疑问那这个log是干嘛的?
数据取对数并不会改变数据间的相对关系,由于log函数的单调性,加上log可以用来放大我们的损失,便于计算和优化。
继续来看第二部分
这一部分表达的意思就是来自随机输入的数据通过生成器的熵。生成器生成一个假样本,通过鉴别器识别真假。
因为是生成的假样本,鉴别器肯定想把假的都识别出来,所以鉴别器尝试将其最大化为0
还有最后一部分!就大获全胜了
这个想要表达的意思就是我们GAN名字中的对抗!!
怎么对抗的呢?我们从优化目标来看
对于生成器G而言,希望鉴别器鉴别生成器的生成数据为真,即:D(G(Z))=1,
也就是希望 越小越好
【比如你是生成器,鉴别器代表老师。你想请假不上课,肯定要编一个理由骗过老师,从你的角度而言,理由编的让老师越信服越好。】
对于鉴别器D而言,如果其输入的是生成的数据【D(G(Z))】,鉴别器的目标是最小化D(G(Z)),希望它被判定为0,也就是希望 越大越好
【还是你要请假不上课,从老师角度而言肯定要尽可能地识别你的假谎言】
这样看来,生成器和鉴别器的优化目标是相反的,体现在公式中就是
三、如何训练GAN?
两个阶段:
1.训练鉴别器,冻结生成器(冻结不是不训练,神经网络只向前传播,不进行backprogation后向传播)
2.训练生成器,冻结鉴别器。
四、生成器和判别器的损失问题
生成器的损失是通过判别器的输出来计算的,而判别器的输出是一个概率值,我们可以通过交叉熵计算。(不用纠结交叉熵到底是什么,记住又是一个工具人,数学是为我们服务工具!)
五、目前存在的缺点
- 计数问题:GAN无法区分特定对象在某个位置应该发生的数量(例如一个头上好几双眼睛)
- 透视问题:GAN无法适应3D对象,他不理解视角差异
- 全局结构问题:GAN不了解整体结构
六、应用
1. GAN本身是一种生成式模型,所以在数据生成上用的是最普遍的,最常见的是图片生成,常用的有DCGAN WGAN,BEGAN,个人感觉在BEGAN的效果最好而且最简单。
2. GAN本身也是一种无监督学习的典范,因此它在无监督学习,半监督学习领域都有广泛的应用,比较好的论文有Improved Techniques for Training GANs、Bayesian GAN(最新)
3. 不仅在生成领域,GAN在分类领域也占有一席之地,简单来说,就是替换判别器为一个分类器,做多分类任务,而生成器仍然做生成任务,辅助分类器训练。
4. GAN可以和强化学习结合,目前一个比较好的例子就是序列对抗网络Seq GAN。
5. 目前比较有意思的应用就是GAN用在图像风格迁移,图像降噪修复,图像超分辨率了,都有比较好的结果,详见pix2pix GAN 和cycle GAN。但是GAN目前在视频生成上和预测上还不是很好。
6. 目前也有研究者将GAN用在对抗性攻击上,具体就是训练GAN生成对抗文本,有针对或者无针对的欺骗分类器或者检测系统等等,但是目前没有见到很典范的文章。
七、数据集不足时的处理方法
具体到图像分类任务中,在保持图像类别不变的前提下,可以对训练集中的每一幅图像进行一下变换:
- 一定程度内的随机旋转、平移、缩放、剪裁、填充、左右翻转等,这些变换对应着同一个目标在不同角度的观察结果。
- 对图像中的像素添加噪声扰动,比如椒盐噪声、高斯白噪声等。
- 颜色变换。
- 改变图像的亮度、清晰度、对比度、锐度等。
除了直接在图像空间进行变换,还可以先对图像进行特征提取,然后在图像的特征空间内进行变换,利用一些通用的数据扩充或上采样技术,例如SMOTE(Synthetic Minority Over-sampling Technique)算法。抛开上述这些启发式的变换方法,使用生成模型也可以合成一些新样本,例如当今非常流行的生成式对抗网络模型。
参考:[KO机器学习] Day6:特征工程 图像数据不足时的处理方法
八、升华一下
用我们的大白话过一遍GAN。
以生成图片为例,用真实图片的数据集来训练鉴别器,使得鉴别器的鉴别能力越来越强。用随机的生成数据输入生成器,使得生成器产生一张假图片,把假图片送到鉴别器进行鉴别。从生成器角度来看,肯定希望自己生成的假图片判定为真的,但是从鉴别器而言,鉴别器要把假的都鉴别输出。两者就在这个对抗过程中,不断优化自己!这就是我们的GAN!
实战代码实现:https://blog.csdn.net/m0_62128864/article/details/123853830?spm=1001.2014.3001.5501
GANs系列:GAN生成式对抗网络原理以及数学表达式解剖相关推荐
- MOOC网深度学习应用开发5——生成式对抗网络原理及Tensorflow实现
生成式对抗网络原理及Tensorflow实现 生成式对抗网络GAN的简介 利用GAN生成Fashion-MNIST图像 鸢尾花品种识别:TensorFlow.js应用开发 TensorFlow.js介 ...
- DeepLearing:GAN生成式对抗网络
GAN 生成对抗网络 文章目录 GAN 生成对抗网络 一.介绍 Q&A 二.GAN模型 GAN结构 生成器("假钞厂") 判别器("验钞机") 生成器与 ...
- PyTorch 实现 GAN 生成式对抗网络 含代码
GAN 网络结构 GAN 公式的理解 简单线性 GAN 代码如下 卷积 GAN 代码如下 Ref 网络结构 GAN 公式的理解 minGmaxDV(D,G)=Ex∼Pdata(x)[logD(x)]+ ...
- GAN生成式对抗网络
阅读Antonio Gulli<Deep Learning with Tensorflow 2 and keras>Second Edition 第六章GAN笔记 GAN生成对抗网络是无监 ...
- 【深度学习】GAN生成对抗网络原理详解(1)
一个 GAN 框架,最少(但不限于)拥有两个组成部分,一个是生成模型 G,一个是判别模型 D.在训练过程中,会把生成模型生成的样本和真实样本随机地传送一张(或者一个 batch)给判别模型 D.判别模 ...
- GAN生成式对抗网络总结
[1.介绍] GAN网络可以看成是两个网络模型对抗,一个是生成网络模型G,一个是识别网络模型.生成式网络模型G是一个用来生图片的网络,该模型的输入为一个随机的噪声z,通过这个噪声来生成相应的图片,该图 ...
- 不要怂,就是GAN (生成式对抗网络) (六):Wasserstein GAN(WGAN) TensorFlow 代码
先来梳理一下我们之前所写的代码,原始的生成对抗网络,所要优化的目标函数为: 此目标函数可以分为两部分来看: ①固定生成器 G,优化判别器 D, 则上式可以写成如下形式: 可以转化为最小化形式: 我们编 ...
- 不要怂,就是GAN (生成式对抗网络) (五):无约束条件的 GAN 代码与网络的 Graph...
GAN 这个领域发展太快,日新月异,各种 GAN 层出不穷,前几天看到一篇关于 Wasserstein GAN 的文章,讲的很好,在此把它分享出来一起学习:https://zhuanlan.zhihu ...
- [深度学习-原理]GAN(生成对抗网络)的简单介绍
系列文章目录 深度学习GAN(一)之简单介绍 深度学习GAN(二)之DCGAN基于CIFAR10数据集的例子 深度学习GAN(三)之DCGAN基于手写体Mnist数据集的例子 深度学习GAN(四)之c ...
最新文章
- 利用ZYNQ SOC快速打开算法验证通路(5)——system generator算法IP导入IP integrator
- 大数据+机器学习#x3D;天下无敌!
- C#调用COM组件遇到的问题及解决办法
- python导入csv文件-python如何导入csv
- Linux netstat查看网络连接信息
- 准备了2个月零21天,面试字节跳动挂在了第三面JVM上
- C 语言传递数组给函数的三种形式
- 【金融】【pytorch】使用深度学习预测期货收盘价涨跌——LSTM模型构建与训练
- 如何使用内联onclick属性停止事件传播?
- ❤️六万字《Spring框架从入门到精通》(建议收藏)❤️
- sql 链接 oracle 查询,Oracle学习之路-SQL篇-连接查询
- python mp4提取音频_Python从视频文件中提取wav
- AGV、IGV、RGV这三者之间的区别浅析
- CodeLite配置
- 详解1M宽带下载速度?1M等于多少kb?
- OpenKE 的使用(四)— HolE 和 ComplEx 论文复现
- 三位一撇:处理数字12345.67——12,345.67
- CSS - Tooltip-arrow 绘制三角形
- [AV1] AV1 Encoder代码流程图
- 分享我的一些PJBlog小技巧
热门文章
- druid连接泄漏GetConnectionTimeoutException: wait millis 60000, active 5, maxActive 5, creating 0
- 《深入理解 JVM 3ed》读书笔记
- Linux下查看Python安装路径
- 前后端分离后产生的跨域问题sessionid丢失,cookies无法写入等
- java数据结构之双端队列ArrayDeque
- 开启@yahoo.cn邮箱POP和SMTP的方法
- 【sql server】各数据类型详解
- SQLite数据库学习笔记1:报错:The database disk image is malformed
- 【uni-app教程】UniAPP 常用组件和 常用 API 简介# 知心姐姐聊天案例
- MATLAB报错:未定义函数或变量解决办法