《GAN实战生成对抗网络》笔记 第一章:深度学习概述

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xiaolouhan/article/details/84024204

目录:

第一章    深度学习概述

第二章    无监督学习GAN

第三章    图像风格跨域转换

第四章    从文本构建逼真的图像

第五章    利用多种生成模型生成图像

第六章    将机器学习带入生产环境


1    深度学习概述

一点经验:你可以从ReLU函数开始,如果ReLU函数没有提供最优结果,再尝试其他激活函数。

1)深度学习往往需要大量时间来处理大量数据,模型的收敛速度是尤为重要的。所以,总体上来讲,训练深度学习网络尽量使用zero-centered数据 (可以经过数据预处理实现) 和zero-centered输出。所以要尽量选择输出具有zero-centered特点的激活函数以加快模型的收敛速度。
2)如果使用 ReLU,那么一定要小心设置 learning rate,而且要注意不要让网络出现很多 “dead” 神经元,如果这个问题不好解决,那么可以试试 Leaky ReLU、PReLU 或者 Maxout.
3)最好不要用 sigmoid,你可以试试 tanh,不过可以预期它的效果会比不上 ReLU 和 Maxout.
---------------------  
作者:StevenSun2014  
来源:CSDN  
原文:https://blog.csdn.net/tyhj_sf/article/details/79932893  
版权声明:本文为博主原创文章,转载请附上博文链接!

饱和与非饱和激活函数

使用“非饱和激活函数”的优势在于两点:

  • 首先,“非饱和激活函数”能解决所谓的“梯度消失”问题;
  • 其次,它能加快收敛速度;
  • 但是,非饱和激活函数能实现值域压缩;

1.1.1Sigmoid激发

常在特征相差比较复杂或是相差不是特别大的二分类中效果比较好;对于x很大y是常量时,由于dy/dx梯度始终是0,因此会导致梯度消失(vanishing gradient),神经网络停止学习;

sigmoid缺点:

  • 激活函数计算量大,反向传播求误差梯度时,求导涉及除法;
  • 反向传播时,很容易就会出现梯度消失的情况,从而无法完成深层网络的训练;
  • Sigmoids函数饱和且kill掉梯度;
  • Sigmoids函数收敛缓慢。
  • 再说Tanh激发

也称为双切正切函数,取值范围为[-1,1]。tanh在特征相差明显时的效果会很好,在循环过程中会不断扩大特征效果。与 sigmoid 的区别是,tanh 是 0 均值的,因此实际应用中 tanh 会比 sigmoid 更好。

1.1.2修正线性单元/线性整流单元(ReLU, Rectified Linear Unit)

为解决梯度消失问题,Geoff Hinton首次提出ReLU。但是ReLU训练过程十分脆弱,一些神经单元可能在任何数据上都不会再被激发,从这个神经元上经过的梯度从某个数据点之后就会一直是0;

 

ReLU 的优点:

Krizhevsky et al. 发现使用 ReLU 得到的 SGD 的收敛速度会比 sigmoid/tanh 快很多

ReLU 的缺点:

  • 训练的时候很”脆弱”,很容易就”die”了;例如,一个非常大的梯度流过一个 ReLU 神经元,更新过参数之后,这个神经元再也不会对任何数据有激活现象了,那么这个神经元的梯度就永远都会是 0.
  • 如果 learning rate 很大,那么很有可能网络中的 40% 的神经元都”dead”了。

由此引入Leaky ReLU/ELUs/PReLU/RReLU等变种解决这一问题。

  • Leaky ReLU

ReLU是将所有的负值都设为零,相反,Leaky ReLU是给所有负值赋予一个非零斜率。Leaky ReLU激活函数是在声学模型(2013)中首次提出的。以数学的方式我们可以表示为:

ai是(1,+∞)区间内的固定参数。
ai是(1,+∞)区间内的固定参数

  • Maxout

Maxout 是对 ReLU 和 Leaky ReLU 的一般化归纳,它的函数公式是(二维时):$$\max \left( w_{1}^{T}x+b_{1},W_{2}^{T}x+b_{2}\right) $$。ReLU 和 Leaky ReLU 都是这个公式的特殊情况(比如 ReLU 就是当 $$w_{1},b_{1}=0$$时)。这样 Maxout 神经元就拥有 ReLU 单元的所有优点(线性和不饱和),而没有它的缺点(死亡的 ReLU 单元)。然而和 ReLU 对比,它每个神经元的参数数量增加了一倍,这就导致整体参数的数量激增。可以参考论文《maxout networks》。

  • PReLU

参数化修正线性单元, PReLU可以看作是Leaky ReLU的一个变体。在PReLU中,负值部分的斜率是根据数据来定的,而非预先定义的。作者称,在ImageNet分类(2015,Russakovsky等)上,PReLU是超越人类分类水平的关键所在。

  • RReLU

 

随机纠正线性单元, RReLU也是Leaky ReLU的一个变体。在RReLU中,负值的斜率在训练中是随机的,在之后的测试中就变成了固定的了。RReLU的亮点在于,在训练环节中,aji是从一个均匀的分布U(I,u)中随机抽取的数值。形式上来说,我们能得到以下结果:

  • 1.1.3 ELUs

ELUs是“指数线性单元”,它试图将激活函数的平均值接近零,从而加快学习的速度。同时,它还能通过正值的标识来避免梯度消失的问题。根据一些研究,ELUs分类精确度是高于ReLUs的。下面是关于ELU细节信息的详细介绍:

  • SELU函数

SELU(Scaled Exponential Linear Unit,拉伸指数线性单元)是ELU经过拉伸的版本。

图片来源:Elior Cohen

 

  • SReLU函数

SReLU(S-shaped Rectified Linear Activation Unit,S型修正线性激活单元)由三个分段线性函数组成。系数作为参数,将在网络训练中学习。

值域:(-∞, +∞)

 

不同参数的SReLU图像;图片来源:arXiv:1512.07030

 

  • APL函数

    APL(Adaptive Piecewise Linear,自适应分段线性)函数

    图片来源:arXiv:1512.07030

     

值域:(-∞, +∞)

 

  • SoftPlus函数

SoftPlus函数的导数为逻辑(logistic)函数。大体上,ReLU和SoftPlus很相似,只不过SoftPlus在接近零处平滑可微。另外,计算ReLU及其导数要比SoftPlus容易很多。

值域:(0, ∞)

 

图片来源:维基百科

 

  • Bent identity函数

Bent identity函数,顾名思义,将恒等函数弯曲一下。

值域:(-∞, +∞)

 

图片来源:维基百科

 

  • softmax函数

softmax函数将原始值转换为后验分布,可用于衡量确定性。类似sigmoid,softmax将每个单元的输出值挤压到0和1之间。不过,softmax同时确保输出的总和等于1。softmax函数的输出等价于类别概率分布,它告诉你任何分类为真的概率。

图片来源:dataaspirant.com

1.1.4 随机梯度下降SGD

1.1.5 学习速率调优

1.1.6 正则化

1.1.7 权重分享以及池化

1.1.8 局部感受野

1.1.9 卷积神经网络

1.2 逆卷积/转置卷积

1.2.1 递归神经网络和LSTM

1.2.2深度神经网络

1.2.3 判别模型和生成模型的对比

概念:

判别方法(Discriminative approach):由数据直接学习决策函数Y=f(X)或条件概率分布P(Y|X)作为预测模型,即判别模型。判别方法关心的是对于给定的输入X,应该预测什么样的输出Y。

数据直接学习决策函数Y=f(X)或条件概率分布P(Y|X)得到的预测模型,就是判别模型;基本思想是有限样本条件下建立判别函数,不考虑样本的产生模型,直接研究预测模型。

生成方法(Generative approach):由数据学习联合概率分布P(X,Y), 然后由P(Y|X)=P(X,Y)/P(X)求出概率分布P(Y|X)作为预测的模型。该方法表示了给定输入X与产生输出Y的生成关系

P(Y|X)作为的预测的模型就是生成模型; 这样的方法之所以称为生成方法,是因为模型表示了给定输入X产生输出Y的生成关系。

生成模型:朴素贝叶斯、隐马尔可夫(em算法) 
判别模型:k近邻法、感知机、决策树、逻辑回归、线性回归、最大熵模型、支持向量机(SVM)、提升方法、条件随机场(CRF)

生成算法尝试去找到底这个数据是怎么生成的(产生的),然后再对一个信号进行分类。基于你的生成假设,那么那个类别最有可能产生这个信号,这个信号就属于那个类别。判别模型不关心数据是怎么生成的,它只关心信号之间的差别,然后用差别来简单对给定的一个信号进行分类。在监督学习中,两种方法各有优缺点,适合于不同条件的学习问题。

        生成方法的特点:上面说到,生成方法学习联合概率密度分布P(X,Y),所以就可以从统计的角度表示数据的分布情况,能够反映同类数据本身的相似度。但它不关心到底划分各类的那个分类边界在哪。生成方法可以还原出联合概率分布P(Y|X),而判别方法不能。生成方法的学习收敛速度更快,即当样本容量增加的时候,学到的模型可以更快的收敛于真实模型,当存在隐变量时,仍可以用生成方法学习。此时判别方法就不能用。

       判别方法的特点:判别方法直接学习的是决策函数Y=f(X)或者条件概率分布P(Y|X)。不能反映训练数据本身的特性。但它寻找不同类别之间的最优分类面,反映的是异类数据之间的差异。直接面对预测,往往学习的准确率更高。由于直接学习P(Y|X)或P(X),可以对数据进行各种程度上的抽象、定义特征并使用特征,因此可以简化学习问题。

 由生成模型可以得到判别模型,但由判别模型得不到生成模型。

对比

1、生成模型可以还原出联合概率分布(还原数据本身相似度),而判别方法不能; 
2、生成方法的学习收敛速度更快,当样本容量增加的时候,学到的模型可以更快的收敛于真实模型; 
3、当存在隐变量时,仍可以利用生成方法学习,此时判别方法不能用; 
4、判别学习不能反映训练数据本身的特性,但它寻找不同类别之间的最优分类面,反映的是异类数据之间的差异,直接面对预测,往往学习的准确率更高,由于直接学习P(Y|X)或Y=f(X),从而可以简化学习; 
5、简单的说,生成模型是从大量的数据中找规律,属于统计学习;而判别模型只关心不同类型的数据的差别,利用差别来分类。

对于跟踪算法

        跟踪算法一般来说可以分为两类:基于外观模型的生成模型或者基于外观模型的判别模型。

        生成模型:一般是学习一个代表目标的模型,然后通过它去搜索图像区域,然后最小化重构误差。类似于生成模型描述一个目标,然后就是模式匹配了,在图像中找到和这个模型最匹配的区域,就是目标了。

        判别模型:将跟踪问题看成一个二分类问题,然后找到目标和背景的决策边界。它不管目标是怎么描述的,那只要知道目标和背景的差别在哪,然后你给一个图像,它看它处于边界的那一边,就归为哪一类。

GAN :基于概率的生成模型

什么是 GAN?用 Ian Goodfellow 自己的话来说:“生成对抗网络是一种生成模型(Generative Model),其背后基本思想是从训练库里获取很多训练样本,从而学习这些训练案例生成的概率分布。”

除了 GAN ,现在比较常用的变分自动编码模型(VAE)、自回归模型(Auto-regressive)也属于概率生成模型。GAN 是更好的生成模型,在某种意义上避免了马尔科夫链式的学习机制,这使得它能够区别于传统的概率生成模型。传统概率生成模型一般都需要进行马可夫链式的采样和推断,而 GAN 避免了这个计算复杂度特别高的过程,直接进行采样和推断,从而提高了 GAN 的应用效率,所以其实际应用场景也就更为广泛。

深度学习

深度学习亦称深度机器学习、深度结构学习、分层学习,是一类有效训练深层神经网络(Deep Neural Network,DNN)的机器学习算法,可以用于对数据进行高层抽象建模。广义上说,深层神经网络是一种具有多个处理层的复杂结构,其中包含多重非线性变换。如果深度足够,那么多层感知器无疑是深层网络,前馈神经网络也是深层网络。基本的深层网络模型可以分为两大类:生成模型和判别模型。生成是指从隐含层到输入数据的重构过程,而判别是指从输入数据到隐含层的归约过程。复杂的深层结构可能是一个混合模型,既包含生成模型成分,又包含判别模型成分。生成模型一般用来表达数据的高阶相关性或者描述数据的联合统计分布,判别模型则通常用来分类数据的内在模式或者描述数据的后验分布。生成模型主要包括受限玻耳兹曼机(Restricted Boltzmann Machine,RBM)、自编码器(Autoencoder,AE)、深层信念网络(Deep Belief Network,DBN)、深层玻耳兹曼机(Deep Boltzmann Machine,DBM)及和积网络(Sum Product Network , SPN),其中AE、DBN和DBM需要RBM进行预训练。判别模型主要包括深层感知器(deep MLP)、深层前馈网络(deep FNN)、卷积神经网络(Convolutional Neural Network,CNN)、深层堆叠网络(Deep Stacking Network,DSN)、循环神经网络(Recurrent Neural Network,RNN)和长短时记忆(Long Short Term Memory,LSTM)网络。值得一提的是,虽然受限玻耳兹曼机、自编码器、深层信念网络、深层玻耳兹曼机,以及和积网络都被归类为生成模型,但由于模型中也包含判别过程(即从输入到隐含层的规约),所以在一定条件下,也可以看作判别模型并用于对数据的分类和识别,而且在用于产生序列数据时,循环神经网络也可以看作是生成模型。此外,虽然受限玻耳兹曼机作为一种两层网络,在严格意义上并不是一种深层网络,但由于它是对许多深层网络进行预训练的基础,所以也被看作一种基本的深度学习模型。自编码器作为一种深度学习模型,通常只是用作其他模型的构建模块,而不是作为一个独立的模型使用。

展开阅读全文

没有更多推荐了,返回首页