《Anintroductiontodeeplearning课件》由会员分享,可在线阅读,更多相关《Anintroductiontodeeplearning课件(43页珍藏版)》请在金锄头文库上搜索。
1、An introduction to An introduction to deep learningdeep learningPei LiData Mining Group Xiamen UniversityAcm.lipei.Last updated:April 23,2013Keywords: Deep neural network, sparse code1AnintroductiontodeeplearningBackgroundIntroductionHow do our brains do with featureSome basic idea of deep learningA
2、rtificial neural networksAuto encode and Sparse codeDeep neural networkSummaryReferenceOutlinesOutlines1/422AnintroductiontodeeplearningBackground(Academia)Background(Academia)Andrew NgGeoffrey E. Hinton2/423AnintroductiontodeeplearningBackground(Industry)Background(Industry)2012年6月,纽约时报披露了Google Br
3、ain项目,吸引了公众的广泛关注。2012年11月,微软在中国天津的一次活动上公开演示了一个全自动的同声传译系统2013年1月,在百度年会上,创始人兼CEO李彦宏高调宣布要成立百度研究院,其中第一个成立的就是“深度学习研究所”3/424Anintroductiontodeeplearning为什么那么多的机器学习大牛都开始关注并花大量时间研究它?为什么拥有大数据的互联网公司争相投入大量资源研发深度学习技术?听起来感觉deeplearning很牛的样子。那什么是deep learning?它能干什么呢?BackgroundBackground4/425Anintroductiontodeeple
4、arningintroductionintroduction机器学习虽然发展了几十年,但还是存在很多没有良好解决的问题5/426Anintroductiontodeeplearningintroductionintroduction机器学习去解决这些问题的思路都是这样的:概括起来主要由三部分组成而中间的特征提取部分将很大程度上决定最终的效果,那实际中的特征提取是怎么做的?6/427Anintroductiontodeeplearningintroductionintroduction实际中特征提取都是靠手工提取的,截止现在,也出现了不少NB的特征:手工地选取特征是一件非常费力、启发式(需要专业
5、知识)的方法,能不能选取好很大程度上靠经验和运气!而且它的调节需要大量的时间。7/428Anintroductiontodeeplearning既然手工选取特征不太好,那么能不能自动地学习一些特征呢?答案是能!Deep Learning就是用来干这个事情的,看它的一别名Unsupervised Feature Learning。那它是怎么学习的呢?怎么知道哪些特征好哪些不好呢?我们说机器学习是一门专门研究计算机怎样模拟或实现人类的学习行为的学科。好,那我们人的视觉系统是怎么工作的呢?introductionintroduction8/429Anintroductiontodeeplearnin
6、gHow do our brains do with How do our brains do with featurefeature1981 年的诺贝尔医学奖,颁发给了 David Hubel和TorstenWiesel,以及 Roger Sperry。前两位的主要贡献,是“发现了视觉系统的信息处理”:可视皮层是分级的:这个发现激发了人们对于神经系统的进一步思考。神经-中枢-大脑的工作过程,或许是一个不断迭代、不断抽象的过程。9/4210AnintroductiontodeeplearningHow do our brains do with How do our brains do wit
7、h featurefeature这个过程关键在于抽象和迭代。从原始信号开始,做低级抽象,逐渐向高级抽象迭代。如图,从原始信号摄入开始(瞳孔摄入像素Pixels),接着做初步处理(大脑皮层某些细胞发现边缘和方向),然后抽象(大脑判定,眼前的物体的形状),然后进一步抽象(大脑进一步判定该物体是谁的脸)10/4111Anintroductiontodeeplearning大家都注意到关键词了:分层。而Deep learning的deep是不是就表示我存在多少层,也就是多深呢?没错。那Deep learning是如何借鉴这个过程的呢?毕竟是归于计算机来处理,面对的一个问题就是怎么对这个过程建模?How
8、 do our brains do with How do our brains do with featurefeature11/4212Anintroductiontodeeplearning假设有一个系统S,它有n层(S1,Sn),它的输入是I,输出是O,形象地表示为: I=S1=S2=.=Sn = O,如果输出O等于输入I,即输入I经过这个系统变化之后没有任何的信息损失,保持了不变,这意味着输入I经过每一层Si都没有任何的信息损失,即在任何一层Si,它都是原有信息(即输入I)的另外一种表示。Basic idea of deep learningBasic idea of deep le
9、arningsystem输出O输入Ii=o12/4213Anintroductiontodeeplearning对于深度学习来说,其思想就是堆叠多个层,也就是说这一层的输出作为下一层的输入。通过这种方式,就可以实现对输入信息进行分级表达了。那它究竟是如何学习特征和训练的?这里我们需要来了解一下神经网络,熟悉神经网络的人都知道神经网络的隐藏层实际上就是一组特征。Basic idea of deep learningBasic idea of deep learning13/4114AnintroductiontodeeplearningArtificial neural networksArti
10、ficial neural networks以监督学习为例,假设我们有训练样本集 ,那么神经网络算法能够提供一种复杂且非线性的假设模型 ,它具有参数W,b,可以以此参数来拟合我们的数据。以下即是一个“神经元”的图示这个“神经元”是一个以x1,x2,x3及截距+1为输入值的运算单元,其输出为函数被称为“激活函数”这里我们选用sigmoid函数作为激活函数14/4115Anintroductiontodeeplearning所谓神经网络就是将许多个单一“神经元”联结在一起,这样,一个“神经元”的输出就可以是另一个“神经元”的输入。例如,下图就是一个简单的神经网络:Artificial neural
11、 networksArtificial neural networks15/4216AnintroductiontodeeplearningArtificial neural networksArtificial neural networks参数的表示参数的表示 是第l层第j单元与第l+1层第i单元之间的联接参数(其实就是连接线上的权重,注意标号顺序),因而, 是第l+1层第i单元的偏置项. 表示第l层第i单元的激活值激活值(输出值)。当l=1时, ,也就是第i个输入值(输入值的第i个特征)。,因而,该神经网络的参数为:16/4117Anintroductiontodeeplearning该
12、神经网络的计算如下:Artificial neural networksArtificial neural networks简化为向量表达为:17/4118Anintroductiontodeeplearning由以上可得n层神经网络的层间权的计算为:Artificial neural networksArtificial neural networks我们将上面的计算步骤叫作前向传播。通过前向传播我们可以计算出最终的输出。那我们是如何训练该网络?或者说该如何调节权重以拟合训练数据的?18/4219Anintroductiontodeeplearning通过反向传播算法来训练神经网络假设我们有
13、一个固定样本集 ,它包含m个样例。我们可以用批量梯度下降法来求解神经网络。具体来讲,对于单个样例,其代价函数为:Artificial neural networksArtificial neural networks19/4220Anintroductiontodeeplearning梯度下降法中每一次迭代都按照如下公式对参数和进行更新:Artificial neural networksArtificial neural networks20/4221Anintroductiontodeeplearning反向传播算法的思路如下:Artificial neural networksArtif
14、icial neural networks1、进行前馈传导计算,利用前向传导公式,得到L2,L3,直到输出层Ln的激活值。2、对于第nl层(输出层)的每个输出单元i,我们根据以下公式计算残差:3、对l=nl-1,nl-2,nl-3,的各个层,第l层的第i个节点的残差计算方法如下:4、计算我们需要的偏导数,计算方法如下:21/4222Anintroductiontodeeplearning最后,我们将对梯度下降算法做个全面总结,下面,我们实现批量梯度下降法中的一次迭代:1、对于所有l,令 , ,(设置为全零矩阵或全零向量)2、对于i=1到m, a、使用反向传播算法计算 和 。 b、计算 c、计算
15、3、更新权重参数:Artificial neural networksArtificial neural networks22/4123Anintroductiontodeeplearning目前为止,我们已经讨论了神经网络在有监督学习中的应用。在有监督学习中,训练样本是有类别标签的。那如果训练样本无类别标签的,我们是否可以学习到一些有用的结构呢?这就是自编码神经网络。Artificial neural networksArtificial neural networks23/4124AnintroductiontodeeplearningAuto encode and Sparse code
16、Auto encode and Sparse code自编码神经网络是一种无监督学习算法,它使用了反向传播算法,并让目标值等于输入值。 事实上,通过以上的学习,隐藏单元就是输入的另一种表示,即特征。当隐藏单元小于输入时,其就相当于PCA进行了压缩。24/4225Anintroductiontodeeplearning刚才的论述是基于隐藏神经元数量较小的假设。当隐藏神经元的数量较大时,通过给自编码神经网络施加一些其他的限制条件(稀疏性)来发现输入数据中的结构。稀疏性可以被简单地解释如下。如果当神经元的输出接近于1的时候我们认为它被激活,而输出接近于0的时候认为它被抑制,那么使得神经元大部分的时间
17、都是被抑制的限制则被称作稀疏性限制。Auto encode and Sparse codeAuto encode and Sparse code25/4226Anintroductiontodeeplearning由此,我们注意到每一层节点的输出其实就是该节点的激活度。则自编码神经网络隐藏神经元j的激活度为:Auto encode and Sparse codeAuto encode and Sparse code在此我们加入一条限制:其中, 是稀疏性参数稀疏性参数,通常是一个接近于0的较小的值(如 )26/4227Anintroductiontodeeplearning为了实现这一限制,我们
18、将会在我们的优化目标函数中加入一个额外的惩罚因子,惩罚因子的具体形式如下:上面的公式可用相对熵简化为:Auto encode and Sparse codeAuto encode and Sparse code27/4228AnintroductiontodeeplearningAuto encode and Sparse codeAuto encode and Sparse code通过相对熵的变化图,可知:当 时, ,并且随着与之间的差异增大而单调递增。由此可知这一惩罚因子将惩罚那些和有显著不同的情况从而使得隐藏神经元的平均活跃度保持在较小范围内。从而使网络变得稀疏。28/4229Anin
19、troductiontodeeplearning加入稀疏惩罚因子后,可得,我们的总体代价函数为: 由此可推得我们的残差计算公式为:这样利用反向传播算法,我们就可以训练稀疏自编码神经网络了。Auto encode and Sparse codeAuto encode and Sparse code29/4230Anintroductiontodeeplearning在以上的稀疏自编码神经网络后,加上一个分类器(SVM,Softmax)等,就可以进行分类了。(这是一个浅层结构)那为何还要用深层结构呢?Deep neural networkDeep neural network30/4231Anin
20、troductiontodeeplearning深度网络最主要的优势在于,它能以更加紧凑简洁的方式来表达比浅层网络大得多的函数集合,换言之,它具有更强的表征能力。那我们是否可以将稀疏自编码神经网络堆叠多层,然和加一个分类器,通过反向传播算法来训练网络呢?答案是否定的。 Deep neural networkDeep neural network31/4232Anintroductiontodeeplearning主要原因在于:1、数据获取问题:使用上面提到的方法,我们需要依赖于有标签的数据才能进行训练。然而有标签的数据通常是稀缺的,因此对于许多问题,我们很难获得足够多的样本来拟合一个复杂模型的
21、参数。2、局部极值问题:由于其深度较深,使得常常会涉及到求解一个高度非凸的优化问题,非常容易陷入很坏的局部最小。3、梯度弥散问题:由公式我们可知,当深度较深时,残差闯到前面的时候已经非常小了,使得前几层不能有效进行调节,训练速度很慢。Deep neural networkDeep neural network32/4233Anintroductiontodeeplearning那怎么解决这些问题呢?我们知道造成神经网络容易陷入局部最小的主要原因是开始时对权的随机初始化的问题。那我们是否可以获得一个好的初始权重呢?我们可以通过逐层贪婪训练方法来初始化权重。其主要思想就是:每次只训练网络中的一层,
22、即我们首先训练一个只含一个隐藏层的网络,仅当这层网络训练结束之后才开始训练一个有两个隐藏层的网络,以此类推。Deep neural networkDeep neural network33/4234Anintroductiontodeeplearning通过逐层贪婪训练方法,我们有效的解决数据的获取问题和获得一个更好的局部极值。在数据获取问题上,由于我们采用逐层贪婪训练方法,利用了大量的无标签数据来训练网络,初始化了网络的权重,随后,利用有标签数据进行微调,就能很快的收敛。对于易于陷入坏的局部最优值,我们通过以上步骤,就获得了一个比较好的起点,较为接近好的结果,这样防止了收敛于坏的结果。Dee
23、p neural networkDeep neural network34/4235Anintroductiontodeeplearning这样我们大概了解了深度网络的主要思想:通过无监督数据逐层贪婪训练网络,获得一个好的初始值;之后通过有监督的数据微调整个网络即可。以下用一个例子来说明训练方法。假设你想要训练一个包含两个隐含层的栈式自编码网络,用来进行MNIST手写数字分类.Deep neural networkDeep neural network首先,你需要用原始输入训练第一个自编码器,它能够学习得到原始输入的一阶特征表示 35/4236Anintroductiontodeeplearn
24、ingDeep neural networkDeep neural network把上一层的一阶特征作为另一个稀疏自编码器的输入,使用它们来学习二阶特征36/4237AnintroductiontodeeplearningDeep neural networkDeep neural network将些二阶特征作为softmax分类器的输入,训练得到一个能将二阶特征映射到数字标签的模型。37/4238AnintroductiontodeeplearningDeep neural networkDeep neural network最终,将这三层结合起来就建一个包含两个隐藏层和一个最终softma
25、x分类器层的栈式自编码网络,这个网络能够如你所愿地对MNIST数字进行分类。38/4239Anintroductiontodeeplearning通过以上例子,我们能够清楚的了解到深度网络能够获取到输入的“层次型分组”或者“部分-整体分解”结构,具有强大的表达能力。结合前面的稀疏因子我们将描述深度网络是如何利用有监督的数据进行微调的?Deep neural networkDeep neural network39/4240Anintroductiontodeeplearning深度神经网络利用反向传播算法进行微调,具体过程如下:1、进行一次前馈传递,对L2层、L3层直到输出层Lnl,使用前向传
26、播步骤中定义的公式计算各层上的激活值(激励响应)。2、对输出层(nl层),令3、对l=nl-1,nl-2,nl-3,令4、计算所需的偏导数:Deep neural networkDeep neural network40/4241Anintroductiontodeeplearning深度学习主要是利用深度网络结构来抽象和迭代组合特征,充分的利用了大量的非标记数据,有效的挖掘了数据中的层级特征,具有更强的表征能力,尤其适合于在图像、语音等有大量的非标记数据而又非常抽象的领域。深度网络训练的主要思想就是利用非标记数据进行逐层贪婪训练和利用有标记数据来进行整个网络的微调。关于软件的话是没有的,但现成的代码是有的,主要是hinton写的关于手写体的分类,以上讲的只是大概的步骤,其实在处理数据时要进行一些预处理的(如PCA白化等)SummarySummary41/4242Anintroductiontodeeplearning推荐斯坦福大学的深度学习教程:Hinton讲的DBN网络Andrew Ng在清华的演讲ReferenceReference42/4243Anintroductiontodeeplearning