BP 神经网络模型
单隐层感知器又称为三层感知器,包括输入层、隐层和输出层.
三层感知器中,设输入向量
X
X
、隐层输出向量 和输出层向量
O
O
分别为:
输入层到隐层的权值矩阵
V
V
、隐层到输出层的权值矩阵 分别为:
V=[V1V2⋯Vj⋯Vm]W=[W1W2⋯Wk⋯Wl]
V
=
[
V
1
V
2
⋯
V
j
⋯
V
m
]
W
=
[
W
1
W
2
⋯
W
k
⋯
W
l
]
其中列向量 Vj V j 为对应隐层的第 j j 个神经元对应的权向量,列向量 为对应输出层的第 k k 个神经元对应的权向量,即
则对于输出层有:
ok====f(netk)f(−w0k+w1ky1+w2ky2+⋯+wjkyj+⋯+wmkym)f(∑j=0mwjkyj)f(WTk⋅Y)
o
k
=
f
(
n
e
t
k
)
=
f
(
−
w
0
k
+
w
1
k
y
1
+
w
2
k
y
2
+
⋯
+
w
j
k
y
j
+
⋯
+
w
m
k
y
m
)
=
f
(
∑
j
=
0
m
w
j
k
y
j
)
=
f
(
W
k
T
⋅
Y
)
对于隐层有:
yj====f(netj)f(−v0j+v1jx1+v2jx2+⋯+vijxj+⋯+vnjxn)f(∑i=0nvijxi)f(VTj⋅X)
y
j
=
f
(
n
e
t
j
)
=
f
(
−
v
0
j
+
v
1
j
x
1
+
v
2
j
x
2
+
⋯
+
v
i
j
x
j
+
⋯
+
v
n
j
x
n
)
=
f
(
∑
i
=
0
n
v
i
j
x
i
)
=
f
(
V
j
T
⋅
X
)
其中转移函数 f(x) f ( x ) 均为单极性 Sigmoid 函数:
f(x)=11+e−x
f
(
x
)
=
1
1
+
e
−
x
其导函数为:
f′(x)=f(x)[1−f(x)]
f
′
(
x
)
=
f
(
x
)
[
1
−
f
(
x
)
]
BP 学习算法
网络误差定义、权值调整思路
输出向量对应期望输出向量
d
d
为:
当网络输出与期望输出不相等时,定义输出误差 E E :
可以看出网络误差是各层权值 wjk w j k 、 vij v i j 的函数,故要使得误差减小,应使权值的变化量与误差的梯度下降成正比:
ΔwjkΔvij==−η∂E∂wjkj∈[0,m],k∈[1,l]−η∂E∂viji∈[0,n],j∈[1,m]
Δ
w
j
k
=
−
η
∂
E
∂
w
j
k
j
∈
[
0
,
m
]
,
k
∈
[
1
,
l
]
Δ
v
i
j
=
−
η
∂
E
∂
v
i
j
i
∈
[
0
,
n
]
,
j
∈
[
1
,
m
]
注意两个 j j 范围的区别.
BP 算法推导
注意到:
E==12(d1−o1)2+⋯+12(dk−ok)2+⋯+12(dl−ol)212(d1−f(−w01+w11y1+⋯+wj1yj+⋯+wm1ym))2+⋯+12(dk−f(−w0k+w1ky1+⋯+wjkyj+⋯+wmkym))2+⋯+12(dl−f(−w0k+w1ky1+⋯+wjlyj+⋯+wmlym))2
E
=
1
2
(
d
1
−
o
1
)
2
+
⋯
+
1
2
(
d
k
−
o
k
)
2
+
⋯
+
1
2
(
d
l
−
o
l
)
2
=
1
2
(
d
1
−
f
(
−
w
01
+
w
11
y
1
+
⋯
+
w
j
1
y
j
+
⋯
+
w
m
1
y
m
)
)
2
+
⋯
+
1
2
(
d
k
−
f
(
−
w
0
k
+
w
1
k
y
1
+
⋯
+
w
j
k
y
j
+
⋯
+
w
m
k
y
m
)
)
2
+
⋯
+
1
2
(
d
l
−
f
(
−
w
0
k
+
w
1
k
y
1
+
⋯
+
w
j
l
y
j
+
⋯
+
w
m
l
y
m
)
)
2
故有:
∂E∂ok=−(dk−ok)∂E∂yj==−(d1−o1)f′(net1)wj1−⋯−(dk−ok)f′(netk)wjk−⋯−(dl−ol)f′(netl)wjl−∑k=1l(dk−ok)f′(netk)wjk
∂
E
∂
o
k
=
−
(
d
k
−
o
k
)
∂
E
∂
y
j
=
−
(
d
1
−
o
1
)
f
′
(
n
e
t
1
)
w
j
1
−
⋯
−
(
d
k
−
o
k
)
f
′
(
n
e
t
k
)
w
j
k
−
⋯
−
(
d
l
−
o
l
)
f
′
(
n
e
t
l
)
w
j
l
=
−
∑
k
=
1
l
(
d
k
−
o
k
)
f
′
(
n
e
t
k
)
w
j
k
注意到:
netk=−w0k+w1ky1+w2ky2+⋯+wjkyj+⋯+wmkymnetj=−v0j+v1jx1+v2jx2+⋯+vijxj+⋯+vnjxn
n
e
t
k
=
−
w
0
k
+
w
1
k
y
1
+
w
2
k
y
2
+
⋯
+
w
j
k
y
j
+
⋯
+
w
m
k
y
m
n
e
t
j
=
−
v
0
j
+
v
1
j
x
1
+
v
2
j
x
2
+
⋯
+
v
i
j
x
j
+
⋯
+
v
n
j
x
n
故:
∂netk∂wjk=yj,∂netj∂vij=xj
∂
n
e
t
k
∂
w
j
k
=
y
j
,
∂
n
e
t
j
∂
v
i
j
=
x
j
所以有:
ΔwjkΔvij========−η∂E∂ok∂ok∂netk∂netk∂wjkη(dk−ok)f′(netk)yjη(dk−ok)ok(1−ok)yjηδokyj−η∂E∂yj∂yj∂netj∂netj∂vijη∑k=1l[(dk−ok)f′(netk)wjk]f′(netj)xiη∑k=1l(δokwjk)yj(1−yj)xiηδyjxi
Δ
w
j
k
=
−
η
∂
E
∂
o
k
∂
o
k
∂
n
e
t
k
∂
n
e
t
k
∂
w
j
k
=
η
(
d
k
−
o
k
)
f
′
(
n
e
t
k
)
y
j
=
η
(
d
k
−
o
k
)
o
k
(
1
−
o
k
)
y
j
=
η
δ
k
o
y
j
Δ
v
i
j
=
−
η
∂
E
∂
y
j
∂
y
j
∂
n
e
t
j
∂
n
e
t
j
∂
v
i
j
=
η
∑
k
=
1
l
[
(
d
k
−
o
k
)
f
′
(
n
e
t
k
)
w
j
k
]
f
′
(
n
e
t
j
)
x
i
=
η
∑
k
=
1
l
(
δ
k
o
w
j
k
)
y
j
(
1
−
y
j
)
x
i
=
η
δ
j
y
x
i
其中 δok δ k o 和 δyj δ j y 分别定义为输出层和隐层的误差信号.
由此我们将其推广至有 h h 层隐层的网络结构,同时为了方便编程实现,将其向量化,得到如下公式: