浅谈神经网络

    刚接触神经网络不久,对这方面的知识掌握得还很浅,把自己的学习过程写下来也是理解、提高的过程,希望可以跟志同道合的人一起交流、进步。

   我以后会写一些自己对机器学习的理解,欢迎一起交流讨论。


一、神经网络简介

1.1 前言

     神经网络起源于上个世纪40年代,到现在已经有70年的历史。然而神经网络是最近重新火起来的,因为以前相关的理论模型、训练方法和计算能力的条件都还不成熟,随着06年多伦多大学的hinton在science上发表了论文,用神经网络来把高维的数据降维,并且降维后的数据也能重建出原来高维的数据,比PCA的效果还好,一下子又燃起了学术、工业研究者对神经网络的热情。hinton是为数不多的长期研究神经网络的人,除了他之外,还有纽约大学的lecun也一直在用神经网络应用到语音识别、机器视觉和自然语言处理中。hinton用的神经网络模型是第一层是输入层,第二层以上是隐含层,他是先用RBM训练出第一层与第二层的权重系数,即先训练出第二层对输入层的表示,然后训练第二层与第三层的权重系数,依次类推。训练好的权重系数作为BP算法的输入,学习autoencoder模型,这样能够更好地有效地训练神经网络,用RBM模型已经选取了比较好的权重(已经算是对输入的近似表示了,权重初值的选取是很重要的)。

       神经网络也是受到人类大脑的学习系统的启发,大脑神经是有很多神经元连接在一起的异常复杂的网络,所以,神经网络(准确地说是人工神经网络,因为自40年代后,神经网络分化为两个研究方向,一个是专注于生物信息处理的过程,叫生物神经网络,而另一个是人工神经网络,专注于工程和应用)也是有一系列单元相互密集连接在一起的,但是这个神经网络跟人类大脑相比是非常简单的,其实我们现在还没真正搞清楚人类大脑的神经是如何学习的。神经网络的每个单元都是由一定数量的输入(可以是实数值或二值)产生的,表示对这些输入的一个响应度。

      近些年基于神经网络的深度学习已经有很多研究成果,已经被应用到模式识别、预测(分类、回归等)、优化、控制和推荐系统、图像特征提取等等。神经网络可用于监督学习和无监督学习中。


 1.2 简要历史


     人工神经网络经历过三次高潮时期,第一个是1940年代由于McCulloch和Pitts的前瞻性工作,他们在Mathematical Biophysic发表论文表明可以利用人类神经系统的组织结构(神经系统由很多神经元组成,每个神经元由体细胞和轴突组成)来定义一种计算模型。第二次是发生在60年代Rosenblatt提出了感知机模型和Minsky和Papert表明了简单感知机的局限性,Minsky他们的结果一下子冷淡了人们研究人工神经网络的热情。接着在80年代,Hopfield提出关于神经网络的能量模型和Webos发明了关于多层感知机的后向传播学习算法又提高了研究人员的热情。


二、神经网络模型演变

2.1 McCulloch-Pitts模型


       这是一个binary-threshold单元模型,输入x1,x2,...,xn经过w1,w2,...,wn的线性组合后,再与阈值进行比较,如果比阈值大,则输出一个数比如1,如果比阈值小则输出另一个数比如0.数学模型为:
在这里u是一个阈值,是一个在0的单位阶跃函数。为了简化可以把阈值u看作是另外的一个权重w0=-u, 则要有另外一个输入x0=1。在他们提出这个模型后,其他人又对这个模型进行了泛化,提出另外一些模型比如sigmoid、tanh、高斯模型。

2.2 感知机

    感知机是神经网络与支持向量机的基础,它是一个二类分类的线性分类模型,输入为实例的特征向量,输出为实例的类别,取+1和-1二值。感知机要找到的解是能把训练数据中的正负样本分开的w和b,如果是在二维平面中,比如每个训练样本是二维向量,w就是一条直线,b就是截距,即把w从原点移动,与x2那个轴的交点为b.

     如果输入是多维向量,那么感知机要找到的w,b参数形成一个超平面(w*x+b=0),把正负实例分开。当然,可能正负样本没法用一条直线分开,这时用感知机模型是找不到解的,因为不存在这样的超平面。
     感知机的模型为,w是权重系数,b是偏置项,经过这样的线性作用后,再经过阈值函数(根据w*x+b的结果正负取值,非负取1,负则取-1),这样它就成了一个线性分类器,因为只经过w的线性组合作用来决定类别。
      定义了模型后,要定义学习的策略,即怎么定义损失函数呢?我们知道,当样本被误分类时,正确分类则<=0,所以我们可以定义这样的损失函数,M是所有误分类点的集合,这个就是所有误分类点到超平面的总距离,可以不用考虑1/||w||,因为这个是正的,只是影响到误分类距离的大小。
     

2.3 神经网络模型种类

       神经网络可看做是有向有权图,神经元代表图的节点,神经元的输入和输出的连接代表连接图节点的带权重的边。人工神经网络大概分成两类,一类是 feed-forward神经网络,这样的网络是没有环路的;另一类是recurrent( or feedback )神经网络,这样的网络是有环路的(反馈)。feed-forward网络是一个多层感知机模型。


   feed-forward的具体模型如下图所示:
  
   输入层经过隐含层到达输出层,这是有向的、无环的,第一层是输入层,中间是隐含层,最后是输出层,如果中间有多层隐含层,我们就称为“深度”神经网络。

三、 feed-forward网络模型


3.1 模型分析

考虑一个最简单的监督学习问题,我们有已标注的训练数据(x(i),y(i)),神经网络学习到一种复杂的、非线性的假设hW,b(x),其中w和b都是要学习的参数。


   

    神经元把输入x1,x2,x3还有截距1作为输入,通过计算单元h来计算出这个函数f是激活函数(activation function),可以是sigmoid函数或tanh函数,b是偏置项。

     sigmoid函数表达式是,tanh函数表达式为

   它们的函数f(z)与z的关系如下图所示:

   

  Wx是对输入x的线性组合,经过sigmoid函数作用后变为对输入x的非线性表达,其实这个就是逻辑斯蒂回归模型用到的函数。对于sigmoi函数,计算出的f(W'x)是在(0,1)范围内的实数,在很多问题中是用二值的,就是以f(Wx)的概率把输出置为1,以1-f(Wx)的概率置为0,这样输出单元也具有一定的随机性,如果Wx大的话,置为1的概率也大。

    如果把多个简单的神经元组合在一起,形成一个复杂的神经网络模型。



     第一层就是输入层,第二层是隐含层,第三层是输出层。当然可以有很多的隐含层,这样的模型很复杂,可能学习到的表示更抽象。

   这时各层的输入计算公式为:

  

   网络模型参数是(W,b) = (W(1),b(1),W(2),b(2)),   a是响应值,f是激活函数,参数的上标表示属于第几层的参数。

上面的式子用向量化的形式表示为:



 这个步骤叫做前向传播(forward propogation),每层要用到前面一层已经计算好的数据。这个过程表示在给定的各层之间的权重系数后,从输入层经过隐含层到最后输出层的运算。

  更通用的形式如下:


z是第二层开始的每个层由前面一层的输入单元的线性组合计算出的值;a是每一层的激活值,第一层的a就是输入的训练数据。


3.2  Backpropagation(后向传播算法)


         ok,来到比较难理解的BP算法了,BP算法是一种有监督的算法,常用来训练多层感知机。1974年Paul Werbos首次给出了如何学习一般网络的方法,但是当时整个神经网络社群无人知晓Paul提出的学习算法,知道80年代中期,BP算法才重新被David Rumelhart、Geoffrey Hinton及Ronald Williams、David Parker和Yann LeCun独立发现。
    假设我们有这样m个训练样本,我们定义损失函数为
平方损失函数在机器学习算法中经常被用到,因为它可导、平滑,也能较好地评价预测值与真实值的误差。
    全部样本的损失函数为:
   
     其中,第一项是预测值与真实值的误差项,第二项是规则化项,也叫权重衰减项(在机器学习中经常用到,常用来降低权重幅度,防止过度拟合,降低模型泛化误差,减少参数的搜索空间,简言之,就是为了得到更好的模型参数可以在未知数据上预测得更好,而不是只过度拟合当前的训练数据)。而lambda则控制两者的重要性,lambda越大,对规则项的惩罚越大,lambda越小,对误差项的惩罚就越大。
     当用于分类问题时,上述的y是0或1,当用于回归预测问题时,y就是实数值。
     J(W,b)是非凸函数,我们如果用梯度下降法求解的话可能会得到局部最小值,但是梯度下降法通常能得到较好的结果。
     在每一次迭代时,权重更新规则如下:

     梯度计算公式为:
      

    从上面的式子计算出梯度看起来是一件比较难的事。从感性理解上看,我们容易算出最后一层权重的梯度,算前面各层的梯度困难些。BP算法的思想是算出每一层的残差,第L层的残差表示为,残差表示该层节点对最终输出值的残差产生了多少影响。

    BP算法的过程如下:
 


        

       第一步是前向传播,算出各层的输出值;第二步是算出最后一层的残差,即对最后一层的z(线性组合值)求导的结果;第三步是从后向前算出各层节点的残差,求每一层的参差时,我们要用到后面一层的残差,比如算倒数第二层(nl - 1)层的节点i的残差时,由于它对后面一层(nl)的所有节点对产生了影响,因为后面一层的所有节点的z值其中一项是i节点的a值乘于相应的权重得到,所以对i节点的z值求导时,所以我们看到表达式括号里有累加的形式;第四步是算出各层参数的梯度,即相应残差乘于激活值,因为是w*a的算出z的。具体的推导细节请参考反向传导算法。一个简单的BP实例参考BP算法浅谈

      如果采用矩阵向量的形式,算法可写成:


   梯度下降的实现方法:

   

     

3.3 梯度检验

      我们在BP算法中推导出了W和b的梯度,但是要用程序正确实现出来还是不容易的,如果我们程序写错了会得不到正确的结果,而且也浪费了很多时间,这里有个技巧就是用梯度的定义算出梯度来跟推导的梯度比较,如果一样就证明写的求导程序没错!

    在高数中我们学过导数的定义是

   所以对任意theta值,我们用这个公式算梯度

   EPSILON是个很小的值,但不能太小,太小会导致误差,设为1e-4合适。注意这里的theta是个向量(把W和b凑起来),所以求出来的导数的维数也是跟theta维数一样的,在用数值方法算theta的导数时,我们要求出每一维的导数。求某一维导数时,其它维应保持不变。


四、参考文献

 Artifical Neural Network: A tutorial, Ani K.Jain, Jianchang Mao
 统计学习方法,李航
 机器学习,Tom M. Mitchell
 

   转载请注明出处,http://blog.csdn.net/freeliao/article/details/17564819

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 《深度学习、优化与识别》这本书共分为两个部分,第一部分系统论述了深度学习的理论和算法,包括深度前馈神经网络、深度卷积神经网络、深度堆栈神经网络、深度递归神经网络、深度生成网络、深度融合网络等。第二部分则介绍了常用的深度学习平台以及在高光谱图像、自然图像、SAR与极化SAR影像等领域的应用。最后一章总结了深度学习的发展历史、前沿方向和进展。\[1\] 这本书不仅介绍了深度学习神经网络的基础知识,还深入讲解了误差反向传播法、卷积神经网络等算法。此外,它还介绍了深度学习相关的实用技巧,如自动驾驶、图像生成、强化学习等应用,并解答了为什么加深层可以提高识别精度等问题。\[2\] 深度学习网络是指具有五层至十层甚至更多的神经网络,并引入了更有效的算法。与传统神经网络相比,深度学习网络利用无监督学习对每一层进行逐层训练,学习特征;然后将每层的训练结果作为更高一层的输入;最后使用监督学习从上到下进行微调,学习整个模型。\[3\]这种逐层训练和微调的方式使得深度学习网络能够更好地学习和提取数据的特征,从而提高识别精度。 #### 引用[.reference_title] - *1* *2* [深入浅出神经网络pdf,神经网络 pdf](https://blog.csdn.net/jiefu6666/article/details/126660593)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [深入浅出神经网络深度学习-深度学习(四)](https://blog.csdn.net/wudaoshihun/article/details/80585711)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值