BP是back propagation
BP神经网络主要的算法在于误差反向传播error BackPropagation
神经网络结构
有三层:输入层(input)、隐含层(hidden)、输出层(output)
输入层: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))
do(k)=(d1(k),d2(k),...,dq(k))
第三步
计算各个神经元的输入和输出
hih(k)=∑i=1nwihxi(k)−bh h=1,2,...,p
hoh(k)=f(hih(k)) h=1,2,...,p
yio(k)=∑h=1pwhohoh(k)−bo o=1,2,...,q
yoo(k)=f(yio(k)) o=1,2,...,q
第四步
求误差对 who 偏导
用到链导法则
∂e∂who=∂e∂yio∂yio∂who
把这个式子分成两部分来求:
∂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)
∂yio∂who=hoh(k) 这个等式很明显
第五步
求误差对 wih 偏导
∂e∂wih=∂e∂hih(k)∂hih(k)∂wih
这个也分两部分来求,后一部分是:
∂hih(k)∂wih=xi(k)
∂e∂hih(k)=−(∑o=1qδo(k)who)f′(hih(k))=δh(k)
如何理解上式:
主要思想就是链导
误差对隐含层输入的偏导 = 误差对输出层输入的偏导
×
输出层输入对隐含层输出的偏导
×
隐含层输出对隐含层输入的偏导
其中:
误差对输出层输入的偏导就是
δo(k)
输出层输入对隐含层输出的偏导就是
who
隐含层输出对隐含层输入的偏导就是
f′(hih(k))
所以就有了上式
第六步
更新权值
Δwho(k)=−μ∂e∂who=μδo(k)hoh(k)
wN+1ho=wNho+Δwho(k)
Δwih(k)=−μ∂e∂wih=δh(k)xi(k)
wN+1ih=wNih+Δwih(k)
原文地址:这里写链接内容