BP(Back Propagation)网络是1985年由Rumelhart和McCelland为首的科学家小组提出,是一种按偏差逆传播算法训练的多层前馈网络,是目前应用最普遍的神经网络模型之一。算法
BP网络能学习和存贮大量的输入-输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程。它的学习规则是使用最速降低法,经过反向传播来不断调整网络的权值和阈值,使网络的偏差平方和最小。网络
BP神经网络模型拓扑结构包括输入层(input)、隐层(hide layer)和输出层(output layer)。一个最简单的三层BP神经网络:机器学习
BP神经网络的学习目的是但愿可以学习到一个模型,可以对输入运算后输出一个咱们指望的输出。ide
后向传播的对象是训练过程当中的分类偏差,经过从输出层到前一隐含层,再到更前一层的隐含层,逐层向后传递计算出全部层的偏差估计。函数
在BP神经网络中,只有相邻的神经层的各个单元之间有联系,除了输出层外,每一层都有一个偏置结点:学习
上图中隐藏层只画了一层,但其层数并无限制,传统的神经网络学习经验认为一层就足够好,而最近的深度学习观点认为在必定范围内,层数越多,模型的描述和还原能力越强。优化
偏置结点是为了描述训练数据中没有的特征,偏置结点对于下一层的每个结点的权重的不一样而生产不一样的偏置,因而能够认为偏置是每个结点(除输入层外)的属性。spa
训练一个BP神经网络,实际上就是在外界输入样本的刺激下不断调整网络的权重和偏置这两个参数,以使网络的输出不断接近指望的输出,BP神经网络的训练过程分两部分:.net
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中经过训练偏差来逐步调整各层间的输入权重和偏置,这个调整的过程依据的算法通常有两种,一是梯度降低法(Gradient Descent),一是最小二乘法。
训练偏差(损失函数)是关于输入权重和偏置的二次函数,分别对权重和偏置求偏导数,也就是梯度向量,沿着梯度向量的方向,是训练偏差增长最快的地方, 而沿着梯度向量相反的方向,梯度减小最快,在这个方向上更容易找到训练偏差函数(损失函数)的最小值。
梯度降低法的直观理解参见下图:
在山峰附件的某处,要一步一步走向山底,一个好的办法是求解当前位置的梯度,而后沿着梯度的负方向向下走一步,而后继续求解当前位置的梯度,继续沿着梯度的负方向走下去,这样一步一步直到山底,这其中用到的方向就是梯度降低法。
梯度降低法也有一个问题就是若是初始点的位置选择的不合适,就容易致使找到的一个局部最优解,而不是全局最优解。
1. 算法的步长选择。在前面的算法描述中,我提到取步长为1,可是实际上取值取决于数据样本,能够多取一些值,从大到小,分别运行算法,看看迭代效果,若是损失函数在变小,说明取值有效,不然要增大步长。步长太大,会致使迭代过快,甚至有可能错过最优解。步长过小,迭代速度太慢,很长时间算法都不能结束。因此算法的步长须要屡次运行后才能获得一个较为优的值。
2. 算法参数的初始值选择。 初始值不一样,得到的最小值也有可能不一样,所以梯度降低求得的只是局部最小值;固然若是损失函数是凸函数则必定是最优解。因为有局部最优解的风险,须要屡次用不一样初始值运行算法,关键损失函数的最小值,选择损失函数最小化的初值。
3.归一化。因为样本不一样特征的取值范围不同,可能致使迭代很慢,为了减小特征取值的影响,能够对特征数据归一化,也就是对于每一个特征x,求出它的指望x¯¯¯x¯和标准差std(x),而后转化为:
x−x¯¯¯std(x)x−x¯std(x)
这样特征的新指望为0,新方差为1,迭代次数能够大大加快。
梯度降低法分类
批量梯度降低法,是梯度降低法最经常使用的形式,具体作法也就是在更新参数时使用全部的样原本进行更新。
随机梯度降低法,其实和批量梯度降低法原理相似,区别在与求梯度时没有用全部的m个样本的数据,而是仅仅选取一个样原本求梯度。
随机梯度降低法因为每次仅仅采用一个样原本迭代,训练速度很快,而批量梯度降低法在样本量很大的时候,训练速度不能让人满意。对于准确度来讲,随机梯度降低法用于仅仅用一个样本决定梯度方向,致使解颇有可能不是最优。对于收敛速度来讲,因为随机梯度降低法一次迭代一个样本,致使迭代方向变化很大,不能很快的收敛到局部最优解。
小批量梯度降低法是批量梯度降低法和随机梯度降低法的折衷,也就是对于m个样本,咱们采用x个样子来迭代,1<x<m。通常能够取x=10,固然根据样本的数据,能够调整这个x的值。
在机器学习中的无约束优化算法,除了梯度降低之外,还有前面提到的最小二乘法,此外还有牛顿法和拟牛顿法。
梯度降低法和最小二乘法相比,梯度降低法须要选择步长,而最小二乘法不须要。梯度降低法是迭代求解,最小二乘法是计算解析解。若是样本量不算很大,且存在解析解,最小二乘法比起梯度降低法要有优点,计算速度很快。可是若是样本量很大,用最小二乘法因为须要求一个超级大的逆矩阵,这时就很难或者很慢才能求解解析解了,使用迭代的梯度降低法比较有优点。
梯度降低法和牛顿法/拟牛顿法相比,二者都是迭代求解,不过梯度降低法是梯度求解,而牛顿法/拟牛顿法是用二阶的海森矩阵的逆矩阵或伪逆矩阵求解。相对而言,使用牛顿法/拟牛顿法收敛更快。可是每次迭代的时间比梯度降低法长。
转自:http://m.blog.csdn.net/dcrmg/article/details/73744824