数学建模——BP神经网络学习笔记

2023-11-10

一、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中的常用神经网络
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数学建模——BP神经网络学习笔记 的相关文章

  • Python:在列表理解本身中引用列表理解?

    这个想法刚刚出现在我的脑海中 假设您出于某种原因想要通过 Python 中的列表理解来获取列表的唯一元素 i if i in created comprehension else 0 for i in 1 2 1 2 3 1 2 0 0 3
  • 无法“安装”plpython3u - postgresql

    我正在尝试在 postgresql 中使用 python 语言 像这样的事情 create or replace function test a integer returns integer as if a 2 0 return even
  • Django 管理员在模型编辑时间歇性返回 404

    我们使用 Django Admin 来维护导出到我们的一些站点的一些数据 有时 当单击标准更改列表视图来获取模型编辑表单而不是路由到正确的页面时 我们会得到 Django 404 页面 模板 它是偶尔发生的 我们可以通过重新加载三次来重现它
  • 使 django 服务器可以在 LAN 中访问

    我已经安装了Django服务器 可以如下访问 http localhost 8000 get sms http 127 0 0 1 8000 get sms 假设我的IP是x x x x 当我这样做时 从同一网络下的另一台电脑 my ip
  • OpenCV Python cv2.mixChannels()

    我试图将其从 C 转换为 Python 但它给出了不同的色调结果 In C Transform it to HSV cvtColor src hsv CV BGR2HSV Use only the Hue value hue create
  • 如何在flask中使用g.user全局

    据我了解 Flask 中的 g 变量 它应该为我提供一个全局位置来存储数据 例如登录后保存当前用户 它是否正确 我希望我的导航在登录后在整个网站上显示我的用户名 我的观点包含 from Flask import g among other
  • Flask 会话变量

    我正在用 Flask 编写一个小型网络应用程序 当两个用户 在同一网络下 尝试使用应用程序时 我遇到会话变量问题 这是代码 import os from flask import Flask request render template
  • 从字符串中删除识别的日期

    作为输入 我有几个包含不同格式日期的字符串 例如 彼得在16 45 我的生日是1990年7月8日 On 7 月 11 日星期六我会回家 I use dateutil parser parse识别字符串中的日期 在下一步中 我想从字符串中删除
  • 以编程方式停止Python脚本的执行? [复制]

    这个问题在这里已经有答案了 是否可以使用命令在任意行停止执行 python 脚本 Like some code quit quit at this point some more code that s not executed sys e
  • Python pickle:腌制对象不等于源对象

    我认为这是预期的行为 但想检查一下 也许找出原因 因为我所做的研究结果是空白 我有一个函数可以提取数据 创建自定义类的新实例 然后将其附加到列表中 该类仅包含变量 然后 我使用协议 2 作为二进制文件将该列表腌制到文件中 稍后我重新运行脚本
  • OpenCV 无法从 MacBook Pro iSight 捕获

    几天后 我无法再从 opencv 应用程序内部打开我的 iSight 相机 cap cv2 VideoCapture 0 返回 并且cap isOpened 回报true 然而 cap grab 刚刚返回false 有任何想法吗 示例代码
  • 如何加速Python中的N维区间树?

    考虑以下问题 给定一组n间隔和一组m浮点数 对于每个浮点数 确定包含该浮点数的区间子集 这个问题已经通过构建一个解决区间树 https en wikipedia org wiki Interval tree 或称为范围树或线段树 已经针对一
  • 从 Flask 访问 Heroku 变量

    我已经使用以下命令在 Heroku 配置中设置了数据库变量 heroku config add server xxx xxx xxx xxx heroku config add user userName heroku config add
  • 添加不同形状的 numpy 数组

    我想添加两个不同形状的 numpy 数组 但不进行广播 而是将 缺失 值视为零 可能最简单的例子是 1 2 3 2 gt 3 2 3 or 1 2 3 2 1 gt 3 2 3 1 0 0 我事先不知道形状 我正在弄乱每个 np shape
  • Flask如何获取请求的HTTP_ORIGIN

    我想用我自己设置的 Access Control Allow Origin 标头做出响应 而弄清楚请求中的 HTTP ORIGIN 参数在哪里似乎很混乱 我在用着烧瓶 0 10 1 以及HTTP ORIGIN似乎是这个的特点之一object
  • python获取上传/下载速度

    我想在我的计算机上监控上传和下载速度 一个名为 conky 的程序已经在 conky conf 中执行了以下操作 Connection quality alignr wireless link qual perc wlan0 downspe
  • 无法在 Python 3 中导入 cProfile

    我试图将 cProfile 模块导入 Python 3 3 0 但出现以下错误 Traceback most recent call last File
  • 使用 \r 并打印一些文本后如何清除控制台中的一行?

    对于我当前的项目 有一些代码很慢并且我无法使其更快 为了获得一些关于已完成 必须完成多少的反馈 我创建了一个进度片段 您可以在下面看到 当你看到最后一行时 sys stdout write r100 80 n I use 80覆盖最终剩余的
  • 将图像分割成多个网格

    我使用下面的代码将图像分割成网格的 20 个相等的部分 import cv2 im cv2 imread apple jpg im cv2 resize im 1000 500 imgwidth im shape 0 imgheight i
  • 如何在 Python 中追加到 JSON 文件?

    我有一个 JSON 文件 其中包含 67790 1 kwh 319 4 现在我创建一个字典a dict我需要将其附加到 JSON 文件中 我尝试了这段代码 with open DATA FILENAME a as f json obj js

随机推荐

  • DDK(Driver Developer Kit)和WDK(Windows Driver Kit)的区别

    首先 先从基础的东西说起 开发WINDOWS下的驱动程序 需要一个专门的开发包 如 开发JAVA程序 我们可能需要一个JDK 开发WINDOWS应用程序 我们需要WINDOWS的SDK 现在开发WINDOWS下的驱动程序 我们需要一个DDK
  • 个人兴趣项目汇总

    实时多人2d监测平台 deh传感器数据监控大屏 deh数字孪生 three js deh故障诊断软件系统 SAR故障诊断系统 自动化工厂展示大屏 Minest数据集数字检测平台 汇总在线展示链接
  • Java代码审计之命令执行漏洞

    进行代码审计时遇到一个比较典型命令执行漏洞 适合新手学习 给大家分享下整个过程 从代码中可以看出来程序只使用trim 方法对jdk进行了两遍的空格过滤 然后直接和后面拼接的命令一起执行 接着来找一下这个方法的调用链 可以看到这里依次调用了3
  • jquery怎么获取radio的值

    1 获取选中值 三种方法都可以 input radio checked val input type radio checked val input name rd checked val
  • java 实体类 临时注解_MyBatis-Plus 常用注解

    TableName TableId 主键专属 比如数据中的表中的字段是id 但是实体类是userId 那么就需要在userId上打上这个注解 用法 设置主键映射 value映射主键字段的名字 type 设置主键类型 主键的生成策略 圈起来的
  • git提交代码完整目录(详细)

    1 找到需要提交的git代码 2 初始化 git init 3 查询状态 git status 4 添加代码 git add test txt test txt是需要提交的文件 git add all 提交所有 5 git文件commit仓
  • DKVMN知识追踪描述

    由于在线学习课程的兴起 学习者在课程学习过程中有很多习题练习的记录 利用这些记录 知识追踪 Knowledge Tracing 希望通过对学习者过往练习的结果分析其当前对一些概念的掌握程度 知识追踪任务可以形式化为一个有监督的序列学习问题
  • eclipse + armgcc + pyocd(CMSIS-DAP) 进行嵌入式MCU Debug

    eclipse armgcc pyocd CMSIS DAP 进行嵌入式MCU Debug 由于中美贸易战的影响 备用方案将采用国产MCU 经过乱开发委员会的评估 认为华大 HDSC 的MCU性价比不错 但是keil官网找不到所选芯片的pd
  • Java thread中对异常的处理策略

    https www cnblogs com googlemeoften p 5769216 html
  • Flutter开发之滚动Widget

    移动端数据量比较大时 我们都是通过列表来进行展示的 比如商品数据 聊天列表 通信录 朋友圈等 在Android中 我们可以使用ListView或RecyclerView来实现 在iOS中 我们可以通过UITableView来实现 在Flut
  • sql中对日期的筛选

    转载自 点击打开链接 几个小时内的数据 DATE SUB NOW INTERVAL 5 HOUR 今天 select from 表名 where to days 时间字段名 to days now 昨天 SELECT FROM 表名 WHE
  • Flutter —— dart基础语法

    Flutter dart基础语法 1 Flutter 项目创建 2 Dart 语法 2 1 var final和const 2 2 num 2 3 string 2 4 list 和 map 2 5 和 2 6 方法 和 箭头函数 2 7
  • 刚面完的字节跳动Python软件测试用例编写(含思路)

    测试用例编写是软件测试的基本技能 也有很多人认为测试用例是软件测试的核心 软件测试中最重要的是设计和生成有效的测试用例 测试用例是测试工作的指导 是软件测试的必须遵守的准则 在这里我们不讨论以上的各种观点 但是综上所述 大家可以看出 测试用
  • QT中的connect用法总结

    第一种 首先来看看老版本的 connect 写法 比较复杂些 需要将信号和槽进行明确的指定 包括形参 看一个示例 为方便演示 先自定义一个 Button 然后定义两个重载的信号 lass MyButton public QWidget Q
  • 仓库 “https://download.docker.com/linux ubuntu Release” 没有 Release 文件。N: 无法安全地用该源进行更新,所以默认禁用该源

    解决 E 仓库 https download docker com linux ubuntu Release 没有 Release 文件 N 无法安全地用该源进行更新 所以默认禁用该源 在ubuntu16 04上安装Docker Engin
  • CentOS 7 修改系统运行级别(单用户/正常启动)

    常用的系统运行级别 3级 带网络多用户命令行界面 multi user target 5级 带网络多用户图像化界面 graphical target 正常启动的系统使用systemctl命令修改运行级别 查看当前运行级别 systemctl
  • [Python爬虫] Selenium实现自动登录163邮箱和Locating Elements介绍

    前三篇文章介绍了安装过程和通过Selenium实现访问Firefox浏览器并自动搜索 Eastmount 关键字及截图的功能 而这篇文章主要简单介绍如何实现自动登录163邮箱 同时继续介绍Selenium Python官网Locating
  • MySQL中的事务

    1 事务介绍 本篇文章我们来介绍数据库中事务的概念以及如何使用MySQL命令行窗口来进行数据库的事务操作 事务是联合操作中我们数据库稳定运作和数据不发生不可预知错误的重要依赖 事务是指数据库中的一组逻辑操作 这个操作的特点就是在该组逻辑中
  • STM32-时钟系统

    1 时钟的定义 时钟是单片机运行的基础 时钟信号推动单片机内各个部分执行相应的指令 时钟系统就是CPU的脉搏 决定cpu速率 像人的心跳一样 只有有了心跳 人才能做其他的事情 而单片机有了时钟 才能够运行执行指令 才能够做其他的处理 点灯
  • 数学建模——BP神经网络学习笔记

    一 BP神经网络简述 人工神经元概述 归纳一下生物神经元传递信息的过程 生物神经元是一个多输入 单输出单元 常用的人工神经元模型可用下图模拟 当神经元j有多个输入xi i 1 2 m 和单个输出yj时 输入和输出的关系可表示为 其中j为阈值