机器学习(四)---BP神经网络算法总结

1. 综述

神经网络是由具有适应性的简单单元组成的广泛并行互连的网络,它的组织能够模拟生物神经系统对真实世界物体所作出的交互反应。神经网络的最基本的成分是神经元模型,即上述定义的“简单单元”。在生物神经网络中,每个神经元与其他神经元相连,当它“兴奋”时,就会向相连的神经元发送化学物质,从而改变这些神经元内的电位;如果某神经元的电位超过了一个“阈值”,那么它就会被激活,即“兴奋”起来,向其他神经元发送化学物质。

神经元接收到来自n个其他神经元传递过来的输入信号,这些输入信号通过带权重的连接进行传递,神经元接收到的总输入值将与神经元的阈值进行比较,然后通过“激活函数”处理以产生神经元的输出。

2.感知机与多层网络

(1)感知机由两层神经元组成,只有输入层和输出层,能容易的实现逻辑与、或、非运算等线性可分问题,若两类模式是线性可分的,即存在一个线性超平面能将它们分开,则感知机的学习过程一定会收敛,从而求得适当的权重向量。否则发生震荡,感知机甚至不能求解异或这样简单的非线性可分问题。

(2)要解决非线性可分问题,需要考虑使用多层功能神经元,输入层和输出层之间有隐层,隐含层和输出层神经元都是拥有激活函数的功能神经元。只要包含隐含层,即可称为多层网络。

Hornik证明,只需一个包含足够多神经元的隐层,多层前馈网络就能以任意精度逼近任意复杂度的连续函数。然而,如何设置隐层神经元的个数仍是个未解决问题,实际应用中通常靠试错法调整。

每层神经元与下一层神经元全互连,神经元之间不存在同层连接,也不存在跨层连接,这样的神经网络结构通常称为“多层前馈神经网络”。神经网络的学习过程,就是根据训练数据来调整神经元之间的“连接权”以及每个功能神经元的阈值。

3.逆误差传播算法(errorBackPropagation,BP

3.1BP算法原理

BP算法不仅可用于多层前馈神经网络,还可以用于其他类型的神经网络,如递归神经网络,但通常说”BP网络时,一般是指用BP算法训练的多层前馈神经网络。

BP算法基于梯度下降策略,以均方误差函数值最小为目标,分别对每个权重及阈值求偏导,并按负方向乘以学习率后相加,就得到了均方误差函数的梯度。进而根据每个偏导迭代的更新每个权重和阈值,直至达到迭代次数或者预设精度。

学习率控制着每一轮迭代中的更新步长,太大容易振荡,太小则收敛速度过慢,有时为了做精细调节,可令输入层到隐层的权值和隐层神经元的阈值n1隐层到输出层的权值和输出层神经元的阈值n2不一定相等。

3.2标准BP算法累积BP算法

       标准BP算法每次迭代都计算一个样本,每次更新只针对单个样例,最小化该样本输出值与真实值的差距,然后将修改过的参数传给下一个样本,直到达到收敛条件。这样做参数更新频繁,也可能出现参数更改相互抵消的情况,因此,为了达到同样的累积误差极小点,标准BP算法往往需进行更多次数的迭代。

累积BP算法直接针对累积误差最小化,它在读取整个训练集D一遍后才对参数进行更新,其参数更新的频率低得很,但是在很多任务中,累积误差下降到一定程度之后,进一步下降会非常缓慢,这时标准BP往往会更快获得较好的解,尤其是在训练集D非常大时更新明显。

标准BP算法和累积BP算法的区别类似于随机梯度下降与标准梯度下降的关系。

正是由于其强大的表达能力,BP神经网络经常遭遇过拟合,其训练误差持续降低,但测试误差却可能上升,有两种方法常用来解决BP网络的过拟合。第一种方法是“早停”:将数据分成训练集合验证集,训练集用来计算梯度、更新连接权和阈值,验证集用来估计误差,若训练集误差降低但验证集误差升高,则停止训练,同时返回具有最小验证集误差的连接权和阈值。第二种策略是正则化,其基本思想是在误差目标函数中增加一个用于描述网络复杂度的部分,例如连接权与阈值的平方和,增加这一项后,训练过程将会偏好比较小的连接权和阈值,使网络输出更加“光滑”,从而对过拟合有所缓解。

4.全局最小与局部极小

       神经网络训练集上的误差是关于连接权和阈值的函数,此时,神经网络训练过程可看作是一个参数寻优过程,即在参数空间中,寻找一组最优参数使得误差函数最小。基于梯度的搜索是使用最为广泛的寻优方法,在此类方法中,我们从某些初始解出发,迭代寻找最优参数值。每次迭代中,我们先计算误差函数在当前点的梯度,然后根据梯度搜索方向。例如,负梯度方向是函数值下降最快的方向,因此梯度下降法就是沿着负梯度方向搜索最优解。若误差函数在当前点的梯度为零,则已达到局部极小,更新量将为零,意味着参数的迭代更新将在此停止。如果误差函数仅有一个局部极小,那么此时为全局最小;然而,如果误差函数具有多个局部极小,则不能保证找到的解是全局最小,对于后一种情形,我们称参数寻优陷入了局部极小。

       现实任务中,我们采用以下策略试图“跳出”局部极小,从而进一步接近全局最小:

       (1)以多组不同参数值初始化多个神经网络,按标准方法训练后,取其中误差最小的解作为最终参数。这相当于从多个不同的初始点开始搜索,这样就可能陷入不同的局部极小,从而更有可能接近全局最小。

       (2)使用“模拟退火”技术,模拟退火在每一步都以一定的概率接受比当前解更差的结果,从而有助于“跳出”局部极小(当然,也会造成“跳出”全局最小),在每一步迭代过程中,接受“次优解”的概率要随着时间的推移而逐渐降低,从而保证算法稳定。

       (3)使用随机梯度下降。与标准梯度下降法精确计算梯度不同,随机梯度下降法在计算梯度时加入了随机因素,于是,即便陷入局部极小点,它计算出的梯度仍可能不为零,这样就有可能跳出局部极小继续搜索。

       此外,遗传算法也常用来训练神经网络以更好地逼近全局最小。需要注意的是,上述用于跳出局部极小的技术大多是启发式,缺乏理论证明。

5.深度学习

理论上来说,参数越多的模型复杂度越高,“容量”越大,这意味着它能完成更复杂的学习任务,但一般情形下,复杂模型的训练效率低,易陷入过拟合,因此难以受到人们的青睐。随着云计算、大数据时代的到来,计算能力的大幅提高可缓解训练低效性,训练数据的大幅增加则可降低过拟合风险,因此以“深度学习”为代表的复杂模型开始受到关注。

从增加模型复杂度的角度来看,增加隐层的数目显然比增加隐层神经元的数目更有效,因为增加隐层数不仅增加了拥有激活函数的神经元数目,还增加了激活函数嵌套的层数。然而多隐层神经网络难以直接用经典算法(如标准bp算法)进行训练,因为误差在多隐层内逆传播时,往往会“发散”而不能收敛到稳定状态。

无监督逐层训练是多隐层网络训练的有效手段,其基本思想是每次训练一层隐结点,训练时将上一层隐结点的输出作为输入,而本层隐结点的输出作为下一层隐结点的输入,这称为“预训练”;在预训练全部完成后,再对整个网络进行“微调”训练,如深度信念网络DBN.事实上,“预训练+微调”的做法可视为将大量参数分组,对每组先找到局部看起来比较好的设置,然后再基于这些局部较优的结果联合起来进行全局寻优,这样就在利用了模型大量参数所提供的自由度的同时,有效的节省了训练开销。

另一种节省训练开销的策略是“权共享”,既让一组神经元使用相同的连接权,这个策略在卷积神经网络CNN中发挥了重要作用。

无论是DBN还是CNN,其多隐层堆叠、每层对上层的输出进行的处理机制,可看作是对输入信号进行逐层加工,从而把初始的、与输出目标之间联系不太密切的输入表示,转化成与输出目标联系更密切的表示,使得原来仅基于最后一层输出映射难以完成的任务成为可能。换言之,通过多层处理,逐渐将初始的“低层”特征表示转化为“高层”特征表示后,用“简单模型”即可完成复杂的分类等学习任务。由此可将深度学习理解为进行“特征学习”或“表示学习”。

以往的机器学习用于现实任务时,描述样本的特征通常需要由人类专家设计,这称为“特征工程”。众所周知,特征学习的好坏对泛化性能有至关重要的影响,人类专家设计出好特征也并非易事;特征学习则通过机器学习技术自身来产生好特征,这使得机器学习向“全自动数据分析”又前进了一步。

1. 背景:

     1.1 以人脑中的神经网络为启发,历史上出现过很多不同版本

     1.2 最著名的算法是1980年的 backpropagation 

 

2. 多层向前神经网络(Multilayer Feed-Forward Neural Network)

     2.1 Backpropagation被使用在多层向前神经网络上

     2.2 多层向前神经网络由以下部分组成:

           输入层(input layer), 隐藏层 (hidden layers), 输入层 (output layers)

     

 

     2.3 每层由单元(units)组成

     2.4 输入层(input layer)是由训练集的实例特征向量传入

     2.5 经过连接结点的权重(weight)传入下一层,一层的输出是下一层的输入

     2.6 隐藏层的个数可以是任意的,输入层有一层,输出层有一层

     2.7 每个单元(unit)也可以被称作神经结点,根据生物学来源定义

     2.8 以上成为2层的神经网络(输入层不算)

     2.8 一层中加权的求和,然后根据非线性方程转化输出

     2.9 作为多层向前神经网络,理论上,如果有足够多的隐藏层(hidden layers) 和足够大的训练集, 可以模     

          拟出任何方程

 

3. 设计神经网络结构

     3.1 使用神经网络训练数据之前,必须确定神经网络的层数,以及每层单元的个数

     3.2 特征向量在被传入输入层时通常被先标准化(normalize)到01之间(为了加速学习过程)

     3.3 离散型变量可以被编码成每一个输入单元对应一个特征值可能赋的值

          比如:特征值A可能取三个值(a0, a1, a2), 可以使用3个输入单元来代表A

                    如果A=a0, 那么代表a0的单元值就取1, 其他取0

                    如果A=a1, 那么代表a1de单元值就取1,其他取0,以此类推

 

     3.4 神经网络即可以用来做分类(classification)问题,也可以解决回归(regression)问题

          3.4.1 对于分类问题,如果是2类,可以用一个输出单元表示(01分别代表2类)

                                        如果多余2类,每一个类别用一个输出单元表示

                   所以输入层的单元数量通常等于类别的数量

 

          3.4.2 没有明确的规则来设计最好有多少个隐藏层

                   3.4.2.1 根据实验测试和误差,以及准确度来实验并改进

                  

4. 交叉验证方法(Cross-Validation)

          

                   

 

          K-fold cross validation 

 

5. Backpropagation算法

     5.1 通过迭代性的来处理训练集中的实例

     5.2 对比经过神经网络后输入层预测值(predicted value)与真实值(target value)之间

     5.3 反方向(从输出层=>隐藏层=>输入层)来以最小化误差(error)来更新每个连接的权重(weight)

     5.4 算法详细介绍

           输入:D:数据集,l 学习率(learning rate)一个多层前向神经网络

           输入:一个训练好的神经网络(a trained neural network)

 

          5.4.1 初始化权重(weights)和偏向(bias): 随机初始化在-11之间,或者-0.50.5之间,每个单元有          

                    一个偏向

          5.4.2 对于每一个训练实例X,执行以下步骤:

                    5.4.2.1由输入层向前传送

                                  

                                  

                   

                                  

 

                                  

                     5.4.2.2 根据误差(error)反向传送

                                  对于输出层:

                                  对于隐藏层:

                                                     

                                  权重更新:  

                                  偏向更新    

                                                   

               5.4.3 终止条件

                        5.4.3.1 权重的更新低于某个阈值

                        5.4.3.2 预测的错误率低于某个阈值

                        5.4.3.3 达到预设一定的循环次数

                        

6. Backpropagation 算法举例

          

          

                                  对于输出层:

                                  对于隐藏层:

                                                     

                                  权重更新:  

                                  偏向更新    

                                                   

          

你可能感兴趣的:(★机器学习,机器学习,神经网络)