机器学习算法 之DCGAN

目录

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

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函数)

原文地址:https://www.cnblogs.com/hugechuanqi/p/10913542.html

时间: 2024-10-10 13:40:46

机器学习算法 之DCGAN的相关文章

利用机器学习算法寻找网页的缩略图

博客中的文章均为meelo原创,请务必以链接形式注明本文地址 描述一个网页 现在的世界处于一个信息爆炸的时代.微信.微博.新闻网站,每天人们在大海捞针的信息海洋里挑选自己感兴趣的信息.我们是如何判断哪条信息可能会感兴趣?回想一下,你会发现是标题.摘要和缩略图.通过标题.摘要和缩略图,就能够很好地猜测到网页的内容.打开百度搜索引擎,随便搜索一个关键字,每一条搜索结果也正是这三要素构成的. 那么一个自然的问题是搜索引擎是如何找到网页的标题.摘要和缩略图的呢. 寻找网页的标题其实是一个非常简单的问题.

机器学习系列(9)_机器学习算法一览(附Python和R代码)

本文资源翻译@酒酒Angie:伊利诺伊大学香槟分校统计学同学,大四在读,即将开始计算机的研究生学习.希望认识更多喜欢大数据和机器学习的朋友,互相交流学习. 内容校正调整:寒小阳 && 龙心尘 时间:2016年4月 出处:http://blog.csdn.net/han_xiaoyang/article/details/51191386 http://blog.csdn.net/longxinchen_ml/article/details/51192086 声明:版权所有,转载请联系作者并注

简单易学的机器学习算法——AdaBoost

一.集成方法(Ensemble Method) 集成方法主要包括Bagging和Boosting两种方法,随机森林算法是基于Bagging思想的机器学习算法,在Bagging方法中,主要通过对训练数据集进行随机采样,以重新组合成不同的数据集,利用弱学习算法对不同的新数据集进行学习,得到一系列的预测结果,对这些预测结果做平均或者投票做出最终的预测.AdaBoost算法和GBDT(Gradient Boost Decision Tree,梯度提升决策树)算法是基于Boosting思想的机器学习算法.

【机器学习算法-python实现】采样算法的简单实现

1.背景 采样算法是机器学习中比较常用,也比较容易实现的(出去分层采样).常用的采样算法有以下几种(来自百度知道): 一.单纯随机抽样(simple random sampling) 将调查总体全部观察单位编号,再用抽签法或随机数字表随机抽取部分观察单位组成样本. 优点:操作简单,均数.率及相应的标准误计算简单. 缺点:总体较大时,难以一一编号. 二.系统抽样(systematic sampling) 又称机械抽样.等距抽样,即先将总体的观察单位按某一顺序号分成n个部分,再从第一部分随机抽取第k

【机器学习算法-python实现】矩阵去噪以及归一化

1.背景 项目需要,打算用python实现矩阵的去噪和归一化.用numpy这些数学库没有找到很理想的函数,所以一怒之下自己用标准库写了一个去噪和归一化的算法,效率有点低,不过还能用,大家如果有需要可以拿去. (1)去噪算法:根据概率论的知识,如果一组数据服从正态分布,我们设均值是n,方差是v,那么对于每个离散数值有百分之九十二以上的概率会在(n-3*v,n+3*v)的区间内.所以这里的去噪功能主要是实现如果超出了区间就将这个值标记为区间所能容忍最大值. (2)归一化:找到输入队列最大值max,最

机器学习算法之旅

在理解了我们须要解决的机器学习问题之后,我们能够思考一下我们须要收集什么数据以及我们能够用什么算法.本文我们会过一遍最流行的机器学习算法,大致了解哪些方法可用,非常有帮助. 机器学习领域有非常多算法,然后每种算法又有非常多延伸,所以对于一个特定问题,怎样确定一个正确的算法是非常困难的.本文中我想给你们两种方法来归纳在现实中会遇到的算法. 学习方式 依据怎样处理经验.环境或者不论什么我们称之为输入的数据,算法分为不同种类.机器学习和人工智能课本通常先考虑算法能够适应的学习方式. 这里仅仅讨论几个基

【机器学习算法-python实现】协同过滤(cf)的三种方法实现

(转载请注明出处:http://blog.csdn.net/buptgshengod) 1.背景 协同过滤(collaborative filtering)是推荐系统常用的一种方法.cf的主要思想就是找出物品相似度高的归为一类进行推荐.cf又分为icf和ucf.icf指的是item collaborative filtering,是将商品进行分析推荐.同理ucf的u指的是user,他是找出知趣相似的人,进行推荐.通常来讲icf的准确率可能会高一些,通过这次参加天猫大数据比赛,我觉得只有在数据量非

机器学习算法总结--SVM

简介 SVM是一种二类分类模型,其基本模型定义为特征空间上的间隔最大的线性分类器,即支持向量机的学习策略便是间隔最大化,最终可转化为一个凸二次规划问题的求解.或者简单的可以理解为就是在高维空间中寻找一个合理的超平面将数据点分隔开来,其中涉及到非线性数据到高维的映射以达到数据线性可分的目的. 训练数据线性可分时,通过硬间隔最大化,学习一个线性分类器,即线性可分支持向量机,又称为硬间隔支持向量机:训练数据近似线性可分时,通过软间隔最大化,也学习一个线性分类器,即线性支持向量机,也称为软间隔支持向量机

【转】常见面试之机器学习算法思想简单梳理

转:http://www.chinakdd.com/article-oyU85v018dQL0Iu.html 前言: 找工作时(IT行业),除了常见的软件开发以外,机器学习岗位也可以当作是一个选择,不少计算机方向的研究生都会接触这个,如果你的研究方向是机器学习/数据挖掘之类,且又对其非常感兴趣的话,可以考虑考虑该岗位,毕竟在机器智能没达到人类水平之前,机器学习可以作为一种重要手段,而随着科技的不断发展,相信这方面的人才需求也会越来越大. 纵观IT行业的招聘岗位,机器学习之类的岗位还是挺少的,国内