机器学习入门-BP神经网络模型及梯度降低法-2017年9月5日14:58:16

BP(Back Propagation)网络是1985年由Rumelhart和McCelland为首的科学家小组提出,是一种按偏差逆传播算法训练的多层前馈网络,是目前应用最普遍的神经网络模型之一。算法

BP网络能学习和存贮大量的输入-输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程。它的学习规则是使用最速降低法,经过反向传播来不断调整网络的权值和阈值,使网络的偏差平方和最小。网络

BP神经网络模型拓扑结构包括输入层(input)、隐层(hide layer)和输出层(output layer)。一个最简单的三层BP神经网络:机器学习

 

 

BP神经网络的学习目的是但愿可以学习到一个模型,可以对输入运算后输出一个咱们指望的输出。ide

后向传播的对象是训练过程当中的分类偏差,经过从输出层到前一隐含层,再到更前一层的隐含层,逐层向后传递计算出全部层的偏差估计。函数

在BP神经网络中,只有相邻的神经层的各个单元之间有联系,除了输出层外,每一层都有一个偏置结点:学习

 

 

上图中隐藏层只画了一层,但其层数并无限制,传统的神经网络学习经验认为一层就足够好,而最近的深度学习观点认为在必定范围内,层数越多,模型的描述和还原能力越强。优化

偏置结点是为了描述训练数据中没有的特征,偏置结点对于下一层的每个结点的权重的不一样而生产不一样的偏置,因而能够认为偏置是每个结点(除输入层外)的属性。spa

训练一个BP神经网络,实际上就是在外界输入样本的刺激下不断调整网络的权重和偏置这两个参数,以使网络的输出不断接近指望的输出,BP神经网络的训练过程分两部分:.net

  • 前向传输,逐层波浪式的传递输出值;
  • 逆向反馈,反向逐层调整权重和偏置;
 
BP神经网络层与层之间的关系是经过激活函数来描述的,激活函数至关于生物学中细胞体中的细胞核,是对输入信号的处理单元。激活函数必须知足到处可导的条件,BP中经常使用的激活函数是Sigmoid。
 
 
前向传输 (Feed-Forward前向反馈)

 

 

BP网络训练开始以前,对网络的权重和偏置值进行初始化,权重取[-1,1]之间的一个随机数,偏置取[0,1]间的一个随机数。神经网络的训练包含屡次的迭代过程,每一次迭代(训练)过程都使用训练集的全部样本。设计

每一轮训练完成后判断训练样本的分类正确率和最大训练次数是否知足设定条件,若是知足则中止训练,不知足则从前向传输进入到逆向传输阶段。

 

 

逆向反馈(Backpropagation)

 

 

逆向反馈从最后一层即输出层开始,训练神经网络做分类的目的每每是但愿最后一层的输出可以描述数据记录的类别,好比对于一个二分类的问题,咱们经常用两个神经单元做为输出层,若是输出层的第一个神经单元的输出值比第二个神经单元大,咱们认为这个数据记录属于第一类,不然属于第二类。

逆向反馈是为了调整网络的参数,即权重值和偏置值,而调整的依据就是网络的输出层的输出值与类别之间的差别,经过调整参数来缩小这个差别,这就是神经网络的优化目标。对于输出层:

其中Ej表示第j个结点的偏差值,Oj表示第j个结点的输出值,Tj记录输出值,好比对于2分类问题,咱们用01表示类标1,10表示类别2,若是一个记录属于类别1,那么其T1=0,T2=1。

中间的隐藏层并不直接与数据记录的类别打交道,而是经过下一层的全部结点偏差按权重累加,计算公式以下:

其中Wjk表示当前层的结点j到下一层的结点k的权重值,Ek下一层的结点k的偏差率。

计算完偏差率后,就能够利用偏差率对权重和偏置进行更新,首先看权重的更新:

其中λ表示表示学习速率,取值为0到1,学习速率设置得大,训练收敛更快,但容易陷入局部最优解,学习速率设置得比较小的话,收敛速度较慢,但能一步步逼近全局最优解。

更新完权重后,还有最后一项参数须要更新,即偏置:

 

这样就完成了一次神经网络的训练过程,经过不断的使用全部数据记录进行训练,从而获得一个分类模型。不断地迭代,直到知足最大迭代次数或者模型在训练样本集上的预测准确率达到预设要求。

BP神经网络训练的具体流程:
  1. 网络初始化:给各链接权重赋一个区间为[-1,1]内的随机数,设定偏差函数e,设定计算精度和最大学习次数;
  2. 随机选取:随机选取第n个训练样本以及对应的指望输出;
  3. 隐含层计算:计算隐含层各神经元的输入和输出;
  4. 求偏导数:利用网络指望输出和实际输出,计算偏差函数对输出层的各神经元的偏导数;
  5. 修正权值:利用输出层各神经元的偏导数和隐含层各神经元的输出来修正连接权值;
  6. 修正权值:利用隐含层各神经元的偏导数和输入层各神经元的输入修正连接权值;
  7. 计算全局偏差:在修正过模型的链接权重以后从新计算新的模型的全局偏差;
  8. 判断模型合理性:判断当前模型是否知足要求,不然,选择下一个随机学习样本以及对应的指望输出,执行下一次学习;
 
BP网络的设计


在进行BP网络的设计是,通常应从网络的层数、每层中的神经元个数和激活函数、初始值以及学习速率等几个方面来进行考虑,下面是一些选取的原则。

1.网络的层数

理论已经证实,具备误差和至少一个S型隐层加上一个线性输出层的网络,可以逼近任何有理函数,增长层数能够进一步下降偏差,提升精度,但同时也是网络 复杂化。另外不能用仅具备非线性激活函数的单层网络来解决问题,由于能用单层网络解决的问题,用自适应线性网络也必定能解决,并且自适应线性网络的 运算速度更快,而对于只能用非线性函数解决的问题,单层精度又不够高,也只有增长层数才能达到指望的结果。

2.隐层神经元的个数

网络训练精度的提升,能够经过采用一个隐含层,而增长其神经元个数的方法来得到,这在结构实现上要比增长网络层数简单得多。通常而言,咱们用精度和 训练网络的时间来恒量一个神经网络设计的好坏: 
(1)神经元数太少时,网络不能很好的学习,训练迭代的次数也比较多,训练精度也不高。 
(2)神经元数太多时,网络的功能越强大,精确度也更高,训练迭代的次数也大,可能会出现过拟合(over fitting)现象。 
由此,咱们获得神经网络隐层神经元个数的选取原则是:在可以解决问题的前提下,再加上一两个神经元,以加快偏差降低速度便可。

3.初始权值的选取

通常初始权值是取值在(−1,1)之间的随机数。另外威得罗等人在分析了两层网络是如何对一个函数进行训练后,提出选择初始权值量级为s√r的策略, 其中r为输入个数,s为第一层神经元个数。

4.学习速率

学习速率通常选取为0.01−0.8,大的学习速率可能致使系统的不稳定,但小的学习速率致使收敛太慢,须要较长的训练时间。对于较复杂的网络, 在偏差曲面的不一样位置可能须要不一样的学习速率,为了减小寻找学习速率的训练次数及时间,比较合适的方法是采用变化的自适应学习速率,使网络在不一样的阶段设置不一样大小的学习速率。

5.指望偏差的选取

在设计网络的过程当中,指望偏差值也应当经过对比训练后肯定一个合适的值,这个合适的值是相对于所须要的隐层节点数来肯定的。通常状况下,能够同时对两个不一样 的指望偏差值的网络进行训练,最后经过综合因素来肯定其中一个网络。
 
 

梯度降低法

BP中经过训练偏差来逐步调整各层间的输入权重和偏置,这个调整的过程依据的算法通常有两种,一是梯度降低法(Gradient Descent),一是最小二乘法。

训练偏差(损失函数)是关于输入权重和偏置的二次函数,分别对权重和偏置求偏导数,也就是梯度向量,沿着梯度向量的方向,是训练偏差增长最快的地方, 而沿着梯度向量相反的方向,梯度减小最快,在这个方向上更容易找到训练偏差函数(损失函数)的最小值。

梯度降低法的直观理解参见下图:

在山峰附件的某处,要一步一步走向山底,一个好的办法是求解当前位置的梯度,而后沿着梯度的负方向向下走一步,而后继续求解当前位置的梯度,继续沿着梯度的负方向走下去,这样一步一步直到山底,这其中用到的方向就是梯度降低法。

梯度降低法也有一个问题就是若是初始点的位置选择的不合适,就容易致使找到的一个局部最优解,而不是全局最优解。 

梯度降低的算法调优

 

1. 算法的步长选择。在前面的算法描述中,我提到取步长为1,可是实际上取值取决于数据样本,能够多取一些值,从大到小,分别运行算法,看看迭代效果,若是损失函数在变小,说明取值有效,不然要增大步长。步长太大,会致使迭代过快,甚至有可能错过最优解。步长过小,迭代速度太慢,很长时间算法都不能结束。因此算法的步长须要屡次运行后才能获得一个较为优的值。

2. 算法参数的初始值选择。 初始值不一样,得到的最小值也有可能不一样,所以梯度降低求得的只是局部最小值;固然若是损失函数是凸函数则必定是最优解。因为有局部最优解的风险,须要屡次用不一样初始值运行算法,关键损失函数的最小值,选择损失函数最小化的初值。

3.归一化。因为样本不一样特征的取值范围不同,可能致使迭代很慢,为了减小特征取值的影响,能够对特征数据归一化,也就是对于每一个特征x,求出它的指望x¯¯¯x¯和标准差std(x),而后转化为:

      xx¯¯¯std(x)x−x¯std(x)

这样特征的新指望为0,新方差为1,迭代次数能够大大加快。

 

梯度降低法分类

 

批量梯度降低法(Batch Gradient Descent)

 

批量梯度降低法,是梯度降低法最经常使用的形式,具体作法也就是在更新参数时使用全部的样原本进行更新。

 

随机梯度降低法(Stochastic Gradient Descent)

 

随机梯度降低法,其实和批量梯度降低法原理相似,区别在与求梯度时没有用全部的m个样本的数据,而是仅仅选取一个样原本求梯度。

随机梯度降低法因为每次仅仅采用一个样原本迭代,训练速度很快,而批量梯度降低法在样本量很大的时候,训练速度不能让人满意。对于准确度来讲,随机梯度降低法用于仅仅用一个样本决定梯度方向,致使解颇有可能不是最优。对于收敛速度来讲,因为随机梯度降低法一次迭代一个样本,致使迭代方向变化很大,不能很快的收敛到局部最优解。

 

小批量梯度降低法(Mini-batch Gradient Descent)

 

小批量梯度降低法是批量梯度降低法和随机梯度降低法的折衷,也就是对于m个样本,咱们采用x个样子来迭代,1<x<m。通常能够取x=10,固然根据样本的数据,能够调整这个x的值。

 

 

梯度降低法和其余无约束优化算法的比较

 

 

在机器学习中的无约束优化算法,除了梯度降低之外,还有前面提到的最小二乘法,此外还有牛顿法和拟牛顿法。

梯度降低法和最小二乘法相比,梯度降低法须要选择步长,而最小二乘法不须要。梯度降低法是迭代求解,最小二乘法是计算解析解。若是样本量不算很大,且存在解析解,最小二乘法比起梯度降低法要有优点,计算速度很快。可是若是样本量很大,用最小二乘法因为须要求一个超级大的逆矩阵,这时就很难或者很慢才能求解解析解了,使用迭代的梯度降低法比较有优点。

梯度降低法和牛顿法/拟牛顿法相比,二者都是迭代求解,不过梯度降低法是梯度求解,而牛顿法/拟牛顿法是用二阶的海森矩阵的逆矩阵或伪逆矩阵求解。相对而言,使用牛顿法/拟牛顿法收敛更快。可是每次迭代的时间比梯度降低法长。

 

转自:http://m.blog.csdn.net/dcrmg/article/details/73744824

相关文章
相关标签/搜索