1、基本介绍

  • DCGAN是生成对抗网络GAN中一种常见的模型结构。其中的生成器和判别器都是神经网络模型。

  • GAN是一种生成式对抗网络,即通过对抗的方式,去学习数据分布的生成式模型。所谓的对抗,指的是生成网络和判别网络的互相对抗。生成网络尽可能生成逼真样本,判别网络则尽可能去判别该样本是真实样本,还是生成的假样本。

优化目标函数为:$$min_{G} max_{D} V(D,G) = min_{G} max_{D} E_{x~P_{data}(x)} [log D(x)] + E_{z~P_{z}(z)} [log(1-D(G(z)))] $$

  • GAN对噪声Z的分布没有特别要求,但是常用的有高斯分布、均匀分布。噪声z的维数至少要达到数据流形的内在维数,才能产生足够的diversity。

  • 对抗网络可以认为是由一个生成模型Generator和一个判别模型Discriminator组成的,生成模型和判别模型都是使用的神经网络的算法,比如感知机、卷积神经网络等。更形象的表达是:

即通过“逆变换采样”将高斯随机变量变换成生成的概率分布。其中“逆变换采样”通过概率生成模型实现。数据分布的形象表示请看:https://blog.csdn.net/wishchin/article/details/80580923 GAN原理部分。下图为生成对抗网络的渐变图:

2、模型

  • DCGAN深度卷积生成对抗网络:

    1、D网络模型,使用的是带步长的卷积取代池化层,进行下采样。

    2、G网络模型,使用?,进行上采样。

    3、激活函数为Leaky ReLu

    4、使用Batch Normalization标准化

  • DCGAN的网络结构为:

其中,G是生成模型,D是判别模型。Z是噪声,为生成模型G的输入,可以是高斯噪声,也可以是均匀噪声。
整个流程为:首先噪声数据输入到生成模型G中,生成假样本,和真实样本一起输入到判别模型D中,D会尽量地将其中的生成样本识别出来,而生成模型G会尽量使生成的样本不被识别出来,因此两者是一个博弈的过程。最终得生成样本会逐渐地贴近真实数据,从而完成了新数据的生成。
  • 生成模型:使用卷积神经网络,除了最终输出层使用tanh,其他都使用Relu。目标是最小化判别模型D的判别准确率。

  • 判别模型:使用卷积神经网络,都使用Leaky Relu。目标是最大化判别模型D的判别准确率。

  • CNN卷积神经网络:是一种专门用来处理具有类似网格结构的数据的神经网络。例如时间序列数据(在时间轴上有规律地进行采样形成的一维网格)和图像数据(二维像素网格)。单个神经元和整个神经网络结构如下图:多个输入,一个输出,第一个叫输入层,最后一个叫输出层,中间叫隐藏层。

    • 输入层:众多神经元接受大量非线性输入信息,称为输入向量(x1,x2,...,xn)'。——对数据进行预处理,去均值等
    • 输出层:信息在神经元连接中传输、分析、权衡,形成输出结果,输出信息称为输出向量y。——
    • 隐藏层,是输入层和输出层之间众多神经元链接组成的各个层面。如果有多个隐藏层,则意味着多个激活函数。——卷积计算层,激励层(ReLU),池化层(取最大)。







卷积的作用:
(1)原始图像通过与卷积核的数学运算,可以提取出图像的某些指定特征(features)。 (2)不同卷积核,提取的特征也是不一样的。 (3)提取的特征一样,不同的卷积核,效果也不一样。
  • 生成模型和判别模型的实质:我们知道,机器学习的任务是从属性X预测标记Y,即求概率P(Y|X)。

    • 对于判别模型,输入新数据X,根据P(Y|X)可以直接判别出来,实际上就是直接得到了判别边界,如下图左所示。判别式模型包括机器学习中的线性回归模型,支持向量机SVM,神经网络等。对于二分类,是指上是得到一个[0,1]之间的score,然后通过设定的阈值判定为正类还是反类。
    • 对于生成模型,输入新数据X和上一个输出Y,我们会求出他们的联合分布P(X, Y),然后通过贝叶斯公式\(P(Y|X) = \frac{P(X|Y)P(Y)}{P(X)}\),可得\(P(X,Y) = P(Y|X)P(X)\) ,相当于求出X与不同标记之间的联合概率分布,然后联合概率大的获胜,如下图右方。生成式模型包括隐马尔科夫模型、朴素贝叶斯模型、高斯混合模型GMM、LDA等。

  • DCGAN使用CNN结构稳定GAN的训练,相关方式:

    • Batch Normalization(批处理标准化,即对每层都进行标准化):批标准化,是将分散数据统一的做法。其是优化神经网络的一种做法,因为具有统一规格的数据,能让机器学习更容易学习到数据之中的规律。

    • 使用Transpose convlution进行上采样:转置卷积上采样,是神经网络生成图像时,从低分辨率到高分辨率的上采样方法,转置卷积能够让神经网络学会如何以最佳方式进行上采样。(最近邻插值)

    • 使用Leaky ReLu作为激活函数:神经网络中每层网络结构输入到输出的映射,称为激活函数(一般为非线性函数)。正是由于这些非线性函数的反复叠加,才使得神经网络有足够的capacity来抓取复杂的pattern。Leaky ReLU = max(0.01x ,x),计算速度快,解决了梯度消失的问题,输出均值接近0。

  • 层级结构的GAN通过逐层次、分阶段进行生成,一步步提高图像的分辨率。例如,层级结构StackGAN,阶段结构ProgressiveGAN。

  • 自编码结构:

    • 在GAN结构中,判别网络通常是一种区分真实/生成样本的概率。
    • 在自编码器结构里面,判别器使用VAE作为判别器,通常被当做能量函数,AE的loss:$$D(u) = || u - AE(u) ||$$ 是一个重构误差。如果输入生成的样本,其重构误差会很大;如果输入真实样本,其重构误差会很小。
  • GAN的目标函数可以是最小化两个分布的JS散度,也可以是其他衡量两个分布距离,不同的距离度量方式可以得到不同的目标函数,从而改进GAN训练的稳定性。

3、优缺点/其他

  • 很难取学习生成离散的数据,例如,文本。
  • GAN的扩展:DCGAN,InfoGAN,AC-GAN,WGAN(GAN的改进版)
  • DCGAN主要用于在图片中的生成模型。
  • GAN:优化的目标函数是两个分布上的Jensen-Shannon距离,但这个距离有这样一个问题,如果两个分布的样本空间并不完全重合,这个距离是无法定义的。并且“真实分布与生成分布的样本空间并不完全重合”是一个极大概率事件。WGAN,使用Wasserstein距离代替Jensen-Shannon距离。
  • GAN的应用:按文本生成图像、提高图片分辨率、药物匹配、检索特定的模式的图片。https://www.jiqizhixin.com/articles/2017-08-23-6
    • 药物匹配:目标是训练生成器,以尽可能精确地从一个药物数据库中对现有药物进行按病取药的操作。经过训练后,可以使用生成器获得一种以前不可治愈的疾病的药方,并使用判别器确定生成的药方是否治愈了特定疾病。

参考

参考:GAN-Overview pdf文档

参考:机器学习大牛:批标准化理解 https://zhuanlan.zhihu.com/p/24810318

参考:AI研习社:Transpose convlution上采样 https://ai.yanxishe.com/page/TextTranslation/856

参考:https://zhuanlan.zhihu.com/p/25110450

参考:生成式模型和判别式模型:http://www.cnblogs.com/fanyabo/p/4067295.html

参考:https://www.zhihu.com/question/20446337

参考:《深度学习》- 《Deep Learning》

参考:CNN卷积神经网络:https://blog.csdn.net/v_JULY_v/article/details/51812459

参考:GAN原理的形象表示:https://blog.csdn.net/wishchin/article/details/80580923

参考:激活函数:https://zhuanlan.zhihu.com/p/25110450(Sigmoid函数,,tanh函数,ReLU函数,Leaky ReLU函数)

深度学习算法 之DCGAN(写得不系统,后期再总结,大家可简单阅览一下)的更多相关文章

  1. win10+anaconda+cuda配置dlib,使用GPU对dlib的深度学习算法进行加速(以人脸检测为例)

    在计算机视觉和机器学习方向有一个特别好用但是比较低调的库,也就是dlib,与opencv相比其包含了很多最新的算法,尤其是深度学习方面的,因此很有必要学习一下.恰好最近换了一台笔记本,内含一块GTX1 ...

  2. 基于深度学习的恶意样本行为检测(含源码) ----采用CNN深度学习算法对Cuckoo沙箱的动态行为日志进行检测和分类

    from:http://www.freebuf.com/articles/system/182566.html 0×01 前言 目前的恶意样本检测方法可以分为两大类:静态检测和动态检测.静态检测是指并 ...

  3. 利用python深度学习算法来绘图

    可以画画啊!可以画画啊!可以画画啊! 对,有趣的事情需要讲三遍. 事情是这样的,通过python的深度学习算法包去训练计算机模仿世界名画的风格,然后应用到另一幅画中,不多说直接上图! 这个是世界名画& ...

  4. 深度学习之 mnist 手写数字识别

    深度学习之 mnist 手写数字识别 开始学习深度学习,先来一个手写数字的程序 import numpy as np import os import codecs import torch from ...

  5. AI系统——机器学习和深度学习算法流程

    终于考上人工智能的研究僧啦,不知道机器学习和深度学习有啥区别,感觉一切都是深度学习 挖槽,听说学长已经调了10个月的参数准备发有2000亿参数的T9开天霹雳模型,我要调参发T10准备拿个Best Pa ...

  6. OCR技术浅探:基于深度学习和语言模型的印刷文字OCR系统

    作者: 苏剑林 系列博文: 科学空间 OCR技术浅探:1. 全文简述 OCR技术浅探:2. 背景与假设 OCR技术浅探:3. 特征提取(1) OCR技术浅探:3. 特征提取(2) OCR技术浅探:4. ...

  7. 深度学习算法实践15---堆叠去噪自动编码机(SdA)原理及实现

    我们讨论了去噪自动编码机(dA),并讨论了Theano框架实现的细节.在本节中,我们将讨论去噪自动编码机(dA)的主要应用,即组成堆叠自动编码机(SdA),我们将以MNIST手写字母识别为例,用堆叠自 ...

  8. Recommending music on Spotify with deep learning 采用深度学习算法为Spotify做基于内容的音乐推荐

    本文参考http://blog.csdn.net/zdy0_2004/article/details/43896015译文以及原文file:///F:/%E6%9C%BA%E5%99%A8%E5%AD ...

  9. 【深度学习系列】手写数字识别卷积神经--卷积神经网络CNN原理详解(一)

    上篇文章我们给出了用paddlepaddle来做手写数字识别的示例,并对网络结构进行到了调整,提高了识别的精度.有的同学表示不是很理解原理,为什么传统的机器学习算法,简单的神经网络(如多层感知机)都可 ...

随机推荐

  1. 七、spring生命周期之初始化和销毁方法

    一.通过@Bean指定初始化和销毁方法 在以往的xml中,我们是这样配置的 <bean id="exampleInitBean" class="examples.E ...

  2. torch7安装的坑

    https://github.com/torch/torch7/issues/1086 sudo su export TORCH_NVCC_FLAGS="-D__CUDA_NO_HALF_O ...

  3. Tomcat是一个Servlet容器?

    "Tomcat是一个Servlet容器",这句话对于2019年的程序员应该是耳熟能详的. 单纯的思考一下这句话,我们可以抽象出来这么一段代码: class Tomcat { Lis ...

  4. 链表习题(2)-一个集合用带头结点的单链表L表示,编写算法删除其值最大的结点。

    /*一个集合用带头结点的单链表L表示,编写算法删除其值最大的结点.*/ /* 算法思想:使用pre,p,premax,max四个指针,pre和p进行比较,premax和max进行最后的删除操作 通过遍 ...

  5. 在laravel框架中使用模板继承来进行更方便的布局

    html中有很多东西是重复的,这是需要用到laravel的模板继承,来完成这样的简化操作. 父模板 既然时模板继承,那么就首先有一个父模板,父模板类似网页html中的头部和尾部,但又有一些不一样. / ...

  6. Django模型层之ORM

    Django模型层之ORM操作 一 ORM简介 我们在使用Django框架开发web应用的过程中,不可避免地会涉及到数据的管理操作(如增.删.改.查),而一旦谈到数据的管理操作,就需要用到数据库管理软 ...

  7. Java JDK1.8源码学习之路 1 Object

    写在最前 对于一个合格的后端程序员来说,现行的流行框架早已经能胜任基本的企业开发,Springboot 任何的框架都把重复的工作更佳简单/优化的解决掉,但是完全陷入在这样的温水里面, 好比温水煮青蛙, ...

  8. 论文笔记:GREEDY FUNCTION APPROXIMATION: A GRADIENT BOOSTING MACHINE

    Boost是集成学习方法中的代表思想之一,核心的思想是不断的迭代.boost通常采用改变训练数据的概率分布,针对不同的训练数据分布调用弱学习算法学习一组弱分类器.在多次迭代的过程中,当前次迭代所用的训 ...

  9. 物流管理系统(SSM+vue+shiro)【前后台】

    一.简单介绍项目 该项目是属于毕业设计项目之一,有前台的用户下单.有司机进行接单.有管理员进行操作后台,直接进入主题 毕设.定制开发 联系QQ:761273133 登录主页: 手机号码+验证码登录 或 ...

  10. 通过 AppSwitch 禁用 WPF 内置的触摸让 WPF 程序可以处理 Windows 触摸消息

    原文:通过 AppSwitch 禁用 WPF 内置的触摸让 WPF 程序可以处理 Windows 触摸消息 WPF 框架自己实现了一套触摸机制,但同一窗口只能支持一套触摸机制,于是这会禁用系统的触摸消 ...