zoukankan      html  css  js  c++  java
  • 神经网络的反向传播BP算法

    简介

    神经网络中经典的感知器模型,请参考我写的这篇博客[ http://blog.csdn.net/ws_20100/article/details/48929383]

    本篇博客是在感知器模型之后,讨论由1986年由RumelhartMcCelland提出的反向传播学习算法。

    ------------------------------------------------------------------------------------------------------------------

    反向传播学习的BP算法

    对于感知器模型,最初只能解决两层神经网络的学习训练问题,对于多层网络(例如三层),便不能确定中间层的参数该如何调整。直到1986年,Rumelhart和McCelland等人提出了基于反向传播的学习算法,用于前馈多层神经网络的学习训练。由于“反向传播”的英文叫做Back-Propagation,所以这个算法也常常被学者简称为BP算法。后来,人们对BP算法不断改进,以加快其训练速度,产生了很多版本的BP算法,例如Levenberg-Marquatdt算法等等。


    1.)BP算法原理

    如下图,是一个多层神经网络的示意图,网络相邻层之间的单元采用全连接方法连接。

    每个单元的输入用U表示,输出用X表示,权值用W表示。

    式一:第k层第i个神经元的输出,是由该神经元的输入经过激活函数(Activition Function)得到:


    式二:第k层第i个神经元的输入,是由上一层神经元的输出和权值向量内积得到:


    式三:第m层(最终输出层)第i个神经元输出的误差计算公式,采用LMS方式计算


    以下的数学表示中的求导运算,均是由这三个基本公式推导而来。


    2.)BP算法的步骤

    反向传播算法分为两步进行:

          正向传播输入的样本从输入层经过隐单元一层一层进行处理,通过所有的隐层之后,传输出层。

          反向传播把误差信号按原来正向传播的通路反向传回,并对每个隐层的各个神经元的权系数进行修改,使误差信号趋向最小。


    3.)BP算法的数学表示

    BP算法的实质是,求取误差函数最小值问题

    (1)而采用的方法是非线性规划中的最速下降法,按照误差函数的负梯度方向修改权系数。即



    所以有,


    (2)由于误差的梯度,仅仅是“记为”符号,并未给出明确计算公式:


    所以,我们将求取上式中第k层第i个单元的误差梯度:


    这需要分类讨论:

    1.当第k层为输出层(k=m)时,


    2.当第k层不是输出层(k<m)时,


    (3)所以最终的权系数修改公式:


    其中,


    (4)有时,为了加快收敛速度,也考虑上一次权值的修改量:


    ------------------------------------------------------------------------------------------------------------------

    总结

    Back Propagation Algorithm,后向传播算法,可以解决多层神经网络的训练问题。但是经过多年的研究显示也存在着很多瓶颈,比如学习速度过慢,学习率难以确定,可能进入局部极小点,以及过拟合问题等等。


    如有任何疑问,欢迎一起讨论。

    如要转载本文,请注明出处:http://blog.csdn.net/ws_20100/
  • 相关阅读:
    Android按钮事件的4种写法
    VB.NET转C#代码的工具
    C# FTP操作类
    Linq一对多联合查询
    软件工程师面试题(一)
    一道网传上海幼儿园升小学的数学题
    csdn博客刷点击率(java代码)
    .NET高端职位招聘要求
    csdn博客刷粉代码
    jQuery Ajax无刷新操作
  • 原文地址:https://www.cnblogs.com/lixuebin/p/10814867.html
Copyright © 2011-2022 走看看