神经网络算法基本原理及其实现

article/2025/10/7 16:30:56

目录

背景知识

人工神经元模型

激活函数

 网络结构

工作状态

学习方式

BP算法原理

算法实现(MATLAB)


背景知识

在我们人体内的神经元的基本结构,相信大家并不陌生,看完下面这张图,相信大家都能懂

什么是人工神经网络?

人工神经网络是具有适应性的简单神经元组成的广泛并互连的网络,它的组织能够模拟生物神经系统对真实世界物体作出的交互式反应。人工神经网络具有自学习、自组织、较好的容错性和优良的非线性逼近能力。

人工神经网络能干什么?

1、拟合数据——>预测

2、分类——>聚类分析

那么我们学习人工神经网络需要知道哪些呢?

1、神经元模型

2、激活函数

3、网络结构

4、工作状态

5、学习方式

人工神经元模型

作为神经网络的基本元素,神经元的模型如下:

x_{1}\sim x_{n}是从其他神经元上传来的信号,w_{ij}表示从神经元 j到神经元i的连接权值,\theta表示一个阈值,或者称为偏置。

神经元输入与输出的关系为:net_{i}=\sum_{j=1}^{n}w_{ij}x_{j}-\theta =\sum_{j=0}^{n}w_{ij}x_{j}

激活函数

激活函数是对净激活量与输出进行映射的函数。一些常用的激活函数,由于输入数据与期望之间可能并不是量级一样,所以需要激活,激活函数:y_{i}=f(net_{i})

一些常用的激活函数有:

线性函数:                                                S型函数:

f(x)=k*x+c                                      f(x)=\frac{1}{1+e^{-\alpha x}}

阈值函数:                                                双极S型函数:

f(x)=\left\{\begin{matrix} T, & x>c\\ k*x,&|x|\leq c \\ -T, & x<-c \end{matrix}\right.                       f(x)=\frac{2}{1+e^{-\alpha x}}-1

 网络结构

根据网络中神经元的互连方式,可以分为3种神经网络

1、前馈神经网络:在训练的过程中会有反馈信号,而在分类的过程中只能向前传递数据,直到到达输出层,层间没有向后反馈信号

2、反馈神经网络:从输入到输出具有反馈连接的神经元

3、自组织网络:通过自动寻找样本中的内在规律和本质属性,自组织、自适应地改变网络参数与结构

工作状态

1、学习:利用学习算法来调整神经元之间的连接权值,使得网络输出更符合实际

2、工作:神经元的连接权值不变,可作为分类器或者预测数据时使用

学习方式

1、有导师学习:将一组训练集送入网络,根据网络的实际输出与期望输出间的差别来调整连接权,如BP算法(本文的代码实现也为BP神经网络的算法实现)

2、无导师学习:抽取样本集合中蕴含的统计特性,并以神经元之间的连接权的形式存在于网络中,如(Hebb学习率)

BP算法原理

假设输入层有n个神经元,隐含层有p个神经元,输出层有q个神经元

符号定义:

输入向量x=(x_{1},x_{2},\cdots ,x_{n})
隐含层输入向量hi=(hi_{1},hi_{2},\cdots ,hi_{p})
隐含层输出向量ho=(ho_{1},ho_{2},\cdots ,ho_{p})
输出层输入向量yi=(yi_{1},yi_{2},\cdots ,yi_{q})
输出层输出向量yo=(yo_{1},yo_{2},\cdots ,yo_{q})
期望输出向量d_{o}=(d_{1},d_{2},\cdots ,d_{q})
误差函数e=\frac{1}{2}\sum_{o=1}^{q}(d_{o}(k)-yo_{o}(k))^{2}

第一步:计算各层神经元的输入和输出: 

\begin{matrix} hi_{h}(k)=\sum_{i=0}^{n}w_{hi}x_{i}(k) &h=1,2,\cdots ,p \end{matrix}

\begin{matrix} ho_{h}(k)=f(hi_{h}(k))&h=1,2,\cdots ,p \end{matrix}

\begin{matrix} yi_{o}(k)=\sum_{h=o}^{p}w_{oh}ho_{h}(k) & o=1,2,\cdots ,q \end{matrix}

\begin{matrix} yo_{o}(k)=f(yi_{o}(k))& o=1,2,\cdots ,q \end{matrix}

第二步:利用网络期望输出和实际输出,计算误差函数对输出层的各神经元的偏导数。 

\frac{\partial e}{\partial w_{oh}}=\frac{\partial e}{\partial yi_{o}}\frac{\partial yi_{o}}{\partial w_{oh}}=-\delta _{o}(k)ho_{h}(k)

第三步:利用隐含层到输出层的连接权值、输出层的\delta _{0}(k)和隐含层的输出计算误差函数对隐含层各神经元的偏导数\delta _{h}(k) 

\frac{\partial e}{\partial w_{hi}}=\frac{\partial e}{\partial hi_{h}(k)}\frac{\partial hi_{h}(k)}{\partial w_{hi}}=-\delta _{h}(k)x_{i}(k)

第四步:利用输出层各神经元的 \delta _{h}(k)和隐含层各神经元的输出来修正连接权值w_{oh}(k)

\Delta w_{oh}(k)=-\mu \frac{\partial e}{\partial w_{oh}}=\mu \delta _{o}(k)ho_{h}(k)

w_{oh}^{N+1}=w_{oh}^{N}+\mu \delta _{o}(k)ho_{h}(k)

\mu是设置的学习率

 第五步:利用隐含层各神经元的\delta _{h}(k)和输入层各神经元的输入修正连接权

\Delta w_{hi}(k)=-\mu \frac{\partial e}{\partial w_{hi}}=\delta _{h}(k)x_{i}(k)

w_{hi}^{N+1}=w_{hi}^{N}+\mu \delta _{h}(k)x_{i}(k)

 第六步:计算全局误差

E=\frac{1}{2m}\sum_{k=1}^{m}\sum_{o=1}^{q}(d_{o}(k)-y_{o}(k))^{2}

第七步:判断网络误差是否满足要求。当误差达到预设精度或学习次数大于设定的最大次数,则结束算法。否则,选取下一个学习样本及对应的期望输出,返回进入下一轮学习。 

算法实现(MATLAB)

注意:由于MATLAB有内置函数可以调用,所以没有从公式原理上从头搭建代码

%BP神经网络
clear all
clc
X=-1:0.1:1;
D=[-0.9602 -0.5770 -0.0729 0.3771 0.6405 0.6600 0.4609...0.1336 -0.2013 -0.4344 -0.5000 -0.3930 -0.1647 -.0988...0.3072 0.3960 0.3449 0.1816 -0.312 -0.2189 -0.3201];
net = newff(minmax(X),[5 1],{'tansig','tansig'}, 'trainlm');%隐含层5个神经元,输出层1个神经元
net.trainParam.epochs = 10000; %训练的最大次数
net.trainParam.goal = 1e-5; %全局最小误差
net = train(net,X,D); 
O = sim(net,X); %仿真模拟
figure;
plot(X,D,X,O,'r'); %绘制训练后得到的结果和误差曲线
legend('原始数据','仿真数据')
V = net.iw{1,1}%输入层到中间层权值
theta1 = net.b{1}%中间层各神经元阈值
W = net.lw{2,1}%中间层到输出层权值
theta2 = net.b{2}%输出层各神经元阈值%%以下是计算结果
V =63.2827-21.7727-19.39264.29531.7695theta1 =-44.70437.68902.15891.45752.2024W =-0.3473   -0.2570   -0.2184   -1.3224    6.1471theta2 =-5.2381

 仿真的结果:

从以上结构可以看出,这个神经网络训练的还是比较好的,仿真的结果误差很小 。

以上就是BP神经网络的全部推理及实现过程,希望能你有所帮助,谢谢观看!


http://chatgpt.dhexx.cn/article/Ve5lNDJV.shtml

相关文章

神经网络算法介绍(Nerual NetWorks)

神经网络是所谓深度学习的一个基础&#xff0c;也是必备的知识点&#xff0c;他是以人脑中的神经网络作为启发&#xff0c;最著名的算法就是backpropagation算法&#xff0c;这里就简单的整理一下神经网络相关参数&#xff0c;和计算方法。 一、多层向前神经网络&#xff08;M…

神经网络算法

参考 神经网络算法 - 云社区 - 腾讯云 目录 1、神经元模型 2、感知机与多层网络 3、误差逆传播算法 4、全局最小与局部最小 5、其他神经网络 1、RBF网络 2、ART网络 3、SOM网络 4、级联相关 5、Elman网络 6、Boltzmann机 6、深度学习 1、神经元模型 神经网络(neu…

人工智能学习——神经网络(matlab+python实现)

人工智能学习——神经网络 文章目录 人工智能学习——神经网络前言一、神经网络理论知识1.人工神经网络的概念2.神经元的概念3.MP神经元模型4.常见的激活函数5.人工神经网络模型种类6.人工神经网络学习方式、规则&#xff0c;分类 二、感知器的介绍1.单层感知器&#xff08;单层…

神经网络——最易懂最清晰的一篇文章

神经网络是一门重要的机器学习技术。它是目前最为火热的研究方向--深度学习的基础。学习神经网络不仅可以让你掌握一门强大的机器学习方法&#xff0c;同时也可以更好地帮助你理解深度学习技术。 本文以一种简单的&#xff0c;循序的方式讲解神经网络。适合对神经网络了解不多的…

【水滴石穿】报错解决不了

地址&#xff1a;https://github.com/Farukaksungur/React-Native- 转载于:https://www.cnblogs.com/smart-girl/p/10875511.html

GREYONE Data Flow Sensitive Fuzzing

目录 Abstract Introduction 1.1questions to address 1.2 our solution 1.3 result 2 design of greyone 2.1 Fuzzer-driven Taint Inference 2.1.1 Taint inference 2.1.2 Comparison with Traditional Taint Analysis. 2.1.3 Identify Direct Copies of Inputs. …

论文中文翻译——kAFL Hardware-Assisted Feedback Fuzzing for OS Kernels

本论文相关内容 论文下载地址——26th USENIX Security Symposium论文中文翻译——kAFL Hardware-Assisted Feedback Fuzzing for OS Kernels 文章目录 本论文相关内容前言kAFL&#xff1a;操作系统内核的硬件辅助反馈Fuzzing作者信息论文来源主办方信息摘要1 引言2 技术背景2…

ROS1云课→29如何借助导航实现走迷宫机器人

ROS1云课→28机器人代价地图配置 简述&#xff1a; 在这个项目中&#xff0c;将创建一个机器人&#xff0c;它将进入一个迷宫形式的房间&#xff0c;然后从另一个点离开房间。 详细&#xff1a; 在行业中&#xff0c;有些地方机器人可以收集加工过的物体并将这些物体放入仓库。…

Recent Fuzzing Papers

Recent Papers Related To Fuzzing 原文在GitHub上进行更新&#xff1a; https://github.com/wcventure/FuzzingPaper All Papers Interesting Fuzzing DifFuzz: Differential Fuzzing for Side-Channel Analysis (ICSE 2019)REST-ler: Stateful REST API Fuzzing (ICSE 2019…

符号测执行软件测试,基于符号执行与模糊测试的混合测试方法

1 引言 随着信息技术的发展, 软件已经渗透到现代社会的方方面面, 而由于开发不当引入的软件漏洞也日益增多.据统计, 最近5年内软件漏洞数增加了38%, 而仅在2016年~2017年间就增加了14%[.软件测试是检测软件漏洞的一种主要方法, 当前工业界的主流方法还是通过手工设计测试用例来…

java Scanner和异常

Java Scanner 类 java.util.Scanner 是 Java5 的新特征&#xff0c;我们可以通过 Scanner 类来获取用户的输入。 下面是创建 Scanner 对象的基本语法&#xff1a; Scanner s new Scanner(System.in); 接下来我们演示一个最简单的的数据输入&#xff0c;并通过 Scanner 类的 ne…

简单理解符号执行技术

0X00 前言 因为最近看的很多静态检测的论文中涉及到了符号执行的概念&#xff0c;而在我第一次听到符号执行实际上是在我的一些搞二进制学长口中&#xff0c;自然认为是和 web 没啥关系&#xff0c;但是现在看来只是因为我我太菜了&#xff0c;很多知识在更高的层次看起来都是…

AFL-Unicorn中的fork server机制详解

AFL-Unicorn AFL-Unicorn的基本工作流程如上图所示。 先将目标二进制代码装载至Unicorn-based test harness的内存映射中&#xff0c;设置初始状态&#xff0c;并从磁盘加载由 AFL 变异的inputs。 然后test harness会模拟目标二进制代码&#xff0c;如果它检测到crash或error&…

模糊测试阅读笔记

1、 什么是模糊测试 模糊测试最初是由Barton Miller于1989在威斯康星大学开发的。模糊测试是一种软件测试技术&#xff0c;也是一种安全测试。 模糊测试或Fuzzing是一种软件测试技术&#xff0c;它将称为Fuzz的无效或随机数据放入软件系统&#xff0c;以发现编码错误和安全漏…

模糊测试的简介

了解模糊测试、污点分析的相关内容配置KLEE等生产环境。分析模糊测试的优缺点 模糊测试 核心思想&#xff1a;模糊测试是一种软件漏洞自动挖掘技术&#xff0c;其核心思想是将一段数据输送给目标软件&#xff0c;并监控 / 判断程序行为特征&#xff0c;如崩溃、断言失败等&am…

Driller、Exploit自动生成引擎 Rex

来自 UCSB 的团队 Shellphish,为参加 DARPA 举办的 CGC 竞赛,设计并实现了 CRS(Cyber Reasoning System)Mechaphish。该系统包含自动化漏洞挖掘模块 Driller、Exploit自动生成引擎 Rex、自动补丁模块 Patcherex 以及 ropchain 生成模块 angrop。本文主要对其中的 Exploit 自…

Driller复现

文章&#xff1a;(2016-NDSS)Driller - Argumenting Fuzzing Through Selective Symbolic Execution 安装 环境&#xff1a;ubuntu 16.04 下载docker镜像&#xff1a;pull shellphish/mechaphish 运行镜像&#xff1a;docker run -it --privileged shellphish/mechaphish:la…

driller/shellphish安装与简单例程

因为在学习过程中有用到driller&#xff0c;但是安装过程中经常碰到奇奇怪怪的问题&#xff0c;尤其是angr 8发布后全面放弃python2&#xff0c;导致兼容性较差&#xff0c;本人将最后安装成功的过程记录下来&#xff0c;仅供参考。注&#xff0c;时间为2018.11.27&#xff0c;…

Driller分析与改进(二)

Author&#xff1a;ZERO-A-ONEDate&#xff1a;2021-03-20 这个部门我们主要介绍Driller的安装与使用&#xff0c;我使用的环境是腾讯云的VPS&#xff1a; CPU&#xff1a;Intel Xeon Platinum 8255C CPU 2.50GHz * 4vCPUsRAM&#xff1a;4GBOS&#xff1a;Ubuntu 18.04 LTS…

Driller分析与改进(一)

Author&#xff1a;ZERO-A-ONEDate&#xff1a;2021-03-19 一、引子 ​ 关注我的读者们应该对模糊测和符号执行两种技术已经十分熟悉了&#xff0c;那我觉得读者们一定会自然而然的联想到&#xff0c;是不是会存在一种可能性&#xff0c;将模糊测试和符号执行相结合起来&…