BP神经网络

    组里要求新人手写个BP神经网络练练手先,具体要求是用一个平面把空间点集二分类,建模时我发现这个问题比起分类来更接近一个多元函数拟合,当然分类也不是不行,机器学习的要求更低,更容易有更好的结果。这都是后话,这篇文我决定先来总结一下BP神经网络的概念,也算是前几天的学习笔记了。

1. 机器学习

    百度百科说机器学习(Machine Learning, ML)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。简而言之,机器学习专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。机器学习是人工智能的核心,是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域,它主要使用归纳、综合而不是演绎
    机器学习的方向很多,其历史和兴衰说来话长,这里引入机器学习的概念只是为了做个铺垫,就不展开了。

2. 人工神经网络

    人工神经网络(Artificial Neural Network,ANN )是人工智能的一支,是机器学习的一个方向,试图通过数学模型和适当的数据结构还原智能的温床——神经系统。我们知道人类大脑信息的传递、对外界刺激产生反应都是由一种特化的细胞——神经元来负责,人脑就是由上百亿个神经元构成。这些神经元之间并不孤立而且联系很密切,每个神经元平均与几千个神经元相连接,因此构成了一个神经网络。
    刺激在神经网络中的传播是遵循一定的规则的,一个神经元并非每次接到其他神经传递过来的刺激都产生反应。它首先会将与其相邻的神经元传来的刺激进行积累,到一定的时候产生自己的刺激将其传递给一些与它相邻的神经元。遵循同样规则工作着的百亿个的神经元完成了人脑对外界的反应。而人脑对外界刺激的学习过程则是通过这些神经元之间联系的建立及其强度的调整来完成的。
    当然,事实上,上述生物模型是对真正神经网络工作机制的一种简化,这种简化的生物模型可以推广至机器学习中,并以数学模型为理论基础,用不同的编程方式来实现。这种对神经网络的模拟,称为人工神经网络。

2.1. 人工神经元(Artificial Neuron,AN)模型

    AN是ANN的基本元素之一,其原理如下图。
图1 人工神经元模型
    图中x1~xn是从其他神经元传来的输入信号,wij表示表示从神经元j到神经元i的连接权值,θ表示一个偏置( bias )。则神经元i的输出与输入的关系表示为:


    图中 yi表示神经元i的输出,函数f称为激活函数 ( Activation Function ),net称为净激活(net activation)。
    如果令一个输入参数x0为-1,对应权重为偏置θ,则可以把偏置项合并进净激活net:

    若令X为输入向量,W为权重向量,则有:

X = [ x0 , x1 , x2 , ……. , xn ]



    将神经元的输出表示为向量相乘的形式则有:


    若神经元的净激活net为正,称该神经元处于激活状态或兴奋状态,若净激活net为负,则称神经元处于抑制状态。
    图1中的这种“阈值加权和”的神经元模型称为M-P模型 ( McCulloch-Pitts Model ),也称为神经网络的一个处理单元( PE, Processing Element )。

2.2. 常用激活函数

    前面的神经元模型讲解中也提到了激活函数,事实上,激活函数是人工神经网络中的一个重要环节。下面介绍一些常用的激活函数。

2.2.1. 线性函数(Liner Function)

2.2.2. 斜面函数(Ramp Function)

2.2.3. 阈值函数(Threshold Function)

2.2.4. S形函数(Sigmoid Function)


    导函数:

2.2.5. 双极S形函数


    导函数:

    S形函数与双极S形函数图像:
图2 S形函数与双极S形函数图像
    双极S形函数与S形函数主要区别在于函数的值域,双极S形函数值域是(-1,1),而S形函数值域是(0,1)。
    由于S形函数与双极S形函数都是可导的,因此适合用在BP神经网络中。(BP算法要求激活函数可导)

2.3. 神经网络模型

    根据神经元互联方式的不同,神经网络可以分为3种常见类型。

2.3.1. 前馈神经网络(Feedforward Neural Networks)

    前馈网络也称前向网络。这种网络只在训练过程会有反馈信号,而在分类过程中数据只能向前传送,直到到达输出层,层间没有向后的反馈信号,因此被称为前馈网络。感知机( perceptron)与BP神经网络属于前馈网络。
    下图是一个3层的前馈神经网络,其中第一层是输入单元,第二层称为隐含层,第三层称为输出层(输入单元不是神经元,因此图中有2层神经元)。
图3 前馈神经网络
    N层的前馈神经网络每层的输入参数都要按权重积累,得到净激活后由激活函数激活输出。
    比如,一个三层的前馈神经网络的输出为F3( F2 ( F1( XW1 ) W2 ) W3 )。当F1、F2、F3都选用线性激活函数,输出将是线性函数。
    所以,如果要做高次函数的拟合,应该选用适当的非线性激活函数。

2.3.2. 反馈神经网络(Feedback Neural Networks)

    反馈型神经网络是一种从输出到输入具有反馈连接的神经网络,其结构比前馈网络要复杂得多。典型的反馈型神经网络有Elman网络和Hopfield网络。
图4 反馈神经网络

2.3.3. 竞争学习网络(Competitive Learning Network)

    竞争学习网络是一种无监督学习网络。它通过自动寻找样本中的内在规律和本质属性,自组织、自适应地改变网络参数与结构。典型的竞争学习网络有SOM。
图5 竞争学习网络

2.3.4. 神经网络的状态

    神经网络的状态分学习(训练)状态和工作状态两种。
    学习状态又分为两种方式:监督学习(Supervised Learning)和非监督(Unsupervised Learning)学习。
    监督学习算法将一组训练数据集送入网络,根据网络的实际输出与期望输出间的差别来调整连接权。达到预设训练次数或者样本整体误差不超过预设范围(收敛)时学习结束。BP算法就是一种出色的监督学习算法。
    非监督学习算法抽取样本集合中蕴含的统计特性,并以神经元之间的联接权的形式存于网络中。Hebb学习律是一种经典的非监督学习算法。

2.3.5. 非监督学习算法:Hebb学习律

    Hebb算法核心思想是,当两个神经元同时处于激发状态时两者间的连接权会被加强,否则被减弱。
    Hebb学习律可以表示为:

    其中wij表示神经元j到神经元i的连接权,yi与yj为两个神经元的输出,a是表示学习速率常数。若yi与yj同时被激活,即yi与yj同号,那 么wij将增大;若yi被激活,而yj处于抑制状态,即yi为正yj为负,那么wij将变小。

2.3.6. 监督学习算法:Delta学习规则

    Delta学习规则的数学表达:

    其中wij表示神经元j到神经元i的连接权,di是神经元i的期望输出,yi是神经元i的实际输出,xj表示神经元j状态,若神经元j处于激活态则xj为 1,若处于抑制状态则xj为0或-1(依激活函数而定)。a是表示学习速率常数。假设xi为1,若di比yi大,那么Wij将增大,若di比yi小, 那么wij将变小。
    Delta规则简单讲来就是:若神经元实际输出比期望输出大,则减小所有输入为正的连接的权重,增大所有输入为负的连接的权重。反之,若神经元实际输出比期望输出小,则增大所有输入为正的连接的权重,减小所有输入为负的连接的权重。这个增大或减小的幅度就根据上面的式子来计算。

3. BP神经网络

3.1. 认识BP神经网络

    BP神经网络更清晰的称呼应该是使用BP算法学习的前馈神经网络。BP神经网络中的BP为Back Propagation(反向传播)的简写,最早它是由Rumelhart、McCelland等科学家于1986年提出来的,Rumelhart还在《Nature》上发表了一篇非常著名的文章《Learning representations by back-propagating errors》。随着时代的迁移,BP神经网络理论不断的得到改进、更新,现在无疑已成为了应用最为广泛的神经网络模型之一。BP网络具有很强的非线性映射能力,一个3层BP神经网络能够实现对任意非线性函数进行逼近(根据Kolrnogorov定理:任意[0,1]上的连续函数能被一个3层的神经网络实现,其中输入单元数为n,隐含层单元数为2n+1)。

3.2. 隐含层的选取

    在BP神经网络中,输入层和输出层的节点个数都是确定的,而隐含层节点个数不确定。实际上,隐含层节点个数的多少对神经网络的性能是有影响的,有一个经验公式可以确定隐含层神经元数目:

    其中,h为隐含层神经元数,m为输入结点数,n为输出层神经元数,a为1~10之间的调节常数。

3.3. 正向预测

    就是使输入数据样本通过一个两层前馈网络,输出即:

3.4. 反向误差传播

    BP算法是基于Widrow-Hoff学习规则的,可以看做delta学习规则的一种特殊情况。Widrow-Hoff学习规则是通过沿着相对误差平方和的最速下降方向(梯度方向),连续调整网络的权重和偏置。根据梯度下降法,权重矢量的修正正比于当前位置上E(w,b)的梯度的模,即E(w,b)在当前位置的偏导数。我们知道函数z = f(x,y)中,z对x或y的偏导数即z随x或y变化的程度或快慢,这正切合BP神经网络中每层输入参数权重的意义,也印证了梯度下降法的正确性。对于第j个输出神经元有:

    其中i是隐含层神经元的序号。

    其中n是输出层神经元数,m是隐含层神经元数,于是得到:

    已知Sigmoid函数的导函数:

    于是有:

    同理,对输出层偏置bj有:

    以上就是著名的delta学习规则,通过改变神经元之间的连接权值来减少系统实际输出和期望输出的误差,这个规则又叫做Widrow-Hoff学习规则或者纠错学习规则
    设k为输入层的节点序号,下面继续推导输入层与隐含层的权重修正:

    其中l是输入层节点数,yi也是前面推导隐含层与输出层间权重修正时的xi,于是有:

    同理,对隐含层偏置bi有:

    最后,输入层与隐含层间权重和偏置,隐含层与输出层间权重和偏置的修正值如下:

    其中,eita1和eita2分别是权重学习速率和偏置学习速率。

3.5. 注意点

  • 输入数据要先进行归一化处理。例如使用Sigmoid函数作为激活函数时,输入参数如果分布在Sigmoid函数曲线的稳定区域中,即定义域的[-1,1]区间之外的区域,那么激活值将集中在0和1上,权重对输入参数的加权作用将失去意义,输入参数对权重的调整也将失去意义。
  • 学习速率大的时候收敛速度快精度小,收敛曲线颠簸;学习速率小收敛速度慢精度大,收敛曲线平滑。
  • BP神经网络通常用于分类器和函数拟合,如果作为分类器,激活函数一般选用Sigmoid函数;如果做函数拟合,输出层的激活函数应该用线性函数即f(x) = x
  • BP神经网络训练过程中可以采用增量学习批量学习,即分批临时生成新的训练数据样本并输入当前网络,分阶段逐步学习;或者预生成所有训练数据样本,学习到出结果为止。

3.6. 缺陷

  • BP神经网络训练时容易陷入局部极小值”假收敛“而得不到全局最优值,如果出现”假收敛“,只能重新随机初始化权重。
  • BP神经网络需要的训练次数多,收敛比较慢。
  • 隐含层神经元数的选取缺乏理论指导。
  • 训练时学习新样本有遗忘旧样本的趋势,即“BP已死”这一说法的根源——泛化能力弱。

3.7. 改进

  • 加入动量项,即记录上一次权重变化,通过变量因子确定继承上一次权重变化的程度,目的是使权重的调整方向不至于来回颠簸太厉害,表现在误差函数值上则是能令收敛曲线更趋平缓。
  • 自适应的调整学习因子,即当权重调整到一定程度,不降低学习程度就无法更精细的使神经网络中的关系靠近理想关系。这时需要适量的减小学习因子,一般采取给学习因子添加衰减率的方式。
  • 通过蚁群算法、遗传算法等算法优化BP神经网络。
Fork me on GitHub