资源描述
Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,4.,*,Click to edit Master title style,黄理灿,2019,深度学习原理与,Tensorflow,实践,Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,第四章 深度学习,第四章 深度学习,多层感知机神经网络,多层感知机神经网络原理,激活函数、损失函数和过拟合径向基函数网络,激活函数,损失函数(代价函数),防止过拟合,卷积神经网络,卷积神经网络原理,卷积神经网络反向传播学习算法的数学推导,循环神经网络(,RNN,),循环神经网络模型原理,BPTT,算法,双向循环神经网络,深度循环神经网络,长短时记忆网络(,LSTM,),门控循环单元网络,(GRU),深度置信网络(,DBN,),受限玻尔兹曼机原理,RBM,求解算法,对比散度算法,深度置信网络,深度学习框架,TensorFlow,Caffe,Theano,Keras,多层感知机神经网络原理,从多层感知机(,MLP,)神经网络按不同层的位置划分,多层感知机神经网络内部的神经网络层可以分为三类,输入层,隐藏层和输出层,一般来说第一层是输入层,最后一层是输出层,而中间的层数都是隐藏层。,多层感知机神经网络原理,多层感知机(,MLP,)神经网络权重编号,多层感知机反向传播算法,-1,多层感知机反向传播算法,-2,多层感知机反向传播算法,-3,激活函数,由于线性函数的线性函数仍然是线性函数。我们需要非线性的激活函数(也称激励函数)。激活函数将线性加权值进行变换为输出值。,激活函数通常有如下一些性质:,非线性:当激活函数是非线性的时候,一个三层含有一层隐含层的神经网络就可以逼近所有的函数。,可微性:当优化方法是基于梯度下降法的时候,这个性质是必须的。,单调性:当激活函数是单调的时候,单层网络能够保证是凸函数。凸函数能够保证只有一个极小值。当激活函数满足这个性质的时候,神经网络的训练和参数的初始化基本无关。如果不满足这个性质,那么就需要特别地设置初始值,以尽可能找到一个全局最优值。,输出值的范围:当激活函数输出值是有限的时候,基于梯度算的优化方法会更加 稳定,因为特征的表示受有限权值的影响更显著;当激活函数的输出是 无限 的时候,模型的训练会更加高效,不过在这种情况小,一般需要更小的学习步长。,激活函数,激活函数,激活函数,多节点激活函数,激活函数,Softmax,激活函数,损失函数(代价函数),二次损失函数,损失函数(代价函数),二次损失函数,损失函数(代价函数),交叉熵损失函数,损失函数(代价函数),交叉熵损失函数,损失函数(代价函数),交叉熵损失函数,损失函数(代价函数),对数似然函数,损失函数(代价函数),对数似然函数,防止过拟合,在训练数据不够多时,或者过度训练时,常常会导致过拟合(,overfitting,)。如多项式回归模型,当多项式次数增加时,训练集数据拟合很好,但是和测试数据有较大偏差,随着训练过程的进行,模型复杂度增加,在训练数据集合上的误差渐渐减小,但是在验证集上的误差却反而渐渐增大,因为训练出来的网络过拟合了训练集,对训练集外的数据却不工作。,防止过拟合,-,L2,正则化,防止过拟合,-,L2,正则化,防止过拟合,L1,正则化,防止过拟合,Dropout,Dropout,在训练开始时,随机地“删除”一半的隐层单元,视它们为不存在。在第二次迭代中,也用同样的方法,只不过这次删除的那一半隐层单元,跟上一次删除掉的肯定是不一样的,因为我们每一次迭代都是“随机”地去删掉一半。第三次、第四次,都是这样,直至训练结束。,防止过拟合,提前终止训练,提前终止训练便是一种迭代次数截断的方法来防止过拟合的方法,即在模型对训练数据集迭代收敛之前停止迭代来防止过拟合。,提前终止训练方法的具体做法是,在每一个迭代(,Epoch,)结束时(一个,Epoch,为对所有的训练数据的一轮遍历)计算验证数据(,validation data,如损失函数)的精度(,accuracy,),当精度不再提高时,就停止训练。一般的做法是,在训练的过程中,记录到目前为止最好的验证数据精度,当连续,10,次,Epoch,(或者更多次)没达到最佳精度时,则可以认为精度不再提高了。此时便可以停止迭代了(即提前终止训练)。提前终止训练可以防止过拟合,即在把噪声学习到模型里之前停止学习。,防止过拟合,数据集扩增,数据集增加可以防止过拟合产生。,在深度学习方法中,更多的训练数据,意味着可以用更深的网络,训练出更好的模型。但是,收集更多的数据意味着需要耗费更多的人力物力。所以,可以在原始数据上做些改动,得到更多的数据。,以图片数据集为例,通过各种变换,如将原始图片旋转一个小角度,添加随机噪声,截取原始图片的一部分等等方法增加数据集。,卷积神经网络,人脑进行人脸识别示意图,卷积神经网络,人类视觉逐层分级机制,卷积神经网络,-,卷积神经网络,原理,卷积神经网络由三部分构成。第一部分是输入层(,Input layer,)。第二部分由,n,个卷积计算层,+,ReLU,激励层 (,CONV layer+,ReLU,layer,),+,池化层(,Pooling layer,)的组合组成。第三部分由一个全连接层(,FC layer,)的多层感知机分类器构成。,径向基函数网络示例,卷积神经网络,-,卷积神经网络,原理,由于深度多层感知机神经网络神经元全连接的特点,当隐含层以及神经元节点数增加时,会出现大量参数的计算。这超出了现今的计算能力。卷积神经网络采取局部感知域和权值共享降低参数数目。,卷积神经网络,-,卷积神经网络,原理,卷积神经网络卷积计算,卷积神经网络,-,卷积神经网络,原理,输入是一个,4*4,的图矩阵数据(,image,),经过两个,2*2,的卷积核进行卷积运算后,变成两个,3*3,的特征图(,feature_map,)。,卷积神经网络,-,卷积神经网络,原理,卷积神经网络,-,卷积神经网络,原理,两个卷积核的卷积层的计算。,7*7*3,输入,经过两个,3*3*3,卷积核的卷积,(,卷积步长为,2),,得到了,3*3*2,的输出。下图为零卷积填充(,Zero padding,)是,1,,也就是在输入元素的周围补了一圈,0,。,卷积神经网络,-,卷积神经网络,原理,最大值的池化计算方法。采用的是,2x2,的池化,步幅(也称池化步长)为,2,。,循环神经网络,模型原理,循环神经网络结构图,循环神经网络,双向循环神经网络,双向循环神经网络按时刻展开的结构,可以看到向前和向后层共同连接着输出层,其中包含了,6,个共享权值,分别为输入到向前层和向后层两个权值、向前层和向后层各自隐含层到隐含层的权值、向前层和向后层各自隐含层到输出层的权值。,循环神经网络,双向循环神经网络,RNN,单元只有一层隐藏层,如果将多个,RNN,单元堆叠在一起(见图,4.20,),那就形成了深度循环神经网络,(deep RNN),或称多层,RNN(multi,-layers RNN),。,循环神经网络,双向循环神经网络,深层双向,RNN,结构图,循环神经网络,-,长短时记忆网络(,LSTM,),LSTM,存储单元结构图,循环神经网络,-,长短时记忆网络(,LSTM,),LSTM,重复模块,循环神经网络,-,门控循环单元网络,(GRU),GRU,存储单元结构图,深度置信网络,-,受限玻尔兹曼机原理,RBM,是有两个层的浅层神经网络,它是组成深度置信网络的基础部件。,RBM,的第一个层称为可见层,又称输入层,而第二个层是隐藏层。,深度置信网络,-,受限玻尔兹曼机原理,深度置信网络,-,受限玻尔兹曼机原理,深度置信网络,RBM,求解算法,深度置信网络,对比散度算法,深度置信网络,-,深度置信网络,DBN,结构示意图,深度置信网络,-,深度置信网络,深度学习框架,从,GitHub,收藏和贡献率来看,,TensorFlow,高居榜首。,深度学习框架,-,TensorFlow,TensorFlow,是目前最流行的机器学习库。,TensorFlow,支持自动求导。,TensorFlow,核心代码是用,C+,编写的,使用,C+,简化了线上部署的复杂度,并让手机这种内存和,CPU,资源都紧张的设备可以运行复杂模型。除了核心代码的,C+,接口,,TensorFlow,还通过,SWIG,(,SimplifiedWrapperandInterfaceGenerator,)支持,Python,、,Go,和,Java,接口。在数据并行模式上,,TensorFlow,有独立的变量节点,不像其他框架有一个全局统一的参数 服务器,因此参数同步更自由。,TensorFlow,的另外一个重要特点是它灵活的移植性,可以将同一份代码几乎不经过修改就轻松地部署到有任意数量,CPU,或,GPU,的,PC,、服务器或者移动设备上。相比于,Theano,,,TensorFlow,还有一个优势就是它极快的编译速度,在定义新网络结构时,,Theano,通常需要长时间的编译,因此尝试新模型需要比较大的代价,而,TensorFlow,完全没有这个问题。,TensorFlow,还有功能强大的可视化组件,TensorBoard,,能可视化网络结构和训练过程,极大地帮助观察复杂的网络结构和监控长时间、大规模的训练。,TensorFlow,针对生产环境高度优化,可以达到产品级的高质量,可以保证在生产环境中稳定运行。,TensorFlow,具有成为深度学习领域的事实标准的趋势。,深度学习框架,-,Caffe,Caffe,全称为,Convolutional,ArchitectureforFastFeatureEmbedding,,是一个被广泛使用的开源深度学习框架,目前由伯克利视觉学中心(,BerkeleyVisionandLearningCenter,,,BVLC,)进行维护。,Caffe,具有容易使用(网络结构都是以配置文件形式定义,不需要用代码设计网络)、训练速度快(能够训练最新的模型与大规模的数据)和组件模块化(可以方便地拓展到新的模型和学习任务上)的优点。,Caffe,的核心概念是,Layer,,每一个神经网络的模块都是一个,Layer,。,Layer,接收输入数据,同时经过内部计算产生输出数据。设计网络结构时,只需要把各个,Layer,拼接在一起构成完整的网络(通过写,protobuf,配置文件定义)。,Caffe,的一大优势是拥有大量的训练好的经典模型(,AlexNet,、,VGG,、,Inception,)乃至其他最新(,ResNet,等)的模型,收藏在它的,ModelZoo,(,/BVLC/,caffe/wiki/Model,-Zoo,)。因为知名度较高,,Caffe,被广泛地应用于前沿的工业界和学术界,许多提供源码的深度学习的论文都是使用,Caffe,来实现其模型的。,深度学习框架,-,Theano,Theano,诞生于,2008,年,由蒙特利尔大学,LisaLab,团队开发并维护,是一个高性能的符号计算及深度学习库。,Theano,的核心是一个数学表达式的编译器,专门为处理大规模神经网络训练的计算而设计。它可以将用户定义的各种计算编译为高效的底层代码,并链接各种可以加速的库,比如,BLAS(Basic,Linear Algebra Subprograms,基础线性代数子程序库)、,CUDA,等。,有许多高质量的文档和教程,用户可以方便地查找,Theano,的各种,FAQ,,比如如何保存模型、如何运行模型等。不过,Theano,更多地被当作一个研究工具,而不是当作产品来使用。,Theano,在单,GPU,上执行效率不错,性能和其他框架类似。但是运算时需要将用户的,Python,代码转换成,CUDA,代码,再编译为二进制可执行文件,编译复杂模型的时间非常久。,Theano,是一个完全基于,Python,(,C+/CUDA,代码也是打包为,Python,字符串)的符号计算库。用户定义的各种运算,,Theano,可以自动求导,省去了完全手工写神经网络反向传播算法的麻烦,也不需要像,Caffe,一样为,Layer,写,C+,或,CUDA,代码。,深度学习框架,-,Keras,Keras,是一个崇尚极简、高度模块化的神经网络库,使用,Python,实现,并可以同时运行在,TensorFlow,和,Theano,上。它旨在让用户进行最快速的原型实验,缩短从想法变为结果的过程。,Theano,和,TensorFlow,的计算图支持更通用的计算,而,Keras,则专精于深度学习。,Keras,提供了目前为止最方便的,API,,用户只需要将高级的模块拼在一起,就可以设计神经网络,它大大降低了编程开销(,codeoverhead,)和阅读别人代码时的理解开销(,cognitiveoverhead,)。它同时支持卷积网络和循环网络,支持级联的模型或任意的图结构的模型(可以让某些数据跳过某些,Layer,和后面的,Layer,对接,使得创建,Inception,等复杂网络变得容易),从,CPU,上计算切换到,GPU,加速无须任何代码的改动。,不像,Caffe,、,CNTK,等需要额外的文件来定义模型,,Keras,中的模型是在,Python,中定义的,这样就可以通过编程的方式调试模型结构和各种超参数。在,Keras,中,只需要几行代码就能实现一个,MLP,,或者十几行代码实现一个,AlexNet,,这在其他深度学习框架中基本是不可能完成的任务。,Keras,最大的问题可能是目前无法直接使用多,GPU,,所以对大规模的数据处理速度没有其他支持多,GPU,和分布式的框架快。,第,四,章 结束,
展开阅读全文