- 意义
- 基本原理
- 结构图
- 激活函数(σ函数)
- BP网络输入输出关系
- BP网络的学习算法
–思想
– 学习过程
–学习本质 - BP算法实现
意义:
通过比较简单的概念构建复杂的概念
基本原理:
利用输出后的误差来估计输出层的直接前导层的误差,再用这个误差估计更前一层的误差,如此一层一层的反传下去,就获得了所有其他各层的误差估计。
结构图:
激活函数
大
多
使
用
σ
(
w
T
x
⃗
)
是
l
o
g
i
s
t
i
c
 
s
i
g
n
m
o
d
函
数
大多使用 \quad σ(w^T\vec x)是logistic \, signmod函数
大多使用σ(wTx)是logisticsignmod函数
使用一组n个输入的
x
1
,
x
2
,
x
3
,
x
4
,
.
.
.
,
x
n
x_{1}, x_{2},x_{3},x_{4},...,x_{n}
x1,x2,x3,x4,...,xn并将他们与一个输出y相关联。希望学习一组权重
w
1
,
w
2
,
w
3
,
w
4
,
.
.
.
,
w
n
w_{1},w_{2},w_{3},w_{4},...,w_{n}
w1,w2,w3,w4,...,wn并计算他们的输出
f
(
x
,
w
)
=
n
e
t
=
x
1
w
1
+
x
2
w
2
+
.
.
.
+
x
n
w
n
f(x,w)= net= x_{1}w_{1}+x_{2}w_{2}+...+x_{n}w_{n}
f(x,w)=net=x1w1+x2w2+...+xnwn简单来说,就是根据每个类别的输入样本简单的返回函数f(x)本身的值来预测一个实数。
BP网络输入输出关系:
输入:
f ( x , w ) = n e t = x 1 w 1 + x 2 w 2 + . . . + x n w n f(x,w)= net= x_{1}w_{1}+x_{2}w_{2}+...+x_{n}w_{n} f(x,w)=net=x1w1+x2w2+...+xnwn
输出:
y = f ( n e t ) = 1 1 + e − n e t y = f(net) = \frac{1}{1+e^{-net}} y=f(net)=1+e−net1
输出的导数:
y ′ = f ′ ( n e t ) = 1 1 + e − n e t − 1 ( 1 + e − n e t ) 2 = y ( 1 − y ) y' = f'(net) = \frac{1}{1+e^{-net}}-\frac{1}{{(1+e^{-net}})^2} = y(1-y) y′=f′(net)=1+e−net1−(1+e−net)21=y(1−y)
BP网络的学习算法
思想:
将输出误差以某种形式通过隐层向输入层逐层反传(即将误差分摊给各层的所有单元——各层单元的误差信号,以此来修正各单元权值)
学习过程:
神经网络在外界输入样本的刺激下不断改变网络的连接权值,以使网络的输出不断地接近期望的输出。信号的正向传播<—>误差的反向传播
学习本质:
对各连接权值的动态调整。常使用随机梯度下降法(SGD)调节权重
BP算法实现
- 网络结构:输入层n个输入神经元,隐含层有p个神经元,输出层有q个神经元(假设为3层网络,隐含层可拓展)
- 变量定义:
输 入 向 量 : x ⃗ = ( x 1 , x 2 , x 3 , x 4 , . . . , x n )    隐 含 层 输 入 向 量 : h i ⃗ = ( h i 1 , h i 2 , h i 3 , . . . , h i p ) 隐 含 层 输 出 向 量 : h o ⃗ = ( h o 1 , h o 2 , h o 3 , . . . , h o p )    输 出 层 输 入 向 量 : y i ⃗ = ( y i 1 , y i 2 , y i 3 , . . . , y i q ) 输 出 层 输 出 向 量 : y o ⃗ = ( y o 1 , y o 2 , y o 3 , . . . , y o q )    期 望 输 出 向 量 : d ⃗ = ( d 1 , d 2 , d 3 , d 4 , . . . , d q )    输入向量: \quad \quad\quad\quad\quad\quad \quad \quad \vec x = (x_{1},x_{2},x_{3},x_{4},...,x_{n}) \quad\,\,\\ 隐含层输入向量: \quad\quad\quad\quad\quad\vec {hi} = (hi_1,hi_2,hi_3,...,hi_p) \quad\\ 隐含层输出向量: \quad\quad\quad\quad\quad\vec {ho} = (ho_1,ho_2,ho_3,...,ho_p)\,\,\\ 输出层输入向量: \quad\quad\quad\quad\quad\vec {yi} = (yi_1,yi_2,yi_3,...,yi_q) \quad\\ 输出层输出向量: \quad\quad\quad\quad\quad\vec {yo} = (yo_1,yo_2,yo_3,...,yo_q)\,\,\\ 期望输出向量: \quad \quad\quad\quad\quad\quad \vec d = (d_{1},d_{2},d_{3},d_{4},...,d_{q}) \quad\,\, 输入向量:x=(x1,x2,x3,x4,...,xn)隐含层输入向量:hi=(hi1,hi2,hi3,...,hip)隐含层输出向量:ho=(ho1,ho2,ho3,...,hop)输出层输入向量:yi=(yi1,yi2,yi3,...,yiq)输出层输出向量:yo=(yo1,yo2,yo3,...,yoq)期望输出向量:d=(d1,d2,d3,d4,...,dq)
输 入 层 与 中 间 层 的 连 接 权 值 : w i h 隐 含 层 与 输 出 层 的 连 接 权 值 : w h o 隐 含 层 各 神 经 元 的 阈 值 : b h     输 出 层 各 神 经 元 的 阈 值 : b o      样 本 数 据 个 数 : k = 1 , 2 , . . m    激 活 函 数 : f ( . ) 单 个 样 本 的 训 练 误 差 :    E ( k ) = 1 2 ∑ o = 1 q ( d o ( k ) − y o o ( k ) ) 2    误 差 函 数 : E = 1 m ∑ k = 1 m E ( k ) = 1 2 m ∑ k = 1 m ∑ o = 1 q ( d o ( k ) − y o o ( k ) ) 2 输入层与中间层的连接权值: \quad \quad \quad\quad \quad\quad \quad w_{ih} \quad \quad \quad \quad \\ 隐含层与输出层的连接权值:\quad \quad \quad \quad \quad \quad \quad w_{ho} \quad \quad \quad \quad \\ 隐含层各神经元的阈值: \quad \quad \quad\quad\quad \quad \quad \quad \quad b_{h} \quad\quad \quad \quad\,\,\, \\ 输出层各神经元的阈值: \quad \quad \quad\quad\quad \quad \quad \quad \quad b_{o} \quad\quad \quad \quad\,\,\,\, \\ 样本数据个数:\quad \quad \quad\quad\quad\quad\quad \quad \quad\quad\quad\quad \quad k=1,2,..m \,\,\\ 激活函数:\quad \quad \quad\quad\quad\quad\quad \quad \quad \quad\quad\quad\quad \quad \quad f(.) \quad\quad\quad\quad \\ 单个样本的训练误差:\quad \quad \quad\quad\quad\,\, E(k) = \frac{1}{2} \sum_{o=1}^q(d_{o}(k)-yo_{o}(k))^2\,\,\\ 误差函数:\quad \quad \quad E= \frac{1}{m} \sum_{k=1}^mE(k)= \frac{1}{2m} \sum_{k=1}^m\sum_{o=1}^q(d_{o}(k)-yo_{o}(k))^2\\ 输入层与中间层的连接权值:wih隐含层与输出层的连接权值:who隐含层各神经元的阈值:bh输出层各神经元的阈值:bo样本数据个数:k=1,2,..m激活函数:f(.)单个样本的训练误差:E(k)=21o=1∑q(do(k)−yoo(k))2误差函数:E=m1k=1∑mE(k)=2m1k=1∑mo=1∑q(do(k)−yoo(k))2
step1:网络初始化
给各连接权值分别赋一个区间(-1,1)内的随机数,设定误差函数E,给定计算精度值ε和最大学习次数M。
step2:随机选取k个样本及其对应期望输出
x ( k ) = ( x 1 ( k ) , x 2 ( k ) , x 3 ( k ) , . . . , x n ( k ) d ( k ) = ( d 1 ( k ) , d 2 ( k ) , d 3 ( k ) , . . . , d q ( k ) ) x(k) = (x_{1}(k),x_{2}(k),x_{3}(k),...,x_{n}(k)\\ d(k) = (d_{1}(k),d_{2}(k),d_{3}(k),...,d_{q}(k)) x(k)=(x1(k),x2(k),x3(k),...,xn(k)d(k)=(d1(k),d2(k),d3(k),...,dq(k))
step3:计算隐含层,输出层各神经元的输入和输出
h i h ( k ) = ∑ j = 1 n w j h x j − b h h = 1 , 2 , 3 , 4... p h o h ( k ) = f ( h i h ( k ) ) h = 1 , 2 , 3 , 4... p y i o ( k ) = ∑ h = 1 p w h o h o h ( k ) − b o o = 1 , 2 , 3 , 4... q y o o ( k ) = f ( y i o ( k ) ) o = 1 , 2 , 3 , 4... q hi_{h}(k) = \sum_{j=1}^nw_{jh}x_{j}-b_{h}\quad\quad \quad \quad h =1,2,3,4...p\\ ho_{h}(k) = f( hi_{h}(k) ) \quad\quad\quad\quad\quad\quad h =1,2,3,4...p\\ yi_{o}(k) = \sum_{h=1}^pw_{ho}ho_{h}(k)-b_{o}\quad\quad \quad \quad o =1,2,3,4...q\\ yo_{o}(k) = f( yi_{o}(k) ) \quad\quad\quad\quad\quad\quad o =1,2,3,4...q\\ hih(k)=j=1∑nwjhxj−bhh=1,2,3,4...phoh(k)=f(hih(k))h=1,2,3,4...pyio(k)=h=1∑pwhohoh(k)−boo=1,2,3,4...qyoo(k)=f(yio(k))o=1,2,3,4...q
step4:利用网络期望输出和实际输出,计算误差函数对输出层的各神经元的偏导数
∂
E
(
k
)
∂
w
h
o
=
∂
E
(
k
)
∂
y
i
o
(
k
)
∂
y
i
o
(
k
)
∂
w
h
o
\frac{\partial E(k)}{\partial w_{ho}} = \frac{\partial E(k)}{\partial yi_{o}(k)} \frac{\partial yi_{o}(k)}{\partial w_{ho}}
∂who∂E(k)=∂yio(k)∂E(k)∂who∂yio(k)
1.
∂
E
(
k
)
∂
y
i
o
(
k
)
=
∂
(
1
2
∑
o
=
1
q
(
d
o
(
k
)
−
y
o
o
(
k
)
)
2
)
∂
y
i
o
(
k
)
=
−
∑
o
=
1
q
(
d
o
(
k
)
−
y
o
o
(
k
)
)
y
o
o
′
(
k
)
=
−
∑
o
=
1
q
(
d
o
(
k
)
−
y
o
o
(
k
)
)
f
′
(
y
i
o
(
k
)
)
=
δ
o
(
k
)
1.\frac{\partial E(k)}{\partial yi_{o}(k)} = \frac{\partial(\frac{1}{2} \sum_{o=1}^q(d_{o}(k)-yo_{o}(k))^2)}{\partial yi_{o}(k)}= -\sum_{o=1}^q(d_{o}(k)-yo_{o}(k))yo_o'(k)\\= -\sum_{o=1}^q(d_{o}(k)-yo_{o}(k)) f'( yi_{o}(k)) = \delta_o(k)
1.∂yio(k)∂E(k)=∂yio(k)∂(21∑o=1q(do(k)−yoo(k))2)=−o=1∑q(do(k)−yoo(k))yoo′(k)=−o=1∑q(do(k)−yoo(k))f′(yio(k))=δo(k)
2.
∂
y
i
o
(
k
)
∂
w
h
o
=
∂
(
∑
h
=
1
p
w
h
o
h
o
h
(
k
)
−
b
o
(
k
)
)
∂
w
h
o
=
h
o
h
(
k
)
2.\frac{\partial yi_{o}(k)}{\partial w_{ho}} = \frac{ \partial (\sum_{h=1}^pw_{ho}ho_{h}(k)-b_{o}(k))}{\partial w_{ho}} = ho_h(k)
2.∂who∂yio(k)=∂who∂(∑h=1pwhohoh(k)−bo(k))=hoh(k)
总
结
:
∂
E
(
k
)
∂
w
h
o
=
δ
o
(
k
)
h
o
h
(
k
)
总结:\frac{\partial E(k)}{\partial w_{ho}} = \delta_o(k) ho_h(k)
总结:∂who∂E(k)=δo(k)hoh(k)
step5:利用隐含层到输出层的连接权值、误差函数对输出层的各神经元的偏导数和隐含层的输出,计算误差函数对隐含层各神经元的偏导数
∂
E
(
k
)
∂
w
i
h
=
∂
E
(
k
)
∂
h
i
h
(
k
)
∂
h
i
h
(
k
)
∂
w
i
h
\frac{\partial E(k)}{\partial w_{ih}} = \frac{\partial E(k)}{\partial hi_{h}(k)} \frac{\partial hi_{h}(k)}{\partial w_{ih}}
∂wih∂E(k)=∂hih(k)∂E(k)∂wih∂hih(k)
1.
∂
E
(
k
)
∂
h
i
h
(
k
)
=
∂
(
1
2
∑
o
=
1
q
(
d
o
(
k
)
−
y
o
o
(
k
)
)
2
)
∂
h
i
h
(
k
)
1.\frac{\partial E(k)}{\partial hi_{h}(k)} =\frac{\partial(\frac{1}{2} \sum_{o=1}^q(d_{o}(k)-yo_{o}(k))^2)}{\partial hi_{h}(k)}
1.∂hih(k)∂E(k)=∂hih(k)∂(21∑o=1q(do(k)−yoo(k))2)
=
∂
(
1
2
∑
o
=
1
q
(
d
o
(
k
)
−
y
o
o
(
k
)
)
2
)
∂
h
o
h
(
k
)
∂
h
o
h
(
k
)
∂
h
i
h
(
k
)
=\frac{\partial(\frac{1}{2} \sum_{o=1}^q(d_{o}(k)-yo_{o}(k))^2)}{\partial ho_{h}(k)} \frac{\partial ho_h(k)}{\partial hi_{h}(k)}
=∂hoh(k)∂(21∑o=1q(do(k)−yoo(k))2)∂hih(k)∂hoh(k)
=
∂
(
1
2
∑
o
=
1
q
(
d
o
(
k
)
−
f
(
y
i
o
(
k
)
)
)
2
)
∂
h
o
h
(
k
)
∂
h
o
h
(
k
)
∂
h
i
h
(
k
)
=\frac{\partial(\frac{1}{2} \sum_{o=1}^q(d_{o}(k)- f( yi_{o}(k)))^2) }{\partial ho_{h}(k)} \frac{\partial ho_h(k)}{\partial hi_{h}(k)}
=∂hoh(k)∂(21∑o=1q(do(k)−f(yio(k)))2)∂hih(k)∂hoh(k)
=
∂
(
1
2
∑
o
=
1
q
(
d
o
(
k
)
−
f
(
∑
h
=
1
p
w
h
o
h
o
h
(
k
)
−
b
o
)
)
)
2
)
∂
h
o
h
(
k
)
∂
h
o
h
(
k
)
∂
h
i
h
(
k
)
=\frac{\partial(\frac{1}{2} \sum_{o=1}^q(d_{o}(k)- f( \sum_{h=1}^pw_{ho}ho_{h}(k)-b_{o})))^2) }{\partial ho_{h}(k)} \frac{\partial ho_h(k)}{\partial hi_{h}(k)}
=∂hoh(k)∂(21∑o=1q(do(k)−f(∑h=1pwhohoh(k)−bo)))2)∂hih(k)∂hoh(k)
=
∑
o
=
1
q
(
d
o
(
k
)
−
f
(
y
i
o
(
k
)
)
f
′
(
y
i
o
(
k
)
)
∂
h
o
h
(
k
)
∂
h
i
h
(
k
)
= \sum_{o=1}^q(d_{o}(k)- f( yi_o(k)) f'(yi_o(k)) \frac{\partial ho_h(k)}{\partial hi_{h}(k)}
=o=1∑q(do(k)−f(yio(k))f′(yio(k))∂hih(k)∂hoh(k)
=
−
∑
o
=
1
q
(
d
o
(
k
)
−
y
o
o
(
k
)
)
f
′
(
y
i
o
(
k
)
)
w
h
o
∂
h
o
h
(
k
)
∂
h
i
h
(
k
)
= -\sum_{o=1}^q(d_{o}(k)- yo_o(k)) f'(yi_o(k))w_{ho} \frac{\partial ho_h(k)}{\partial hi_{h}(k)}
=−o=1∑q(do(k)−yoo(k))f′(yio(k))who∂hih(k)∂hoh(k)
=
−
∑
h
=
1
p
δ
o
(
k
)
w
h
o
.
f
′
(
h
i
h
(
k
)
)
=
δ
h
(
k
)
=- \sum_{h=1}^p\delta_o(k) w_{ho}.f'(hi_h(k))=\delta _h(k)
=−h=1∑pδo(k)who.f′(hih(k))=δh(k)
2.
∂
h
i
h
(
k
)
∂
w
i
h
=
∂
(
∑
i
=
1
n
w
o
h
x
i
−
b
h
)
∂
w
i
h
=
x
i
(
k
)
2.\frac{\partial hi_{h}(k)}{\partial w_{ih}} = \frac{\partial (\sum_{i=1}^nw_{oh}x_{i}-b_{h})}{\partial w_{ih}} = x_{i}(k)
2.∂wih∂hih(k)=∂wih∂(∑i=1nwohxi−bh)=xi(k)
总
结
:
∂
E
(
k
)
∂
w
i
h
=
δ
h
(
k
)
x
i
(
k
)
总结:\frac{\partial E(k)}{\partial w_{ih}} = \delta_h(k) x_i(k)
总结:∂wih∂E(k)=δh(k)xi(k)
step6:利用输出层各神经元的偏导和隐含层各神经元的输出来修正连接权值(第四步结果)
Δ w h o = − μ ∂ E ( k ) ∂ w h o = μ δ o ( k ) h o h ( k ) w h o N + 1 = w h o N + μ δ o ( k ) h o h ( k ) \Delta w_{ho} = -\mu \frac{\partial E(k)}{\partial w_{ho}} = \mu \delta_o(k)ho_h(k)\\ w_{ho^{N+1} = w_{ho}^N} + \mu \delta_o(k)ho_h(k) Δwho=−μ∂who∂E(k)=μδo(k)hoh(k)whoN+1=whoN+μδo(k)hoh(k)
step7:同理,利用隐含层各神经元的偏导和输入层各神经元的输入参数来修正连接权值(第五步结果)
Δ w i h = − μ ∂ E ( k ) ∂ w i h = μ δ h ( k ) x i ( k ) w i h N + 1 = w i h N + μ δ h ( k ) x i ( k ) \Delta w_{ih} = -\mu \frac{\partial E(k)}{\partial w_{ih}}= \mu \delta_h(k)x_i(k)\\ w_{ih^{N+1} = w_{ih}^N} + \mu \delta_h(k)x_i(k) Δwih=−μ∂wih∂E(k)=μδh(k)xi(k)wihN+1=wihN+μδh(k)xi(k)
step8:由误差函数计算全局误差
E = 1 m ∑ k = 1 m E ( k ) = 1 2 m ∑ k = 1 m ∑ o = 1 q ( d o ( k ) − y o o ( k ) ) 2 E= \frac{1}{m} \sum_{k=1}^mE(k)= \frac{1}{2m} \sum_{k=1}^m\sum_{o=1}^q(d_{o}(k)-yo_{o}(k))^2 E=m1k=1∑mE(k)=2m1k=1∑mo=1∑q(do(k)−yoo(k))2