BP算法学习
程序员文章站
2022-07-05 08:46:55
...
一、什么是BP算法
BP算法是建立在BP神经网络(多层前馈网络)上的一种算法,它根据神经网络的路径进行一层一层的运算,这个运算包括信号的正向传播和误差的反向传播两部分。
二、BP算法重要组成部分
BP神经网络包含层与节点,每相邻两层实现全连接。而BP算法包含输入值、输出值、预期值、权值、偏倚(充当阈值)。算法通过多次调整权值(神经元节点权系数)来实现在多组输入值情况下,输出值与预期值的逐渐拟合(即使两者间误差函数减小)。
误差函数
三、BP算法主要步骤
- 权系数修正公式如下:
(1)输出层(Tk为输出层预期值、Ok为实际值、j表示层、k表示第k个节点、n为学习效率,其值介于0-0.1)
(2)隐藏层(p为层数、i为输入节点数、j为隐含节点数、k为输出节点数、δ为反传误差信号、I为输入值、O为输出值)
*δ计算
*f’(Ik)计算
- 具体算法(后向传播)及图解
输入:D——训练元组和与其相关联的目标值组成的数据集;
n——学习率;network——多层前反馈网络
输出:训练后的神经网络
1 //初始化network的所有权重和偏倚
2 while(···//不满足终止条件时){
3 for ···//D中的每个训练元组X{
4 //向前传播输入;
5 for ···//每个输入单元j{
6 Oj=Ij;//输入单元的输出是它的实际输入值
7 for ···//隐藏或输出层每个单元j{
8 Ij=Σji wij*Oj+Θj;//关于前一层i,计算单元j的净输入
9 Oj=1/(1+e^(-Ij));}//计算单元j的输出
10 //后向传播误差;
11 for ···//输出层每个单元j
12 Errj=Oj*(1-Oj)*(Tj-Oj);//计算误差;
13 for ···//由最后一个到第一个隐藏层,对于隐藏层每个单元j
14 Errj=Oj*(1-Oj)*Σk Errk*wjk;//计算关于下一个较高层k的误差
15 for ···//network中的每个权wij{
16 Δwij=n*Errj*Oi;//权重增量
17 wij=wij+Δwij;}//权重更新
18 for ···//network中每个偏倚Θj{
19 ΔΘj=n*Errj;//偏倚增量
20 Θj=Θj+ΔΘj;}//偏倚更新
21 }}
图解
四、BP算法的不足
- 训练时间长——由于BP算法中具有多层、多节点的特点,并且一个样本中存在多组数据(即多个输入值),训练时具有较多循环,既有内循环又有外循环,从而导致调节权值时间较长。
- 学习率较为局限(介于0-0.1)——可通过学习率调节训练时间使时间缩短,但由于学习率过大、若权值较大时,**函数易达到饱和,使权值调整停滞,故学习率不能过大,也不能过小。
- 训练过程中,若使用新样本,旧样本的训练结果易被遗忘。
上一篇: python实现单层感知机(perceptron)
下一篇: 神经网络(一)—— 单层感知机