一、BP神经网络简述

  1. 人工神经元概述
    归纳一下生物神经元传递信息的过程:生物神经元是一个多输入、单输出单元。常用的人工神经元模型可用下图模拟。

    当神经元j有多个输入xi(i=1,2,…,m)和单个输出yj时,输入和输出的关系可表示为:

    其中j为阈值,wij为从神经元i到神经元j的连接权重因子,f( )为传递函数,或称激励函数。
  2. BP神经网络概述
    BP神经网络是一种2层或者3层以上的多层神经网络,按照有导师学习方式进行训练。当学习模式提供给神经网络后,神经元的激活值将从输入层经隐藏层向输出层传播,在输出层的各神经元输出对应于输入模式的网络响应。再根据输出值与期望值(真实值)用之间的误差,从输出层经隐含层最后回到输入层进行权值的修正,以不断减少误差。

    BP神经网络建模主要包含三个步骤:
  1. 训练集和测试集数据的采集
  2. BP神经网络的创建和训练
  3. 仿真测试
  4. 模型可信度评价

二、BP神经网络的结构

  1. 正向传播
    正向传播就是让信息从输入层进入网络,依次经过每一层的计算,得到最终输出层结果的过程。结构如下:

    先来看网络的结构,输入层(input )没有变,还是三个节点。输出层(input )也没有变。重点看隐藏层(hidden ),即上图中红色虚线框起的部分, hidden_1和hidden_2 ,每层的节点为 2 个。关键看一下连线代表的意义,和计算过程。可以从图上看到,每层的节点都与下一层的每个节点有一一对应的连线,每条连线代表一个权重,可以把它理解为信息传输的一条通路,但是每条路的宽度是不一样的,每条通路的宽度由该通道的参数,也就是该通路的权重来决定。为了说明这个问题,拿一个节点的计算过程来进行说明,看下图:

    我们可以把H(1,1)看做一个既有输入又有输出的点,我们规定H_i (1,1)为输入,H_o (1,1)为输出。那么隐藏层的实际操作其实如下:


    (p.s.)对于sigmoid(),其实最早人们在设计网络的时候,是没有这个过程的,统统使用线性的连接来搭建网络,但是线性函数没有上界,经常会造成一个节点处的数字变得很大很大,难以计算,也就无法得到一个可以用的网络。因此人们后来对节点上的数据进行了一个操作,利用sigmoid()函数来处理,使数据被限定在一定范围内。此外sigmoid函数的图像是一个非线性的曲线,因此,能够更好的逼近非线性的关系,因为绝大多数情况下,实际的关系是非线性的。sigmoid在这里被称为激励函数,这是神经网络中的一个非常重要的基本概念。下一目会具体说明激活函数。
    经过上述的一个节点的说明,那么其他节点也就可以举一反三,一一计算出来。现在我们来简化一下网络。我们可以把x1,x2,x3作为一个向量 [x1,x2,x3] ,权重矩阵 u 也作为一个 3x2 的矩阵,w 作为一个 2x2 的矩阵,v作为一个 2x1的矩阵,三个矩阵如下:

    可以看到这三个矩阵与网络中的结构图中是一一对应的。下面我们把隐藏层与输出层也写成矩阵的形式:

    可以看到这两层隐藏层(hidden)的输入Hi 与 Ho 均为 1x2 的矩阵,输出层(output )为 1x1 的矩阵。下面就可以把网络简化为下面的结构:

    根据我们刚才讲过的每个节点的计算方法,以及我们简化后的网络,则可以将整个计算过程等效的化为以下几个矩阵相城的步骤。这样y的值就得到了一次输出……

  2. 激活函数
    (1)激活函数的意义
    如果不用激励函数(其实相当于激励函数是f(x) = x),在这种情况下你每一层输出都是上层输入的线性函数,很容易验证,无论你神经网络有多少层,输出都是输入的线性组合,与没有隐藏层效果相当,这种情况就是最原始的感知机(Perceptron)了。
    正因为上面的原因,我们决定引入非线性函数作为激励函数,这样深层神经网络就有意义了(不再是输入的线性组合,可以逼近任意函数)。最早的想法是sigmoid函数或者tanh函数,输出有界,很容易充当下一层输入(以及一些人的生物解释balabala)。激活函数的作用是为了增加神经网络模型的非线性。否则没有激活函数的每层都相当于矩阵相乘。即使叠加了若干层之后,仍是矩阵相乘,即没有非线性结构无法实现可行的神经网络。
    (2)常用激活函数
    ① sigmoid函数

  • 函数表达式

    其导数可以用自身来表示:

  • 函数图像及其导数图像

    上图为函数图像
    上图为函数导数图像

  • 函数特点分析
    可以看到sigmoid函数能够将函数限制在 0到1 的范围之内。Sigmoid函数是深度学习领域开始时使用频率最高的activation function。它是便于求导的平滑函数,其导数可以用自身表示,这是优点。
    然而,Sigmoid有三大缺点:

  • 容易出现gradient vanishing

  • 函数输出并不是zero-centered

  • 幂运算相对来讲比较耗时

  1. 反向传播
    说明了正向传播后,我们对反向传播进行说明。首先明确一点,反向传播的信息是什么?反向传播的信息是误差,也就是 输出层(output )的结果与输入信息 x 对应的真实结果之间的差距。
    (1) 误差函数

    式子中d_o (k)为导师训练值(实际值),y_o (k)为神经网络经输出层后的输出结果。当|e|<ε,ε为所要求的的精度时,我们认为训练得较好。
    所以我们现在的目的就是不断地通过调整权重u,w,v(也就是网络的参数)来使网络计算的结果 尽可能的接近真实结果 y ,也就等价于是损失函数尽量变小。那么如何调整u,w,v 的大小,才能使损失函数不断地变小呢?这理又要说到一个新的概念:梯度下降法

(2) 梯度下降法(图源百度)

假设上图中的曲线就是损失函数的图像,它存在一个最小值。梯度是一个利用求导得到的数值,可以理解为参数的变化量。从几何意义上来看,梯度代表一个损失函数增加最快的方向,反之,沿着相反的方向就可以不断地使损失逼近最小值,也就是使网络逼近真实的关系。
那么反向传播的过程就可以理解为:根据误差函数,来反向计算出每个参数(如 u,v等)的梯度 d(u) ,d(v) …等等,再将原来的参数分别加上自己对应的负梯度,就完成了一次反向传播。

(3) 反向传播的具体过程以及公式
① 计算对输出层权值的偏导数

② 计算误差函数对隐含层各神经元的偏导数



③ 修正权值与阈值:

④ 以上就是一次完整的反向传播过程,需要说明的是,上式当中用到了一个符号 ,这又是一个重要的概念,学习率,一个小于1的实数,它的大小会影响网络学习的速率以及准确度。可以把它理解为梯度下降时的步长。

三、 BP神经网络在Matlab中的应用

最新版本的神经网络工具箱几乎涵盖了所有的神经网络的基本常用模型,如感知器和BP网络等。对于各种不同的网络模型,神经网络工具箱集成了多种学习算法,为用户提供了极大的方便[16]。Matlab R2007神经网络工具箱中包含了许多用于BP网络分析与设计的函数,BP网络的常用函数如表3.1所示。

下面介绍Matlab中的常用神经网络


数学建模——BP神经网络学习笔记相关推荐

  1. BP神经网络学习笔记

    一个神经网络是一个由简单处理元构成的规模宏大的并行分布式处理器.天然具有存储经验知识和使之可用的特性.神经网络在两个方面与人脑相似: 1.神经网络获取的知识是从外界环境中学习得来的. 2.互连神经元的 ...

  2. 数学建模之线性规划学习笔记

    前言 线性规划可能看起来很简单,但其中也不乏比较精妙的处理方法.上了数模选修课之后才知道自己原来对建模的理解太浅,只知道想一种方法算出一个结果,而没有仔细考虑结果的合理性与对结果的分析.接下来简单介绍 ...

  3. 数学建模各类算法学习笔记(附matlab代码)

    目录 插值和拟合 线性规划 综合评价1:层次分析法(Analytic Hierarchy Process)AHP 综合评价2:Topsis(优劣解距离法) 最优解问题1:遗传算法Genitic alg ...

  4. MOOC数学建模与实验---学习笔记---整理汇总表

  5. 神经网络学习笔记3——Transformer、VIT与BoTNet网络

    系列文章目录 神经网络学习笔记1--ResNet残差网络.Batch Normalization理解与代码 神经网络学习笔记2--VGGNet神经网络结构与感受野理解与代码 文章目录 系列文章目录 A ...

  6. 脉冲神经网络学习笔记(综述)

    脉冲神经网络学习笔记 一. 基本框架 脉冲神经网络的监督算法目标是实现对脉冲序列中包含的时空模式的信息的学习,脉冲序列的定义: S(t)对一个Dirac函数进行求和,f代表发放的第f个脉冲,Dirac ...

  7. 径向基(Radial Basis Function:RBF)神经网络学习笔记

    原创不易,转载前请注明博主的链接地址:Blessy_Zhu https://blog.csdn.net/weixin_42555080 一. 从BP神经网络到RDF神经网络 在上一篇文章BP(Back ...

  8. 神经网络学习笔记-02-循环神经网络

    神经网络学习笔记-02-循环神经网络 本文是根据WildML的Recurrent Neural Networks Tutorial写的学习笔记. 循环神经网络 循环神经网络适用于处理序列化信息,比如: ...

  9. 神经网络学习笔记(一) RBF径向基函数神经网络

    神经网络学习笔记(一) RBF径向基函数神经网络 2018年08月06日 13:34:26 吃机智豆长大的少女乙 阅读数:2735 RBF径向基函数神经网络 初学神经网络,以下为综合其他博主学习材料及 ...

最新文章

  1. 【ACM】杭电OJ 2064(汉诺塔III)
  2. 太胖就会变秃,这回真的有依据了!日本学者发现肥胖会诱导毛囊衰竭 | Nature...
  3. 计算机英语文章阅读网站,关于电脑的英语美文阅读
  4. Log4net 用法 本地日志
  5. net类库中发送电子邮件的方法总结
  6. sql 执行顺序_10个简单步骤,完全理解SQL
  7. Android 一个对sharedpreferences 数据进行加密的开源库
  8. LVS(14)——DR模型实践、交换机
  9. 计算机课中初中一年级学生特点分析,初中信息技术说课稿:计算机的组成
  10. LeetCode 502. IPO(优先队列)
  11. Codeforces Round #437 (Div. 2, based on MemSQL Start[c]UP 3.0 - Round 2)
  12. 中剪取一种颜色的板块_不知道UI设计中APP界面版式如何排版?来看这个!
  13. Google全新AI实战课发布:从原理到代码,手把手带你入门机器学习
  14. BZOJ 1041 圆上的整点 数学
  15. 响应activex事件
  16. idea快捷键失效,快捷键不能用
  17. Apabi Reader 4.0.1正式发布!
  18. iOS第三方支付集成-支付宝支付
  19. python learning note
  20. 深圳市居住证查询、办理政府网址

热门文章

  1. 如何修改安卓软件的图标和名字
  2. SQLMAP进阶:参数讲解
  3. Elasticsearch集群的脑裂问题
  4. led灯条维修_LED灯坏了怎么维修?学会自己动手,简单的LED故障自己也能维修
  5. 【游戏开发实战】Unity快速搭建体素风格关卡地图(Tile3D | 我的世界 | Voxel | 场景 | 编辑器)
  6. Elasticsearch 查询时 判断不为null或不为空字符串
  7. 【python】算法设计:回文素数
  8. 数据处理是用matlab好还是python好_numpy在一般的数值处理上能与matlab一样好用吗?...
  9. 智能合约--如何实现可升级的智能合约
  10. linux如何把文件大小改为0,关于文件系统:Linux删除大小为0的文件