BP神经网络
- BP神经网络
- 概述
- BP算法基本原理
- 1 BP网络模型
- 2 BP网络的标准学习算法
- 3 BP算法的直观解释
1 概述
Rumelhart,McClelland于1985年提出了BP网络的误差反向后传BP(Back Propagation)学习算法。
特点:
- 1、非线性映射能力
能学习和存贮大量输入-输出模式映射关系,而无需事先了解描述这种映射关系的数学方程。只要能提供足够多的样本模式对供网络进行学习训练,它便能完成由n维输入空间到m维输出空间的非线性映射。
- 2、泛化能力
当向网络输入训练时未曾见过的非样本数据时,网络也能完成由输入空间向输出空间的正确映射。这种能力称为泛化能力。
- 3、容错能力
输入样本中带有较大的误差甚至个别错误对网络的输入输出规律影响很小。
2 BP算法基本原理
利用输出后的误差来估计输出层的直接前导层的误差,再用这个误差估计更前一层的误差,如此一层一层的反传下去,就获得了所有其他各层的误差估计。
2.1 BP网络模型

激励函数:
- 1、必须处处可导
- 2、经常用sigmoid函数
sigmoid(x)=11+e−x
使用s函数时,输入与输出得关系:
输入:
input=x1w1+x2w2+...+xnwn
输出: output=f(in)=11+e−in
输出得导数: f′(in)=11+e−in−1(1+e−in)2=y(1−y)
学习的过程:神经网络在外界输入样本的刺激下不断改变网络的连接权值,以使网络的输出不断地接近期望的输出。
首先信号的正向传播,判断输出与期望误差是否在合理空间内,不在则误差反向传播,直到误差合理或达到最大学习次数。
学习的本质:对各连接权值的动态调整
学习规则:权值调整规则,即在学习过程中网络中各神经元的连接权变化所依据的一定的调整规则。
学习的类型:有导师学习
核心思想:
- 1、将输出误差以某种形式通过隐层向输入层逐层反传
- 2、将误差分摊给前面各层的所有单元,得到各层单元的误差信号
- 3、计算并修正各单元的权值
2.2 BP网络的标准学习算法
网络结构:输入层有n个神经元,隐含层有p个神经元, 输出层有q个神经元
变量定义:
输入向量: x=(x1,x2,⋯,xn)
隐含层输入向量: hi=(hi1,hi2,⋯,hip)
隐含层输出向量: ho=(ho1,ho2,⋯,hop)
输出层输入向量: yi=(yi1,yi2,⋯,yiq)
输出层输出向量: yo=(yo1,yo2,⋯,yoq)
期望输出向量: do=(d1,d2,⋯,dq)
输入层与中间层的连接权值: wih
隐含层与输出层的连接权值: who
隐含层各神经元的阈值: bh
输出层各神经元的阈值: bo
样本数据个数: k=1,2,⋯m
激活函数: f(⋅)
误差函数:
e=12∑o=1q(do(k)−yoo(k))2
第一步,网络初始化
- 给各连接权值分别赋一个区间(-1,1)内的随机数,设定误差函数e,给定计算精度 ε 和最大学习次数M。
第二步,随机选取第k个输入样本及对应的期望输出
-
x(k)=(x1(k),x2(k),⋯,xn(k))
$${d_o}(k) = \left( {{d_1}(k),{d_2}(k), \cdots ,{d_q}(k)} \right)$$
第三步,计算隐含层各神经元的输入和输出
hih(k)=∑i=1nwihxi(k)−bhh=1,2,⋯,p
hoh(k)=f(hih(k))h=1,2,⋯,p
yio(k)=∑h=1pwhohoh(k)−boo=1,2,⋯q
yoo(k)=f(yio(k))o=1,2,⋯q
第四部,利用网络期望输出和实际输出,计算误差函数对输出层的各神经元的偏导数 δo(k)
∂e∂who=∂e∂yio∂yio∂who
∂yio(k)∂who=∂(∑hpwhohoh(k)−bo)∂who=hoh(k)
∂e∂yio=∂(12∑o=1q(do(k)−yoo(k)))2∂yio=−(do(k)−yoo(k))yo′o(k)=−(do(k)−yoo(k))f′(yio(k))=Δ−δo(k)
∂e∂who=∂e∂yio∂yio∂who=−δo(k)hoh(k)
第五步,利用隐含层到输出层的连接权值、输出层的 δo(k) 和隐含层的输出,计算误差函数对隐含层各神经元的偏导数 δh(k) 。
∂e∂wih=∂e∂hih(k)∂hih(k)∂wih
∂hih(k)∂wih=∂(∑i=1nwihxi(k)−bh)∂wih=xi(k)
∂e∂hih(k)=∂(12∑o=1q(do(k)−yoo(k))2)∂hoh(k)∂hoh(k)∂hih(k)=∂(12∑o=1q(do(k)−f(yio(k)))2)∂hoh(k)∂hoh(k)∂hih(k)=∂(12∑o=1q((do(k)−f(∑h=1pwhohoh(k)−bo)2))∂hoh(k)∂hoh(k)∂hih(k)
=−∑o=1q(do(k)−yoo(k))f′(yio(k))who∂hoh(k)∂hih(k)=−(∑o=1qδo(k)who)f′(hih(k))=Δ−δh(k)
第六步,利用输出层各神经元的 δo(k) 和隐含层各神经元的输出来修正连接权值 who(k)
Δwho(k)=−η∂e∂who=ηδo(k)hoh(k)wN+1ho=wNho+ηδo(k)hoh(k)
其中 η 为学习率
第七步,利用隐含层各神经元的 δh(k) 和输入层各神经元的输入修正连接权值
Δwih(k)=−η∂e∂wih=−η∂e∂hih(k)∂hih(k)∂wih=δh(k)xi(k)wN+1ih=wNih+ηδh(k)xi(k)
第八步,计算全局误差(训练集D上所有样本)
E=1m∑k=1mEk=12m∑k=1m∑o=1q(do(k)−yo(k))2
第九步,判断网络误差是否满足要求。
当误差达到预设精度或学习次数大于设定的最大次数,则结束算法。否则,选取下 一个学习样本及对应的期望输出,返回到第三步,进入下一轮学习。
2.3 BP算法的直观解释
- 1、当误差对权值的偏导数大于零时,权值调整量为负,实际输出大于期望输出,权值向减少方向调整,使得实际输出与期望输出的差减少。
∂e∂who>0
此时 Δwho<0
-
2、当误差对权值的偏导数小于零时,权值调整量为正,实际输出少于期望输出,权值向增大方向调整,使得实际输出与期望输出的差减少。
∂e∂who<0
此时 Δwho>0