机器学习及应用-第11章-深度学习初步_第1页
机器学习及应用-第11章-深度学习初步_第2页
机器学习及应用-第11章-深度学习初步_第3页
机器学习及应用-第11章-深度学习初步_第4页
机器学习及应用-第11章-深度学习初步_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第11章深度学习初步自编码器模型受限玻尔兹曼机模型卷积神经网络模型TensorFlow的基本使用11.1引言2006年,GeoffreyHinton在《Science》上提出了深度学习的概念;在语音识别和信号处理、图像目标识别以及自然语言处理等研究方向,深度学习的应用都带来了具有突破性的结果。深度学习的提出,引发了机器学习研究者们在表示、学习、优化、认知等方面的进一步思考。11.2表示问题深度学习可以通过一种深层的非线性网络实现对复杂函数的无限逼近。这就解决了浅层学习在有限数量的样本和计算单元情况下对复杂函数表示能力有限的问题。简言之,深度学习多层表示的好处就是能够用较少的参数表征十分复杂的函数。深层表示方式的优势:一方面深度结构能够逐渐学习出更加抽象的特征,另一方面深度结构可以提供一种更具表现力的分布式表示方式,在深度学习采用的多层表示中,如果深度不够将会带来一定的问题。与此同时,如何决定深层表示的层数以及需要多少计算资源才能够训练出足够好的深层网络模型都是研究表示时值得探究的问题。用于堆叠的单层学习模块主要分为两类。一类是以受限玻尔兹曼机为代表的概率模型构建模块,另一类是以自动编码器及其变形为代表的神经网络构建模块。11.2表示问题在深度学习模型中,前者被解释成描述某种概率图模型,隐藏单元被视为隐随机变量;后者则被解释成描述某种计算图,隐藏单元被视为计算结点。从

参数的编码路径方面讲,概率模型利用推理和训练方案直接参数化生成路径,也就是解码过程;而基于神经网络的模型直接参数化编码路径。有向图模型经常会导致explainingaway的问题;11.2表示问题许多经典的特征表示方法都能够赋予概率模型的解释,主成分分析PCA以及稀疏编码能够与有向图模型分别参数化似然度和先验概率来构建联合分布相对应;稀疏编码这种表示的简洁性以及计算的高效性使其很快成为特征表示的一种常用方法,并在自然图像建模、语音分类、自然语言处理等方面实现了成功的应用;在无向概率图模型中,玻尔兹曼分布是一类马尔可夫随机场的特殊形式;受限玻尔兹曼机,RBM能够很好地消除explainingaway现象,得到了广泛的应用,包括图像分类、运动和空间变换、协同过滤以及自然图像建模。11.3学习问题在深度学习提出以前,先将输入数据进行预处理,然后进行特征提取、特征选择,最后进行推理、预测或识别;选取特征的过程也就是特征表示的过程,这也是对算法的性能起到决定性作用的阶段。有相当一部分算法利用人工设计的特征取得了良好的效果,手工选取特征不仅需要相当的专业领域知识,并且合适的特征设计是一件十分费力的事情。深度学习别名,叫做非监督的特征学习。深度学习的学习过程可以简要概括为:首先逐层无监督地预训练单层学习模块,然后每次都将上一层的输出结果作为下一层训练模块的输入,最后训练完所有层后利用有监督的方式微调整个网络。在无监督预训练阶段,希望输入数据经过整个深层网络后得到的输出结果仍然等于输入;11.3学习问题深度学习的过程就是获得在给定观察数据条件下隐藏变量的概率分布。可以分为以稀疏编码为代表的有向图模型以及以受限玻尔兹曼机为代表的无向图模型。另一种非概率特征学习的模型是基于神经网络的模型。这类模型的主要思想是将自动编码器堆叠起来,建立一种深层的架构。也可以用一些正则化的自动编码器替换标准的自动编码器,获得一些改进的版本。现有的模型主要包括稀疏自动编码器(SparseAutoEncoders,SAE)、降噪自动编码器(DenoisingAutoEncoders,DAE)、收缩自动编码器(ContractiveAuto-Encoders,CAE);SAE引入了一种稀疏正则化的形式,表示的稀疏性可以通过惩罚隐藏单元的偏置项获得;11.3学习问题稀疏编码与自动编码器结合的另一类有效的变形是PSD,PSD在识别阶段通过一个快速非迭代的近似替代原本高成本且高度非线性的编码步骤,并应用在图像、视频与音频中的目标识别中。DAE对含有人工噪声的数据进行降噪,通过降噪处理,学习模型能够获得与RBM特征相当或者更优的特征并且提高分类的性能;CAE强调学习一种更加收缩的编码器,即使得编码器的导数尽可能的小。这样带来的好处是能降低表示的有效自由度,使得特征对于输入空间的无穷小变形具有很好的鲁棒性。11.4优化问题传统的神经网络模型利用反向传播BP算法来优化多层网络的权值。当面临深度学习所需要的深层网络时,继续随机初始化网络后采用BP算法进行优化经常会陷入局部极小值而使得训练变得异常困难。2006年,Hinton提出了优化深层神经网络的有效方法首先,从网络的输入层开始,自底而上逐层地进行非监督训练网络权值。其次,当无监督训练完所有层之后,利用自顶向下的监督学习对整个网络权值进行微调,利用无监督初始化参数的过程,能使得网络的权值更加接近于全局最优,这就保证了后续优化工作的顺利进行。Hinton双向的wake-sleep算法对深层网络进行优化。各层之间采用双向的权值,自底而上的称作认知权值,自上而下的称作生成权值。算法分为wake阶段和sleep阶段。在wake阶段,自底而上利用每层的输入和认知权值逐层生成抽象特征,并且用梯度下降算法不断修改生成权值;在sleep阶段,自顶而下利用学习到的特征以及生成权值逐层生成低层输入,并不断修改认知权值。11.5认知问题人工智能、机器学习等学科通过模拟或实现人类认知规律,解析其内在机理,并用机器来实现,以此开发智能化的信息处理模式。支持深度学习最强有力的证据是人脑具有一个深层次(即深度)的结构。大脑皮层结构示意图11.5认知问题人脑的深度结构决定了人类认知过程的逐层进行;深度学习从某种程度上模拟了人类逐层进行、逐步抽象的认知过程。认知具有感知、识别、学习、联想、记忆、推理等功能,是人类最基本的心理过程。深层神经网络在神经元数目一定的情况下,相比于传统浅层神经网络来说,具有更强大的学习能力,能够从原始输入中自动提取出具有高度抽象含义的特征。深度学习算法图形处理单元使得深层神经网络在训练速度上得到了极大地改善。因此,深度学习在语音识别、图像序列分析、自然语言处理等方面都取得了具有突破性的进展。深度学习逐层自动抽取高级抽象特征的能力与人脑的认知过程相吻合,无疑将成为实现人工智能的一项重要途径。11.6基本模型

11.6.1自编码器11.6基本模型

11.6.2受限玻尔兹曼机11.6基本模型图示说明(a)受限玻尔兹曼机本身是基于二分图的无向图模型,可以构造稀疏连接的RBM(b)深度信念网络是涉及有向和无向连接的混合图模型;与RBM一样,它也没有层内连接,DBN隐藏单元之间的连接在分开的层中;(c)深度玻尔兹曼机是具有几层潜变量的无向图模型。与RBM和DBN一样,DBM也缺少层内连接。DBM与RBM的联系不如DBN紧密。当从RBM堆栈初始化DBM时,有必要对RBM的参数稍作修改。某些种类的DBM可以直接训练,而不用先训练一组RBM。11.6.2受限玻尔兹曼机11.6基本模型

11.6.3卷积神经网络11.6基本模型

11.6.3卷积神经网络11.6基本模型11.6.3卷积神经网络11.7TensorFlow的简介与安装谷歌面向人工智能领域发布的开源软件库,提供了丰富的机器学习中常用的基本数值计算方法及模型组件,使得研究者能够快搭建算法模型并进行验证,不需要特殊硬件配合,能够部署在常见的、不同平台上,最新版本的TensorFlow1.4提供了不同语言的支持,如:Python,C++,Java和Go等。11.7TensorFlow的简介与安装11.7.1创建Python3环境选择ANACONDAPython集成开发环境查看安装已组件:在AnacondaPrompt下,键入condalist11.7TensorFlow的简介与安装11.7.2安装TensorFlow注:TensorFlow目前在Windows下只支持Python3.5版本。(1)打开AnacondaPrompt,输入清华仓库镜像,这样更新会快一些:condaconfig--addchannels/anaconda/pkgs/free/condaconfig--setshow_channel_urlsyes(2)同样在AnacondaPrompt中利用Anaconda创建一个python3.5的环境,环境名称为tensorflow,输入下面命令:condacreate-ntensorflowpython=3.511.7TensorFlow的简介与安装11.7.2安装TensorFlow运行

开始菜单

Anaconda3

AnacondaNavigator,点击左侧Environments,可以看到tensorflow的环境已经创建好了。

11.7TensorFlow的简介与安装11.7.2安装TensorFlow(3)在AnacondaPrompt中启动tensorflow环境:activatetensorflow(4)安装cpu版本的TensorFlowpipinstall--upgrade--ignore-installedtensorflow11.7TensorFlow的简介与安装11.7.3验证>>>importtensorflowastf>>>tc=tf.constant('Hello,TensorFlow!')>>>sess=tf.Session()>>>print(sess.run(tc))11.8TensorFlow的基本使用数据流图以结点表示数学运算操作,边表示结点之间数据传递关系的有向图;在TensorFlow中,数据流图的结点称作Operation,边是尺寸可以动态调整的多维数组,即张量tensor;首先根据具体问题,利用各种基本运算单元构建结点,设计结点之间的操作对象Tensor,以构建出一个计算图Graph,然后在会话Session中启动Graph。下图是一个用TensorFlow完成两个常量相加的示意图tf.constantttf.constantttf.add11.8TensorFlow的基本使用importtensorflowastf#第一步,构建计算图#使用tf.constant构建两个基本结点,每个结点分别输出一个常量Tensorct0=tf.constant([0,1])ct1=tf.constant([1,0])#创建一个加法结点at=tf.add(ct0,ct1)

#第二步:创建会话并在会话中启动计算图#创建会话sess=tf.Session()#启动图result=sess.run(at)在TensorFlow中,主要操作的数据结构是张量tensor。11.8TensorFlow的基本使用从类型定义上看,TensorFlow定义了两种基本类型表示一个tensor:tf.Tensor对象表示一个结点的输出的tensor,即计算图中的边,tf.Variable对象用于记录计算图运行过程中的状态,可以认为是一个全局变量。tensor可以分为如下三种基本类型:常量类型的tensor,使用tf.constant操作创建变量类型的tensor,用于表示模型中待学习的参数;一般使用tf.get_variable操作创建,在启动图前,需要根据需求调用initializer初始化所有定义的tf.Variable对象,如:#创建一个常量tensor,类型是tf.Tensorct=tf.constant([0,1])#创建一个tf.Variable实例:vtvt=tf.get_variable('vt',[5,6],dtype=tf.float32)sess=tf.Session()#初始化tf.Variable实例sess.run(tf.global_variables_initializer())11.8TensorFlow的基本使用参数类型的tensor,用于计算图接收用户输入数据,使用tf.placeholder创建需要指定tensor的形状;tensor在图运行前通过Session.run()、Tensor.eval()或Operation.run()中的参数feed_dict指定具体值:importnumpyasnp…#创建一个参数变量ph=tf.placeholder(tf.float32,[10,10])…sess=tf.Session()val=np.random.rand(10,10)sess.run(feed_dict={ph:val})TensorFlow封装了一些常用的计算方法,如:不同的梯度下降计算模型、不同的损失函数计算模型等;封装出了很多更高阶的模型,这些模型封装了构建计算图和创建会话并启动计算图等基本步骤。11.9基于卷积神经网络的MNIST手写体识别实验input:4维的Tensor,训练图像数据,四个维度用于说明训练图像数量batch_size,图像高度in_height,图像宽度in_width和图像通道数in_channels;每个维度对应的内容有data_format参数确定。filter:4维的Tensor卷积核,其shape为[filter_height,filter_width,in_channels,out_channels],其中,filter_height,filter_width分别表示卷积核的高度和宽带,in_channels表示训练图像的通道数,out_channels表示输出特征图的个数,即使用的卷积核数。11.9.1conv2d函数tf.nn.conv2d(input,filter,strides,padding,use_cudnn_on_gpu=True,data_format='NHWC',name=None)11.9基于卷积神经网络的MNIST手写体识别实验strides:1维的Tensor,包含4个值,每个值分别指示卷积核在input上每个维度滑动的距离。use_cudnn_on_gpu:Bool值,默认参数值为True。用于指定是否使用GPU。data_format:字符串,取值为“NHWC”“NCHW”之一,默认参数值为“NHWC”。用于决定如何解析input。name:字符串,可选,默认参数值为None。指定Operation的名称。11.9.1conv2d函数11.9基于卷积神经网络的MNIST手写体识别实验value:4维的Tensor,即conv2d的输出。ksize:1维的Tensor,4个值,指定value每个维度池化的范围。strides:1维的Tensor,4个值,指示池化窗口在各个维度的移动距离,一般设置与ksize相同。padding:字符串,取值为“SAME”“VALID”之一。设定不同的卷积方式,指定边界处理方法。data_format:字符串,取值为“NHWC”“NCHW”“NCHW_VECT_C”之一,默认参数值为“NHWC”。用于决定如何解析input。name:字符串,可选,默认参数值为None。指定Operation的名称。11.9.2max_pool函数tf.nn.max_pool(value,ksize,strides,padding,data_format='NHWC',name=None)11.9基于卷积神经网络的MNIST手写体识别实验定义(创建)卷积核(权值矩阵)和偏置向量。11.9.3示例程序#定义一个卷积核tf.Variabledefweights(shape) initial=tf.truncated_normal(shape,stddev=0.1) returntf.Variable(initial)#定义一个偏置tf.Variabledefbias(shape) initial=tf.constant(0.1,shape=shape) returntf.Variable(initial)11.9基于卷积神经网络的MNIST手写体识别实验定义卷积操作conv和池化操作pool。定义CNN卷积层conv_layer。11.9.3示例程序defconv(x,W,strides=[1,1,1,1],padding='SAME'):returntf.nn.conv2d(x,W,s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论