[学习笔记]BP神经网络原理以及训练步骤


神经网络由三层组成,分别是输入层,输出层和隐蔽层。根据需要,隐蔽层可以是一层,二层或者三层。一般来说,使用一层隐蔽层,以及输出层使用非线性函数已经可以适用绝大数问题。多加一层隐蔽层并不会带来结果上的明显改进,反而会加大训练的时间。

以下的公式均假设在BP网络中使用logistic激活函数,输出层也使用该激活函数。


[学习笔记]BP神经网络原理以及训练步骤_第1张图片

连接的权值:相邻两层节点的单元均互相连接。即前一层中的每一个单元均和(且只和)后一层网络中的每一个单元相连接,且该权重一般初始化为[-0.1,0.1]之间的一个随机小数,用Wij表示,即前一层的节点i与后一层的节点j之间相连接的权值。

 

输入层:输入层的个数以及输入值的形式可以根据训练数据的形式自定义。比如当输入一个10乘以10像素的图像时,可以定义100个输入点,每个输入点对应于一个像素点的值,该值可以是经过MAX-MIN归一化后的数值。输入层的输出O即是他的输入,该层网络上不做任何计算。

隐蔽层与输出层:隐蔽层和输出层中每个节点均有一个阈值,以及一个激活函数,假设均为logistic函数。隐蔽层和输出层的净输入I均等于前一层的输出Q分别乘以相连的权值,再加上该单元的阈值,而该层的输出则是通过计算产生的,计算方法如下:

对于本层(隐蔽层或者输出层)中的单元j,它的净输入等于前一层网络中,所有单元的输出乘以该条连接权重的和,再加上单元j的阈值。故单元j的净输入可以表示为:



而计算净输入之后,该层的输出等于将logistic函数作用于净输入之上,即单元j的输出为:



之后,该输出继续作为下一层网络的输入处理。如果当前该层网络是输出层,则该值就是网络最后的输出值。

 

后向误差传播:

通过更新权值和每个单元的阈值,来修正当前的网络。

对于输出层的单元j,误差ERROR(j)用下式计算:



其中,Oj是该输出单元的实际输出,而Tj则是预期输出(即样本点的实际值)。

对于隐蔽层的单元j,误差的计算方式略有所不同,该值是



其中,Wkj是由下一层较高层中的单元K到单元J的连接权值,而ERR(k)是单元K的误差。

所以,当计算误差的时候,我们需要反向传播,即先计算较高层的误差,再计算前一层的误差。

计算完误差之后,需要更新权值和阈值,该权值的改变如下:

(请注意下标)

参数l表示学习速率,一般也为(0,1)之间的一个小数。不过,该数不是随机产生的,而是指定的。

阈值的更新如下:



网络停止训练的条件:

1前一周期的所有改变量均太小,小于某个指定的阈值;

2前一周期未正确分类的样本百分比小于某个阈值;

3超过预先指定的周期数。

经常,网络的收敛是不明显的,而且往往也不知道当前网络是否已经达到最优的状态。所以,判断是否停止迭代,往往采用一个更一般的做法:

将数据集分为3个独立的数据集,训练集,测试集,验证集,分别为原始样本的70% 15% 15%。网络的训练用训练集,每当迭代到一定次数后(比如100次),均用测试集去测试当前网络的误差和。然后,我们选取误差最小的那个网络作为我们最终的网络,而最后的验证则通过验证集去测试,即最后的测试结果。


你可能感兴趣的:(算法)