首页 > 代码库 > 深度学习预备课:神经网络

深度学习预备课:神经网络

1什么是神经网络

       人工神经网络(Artificial Neural Networks,简写为ANNs)也简称为神经网络(NNs)或称作连接模型(Connection Model),它是一种模仿动物神经网络行为特征,进行分布式并行信息处理的算法数学模型。这种网络依靠系统的复杂程度,通过调整内部大量节点之间相互连接的关系,从而达到处理信息的目的。

2神经网络算法

       BP(Back Propagation)网络是1986年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一。BP网络能学习和存贮大量的输入-输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程。

       BP神经网络模型拓扑结构包括输入层(input)、隐层(hide layer)和输出层(output layer)。输入层神经元的个数由样本属性的维度决定,输出层神经元的个数由样本分类个数决定。隐藏层的层数和每层的神经元个数由用户指定。形态如下:

                                                                        技术分享

        理解这个结构前,需要先了解一下感知器。

 2.1感知器

          假设样本X 共有三个布尔类型属性{x1,x2,x3} 现在要解决对于X的二分类问题。分类目标是:当三个输入中至少两个是0时,取-1,反之y取1.

                                                                          技术分享

         上图就是一个最简单的神经网络结构———感知器。 感知器包含两种节点:几个输入节点用来表示输入属性:一个输出节点用来提供模型输出。神经网络结构中的结点通常叫做神经元或单元。 在感知器中,每个结点都通过一个加权的链连接到输出结点。这个加权的链用来模拟神经元间神经键连接的强度。向生物神经系统一样,训练一个感知器模型就相当于不断调整链的权值,直到能拟合训练数据的输入输出关系为止。

        对于这个例子,假设我们有三个全职皆为0.3,输出结点的偏置因子为0.4.那么模型的输出计算工时如下

      y={             1         if  0.3x1+0.3x2+0.3x3-0.4>0

                        -1        if  0.3x1+0.3x2+0.3x3-0.4<0

 

       这样我们相当于得到了一个简单的分类器。

       显然, 感知器的输出模型为

        y= sign(w1x1+w2x2+..wnxn-t)                          

       那么权值和偏置因子是怎么得到的呢

2.2学习感知器模型

        在感知器的训练阶段,我们需要不断的调整权值参数w使输出和训练样例的实际输出一致。算法概述如下

       1 另D={(xi,yi)|i=1,2..N}为训练样本集

       2  用随机值初始化w

       3  repeat 

       4  for   每个样本(xi,yi)

       5          计算预测输出yi(k)

       6        for 每个权值wj

       7            更新权值 wj(k+1)=wj(k)+T(yi-yi(k))xij                (1)

       8        end

      9  end

      10 until满足终止条件

      w(k)是第k次循环时相应的权值。参数T为学习率 leaning rate。 xij是第i个样本的第j个属性。从权值更新公式可以直观的看出,新权值wj(k+1)等于旧权值wj(k)加上一个正比于预测误差的量。学习率T在0和1之间。

       这里我们的感知器模型是线性的,同时也是线性可分的情况。如果面对线性不可分的情况这个算法将不会生效。 (无法再学习这样一个线性超平面讲两种样本分开)。

       当然为了保证收敛到一个最优解,显然学习率T不应该太大。

    

2.3多层人工神经网络

         人工神经网络对比感知器的复杂方面体现在如下几点:
         1)   网络的输入层和输出层之间可能包含多个中间层,这些中间层叫做隐藏层,隐藏层的结点叫做隐藏结点。如下图所示。
                                                                          技术分享 
           在前馈神经网络中,每一层的结点仅和下一层的结点相连。 感知器就是一个单层的前馈神经网络,因为它只有一个结点层——输出层——进行复杂的数学运算。在递归神经网络中,允许同一层节点相连或一层的结点连到前面各层中的结点。
          2) 除了符号函数外,网络还可以使用其他激活函数。如线性函数,S型函数,双曲面正切函数等。 这些激活函数允许隐藏节点和输出节点的输出值与输入参数呈非线性关系。
        
          这些附加的复杂性使多层神经网络可以对输入和输出变量间更复杂的关系建模。 如上例中提到的XOR问题,实例可以用两个超平面把输入空间划分到各自的类
                                                                            技术分享 
                                                                                             
          因为感知器只能构造一个超平面,所以它无法找到最优解。而该问题可以使用两层前馈神经网络加以解决。
                                                                              技术分享
        直观上,我们可以把每个隐藏节点看作一个感知器,每个感知器构造两个超平面中德一个,输出节点简单地综合各感知器的结果, 得到上面的决策边界。该方法的可行性参见(http://blog.csdn.net/pennyliang/article/details/6058645) 要学习ANN模型的全职,需要一个有效的算法。该算法在训练数据充足时可以收敛到正确的解。下面介绍一种基于梯度下降的神经网络权值学习方法。
 

        2.3.1学习ANN模型

          ANN 学习算法的目的是确定一组权值w,最小化误差的平方和:
                                                               技术分享
          误差平方和取决于w,因为预测类y‘ 是赋予隐藏结点和输出结点的权值的函数。
          大多数情况下,由于激活函数的选择,ANN的输出是参数的非线性函数。这时可以使用基于梯度下降的方法等贪心算法可以很有效地解决优化问题。梯度下降法使用的权值更新公式可以写成:
                                                                技术分享
           式中的第二项说的是权值应该沿着使整体误差项减小的方向增加。然而,由于误差函数是非线性的,因此,梯度下降的方法可能会陷入局部最小值。

         梯度下降方法可以用来学习神经网络中输出节点和隐藏节点的权值。可以使用一种称为反向传播的技术来解决该问题。
         该算法的每一次迭代包括两个阶段:前向阶段和后向阶段。在前向阶段,使用前一次迭代所得到的权值计算网络中每一个神经元的输出值。计算是向前进行的,即先计算第k曾神经元的输出,再计算第k+1层的输出。在后向阶段,以相反的方向应用权值更新公式,即先更新k+1层的权值,在更新第k层的权值。 使用反向传播法,可以用第k+1曾神经元的误差来估计第k层神经元的误差。

       2.3.2ANN学习中的设计问题

         在训练神经网络来学习分类任务之前,应该先考虑如下设计问题
        1) 输入层结点数目。一般为样本的属性数
        2) 输出层结点数。 对于2-类问题,一个输出结点足以。对于k-类问题则需要k个输出结点。
        3)选择网络拓扑结构。例如隐藏层数和隐藏节点数,前馈还是递归网络结构。
        4) 初始化权值和偏执。 常常随机。
        5)去掉有遗漏值的训练样例,或用最合理的值来代替。

参考资料

     《 数据挖掘导论》  5.4人工神经网络


         

 


 

 

 

 

 

 

 

 

 

 

深度学习预备课:神经网络