网络的构成
神经元的网络输入:
n e t i = x 1 w 1 i + x 2 w 2 i + . . . + x n w n i net_i=x_1w_{1i}+x_2w_{2i}+...+x_nw_{ni} neti=x1w1i+x2w2i+...+xnwni
神经元的输出:
o
=
f
(
n
e
t
)
=
1
1
+
e
−
n
e
t
o=f(net)=\frac{1}{1+e^{-net}}
o=f(net)=1+e−net1
f
′
(
n
e
t
)
=
−
1
1
+
e
−
n
e
t
(
−
e
−
n
e
t
)
=
o
−
o
2
=
o
(
1
−
o
)
f^{'}(net)=-\frac{1}{1+e^{-net}}(-e^{-net})\\=o-o^2\\=o(1-o)
f′(net)=−1+e−net1(−e−net)=o−o2=o(1−o)
输出函数分析:
o
=
1
1
+
e
−
n
e
t
o=\frac{1}{1+e^{-net}}
o=1+e−net1
- 应该将net的值尽量控制在收敛比较快的范围内
- 可以用其他函数作为激活函数,只要该函数处处可导
网络的拓扑结构
- 涉及到的参数:输入向量、输出向量的维数、网络隐藏层的层数和各个隐藏层神经元的个数
- 增加隐藏层的层数和隐藏层=神经元个数不一定能够提高网络的精度和表达能力
- BP网络一般都选用二级网络,如下图所示:
训练过程
样本:(输入向量,理想输出向量)
权初始化:“小随机数”与饱和状态;“不同”保证网络可以学。
1、向前传播阶段
-
- 从样本集中取一个样本 ( X p , Y p ) (X_p,Y_p) (Xp,Yp),将 X p X_p Xp输入网络;
- 2、计算相应的实际输出 O p O_p Op: O p = F I ( . . . ( F 2 ( F 1 ( X p W ( 1 ) ) W ( 2 ) ) . . . ) W ( L ) ) O_p=F_I(...(F_2(F_1(X_pW^{(1)})W^{(2)})...)W^{(L)}) Op=FI(...(F2(F1(XpW(1))W(2))...)W(L))
2、向后传播阶段
- 1、计算实际输出 O p O_p Op与相应的理想输出 Y p Y_p Yp的差;
- 2、按极小化误差的方式调整权矩阵
- 3、网络关于第p个样本的误差测度: E p = 1 2 Σ j = 1 m ( y p j − o p j ) 2 E_p=\frac{1}{2}\Sigma_{j=1}^m(y_{pj}-o_{pj})^2 Ep=21Σj=1m(ypj−opj)2
- 4、网络关于整个样本集的误差测度: E = Σ p E P E=\Sigma_pE_P E=ΣpEP
误差传播分析
1、输出层权的调整
w
p
q
=
w
p
q
+
Δ
w
p
q
w_{pq}=w_{pq}+\Delta w_{pq}
wpq=wpq+Δwpq
Δ
=
α
δ
q
o
p
=
α
f
n
′
(
n
e
t
q
)
(
y
q
−
o
q
)
o
p
=
α
o
q
(
1
−
o
q
)
(
y
q
−
o
q
)
o
p
\Delta=\alpha\delta_qo_p\\=\alpha f_n^{'}(net_q)(y_q-o_q)o_p\\=\alpha o_q(1-o_q)(y_q-o_q)o_p
Δ=αδqop=αfn′(netq)(yq−oq)op=αoq(1−oq)(yq−oq)op
2、隐藏层的调整
δ
p
k
−
1
\delta_{pk-1}
δpk−1的值和
δ
1
k
,
δ
2
k
,
.
.
.
,
δ
m
k
\delta_{1k}, \delta_{2k}, ..., \delta_{mk}
δ1k,δ2k,...,δmk有关,可以认为
δ
p
k
−
1
\delta_{pk-1}
δpk−1通过权
w
p
1
w_{p1}
wp1对
δ
1
k
\delta_{1k}
δ1k做贡献,
通过权
w
p
2
w_{p2}
wp2对
δ
2
k
\delta_{2k}
δ2k做贡献,
……
通过权
w
p
m
w_{pm}
wpm对
δ
m
k
\delta_{mk}
δmk做贡献。
所以
δ
p
k
−
1
=
f
k
−
1
′
(
n
e
t
p
)
(
w
p
1
δ
1
k
+
w
p
2
δ
2
k
+
.
.
.
+
w
p
m
δ
m
k
)
\delta_{pk-1}=f_{k-1}^{'}(net_p)(w_{p1}\delta_{1k}+w_{p2}\delta_{2k}+...+w_{pm}\delta_{mk})
δpk−1=fk−1′(netp)(wp1δ1k+wp2δ2k+...+wpmδmk)
v
h
p
=
v
h
p
+
Δ
v
h
p
v_{hp}=v_{hp}+\Delta v_{hp}
vhp=vhp+Δvhp
Δ
v
h
p
=
α
δ
p
k
−
1
o
h
k
−
2
=
α
f
k
−
1
′
(
n
e
t
p
)
(
w
p
1
δ
1
k
+
w
p
2
δ
2
k
+
.
.
.
+
w
p
m
δ
m
k
)
o
h
k
−
2
=
α
o
p
k
−
1
(
w
p
1
δ
1
k
+
w
p
2
δ
2
k
+
.
.
.
+
w
p
m
δ
m
k
)
o
h
k
−
2
\Delta v_{hp}=\alpha\delta_{pk-1}o_{hk-2}\\=\alpha f_{k-1}^{'}(net_p)(w_{p1}\delta_{1k}+w_{p2}\delta_{2k}+...+w_{pm}\delta_{mk})o_{hk-2}\\=\alpha o_{pk-1}(w_{p1}\delta_{1k}+w_{p2}\delta_{2k}+...+w_{pm}\delta_{mk})o_{hk-2}
Δvhp=αδpk−1ohk−2=αfk−1′(netp)(wp1δ1k+wp2δ2k+...+wpmδmk)ohk−2=αopk−1(wp1δ1k+wp2δ2k+...+wpmδmk)ohk−2
基本的BP算法
样本集:
S
=
(
X
1
,
Y
1
)
,
(
X
2
,
Y
2
)
,
.
.
.
,
(
X
s
,
Y
s
)
S={(X_1,Y_1),(X_2,Y_2),...,(X_s,Y_s)}
S=(X1,Y1),(X2,Y2),...,(Xs,Ys)
基本思想:
- 逐一地根据样本 ( X k , Y k ) (X_k,Y_k) (Xk,Yk)计算出实际输出 O k O_k Ok和误差测度 E 1 E_1 E1,对 W ( 1 ) , W ( 2 ) , . . . , W ( L ) W^{(1)},W^{(2)},...,W^{(L)} W(1),W(2),...,W(L)各做一次调整,重复这个循环,知道 Σ E p < ϵ \Sigma E_p<\epsilon ΣEp<ϵ。
- 用输出层的误差调整输出层权矩阵,并用此误差估计输出层的直接前导层误差,再用输出层前导层估计更前一层的误差。如此获得所有其他各层的误差估计,并用这些估计实现对权矩阵的修改。形成将输出端表现得误差沿着与输入信号相反的方向逐级向输入端传递的过程。
基本BP算法流程
- for k=1 to L do
1.1 初始化 W ( k ) W^{(k)} W(k); - 初始化精度控制参数 ϵ \epsilon ϵ;
- E = ϵ + 1 E=\epsilon+1 E=ϵ+1;
- while E>
ϵ
\epsilon
ϵ do
4.1 E=0;
4.2 对S中的每一个样本 ( X p , Y p ) (X_p,Y_p) (Xp,Yp):
4.2.1 计算出 X p X_p Xp对应的实际输出 O p O_p Op;
4.2.2 计算出 E p E_p Ep;
4.2.3 E = E + E p E=E+E_p E=E+Ep;
4.2.4 根据相应式子调整 W ( L ) W^{(L)} W(L);
4.2.5 k=L-1;
4.2.6 while k ≠ 0 k\neq 0 k=0 do
4.2.6.1 根据相应式子调整 W ( k ) W^{(k)} W(k);
4.2.6.2 k=k-1
4.3 E = E / 2.0 E=E/2.0 E=E/2.0
消除样本顺序影响的BP算法
算法的主要实现步骤