BP神经网络原理简单介绍以及公式推导(矩阵形式和分量形式)

BP神经网络原理简单介绍以及公式推导

标签(空格分隔): 神经网络


BP神经网络简单介绍

在60年代提出了神经网络概念之后,由于感知机等神经网络无法处理线性不可分问题(比如异或问题)导致人们对神经网络的兴趣大减,认为神经网络的能力有限,只能处理线性可分问题。之后,有人提出了多层神经网络的想法,用于解决异或问题。下面就是用一个两层的神经网络解决异或问题具体方法:

y=ψ(2v1+v20.5)v1=ψ(x1+x21.5)v2=ψ(x1+x20.5)ψ(x)={1,0,x>0x0

y 是网络的输出,v1 v2 是隐藏层的两个神经元, x1 x2 是输入。下面的表格验证了这个两层的网络可以处理异或问题。

x1 x2 v1 v2 y
0 0 0 0 0
1 0 0 1 1
0 1 0 1 1
1 1 1 1 0

虽然这个两层网络能够处理异或问题,但是当时并没有引起太大的关注,直到80年代, Back Propagation(BP)神经网络的提出,才使得神经网络又重新回到了人们的视线中。
bp算法
这里,主要想通过一个三层的BP神经网络来说明其原理和公式推导。
a three-layer network

公式推导

我们首先需要对整个网络进行数学建模,然后进行学习算法的描述,我们列举分量和矩阵两种不同形式的求导方式,分量形式刚开始看比较繁琐但是比较简单,矩阵形式结构简单但是涉及到矩阵求导,求导的相关知识需要比较熟悉。

网络的数学描述

首先我们先说一说激活函数的选择,在感知机中,选择的是非线性的带阈值的激活函数,在BP网络中,通常选择的是Sigmoid函数,这类函数的导数有一个很好的性质:自身相关。比如常见的

f(x)=11+ex

其导数为 f(x)=f(x)(1f(x)) ,证明也不难,就是求导,然后进行拼凑就可以了。
接下来我们对这个三层的网络进行数学抽象,可以的话请一个一个的手写一遍,这样能够加深理解它们之间的关系。先是各层的输入和输出变量的定义
input vector:hiden vector:output vector:Y(0)=[x1,x2,,x6]T=[a1(0),a2(0),a3(0),a4(0),a5(0),a6(0)]TY(1)=[a1(1),a2(1),a3(1),a4(1)]TY(2)=[a1(2),a2(2),a3(2)]TY(3)=[a1(3),a2(3)]T

然后,我们一层一层的进行数学描述。
First hiden layernet(1)l=k=16W1lky(0)k,(1l4)net(1)=W(1)Y(0)net(1)=[net(1)1,net(1)2,net(1)3,net(1)4]TW(1)=W(1)11W(1)41W(1)16W(1)46output:Y(1)=[Y(1)1,,Y(1)4]T,where Y(1)=f(1)(net(1))

net(1) 的输入是 Y(0) ,利用 W(1) 得到输出 Y(1) 。在第一层中, k=6 是因为输入层 Y(0) 有六个输入, 1l4 是因为第一层中有4个神经元,同理第二层和第三层。请注意 net(1) 的和 W(1) 的维数,想一想为什么会这样,你这么聪明一定能想清楚的(输入和输出的个数)。接下来两层与第一层类似,重点在思考清楚 W(n) net(n) 的维数,就能对BP网络结构有一个大致的认识。还是希望各位能手抄一遍。
Second hiden layernet(2)l=k=14W2lky(1)k,(1l3)net(2)=W(2)Y(1)net(2)=[net(2)1,net(2)2,net(2)3]TW(2)=W(2)11W(2)31W(2)14W(2)44output:Y(2)=[Y(2)1,,Y(2)3]T,where Y(2)=f(2)(net(2))

Third hiden layernet(3)l=k=13W3lky(2)k,(1l2)net(3)=W(3)Y(2)net(3)=[net(3)1,net(3)2]TW(3)=W(3)11W(3)21W(3)13W(3)23output:Y(3)=[Y(3)1,Y(3)2]T,where Y(3)=f(3)(net(3))

我们总结一下:
1. 一个 net 包含了一组输入,一组权重,一组输出。对于 net(n) ,它的输入是 Y(n1) ,利用权重 W(n) 得到输出 Y(n) ,即 net(n)=W(n)Y(n1)
2. W(n)Rq×p ,q是第n层神经元的个数,p是n-1层神经元的个数也就是当前层的输入个数。

公式推导(分量形式)

我们的目标是希望通过调整 W 使得输出和目标有最小的误差,也就是最小二乘的思想

Least-Squared Error: E=12l=12(TlY(3)l)2=12l=12(δ(3)l)2

其中, δl=(TlY(3)l) 。因为BP网络是反馈式网络,所以在更新权值时是从后向前更新的,所以首先更新的是第三层的权值。
那么 E W(3)有什么关系呢?通过上面的对网络的数学描述,我们知道

Y(3)=f(3)(net(3))=W(3)Y(2)Y(3)1Y(3)2=f(3)(net(3)1)=f(3)(net(3)2)=k=13W31kY(2)k=k=13W32kY(2)k

所以有:
E=12l=12(TlY(3)l)2=12l=12(Tlf(3)(net(3)l))2=12l=12(Tlk=13W3lkY(2)k)2

因此 E W求导关系为:
EW(3)lk=EY(3)lY(3)lnet(3)lnet(3)lW(3)lk

其中:
EY(3)l=(YlTl)=δl(1)

Y(3)lnet(3)l=f(3)(net(3)l)(2)

net(3)lW(3)lk=Y(2)k(3)

根据(1)、(2)、(3)可得
EW(3)lk=δlf(3)(net(3)l)Y(2)k

我们已经求出单个分量的求导结果,那么对于整个 W(3)
EW(3)=EW(3)11EW(3)21EW(3)12EW(3)22EW(3)13EW(3)23=δ1f(3)(net(3)1)δ2f(3)(net(3)2)[Y(2)1Y(2)2Y(2)3]=S(3)Y(2)T

其中
S(3)=f(3)(net(3)l)00f(3)(net(3)2)δ(3)1δ(3)2=F(3)(net(3))δ=Enet(3)

至于 Enet(3) 怎么求,在后面的矩阵形式分析部分将会说明。
上面已经说明对第三层权值的更新过程,对于第二层权值的更新,最重要的还是理解 E W(2)之间的关系。
上面只给出第三层的详细求导,第二层和第一层请看老师给的课件(公式编辑太费时间了)下面给出老师课件里的求导,从第三层到第一层,有些地方有点小错误,不过不影响理解。
1
2
3
4
5
6

公式求导(矩阵形式)

下面我们用矩阵的形式进行求导,涉及到矩阵求导的相关知识,这里有一些参考资料,希望能够帮到大家:
1. 矩阵求导术(上)
2. 闲话矩阵求导
3. 矩阵求导与迹
4. 向量內积、矩阵內积
首先能量函数改写成:

Least-Squared Error: E=12TY22

第三层更新:
先算 EY(3)
EdE=12(TY)T(TY)=12(TTT2TTY+YTY)=12tr(2TTdY+dYTY+YTdY)=12tr(2TTdY)+tr(dYTY)+tr(YTdY)=12tr(2TTdY)+tr(YTdY)+tr(YTdY)=12(2TT+2YT)dX=tr((YT)TdY)EY(3)=YT=δ

再算 Enet(3)
dE  =tr((EY)TdY)=tr((EY)Tdf(3)(net(3)))=tr((EY)Tf(3)(net(3))d(net(3)))=tr((EYf(3)(net(3)))Td(net(3)))=tr((δf(3)(net(3)))Td(net(3)))Enet(3)=δf(3)(net(3))S(3)=δf(3)(net(3))=Enet(3)

最后算 EW(3)
dE EW(3)=tr((Enet(3))Td(net(3)))=tr((Enet(3))Td(W(3)Y(2)))=tr(Y(2)(Enet(3))Td(W(3)))=Enet(3)Y(2)T=δf(3)(net(3))Y(2)T=S(3)Y(2)T

第二层更新:
先求 EY(2)
dE =tr((Enet(3))Td(net(3)))=tr((Enet(3))Td(W(3)Y(2)))=tr((Enet(3))TW(3)d(Y(2)))EY(2)=W(3)TEnet(3)

再求 Enet(2)
dE  =tr((EY(2))TdY(2))=tr((EY(2))Tf(2)(net(2))d(net(2)))=tr((EY(2)f(2)(net(2)))Td(net(2)))Enet(2)=EY(2)f(2)(net(2))=W(3)TEnet(3)f(2)(net(2))=W(3)TS(3)f(2)(net(2))S(2)=W(3)TS(3)f(2)(net(2))=Enet(2)

最后求 EW(2)
dE =tr((Enet(2))Td(net(2)))=tr((Enet(2))Td(W(2)Y(1)))=tr(Y(1)(Enet(2))Td(W(2)))EW(2)=Enet(2)Y(1)T=S(2)Y(1)T

第一层更新:

dE EY(1)=tr(Enet(2)Td(W(2)Y(1)))=tr(Enet(2)TW(2)dY(1))=(W(2))TEnet(2)=(W(2))TS(2)

dE Enet(1)=tr(EY(1)TdY(1))=tr(EY(1)Tdf(1)(net(1)))=tr(EY(1)f(1)(net(1))Td(net(1)))=EY(1)f(1)(net(1))=(W(2))TS(2)f(1)(net(1))=S(1)

dE EW(1)=tr(Enet(1)Td(W(1)Y(0)))=tr(Y(0)Enet(1)TdW(1))=Enet(1)(Y(0))T=S(1)(Y(0))T

以上就是对各层权值 W(i) 的梯度的公式推导了。下面对 θ(i) 推导,因为比较简单,我们就以第三层为例简单说明下。
dE Eθ(3)=tr(Enet(3)Td(W(3)Y(2)+θ(3)))=tr(Enet(3)Tdθ(3))=Enet(3)=S(3)

总结

至此,可以对以整个学习算法进行总结了。
image_1bg8qcljk1r6c1rbl13eo12ki17e29.png-84.5kB
image_1bg8qd5jb1bjiejb12vo152s0um.png-52.7kB

下一篇博文将会用MATLAB实现以上算法。

  • 19
    点赞
  • 115
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
根据引用[2]中提到的误差逆向传播算法,BP神经网络公式推导可以分为两个部分:前向传播和反向传播。 1. 前向传播 首先,我们需要将输入数据通过神经网络进行前向传播,得到输出结果。具体的计算过程如下: (1)输入层到隐层的计算 对于第 $j$ 个隐层节点,其输入为: $$ net_j = \sum_{i=1}^{n} w_{ij}x_i + b_j $$ 其中,$w_{ij}$ 表示输入层第 $i$ 个节点到隐层第 $j$ 个节点的连接权重,$x_i$ 表示输入层第 $i$ 个节点的输出,$b_j$ 表示隐层第 $j$ 个节点的偏置。 隐层第 $j$ 个节点的输出为: $$ y_j = f(net_j) $$ 其中,$f(\cdot)$ 表示激活函数。 (2)隐层到输出层的计算 对于第 $k$ 个输出层节点,其输入为: $$ net_k = \sum_{j=1}^{m} w_{jk}y_j + b_k $$ 其中,$w_{jk}$ 表示隐层第 $j$ 个节点到输出层第 $k$ 个节点的连接权重,$y_j$ 表示隐层第 $j$ 个节点的输出,$b_k$ 表示输出层第 $k$ 个节点的偏置。 输出层第 $k$ 个节点的输出为: $$ y_k = f(net_k) $$ 2. 反向传播 接下来,我们需要计算输出误差,并将误差通过神经网络进行反向传播,更新连接权重和偏置。具体的计算过程如下: (1)输出误差的计算 对于第 $k$ 个输出层节点,其输出误差为: $$ \delta_k = (d_k - y_k)f'(net_k) $$ 其中,$d_k$ 表示期望输出,$f'(\cdot)$ 表示激活函数的导数。 (2)隐层误差的计算 对于第 $j$ 个隐层节点,其误差为: $$ \delta_j = f'(net_j)\sum_{k=1}^{q}w_{jk}\delta_k $$ 其中,$q$ 表示输出层节点数。 (3)连接权重和偏置的更新 根据误差反向传播的原理,我们可以得到连接权重和偏置的更新公式: $$ \Delta w_{ij} = \eta \delta_j x_i \\ \Delta b_j = \eta \delta_j $$ 其中,$\eta$ 表示学习率。 以上就是BP神经网络公式推导过程。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值