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