工控课堂

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 522|回复: 1

深入理解BP神经网络

[复制链接]
  • TA的每日心情
    慵懒
    2019-11-30 10:26
  • 签到天数: 62 天

    [LV.6]常住居民II

    2046

    主题

    2199

    帖子

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    10865
    发表于 2019-8-6 21:28:00 | 显示全部楼层 |阅读模式
    一、BP神经网络的概念
    BP神经网络是一种多层的前馈神经网络,其主要的特点是:信号是前向传播的,而误差是反向传播的。具体来说,对于如下的只含一个隐层的神经网络模型:
    BP神经网络的过程主要分为两个阶段,第一阶段是信号的前向传播,从输入层经过隐含层,最后到达输出层;第二阶段是误差的反向传播,从输出层到隐含层,最后到输入层,依次调节隐含层到输出层的权重和偏置,输入层到隐含层的权重和偏置。



    3层BP神经网络

    二、BP神经网络流程
    神经网络的基本组成单元是神经元。神经元的通用模型如图所示,其中常用的激活函数有阈值函数、sigmoid函数和双曲正切函数。



    神经元模型

    神经元的输出为:



    神经元输出

    神经网络是将多个神经元按一定规则联结在一起而形成的网络,如图 所示。



    神经网络示意图

    从图 可以看出,一个神经网络包括输入层、隐含层(中间层)和输出层。输入层神经元个数与输入数据的维数相同,输出层神经元个数与需要拟合的数据个数相同,隐含层神经元个数与层数就需要设计者自己根据一些规则和目标来设定。在深度学习出现之前,隐含层的层数通常为一层,即通常使用的神经网络是3层网络。
    三、BP网络输入与输出关系
    BP网络采用的传递函数是非线性变换函数——Sigmoid函数(又称S函数)。其特点是函数本身及其导数都是连续的,因而在处理上十分方便。为什么要选择这个函数,等下在介绍BP网络的学习算法的时候会进行进一步的介绍。S函数有单极性S型函数和双极性S型函数两种,单极性S型函数定义如下:f(x)=1/1+e−x
    其函数曲线如图所示:



    单极性S曲线

    双极性S型函数:f(x)=1−e−x/1+e−x




    双极性S曲线

    使用S型激活函数时,输入:



    输入

    输出:



    输出

    输出的导数:



    导数

    使用S型激活函数时,BP网络的输出及其导数图形:



    图形

    根据S激活函数的图形:
    net在 -5~0 的时候导数的值为正,且导数的值逐渐增大,说明此时f(x)在逐渐变大 且 变大的速度越来越快
    net在 0~5  的时候导数的值为正,且导数的值逐渐减小,说明此时f(x)在逐渐变大 但是 变大的速度越来越慢
    对神经网络进行训练,我们应该尽量将net的值尽量控制在收敛比较快的范围内。
    四、揭秘有监督的BP神经网络学习过程:



    流程图




    初始化和样本随机选取




    计算隐含层相关数据




    误差计算1




    误差计算2




    反向传播1




    反向传播2




    全局误差和迭代

    五、BP算法直观解释



    情况1




    情况2

    六、 BP算法的Java代码实现
    1.  定义一个BP神经网络的类,设置网络相关参数





    2.    实例化该神经网络,按下图被构建成一个输出3维,输出1维,带有3个隐藏层(每个隐藏层10个节点)的BP网络;(此处还可以随意扩展输入、输出维度和隐藏层相关系数)





    3.    初始化BP神经网络的时候,开始初始化各层网络节点的 权重、权重动量、误差初始值





    4.  引入学习训练数据;4组输入、输出数据迭代5000次





        5000次中不断向前逐层计算输出的节点数据





        并同时逐层计算误差反向修改权重值,直到迭代完毕;注意误差函数值必须呈现下降趋势





    5.  引入数据进行结果预测,将数据带回模型计算得结果;最终可知预测结果趋近于0.7










    七、 BP算法意味着什么
    神经网络利用现有的数据找出输入与输出之间得权值关系(近似),然后利用这样的权值关系进行仿真,例如输入一组数据仿真出输出结果,当然你的输入要和训练时采用的数据集在一个范畴之内。例如预报天气:温度 湿度 气压等作为输入 天气情况作为输出利用历史得输入输出关系训练出神经网络,然后利用这样的神经网络输入今天的温度 湿度 气压等 得出即将得天气情况。同理,运用到自动化测试中,使用测试数据反映结果走向,bug数,质量问题等情况也可以做到提前预测的!
    附录:





    欢迎大家一起学习,讨论~~!



    作者:烨枫_邱
    链接:https://www.jianshu.com/p/6ab6f53874f7
    来源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
    工控课堂 www.gkket.com
  • TA的每日心情
    无聊
    2019-12-19 08:57
  • 签到天数: 22 天

    [LV.4]偶尔看看III

    0

    主题

    49

    帖子

    624

    积分

    高级会员

    Rank: 4

    积分
    624
    发表于 2019-8-9 04:43:19 | 显示全部楼层
    我只是路过打酱油的。
    工控课堂 www.gkket.com
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|免责声明|本站介绍|工控课堂 ( 沪ICP备20008691号-1 || 沪公网安备 31010602005455号 )|网站地图

    GMT+8, 2020-8-4 09:55 , Processed in 0.053171 second(s), 39 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表