基于keras的深度学习介绍钱国庆Keras目录CONTENTS目录CONTENTS深度学习的起源神经网络的原理深度学习的原理Keras介绍及基本语法Keras应用案例深度学习的起源Keras深度学习的起源深度学习DeepLearningKeras深度学习的起源•五、六十年代,Rosenblatt•感知机(perceptron),拥有输入层、输出层和一个隐含层。•对稍复杂一些的函数都无能为力Keras深度学习的起源•八十年代,Rumelhart、Williams、Hinton、LeCun•多层感知机(multilayerperceptron),即有多个隐含层的感知机•使用sigmoid或tanh等连续函数模拟神经元对激励的响应,在训练算法上则使用Werbos发明的反向传播BP算法•改名叫神经网络•神经网络的层数直接决定了它对现实的刻画能力——利用每层更少的神经元拟合更加复杂的函数•随着神经网络层数的加深,优化函数越来越容易陷入局部最优解,并且这个“陷阱”越来越偏离真正的全局最优•另一个不可忽略的问题是随着网络层数增加,“梯度消失”现象更加严重。具体来说,我们常常使用sigmoid作为神经元的输入输出函数。对于幅度为1的信号,在BP反向传播梯度时,每传递一层,梯度衰减为原来的0.25。层数一多,梯度指数衰减后低层基本上接受不到有效的训练信号。Keras深度学习的起源•2006年,Hinton利用预训练方法缓解了局部最优解问题,将隐含层推动到了7层,神经网络真正意义上有了“深度”,由此揭开了深度学习的热潮。这里的“深度”并没有固定的定义——在语音识别中4层网络就能够被认为是“较深的”,而在图像识别中20层以上的网络屡见不鲜。为了克服梯度消失,ReLU、maxout等传输函数代替了sigmoid,形成了如今DNN的基本形式。单从结构上来说,全连接的DNN和图1的多层感知机是没有任何区别的。•高速公路网络(highwaynetwork)和深度残差学习(deepresiduallearning)进一步避免了梯度消失,网络层数达到了前所未有的一百多层(深度残差学习:152层)(KaimingHe,MSRA,2015ImageNet计算机识别挑战赛,系统错误率已经低至3.57%,人眼辨识的错误率大概为5.1%)Keras何恺明,2015RsNetKerasTensorFlow应用成果——除了AlphaGo以外安卓手机新增自拍功能,就是通过应用深度学习训练出来的视觉模型,可以非常准确地分离前景像素和后景像素,对前景像素和后景像素分别处理,这样的话就可以实现背景虚化这样的功能。实现这种功能,传统上,手机厂商需要增加第二个摄像头,这就会增加手机的成本,同时对现有用户已经获得的手机就不太容易获得这样的效果,Keras谷歌翻译Keras其他•京东内部搭建了TensorFlow训练平台,用于开发图像、自然语言相关的模型,并且把他们用到客服广告等领域。小米也在尝试类似的技术路线,支持他们生态线上各种特殊的应用。网易的有道笔记、网易翻译君也使用了TensorFlow视觉和语言的模型。Keras我们正处在下一次技术爆炸的门口•人类从直立行走到2003年的四百万年间,一共创造了5EB的信息,而到了2010年,人类每两天就会创造5EB;再到了2013年,人类每10分钟就创造5EB;再到今天,人类每1分钟就创造5艾字节。——谷歌董事长施密特千年以来世界GDP变动神经网络基础原理KerasKeras梯度下降1反向传播算法2激活函数3Keras梯度下降-成本函数(CostFunction)我们想要根据房子的大小,预测房子的价格,给定如下数据集:Keras梯度下降(forfixed,thisisafunctionofx)(functionoftheparameters)(forfixed,thisisafunctionofx)(functionoftheparameters)(forfixed,thisisafunctionofx)(functionoftheparameters)(forfixed,thisisafunctionofx)(functionoftheparameters)(forfixed,thisisafunctionofx)(functionoftheparameters)(forfixed,thisisafunctionofx)(functionoftheparameters)(forfixed,thisisafunctionofx)(functionoftheparameters)(forfixed,thisisafunctionofx)(functionoftheparameters)(forfixed,thisisafunctionofx)(functionoftheparameters)Keras梯度下降(1)先确定向下一步的步伐大小,我们称为Learningrate;(2)任意给定一个初始值:;(3)确定一个向下的方向,并向下走预先规定的步伐,并更新;(4)当下降的高度小于某个定义的值,则停止下降;Keras梯度下降•(1)初始点不同,获得的最小值也不同,因此梯度下降求得的只是局部最小值;•(2)越接近最小值时,下降速度越慢;Keras反向传播算法(Backpropagation)也就是说,对于上层节点p和下层节点q,需要找到从q节点到p节点的所有路径,并且对每条路径,求得该路径上的所有偏导数之乘积,然后将所有路径的“乘积”累加起来才能得到的值。Keras反向传播算法(BP)•假设,你有这样一个网络层:•第一层是输入层,包含两个神经元i1,i2,和截距项b1;第二层是隐含层,包含两个神经元h1,h2和截距项b2,第三层是输出o1,o2,每条线上标的wi是层与层之间连接的权重,激活函数我们默认为sigmoid函数。其中,输入数据i1=0.05,i2=0.10;输出数据o1=0.01,o2=0.99;初始权重w1=0.15,w2=0.20,w3=0.25,w4=0.30;w5=0.40,w6=0.45,w7=0.50,w8=0.88目标:给出输入数据i1,i2(0.05和0.10),使输出尽可能与原始输出o1,o2(0.01和0.99)接近。Keras反向传播算法(BP)这样前向传播的过程就结束了,我们得到输出值为[0.75136079,0.772928465],与实际值[0.01,0.99]相差还很远,现在我们对误差进行反向传播,更新权值,重新计算输出。Keras反向传播算法(BP)Keras反向传播算法(BP)2.隐含层----输出层的权值更新:以权重参数w5为例,如果我们想知道w5对整体误差产生了多少影响,可以用整体误差对w5求偏导求出:(链式法则)Keras反向传播算法(BP)(其中,η是学习速率,这里我们取0.5)同理,可更新w6,w7,w8,以及更前面的w1-w4这样误差反向传播法就完成了,最后我们再把更新的权值重新计算,总误差E(total)由0.298371109下降至0.291027924。不停地迭代,迭代10000次后,总误差为0.000035085,输出为[0.015912196,0.984065734](原输入为[0.01,0.99]),证明效果还是不错的Keras激活函数——SigmoidSigmoid非线性函数将输入映射到(0,1)之间。它的数学公式为:历史上,sigmoid函数曾非常常用,现在实际很少使用了:1.函数饱和使梯度消失sigmoid神经元在值为0或1的时候接近饱和,这些区域,梯度几乎为0。2.sigmoid函数不是关于原点中心对称的这个特性会导致后面网络层的输入也不是零中心的,进而影响梯度下降的运作Kerastanhtanh函数同样存在饱和问题,但它的输出是零中心的,因此实际中tanh比sigmoid更受欢迎。KerasReLu(校正线性单元:RectifiedLinearUnit)2001年,神经科学家Dayan、Abott从生物学角度,模拟出了脑神经元接受信号更精确的激活模型,这个模型对比Sigmoid系主要变化有三点:①单侧抑制②相对宽阔的兴奋边界③稀疏激活性(重点,可以看到红框里前端状态完全没有激活)深度学习的原理KerasKeras主要深度学习理论1评估函数2优化函数3Keras卷积神经网络(CNN)•假设输入的是一幅像素为1K*1K的图像,隐含层有1M个节点,光这一层就有10^12个权重需要训练,这不仅容易过拟合,而且极容易陷入局部最优。•图像中有固有的局部模式(比如轮廓、边界,人的眼睛、鼻子、嘴等)可以利用,显然应该将图像处理中的概念和神经网络技术相结合。此时我们可以祭出卷积神经网络CNNKerasCNN•假设图3中m-1=1是输入层,我们需要识别一幅彩色图像,这幅图像具有四个通道ARGB(透明度和红绿蓝,对应了四幅相同大小的图像),假设卷积核大小为100*100,共使用100个卷积核w1到w100(从直觉来看,每个卷积核应该学习到不同的结构特征)。用w1在ARGB图像上进行卷积操作,可以得到隐含层的第一幅图像;这幅隐含层图像左上角第一个像素是四幅输入图像左上角100*100区域内像素的加权求和,以此类推。同理,算上其他卷积核,隐含层对应100幅“图像”。每幅图像对是对原始图像中不同特征的响应。按照这样的结构继续传递下去。CNN中还有max-pooling等操作进一步提高鲁棒性。•在这个例子里,我们注意到输入层到隐含层的参数瞬间降低到了100*100*100=10^6个!Keras卷积神经网络(CNN)什么是卷积——信号学的概念Keras卷积层的工作当从一个大尺寸图像中随机选取一小块,比如说3x3作为样本,并且从这个小块样本中学习到了一些特征,这时我们可以把从这个3x3样本中学习到的特征作为探测器,应用到这个图像的任意地方中去。特别是,我们可以用从3x3样本中所学习到的特征跟原本的大尺寸图像作卷积,从而对这个大尺寸图像上的任一位置获得一个不同特征的激活值。Keras卷积有什么用那么当它移动到上面的位置时,按照矩阵操作,将这个区域的图像像素值与滤波器相乘,我们得到一个很大的值(6600):而当这个滤波器移动到其他区域时,我们得到一个相对很小的值:Keras池化(Pooling)左侧矩阵A是20*20的矩阵要进行大小为10*10的池化,那么左侧图中的红色就是10*10的大小,对应到右侧的矩阵,右侧每个元素的值,是左侧红色矩阵每个元素的值得和再处于红色矩阵的元素个数,也就是平均值形式的池化。Keraspooling层有什么用更关注是否存在某些特征而不是特征具体的位置。可以看作加了一个很强的先验,让学到的特征要能容忍一些的变化不变性文本分类的时候输入是不定长的,可以通过池化获得定长输出获得定长输出或有可能会带来欠拟合减小下一层输入大小,减小计算量和参数个数防止过拟合Kerastranslationinvariance(平移不变性)•假设有一个16x16的图片,里面有个数字1,我们需要识别出来,这个数字1可能写的偏左一点(图1),这个数字1可能偏右一点(图2),图1到图2相当于向右平移了一个单位,但是图1和图2经过maxpooling之后它们都变成了相同的8x8特征矩阵,主要的特征我们捕获到了,同时又将问题的规模从16x16降到了8x8,而且具有平移不变性的特点。图中的a(或b)表示,在原始图片中的这些a(或b)位置,最终都会映射到相同的位置。Kerasrotationinvariance(旋转不变性)•下图表示汉字“一”的识别,第一张相对于x轴有倾斜角,第二张是平行于x轴,两张图片相当于做了旋转,经过多次maxpooling后具有相同的特征Kerasscaleinvariance(尺度不变性)•下图表示数字“0”的识别,第一张的“0”比较大,第二张的“0”进行了较小,相当于作了缩放,同样地,经过多次maxpooling后具有相同的特征Keras循环神经网络(RNN_Recur