前言:今天我们来一起学习下GAN神经网络,上一篇博文我先用pytorch运行了几个网上的代码例子,用于生成MNIST图片,现在我才反过来写GAN的学习,这次反了过来,效果也是很显而易见的,起码有个直观的感觉,这一篇回归基本知识,介绍下GAN是什么?本文不会引用论文很复杂的公式。
论文参考自:https://arxiv.org/pdf/1406.2661.pdf
建议想学习的可以去论文学学,毕竟是大神之作,然后形成自己的认知。

一:什么是GAN?
在以前学习机器学习算法的时候,比如线性回归,逻辑回归,SVM等,或者是高斯混合模型的时候,我们心里已经大致知道了大概数据的特征的样子,然后用某个合适的模型去根据数据特征做出一些分类,在BP神经网络中,比如识别MNIST数字的例子,我们人眼也能看出来数字的特征(‘1’就是一个竖线),然后通过卷积、池化、全连接等方式去根据特征做出分类,诶呦不错哦,这个模型能根据已知的数据的分布特征(对于图片来说,像素就是数据)去做出一些机智的判断,大大提升效率。

但是如果我说,既然你的模型这么聪明,模型也看过的数字图片,它能根据数据的分布特征找到不同的数字类别,那模型你能跟我说一下数字‘1’到‘9’的特征是啥么?你能不能制造出这些类似的数字图像呢?(比如我说数字‘1’,你能画出来它的样子么?)

这就是GAN所做的工作,根据现实的数据,去学习出数据的分布特征,从而制造出类似的数据,这个模型就叫做GAN。

二:慢慢深入
前段时间有个热播的电视剧《古董局中局》,讲的就是古董造假行业和鉴别真伪世家之间的无休无止纠缠错乱的故事。
举个例子,小D是一名鉴别师,小G是一名造假师,他俩自出生开始就是宿命相对。

小D出生古董行世家,从小看了很多真实的古玩名迹,金石玉器,拥有了一定程度的鉴别古董真伪的能力。小G也能简单的造出一些常人都能识破的假物件,当然小D更能识破,让后告诉小G你拿给我的都是假的。

小G很刻苦,继续训练,虚心接受小D的评判结果和反馈更新,不断提升造假能力,而小D也没闲着,也在不断提升鉴别能力,相互促进相互提高,最后小G的造假能力大大提升,足够以假乱真,直到小D再也分不清楚哪个是真哪个是假,对每一个物件的判别真实度都是50%概率了,这个博弈过程就结束了。

GAN的模型也是有一个鉴别模型(Discriminator)和一个造假模型(Discriminator)组成,如下图:

简单描述下就是:D是一个判别器,X是真实的数据,D(X)表示X是真实数据的概率(同样的1- D(X)则表示判定X是假数据的概率),范围是0~1。另一方面,Z是噪声随机数,维度任意,G是构造器,经过G后的G(X)是和X相同维度的数据,是假数据Xg = G(X),然后同样交给D模型去判别真伪。真和假是两个分类,我们是不是想到了逻辑回归?稍等下我们会涉及到。我们来分析下各个模型的内心活动啊。

1)对于D来说,D想要把真实数据X尽可能都识别成真实数据,也就是希望D(X)尽量越大越好,最好趋近于1。相反对于构造的数据G(X),希望鉴别出来都是假,也就是希望D(G(X))尽量越小越好,最好趋近于0,希望越小的概率认为真实的就等希望同于越大的概率认为是虚假的,所以换句话说就是对于构造的数据G(X),希望鉴别出来都是假,也就是希望1-D(G(X))尽量越大越好,最好趋近于1。

2)对于G来说,真实数据G管不着,我只能希望构造生成的数据能骗过D认为是真实的,使得D(X)逼近于1。这就是二者博弈的过程,最终达到一个均衡点,使得D(X)傻傻分不清了,什么都是50%的概率进行判别。

三:详细计算
下面给出损失函数,截图自论文:

这里简单说一下,这里是俩个损失函数的合并写法,现在我拆开分析,就更加清晰了。
1)对于D来说希望把真实数据尽量大概率预测为真,把构造数据尽量大概率预测假,上述也说了,1-D(x)就是预测为假数据的概率。

假设真实数据的标签是1,虚假数据的标签是0。上述式子可以合并,给出损失函数,按照逻辑回归的代价函数:

对D来说如果想最小化代价函数L,那么就是最大化V(D,G)。

2)对G来说希望骗过D,使得D认为G构造的数据尽可能大概率认为真实的,即D(G(X))尽可能等于1,也可以说是希望D判别出是假数据的概率越小越好,1-D(x)尽可能等于0,只需要这点就够了,真实数据不归G管,如下。

G希望P越大越好,越接近1越好,即F越小越好,越接近0越好,二者是熵等价的。由于我们出于习惯一般都是求最小化,而且为了和D的式子保持统一风格,因为选F计算的概率,又因为G只管Z数据,所以G模型的样本都是来自假的数据。

二者式子归并在一起就是论文中给出的式子了,我感觉它就是个抽象的定义。希望上述的公式分析,对下面展示的梯度下降过程有一定的帮助,具体的论文中给的梯度下降过程是如下所示:

上述注意几点啊(前面已经分析了代价和函数,请一起参考)。
1:每一轮迭代都是先训练D,且D会训练K轮,K=1是最低的要求。然后再训练G。

2:对D来说,因为论文中它给的式子是V(D,G),对V(D,G)求偏导数,所以参数更新的时候需要加上这个偏导,而我们习惯上是对Loss函数求偏导,刚好Loss函数就是V(D,G)的相反数,使用正常的方式对Loss求偏导的话,结果也是一样的。

3:对G来说,V(D,G)和Loss的函数是一样的。都是求最小化,因为求完偏导数。需要做减法。

四:后续学习介绍:
在图像处理领域,最好最多的模型是CNN,怎么将二者结合起来呢?之前我也在Pytorch《GAN模型生成MNIST数字》使用了CNN的构造生成模型,有兴趣可以看看。

DCGAN(Deep Convolutional Generative Adversarial Networks)模型就是一个在这方面非常好的尝试,也是比较流行使用的模型方式,下一篇文章我将好好学习这个,并且给出实际的图像生成的例子,请见下一篇Pytorch《DCGAN模型》。

推荐个github地址,这里有很多GAN相关的论文:
https://github.com/zhangqianhui/AdversarialNetsPapers

深度学习《GAN模型学习》相关推荐

  1. 深度学习之自编码器(4)变分自编码器

    深度学习之自编码器(4)变分自编码器 1. VAE原理  基本的自编码器本质上是学习输入 x\boldsymbol xx和隐藏变量 z\boldsymbol zz之间映射关系,它是一个 判别模型(Di ...

  2. 深度学习之自编码器(5)VAE图片生成实战

    深度学习之自编码器(5)VAE图片生成实战 1. VAE模型 2. Reparameterization技巧 3. 网络训练 4. 图片生成 VAE图片生成实战完整代码  本节我们基于VAE模型实战F ...

  3. 深度学习之自编码器AutoEncoder

    深度学习之自编码器AutoEncoder 原文:http://blog.csdn.net/marsjhao/article/details/73480859 一.什么是自编码器(Autoencoder ...

  4. 深度学习之自编码器(3)自编码器变种

    深度学习之自编码器(3)自编码器变种 1. Denoising Auto-Encoder 2. Dropout Auto-Encoder 3. Adversarial Auto-Encoder  一般 ...

  5. 深度学习之自编码器(2)Fashion MNIST图片重建实战

    深度学习之自编码器(2)Fashion MNIST图片重建实战 1. Fashion MNIST数据集 2. 编码器 3. 解码器 4. 自编码器 5. 网络训练 6. 图片重建 完整代码  自编码器 ...

  6. 深度学习之自编码器(1)自编码器原理

    深度学习之自编码器(1)自编码器原理 自编码器原理  前面我们介绍了在给出样本及其标签的情况下,神经网络如何学习的算法,这类算法需要学习的是在给定样本 x\boldsymbol xx下的条件概率 P( ...

  7. 【深度学习】 自编码器(AutoEncoder)

    目录 RDAE稳健深度自编码 自编码器(Auto-Encoder) DAE 深度自编码器 RDAE稳健深度自编码 自编码器(Auto-Encoder) AE算法的原理 Auto-Encoder,中文称 ...

  8. 深入理解深度学习——Transformer:编码器(Encoder)部分

    分类目录:<深入理解深度学习>总目录 相关文章: ·注意力机制(AttentionMechanism):基础知识 ·注意力机制(AttentionMechanism):注意力汇聚与Nada ...

  9. 深度学习之自编码器实现——实现图像去噪

    大家好,我是带我去滑雪! 自编码器是一种无监督学习的神经网络,是一种数据压缩算法,主要用于数据降维和特征提取.它的基本思想是将输入数据经过一个编码器映射到隐藏层,再通过一个解码器映射到输出层,使得输出 ...

  10. 深度学习:自编码器、深度信念网络和深度玻尔兹曼机

    最近自己会把自己个人博客中的文章陆陆续续的复制到CSDN上来,欢迎大家关注我的 个人博客,以及我的github. 本文主要讲解有关自编码器.深度信念网络和深度玻尔兹曼机的相关知识. 一.自编码器 1. ...

最新文章

  1. WCDMA中的URA和LA/RA
  2. 从小玩到大的超级玛丽,计算复杂性是怎样的?
  3. 深度丨AlphaGo Zero的启示:监督学习和无监督学习的利弊
  4. python爬虫入门-Python 爬虫从入门到进阶之路(一)
  5. 为什么不采用“两次握手”建立连接呢?
  6. fastcopy会损坏硬盘_硬盘坏了数据可以修复吗?恢复技巧都在这!
  7. Linux命令(9)—— 文件的压缩与解压缩
  8. [SDOI2009]Bill的挑战——全网唯一 一篇容斥题解
  9. ansible-plabybook 常用的有用的命令
  10. arm搭建云手机教程_教你从0开始部署阿里云服务器,阿里云服务器搭建网站教程...
  11. 宁夏职称评计算机,宁夏专业技术人员服务平台职称评审系统:http://124.224.239.164(2)...
  12. 【原创】一点点雕虫小技脚本
  13. ffmpeg支持的扩展库有哪些
  14. 搬水果 - 九度教程第31题(哈夫曼树)
  15. android后台定时执行任务,后台执行的定时任务
  16. vim 快速删除一个英文单词
  17. JavaScript 案例综合提升
  18. 计算机word文档快速打数字,word快速提取纯数字
  19. JS基础-循环精灵图
  20. scala在idea中的配置

热门文章

  1. android 线程那点事
  2. Jquery 获取元素内容
  3. [转] VS2010中VC9.0Runtime与VC10.0Runtime在win7上装不上提示error code 1603
  4. Internet路由结构学习心得二:通告汇聚和具体路由影响AS入流量
  5. [转载]【Java EE】Struts2.1.6与Spring2.5.6框架整合
  6. 高级Java开发人员的十大书籍
  7. jenkins 拉取git源码超时
  8. Flutter mac 环境搭建 最简教程
  9. 【Python爬虫】网络爬虫的“盗亦有道”
  10. web开发程序员有几种_每个程序员都应该知道的10种流行的Web开发工具