bp神经网络推导以及物理意义

     bp神经网络的背景我们不在做过多的介绍,就是模拟神经元,进行分类训练。他的物理意义是什么呢,就是每个神经元对应我们计算中的滤波器,当他"看到"某个图片或者某组数据,反应就特别强烈,相乘所得的值就特别大,这大概就是所说的激活吧。首先,我们来看看bp神经的数学样例图:

        

    大家肯定有疑问了,为什么是三层,为什么不是两层或者更多层,其实都是可以的,只是是三层效果比较基础,在前面的线性分类器中我们知道,层数越多,训练的拟合性就越好,神经网络也是一样类似的。但是随着层数的增多,计算的难度以及权值的更新都会变得更加复杂化。

   上面已经大致描述了我自己对于bp神经网络物理意义的描述,接下来我们来看看数学推导, 因为数学推导过后,我们才能根据数学推导来进行相应的编码工作。bp神经网络是有监督的分学习,就是通过多组样本数据,计算所得结果,然后通过理想结果与所得结果的偏差,来反向更新计算神经源的权重,达到拟合的目的,最终通过不断的调整权值,与计算所得与期望结果的偏差越来越小。我们来举个简单的例子:

 

输入: x1=0.05, x2=0.10  这里样本其实应该有多个,我们先假设其中一个,这个例子也是借鉴https://www.cnblogs.com/charlotte77/p/5629865.html其中的一段

输出: E1=0.01, E2=0.99

初始权重: 

w1=0.15,w2=0.20,w3=0.25,w4=0.30;  b1=0.35 b2=0.60

w5=0.40,w6=0.45,w7=0.50,w8=0.55

这个偏置B有什么作用能, 其实就是类似截距b,使分类更加灵活贴近实际值

我们先来定义下激活函数,激活函数有很多,其主要作用是将线性的神经网络分类变为非线性的,使分类更加灵活, 我们主要用sigmoid函数: 其定义如下:

 

首先我们来看正向,正向很简单,就是根据上图,通过输入依次计算即可,得到样本的最终输出:

N1=sigmoid(net1)=sigmoid(x1*w1+x2*w3+B1) = 0.592666599954

N2=sigmoid(net2)=sigmoid(x1*w2+x2*w4+B1) = 0.701279883341

O1=sigmoid(net3)=sigmoid(N1*w5+N2*w7+B2)=sigmoid(1.1877067)=0.76633

O2=sigmoid(net4)=sigmoid(N1*w6+N2*w8+B2)=sigmoid(1.252404)=0.77771

的到的最终结果[0.76633, 0.77771] 与期望结果[0.05,0.1] 的差别有些大,因此我们需要更新权重即w来使输入通过计算尽量拟合期望的真实结果,其实就是一个学习的过程。

更新权值以及偏置的方法已经有专家提出,叫误差反向传播,这个算法的物理意义在于:

我们先定义期望结果与实际结果的方差E,E=\frac{1}{2}\sum \left ( E-O \right )^{2}=\frac{1}{2}\left ( E1-O1 \right )^{2}+\frac{1}{2}\left ( E2-O2 \right )^{2},方差很好的体现了和期望的偏差,我们看之前方差E的公式,其中O1=sigmoid(N1*w5+N2*w7+B2), O2=sigmoid(N1*w6+N2*w8+B2), 将O1和O2同样的带入,得到E关于权重的方程,在这个例子中,有4个权重,因此姑且认为E的函数为4元函数,最终化解为修正w即权重的值,使E最小。

那么我们如何更新w呢, 让E有最小值?

首先假设我们想更新w5的值,我们来求E关于W5的偏导数,即求在W5方向上的导数,因为导数在二维线条上反应的是线条的变化率(本身是4纬的,想象下二维导数是切线,三维导数是切平面,但是偏导数是其中某个方向的切线),因此我们更新的公式为w5=w5-\eta\frac{dE}{dw5},\eta为步长,初始化我们可以自定义,为什么我们只更新\eta这么长么,因为我们有多组样本,可能当前该组样本所提供的更新方向并非最终我们想要的方向,所以我们姑且先更新这么长,等待下一组样本,再朝着另外的方向再进行更新,知道最终所有的样本训练完成,这个时候找到最优的w5,使满足E最小。

接下来,我们来推导\frac{dE}{dw5},利用链式求导法则,不要忘记中间还有一层sigmod函数,\frac{dE}{dw5} =\frac{dE}{dO}*\frac{dO}{dnet}*\frac{dnet}{dw5},下面我们一步一步来推导,因为w5只在O1中出现,所以我们先求O1的偏导数:

\frac{dE}{dO}=\frac{1}{2}*2*(E1-O1)*(-1) +0

\frac{dO}{dnet}=net*(1-net),其详细推导过程如下:

\frac{dnet}{dw5}=f(N1*w5+N2*w7+B2)'=N1

所以最终的更新为w5=w5-\eta( -(E1-O1)*( net*(1-net) )*N1 ), \eta自取,0.5,0.3都可以,将具体的数值带入即可更新.

类似的,w1~w7,都可以应用改公式来更新,通过多组样本训练,得到最优的w以及b, 使整体E最小.

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
BP神经网络推导公式是基于反向传播算法的。首先,我们需要定义代价函数,通常使用平方误差函数作为代价函数。然后,通过梯度下降算法来最小化代价函数,从而求得最优的权重和偏置值。具体推导过程如下: 1. 前向传播: a. 输入层:将输入样本数据传递给第一个隐藏层; b. 隐藏层:根据输入数据和权重、偏置值进行加权求和,并通过激活函数(如Sigmoid函数)进行非线性映射; c. 输出层:将隐藏层的输出数据传递给输出层,并使用输出层的激活函数(如Sigmoid函数或线性函数)进行非线性映射。 2. 反向传播: a. 计算输出层的误差:根据代价函数对输出层的输出值进行求导,得到输出层的误差; b. 传播误差至隐藏层:根据输出层的误差以及权重值,逐层反向计算隐藏层的误差; c. 更新权重和偏置值:根据误差和梯度下降算法,更新权重和偏置值。 推导公式具体如下: 1. 计算输出层的误差: δL = (aL - y) * f'(zL) 其中,δL表示输出层的误差,aL表示输出层的输出值,y表示样本的真实值,f'表示输出层激活函数的导数,zL表示输出层的加权求和值。 2. 传播误差至隐藏层: δl = (W(l+1) * δ(l+1)) ⊙ f'(zl) 其中,δl表示第l层隐藏层的误差,W(l+1)表示第l+1层到第l层的权重矩阵,⊙表示元素级别的乘法,f'表示隐藏层激活函数的导数,zl表示第l层的加权求和值。 3. 更新权重和偏置值: ΔW(l) = α * δ(l+1) * a(l)^T Δb(l) = α * δ(l+1) 其中,ΔW(l)表示第l层到第l+1层的权重矩阵的更新值,Δb(l)表示第l层到第l+1层的偏置值的更新值,α表示学习率,a(l)表示第l层的输出值。 以上就是BP神经网络推导公式。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值