BP 神经网络模型
单隐层感知器又称为三层感知器,包括输入层、隐层和输出层.
三层感知器中,设输入向量 X X 、隐层输出向量 Y Y 和输出层向量 O O 分别为:
X=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢x0=−1x1⋮xi⋮xn⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥,Y=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢y0=−1y1⋮yj⋮ym⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥,O=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢o1⋮ok⋮ol⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥ X = [ x 0 = − 1 x 1 ⋮ x i ⋮ x n ] , Y = [ y 0 = − 1 y 1 ⋮ y j ⋮ y m ] , O = [ o 1 ⋮ o k ⋮ o l ]
输入层到隐层的权值矩阵 V V 、隐层到输出层的权值矩阵 W W 分别为:
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 个神经元对应的权向量,列向量
Wk W k 为对应输出层的第
k k 个神经元对应的权向量,即
Vj=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢v0jv1j⋮vij⋮vnj⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥,Wk=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢w0kw1k⋮wjk⋮wmk⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥ V j = [ v 0 j v 1 j ⋮ v i j ⋮ v n j ] , W k = [ w 0 k w 1 k ⋮ w j k ⋮ w m 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 为:
d=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢d1d2⋮dk⋮dl⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥ d = [ d 1 d 2 ⋮ d k ⋮ d l ]
当网络输出与期望输出不相等时,定义输出误差
E E :
E====12∑k=1l(dk−ok)212∑k=1l(dk−f(netk))212∑k=1l(dk−f(∑j=0mwjkyj))212∑k=1l(dk−f(∑j=0mwjkf(∑i=0nvijxi)))2 E = 1 2 ∑ k = 1 l ( d k − o k ) 2 = 1 2 ∑ k = 1 l ( d k − f ( n e t k ) ) 2 = 1 2 ∑ k = 1 l ( d k − f ( ∑ j = 0 m w j k y j ) ) 2 = 1 2 ∑ k = 1 l ( d k − f ( ∑ j = 0 m w j k f ( ∑ i = 0 n v i j x i ) ) ) 2
可以看出网络误差是各层权值
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 算法推导
ΔwjkΔvij==−η∂E∂wjk=−η∂E∂ok∂ok∂netk∂netk∂wjk−η∂E∂vij=−η∂E∂yj∂yj∂netj∂netj∂vij Δ w j k = − η ∂ E ∂ w j k = − η ∂ E ∂ o k ∂ o k ∂ n e t k ∂ n e t k ∂ w j k Δ v i j = − η ∂ E ∂ v i j = − η ∂ E ∂ y j ∂ y j ∂ n e t j ∂ n e t j ∂ v i j
注意到:
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 层隐层的网络结构,同时为了方便编程实现,将其向量化,得到如下公式:
δh+1=(d−o).∗f′(o)δh=(Wh+1[1:]∗δh+1).∗f′(yh[1:])ΔWh=η(yh−1∗(δh)T) δ h + 1 = ( d − o ) . ∗ f ′ ( o ) δ h = ( W h + 1 [ 1 : ] ∗ δ h + 1 ) . ∗ f ′ ( y h [ 1 : ] ) Δ W h = η ( y h − 1 ∗ ( δ h ) T )