打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
BP神经网络推导过程详解

      BP算法是一种最有效的多层神经网络学习方法,其主要特点是信号前向传递,而误差后向传播,通过不断调节网络权重值,使得网络的最终输出与期望输出尽可能接近,以达到训练的目的。

一、多层神经网络结构及其描述

    下图为一典型的多层神经网络。

  通常一个多层神经网络由L层神经元组成,其中:第1层称为输入层,最后一层(第L层)被称为输出层,其它各层均被称为隐含层(第2~L-1层)。

  令输入向量为:

x=[x1x2xixm],i=1,2,,m

   输出向量为:

y=[y1y2ykyn],k=1,2,,n

   第l隐含层各神经元的输出为:

h(l)=[h1(l)h2(l)hj(l)hsl(l)],j=1,2,,sl

   其中,sl为第l层神经元的个数。

   设Wij(l)为从l-1层第j个神经元与l层第i个神经元之间的连接权重;bi(l)为第l层第i个神经元的偏置,那么:

hi(l)=f(neti(l))

neti(l)=j=1sl1Wij(l)hj(l1)+bi(l)

      其中,neti(l)l层第i个神经元的输入,f()为神经元的激活函数。通常在多层神经网络中采用非线性激活函数,而不是用线性激活函数,因为采用基于线性激活函数的多层神经网络本质上还是多个线性函数的叠加,其结果仍然为一个线性函数。

二、激活函数

       BP神经网络通常使用下面两种非线性激活函数:

f(x)=11+ex

f(x)=1ex1+ex

   第一种称为sigmod函数或者logistics函数,第二种为双曲正切函数。

       Sigmod函数的图像如下图所示,它的变化范围为(0, 1),其导数为f=f(1f)

    双曲正切函数的图像如下图所示,它的变化范围为(-1, 1),其导数为f=1f2

三、BP算法推导过程

   假定我们有m个训练样本{(x(1),y(1)),(x(2),y(2)),,(x(m),y(m))},其中d(i)为对应输入x(i)的期望输出。BP算法通过最优化各层神经元的输入权值以及偏置,使得神经网络的输出尽可能地接近期望输出,以达到训练(或者学习)的目的。

   采用批量更新方法,对于给定的m个训练样本,定义误差函数为:

E=1mi=1mE(i)

        其中,E(i)为单个样本的训练误差:

E(i)=12k=1n(dk(i)yk(i))2

        因此,

E=12mi=1mk=1n(dk(i)yk(i))2

       BP算法每一次迭代按照以下方式对权值以及偏置进行更新:

Wij(l)=Wij(l)αEWij(l)

bi(l)=bi(l)αEbi(l)
       

   其中,α为学习速率,它的取值范围为(0, 1)BP算法的关键在于如何求解Wij(l)bi(l)的偏导数。

   对于单个训练样本,输出层的权值偏导数计算过程:

E(i)Wkj(L)=Wkj(L)(12k=1n(dk(i)yk(i))2)=Wkj(L)(12(dk(i)yk(i))2)=(dk(i)yk(i))yk(i)Wkj(L)=(dk(i)yk(i))yk(i)netk(L)netk(L)Wkj(L)=(dk(i)yk(i))f(x)|x=netk(L)netk(L)Wkj(L)=(dk(i)yk(i))f(x)|x=netk(L)hj(L1)

     即:

E(i)Wkj(L)=(dk(i)yk(i))f(x)|x=netk(L)hj(L1)

     同理可得,

 

E(i)bk(L)=(dk(i)yk(i))f(x)|x=netk(L)
    

    令:

δk(L)=(dk(i)yk(i))f(x)|x=netk(L)
    

    则:

E(i)Wkj(L)=δk(L)hj(L)

E(i)bk(L)=δk(L)
        

  对隐含层L-1层:

E(i)Wji(L1)=Wji(L1)(12k=1n(dk(i)yk(i))2)=Wji(L1)(12k=1n(dk(i)f(j=1sL1Wkj(L)hj(L1)+bk(L)))2)=Wji(L1)(12k=1n(dk(i)f(j=1sL1Wkj(L)f(i=1sL2Wji(L2)hi(L2)+bj(L1))+bk(L)))2)=k=1n(dk(i)yk(i))f(x)|x=netk(L)netk(L)Wji(L1)

  因为,

netk(L)=j=1sL1Wkj(L)hj(L1)+bk(L)=j=1sL1Wkj(L)f(i=1sL2Wji(L2)hi(L2)+bj(L1))+bk(L)=j=1sL1Wkj(L)f(netj(L1))

  所以,

E(i)Wji(L1)=k=1n(dk(i)yk(i))f(x)|x=netk(L)netk(L)Wji(L1)=k=1n(dk(i)yk(i))f(x)|x=netk(L)netk(L)f(netj(L1))f(netj(L1))netj(L1)netj(L1)Wji(L1)=k=1n(dk(i)yk(i))f(x)|x=netk(L)Wkj(L)f(x)|x=netj(L1)hi(L2)

  同理,

E(i)bj(L1)=k=1n(dk(i)yk(i))f(x)|x=netk(L)Wkj(L)f(x)|x=netj(L1)

  

  令:

δj(L1)=k=1n(dk(i)yk(i))f(x)|x=netk(L)Wkj(L)f(x)|x=netj(L1)=k=1nWkj(L)δk(L)f(x)|x=netj(L1)

E(i)Wji(L1)=δj(L1)hi(L2)

 

E(i)bj(L1)=δj(L1)

  

  由上可推,第l层(2lL1)的权值和偏置的偏导可以表示为:

E(i)Wji(l)=δj(l)hi(l1)

E(i)bj(l)=δj(l)

    其中,

δj(l)=k=1sl+1Wkj(l+1)δk(l+1)f(x)|x=netj(l)

四、BP算法过程描述

  采用批量更新方法对神经网络的权值和偏置进行更新:

  1. 对所有的层2lL,设ΔW(l)=0,Δb(l)=0,这里ΔW(l)Δb(l)分别为全零矩阵和全零向量;
  2. For i = 1:m
    1. 使用反向传播算法,计算各层神经元权值和偏置的梯度矩阵W(l)(i)和向量和b(l)(i)
    2. 计算ΔW(l)=W(l)(i)
    3. 计算Δb(l)=b(l)(i)
  3. 更新权值和偏置:
    1. 计算W(l)=W(l)+1mΔW(l)
    2. 计算b(l)=b(l)+1mΔb(l)

    

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
BP神经网络
深度学习入门(7)
深度学习-LeCun、Bengio和Hinton的联合综述(上) <BR>
[转]Deep Learning(深度学习)学习笔记整理系列 | 我爱机器学习
神经网络算法是什么意思,神经网络计算工作原理
零基础入门深度学习:感应器、线性单元和梯度下降
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服