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

目录

  • 1、基本介绍
  • 2、模型
  • 3、优缺点/其他
  • 参考

深度学习算法 之DCGAN(写得不系统,后期再总结,大家可简单阅览一下)_第1张图片

1、基本介绍

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

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

深度学习算法 之DCGAN(写得不系统,后期再总结,大家可简单阅览一下)_第2张图片

优化目标函数为:\[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组成的,生成模型和判别模型都是使用的神经网络的算法,比如感知机、卷积神经网络等。更形象的表达是:

深度学习算法 之DCGAN(写得不系统,后期再总结,大家可简单阅览一下)_第3张图片

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

深度学习算法 之DCGAN(写得不系统,后期再总结,大家可简单阅览一下)_第4张图片

2、模型

  • DCGAN深度卷积生成对抗网络:
    1、D网络模型,使用的是带步长的卷积取代池化层,进行下采样。
    2、G网络模型,使用?,进行上采样。
    3、激活函数为Leaky ReLu
    4、使用Batch Normalization标准化

  • DCGAN的网络结构为:

深度学习算法 之DCGAN(写得不系统,后期再总结,大家可简单阅览一下)_第5张图片

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

  • CNN卷积神经网络:是一种专门用来处理具有类似网格结构的数据的神经网络。例如时间序列数据(在时间轴上有规律地进行采样形成的一维网格)和图像数据(二维像素网格)。单个神经元和整个神经网络结构如下图:多个输入,一个输出,第一个叫输入层,最后一个叫输出层,中间叫隐藏层。
    • 输入层:众多神经元接受大量非线性输入信息,称为输入向量(x1,x2,...,xn)'。——对数据进行预处理,去均值等
    • 输出层:信息在神经元连接中传输、分析、权衡,形成输出结果,输出信息称为输出向量y。——
    • 隐藏层,是输入层和输出层之间众多神经元链接组成的各个层面。如果有多个隐藏层,则意味着多个激活函数。——卷积计算层,激励层(ReLU),池化层(取最大)。
      深度学习算法 之DCGAN(写得不系统,后期再总结,大家可简单阅览一下)_第6张图片
      深度学习算法 之DCGAN(写得不系统,后期再总结,大家可简单阅览一下)_第7张图片
      深度学习算法 之DCGAN(写得不系统,后期再总结,大家可简单阅览一下)_第8张图片
      深度学习算法 之DCGAN(写得不系统,后期再总结,大家可简单阅览一下)_第9张图片
卷积的作用:
(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(写得不系统,后期再总结,大家可简单阅览一下)_第10张图片

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

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

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

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

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

深度学习算法 之DCGAN(写得不系统,后期再总结,大家可简单阅览一下)_第11张图片

  • 自编码结构:
    • 在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(写得不系统,后期再总结,大家可简单阅览一下))