BP神经网络

BP

BP(Back Propagation)网络是1986年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一。BP网络能学习和存贮大量的输入-输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程。

一个神经网络的结构示意图如下所示。
这里写图片描述
一个四层的神经网络
输入层:三个神经元
隐含层1:三个神经元
隐含层2:两个神经元
输出层:两个神经元

前馈阶段

网络中突触的权值是固定的,输入信号在网络中一层一层的传播,直到输出端。

这里写图片描述

对某层
这里写图片描述
神经元输入结点:

x0,x1,...,xi,...xn

其中x0=1 ,w0j可以理解为偏置
第l层神经元结点i到神经元结点j权值是
wlij

激活函数一般选:
sigmoid激活函数:
f(x)=11+ex

值域: [0,1]
其导数:
f(x)=f(x)(1f(x))

tanh激活函数:
f(x)=exexex+ex

值域: [1,1]
其导数:
f(x)=1f(x)2
两个函数的图像:
这里写图片描述

根据上面的一个图,前馈过程就是:
zj=i=ni=0wijxj
xj=f(zj)
这样一层一层的向前递归下去

反馈阶段

反馈阶段是利用训练误差,更新各层神经元权值

先说明下这里反馈阶段更新权值每次是利用一个训练样本数据更新权值

对某一个样本 x ,其各维数据值:x0,x1,x2,...,xn
设该BP神经网络共有 L
l层第i个神经元与第j神经元的权值: w(l)ij
l 层的神经元数:Sl,为了方便表示, Sl 从0开始到 Sl 结束
l 层第i个神经元的加权和:zli
输出层输出值: y0,y1,...,ySL
输出层期望值(也就是该样本数据的真实值): d0,d1,...,dSL1
对该样本 x 的输出层第j神经元的训练误差:

ej=djyj

对该样本 x 的输出层所有神经元的平方误差:
E=12j=0j=SLe2j

其中:
yj=f(z(L)j)
z(L)j=i=SLi=0w(L)ijx(L)i
好的模型应该是输出层神经元的平方误差最小

这里我们需要求的参数只有 wlij ,下面可以利用梯度下降法或者拟牛顿法进行求解。利用梯度下降法需要计算 E wlij的导数,来更新 wlij ,而拟牛顿法需要计算其二阶导数。
下面利用梯度下降法进行求解

我们知道需要计算 E wlij的导数,然而 l 是一个变量,对于L层神经网络,其取值范围是 [1,L] ,但是 E 是固定值,是某一个训练样本x在输出层各神经元的平方误差。

隐含层到输出层

l==L 时,也就是说是隐含层到输出层,需要求的是输出层各神经元的权值矩阵 wL

网络结构可以简单描述为:
这里写图片描述

E wLij求导,利用链式法则:

Ew(L)ij=Eejejyjyjz(L)jz(L)jw(L)ij

其中:
Eej=ej

ejyj=1

yjz(L)j=f(z(L)j)

z(L)jw(L)ij=x(L)i

所以:

Ew(L)ij=ejf(zj)x(L)i

在许多论文书籍中往往定义神经元 j 的敏感度
第l层第j个神经元的敏感度:

δ(l)j=Ez(l)j

也就是,输出层平方误差对神经元j的加权和的偏导数的负数
对输出层 L j个神经元的敏感度为:
δ(L)j=Ez(L)j=Eejejyjyjz(L)j=ejf(zj)=(djyj)f(zj)

所以:

Ew(L)ij=δ(L)jx(L)i

Δw(L)ij=Ew(L)ij=δ(L)jx(L)i

利用梯度下降法更新 w(L)ij
w(L)ij(n+1)=w(L)ij(n)ηΔw(L)ij=w(L)ij(n)+ηδ(L)jx(L)i

或者直接写出:

w(L)ij(n+1)=w(L)ij(n)+ηδ(L)jx(L)i

其中:
η 是学习率
δ(L)j 是第 L 层输出神经元j的敏感度
x(L)i 表示第 L 层输入神经元i的值
δ(L)j=ejf(zLj)=(djyj)f(zLj)
n 表示迭代次数

隐含层到隐含层

l<=L1时,也就是说是隐含层到隐含层,我们需要计算的权值矩阵 w(l) 在隐含层中, l 的取值范围从第一层一直到导数第二层,而对该样本x的输出层所有神经元的平方误差 E 是固定的,我们还是用E wlij 求导,但是这个求导过程比较复杂
l=L1 ,这是倒数第二层,其下一层就是输出层
其网络结构:
这里写图片描述
请忽略图中明显的不足、错误之处
各参数:
L1 层神经元i到神经元j的权值 wL1ij
L1 层神经元 j 的加权和:z(L1)j
z(L1)j=i=SL1i=0w(L1)ijx(L1)i

L1 层神经元 j 的敏感度:δ(L1)j
L1 层神经元数: SL1

L 层神经元j到神经元k的权值wLjk
L 层神经元k的加权和: z(L)k
z(L)k=j=SLj=0w(L1)jkx(L)j
L 层神经元k的敏感度: δ(L)k
L 层神经元数:SL
L 层神经元k的值: yk ,这个值也就是对x的预测值
yk=f(z(L)k)
L 层神经元k的预测误差: ek=ykdk

L 层神经元的平方误差:

E=12k=0k=SLe2k

E wL1ij求偏导:

Ew(L1)ij=Ez(L1)jz(L1)jw(L1)ij=δ(L1)jz(L1)jw(L1)ij

下面分别对上面的链式法则中的各项进行求解

z(L1)jw(L1)ij=x(L1)i

δ(L1)j 的求解,根据上面简单网络模型和链式法则进行求解
先看下面的图
这里写图片描述
<图中不足之处请见谅>
我们需要求 δ(L1)j=Ez(L1)j
利用链式法则需要对 ek,yk,z(L)k,x(L)j,z(L1)j 求导
我们发现 x(L)j 对该层的所有加权和都产生了影响,加权和又对 yk,(k=0,1,SL) 产生了影响,一直到所有的 ek,(k=0,1,2,...n) ,最后累加到 E ,所以这个求导要分别对ek,(k=0,1,2,3...,SL)求导,这里是和的导数,其等于倒数的和。所以:
δ(L1)j=Ez(L1)j=k=SLk=0Eek
ek 进行链式求导法则
δ(L1)j=Ez(L1)j=k=SLk=0Eekekykykz(L)kz(L)kx(L)jx(L)jz(L1)j=k=SLk=0ek(1)f(z(L)k)w(L1)jkf(z(L1)j)=f(z(L1)j)k=SLk=0ekf(z(L)k)w(L1)jk=f(z(L1)j)k=SLk=0δ(L)kw(L1)jk

利用梯度下降法更新 w(L1)ij

w(L1)ij(n+1)=w(L1)ij(n)ηΔw(L1)ij=w(L1)ij(n)+ηδ(L1)jx(L1)i

或者直接写出:

w(L1)ij(n+1)=w(L1)ij(n)+ηδ(L1)jx(L1)i

其中:
η 是学习率
δ(L1)j 是第 L1 层输出神经元 j 的敏感度
x(L1)i表示第 L1 层输入神经元 i 的值
δ(L1)j=f(z(L1)j)k=SLk=0δ(L)kw(L1)jk

根据上面可以得出规律,对于 l 层,隐含层之间利用梯度下降法更新权值系数公式:

w(l)ij(n+1)=w(l)ij(n)+ηδ(l)jx(l)i

其中:
η 是学习率
δ(l)j 是第 l 层输出神经元j的敏感度
x(l)i 表示第 l 层输入神经元i的值
δ(l)j=f(z(l)j)k=Sl+1k=0δ(l+1)kw(l)jk

总结

l 层神经元之间的权值系数:

w(l)ij(n+1)=w(l)ij(n)+ηδ(l)jx(l)i

l==L 也就是隐含层到输出层:

δ(l)j=ejf(zlj)=(djyj)f(zlj)

l<=L1 也就是隐含层之间:

δ(l)j=f(z(l)j)k=0k=Sl+1δ(l+1)kw(l)jk

为了防止出现振荡问题,一种改进的权值修正方法:

w(l)ij(n+1)=w(l)ij(n)+ηδ(l)jx(l)i+α[w(l)ij(n)w(l)ij(n1)]

其中:
α 是动量系数,通常取0.2-0.8
对于上面的式子,在一些书中可能形式不一样

BP伪代码:
参数:隐含层数量,隐含层大小,动量系数,学习率
随机初始化各个权值系数
对每个训练样本数据进行训练:
前馈阶段:
利用输入值,权值系数,进行逐步迭代,直到最后输出层
反馈阶段:
利用训练误差,逐步向后更新权值系数
当到达最大迭代次数的时候停止更新

自己整理,符号表示比较复杂,有上标也有下标,还有中标,如有错误请指出

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值