关于神经网络的一个介绍

这篇文章中,我将简单介绍下与神经网络有关的东西,包括它的基本模型,典型的算法以及与深度学习的联系等内容。

一、神经元

神经网络是由许多个神经元组成的,在生物的神经网络中,就是神经元间相互连接,传递信号,改变其的电位;并且在某神经元的电位超过一个“阈值”后就会被激活,也就是会“兴奋”起来,而再向其他神经元发送化学物质。而对于生物神经网络进行抽象就会得到“M-P神经元模型”。如下图,就可以说是一个神经元模型:

其中,input表示输入,weight表示权重,就是神经元接收信号时的权重,而bias则是一个偏置项,用来调整拟合程度。

在神经网络中,大部分神经元总是存在一个激活函数,它可以控制输出范围,不同激活函数有不同的输出范围,就像sigmoid函数,它就可以将输出结果控制在0到1间,此外,激活函数还可以影响梯度计算、以及可以引入非线性因素等,从而可以影响权重的计算方式以及使得神经网络可以逼近任意复杂度的函数计算等。

二、感知机

1.1 感知机

如果用两层神经元进行组合,就可以等到“感知机”。它能容易地实现与、或、非操作。不过,我们要知道这些与、或、非操作都是线性可分的,如果是非线性可分的话,则要考虑多层功能神经元了。如下图,就是一个简单的用graphviz画的感知机模型:

其中,x1,x2所在层就是输入层,它们指向的就是输出层。

画出它的代码如下:

from graphviz import Digraph
from imageio import imread
import matplotlib.pyplot as pltax = plt.gca()
mygraph = Digraph(node_attr={'shape':'circle'},edge_attr={'labeldistance':'10.5'},format="png")
mygraph.node("0","x1")
mygraph.node("1","x2")
mygraph.node("2"," ")
mygraph.node('output'," ", color='none', style='filled', fillcolor='none')
mygraph.edge("0","2",label="w1")
mygraph.edge("1","2",label="w2")
mygraph.edge("2","output", label="y")
mygraph.render("tmp")
ax.imshow(imread("tmp.png"))
ax.set_axis_off()
plt.show()

在这个感知机中,当前的输出可以看为\hat{y},而对于训练样例(x,y)中,则可以发生这样一个调整:

w_{i}\leftarrow w_{i}+\bigtriangleup w_{i}\\ \bigtriangleup w_{i}=\eta (y-\hat{y})x_{i}

其中的η可以被称为“学习率”。从中,我们可以发现,如果对于样例的预测正确,那么感知机就不会发生变化,反之则将会对于错误的程度将感知机的权重进行调整。

1.2 多层前馈神经网络

如果我们在感知机的基础上加入了一层或多层的隐藏层,那么这个神经网络模型就会变为“多层前馈神经网络”。其中,输入层神经元会接收外界的输入,隐藏层则会对信号进行加工,最终输出层进行输出.

三、BP算法

BP算法也叫误差逆传播算法,它是指先由前到后正常地传播一次,然后计算误差得到损失函数,然后再向后传播,并将神经元的权重进行更新,如此这样迭代到目标次数,或是某一值的最低标准。

在如图的一个神经网络模型中,x层为输入层,b层的隐藏层,y层为输出层。

那么在图中的第h个隐藏神经元的输入就是:\alpha _{h}=\sum_{i=1}^{d}v_{ih}x_{i},在第j个输出神经元的输入为:\beta _{j}=\sum_{h=1}^{q}w_{hj}b_{h}。网络在(x_{k},y_{k})上就会存在一个均方误差:E_{k}=\frac{1}{2}\sum_{j=1}^{l}(\hat{y}_{j}^{k}-y_{j}^{k})^2

BP算法的目标是要最小化训练集D上的累计误差,所有可以有:E=\frac{1}{m}\sum_{k=1}^{m}E_{k}。在标准BP算法中,更新的规则是基于单个的E_{k}推导而来的,如果推导出这样的累计误差,那么就得到了累计误差逆传递算法。标准BP算法与累计BP算法都会经常用到,但标准算法只针对单个的样例,所以参数会更新的很频繁,而导致出现“抵消”现象,所以为此标准算法就需要更多的迭代次数。

我们回到刚才的神经网络模型中,我们在知道了E_{k}后就可以算得\bigtriangleup w_{hj},可以说它由两部分组成,一部分是学习率η,另一部分是\frac{\partial E_{k}}{\partial w_{hj}},不过与这整体的是反比的关系就是说要在它俩组合后的式子前加上负号。对于它的第二部分,即\frac{\partial E_{k}}{\partial w_{hj}},我们可以将之分解,具体的可以参考西瓜书P103的公式,在分解后又可以分为两部分,一部分因为sigmoid的特殊性质,即其导数等于原函数与1减原函数的积而可变形为:-g_{i}=\hat{y}_{j}^{k}(1-\hat{y}_{j}^{k})(y_{j}^{k}-\hat{y}_{j}^{k}),而另一部分则变为b_{n},如此考虑之前的学习率部分,整体就会是这样:

\bigtriangleup w_{hj}=\eta g_{i}b_{h}

同样的,我们可以陆续得到:\bigtriangleup\theta _{j}\bigtriangleup v_{ih}

BP算法有着强大的表示能力,但也因此时常发生过拟合的问题,所以为了解决这个问题,有两个策略,一是“早停”,二是“正则化”,在早停策略中,是将数据集分为训练集与验证集,其中的验证集用来估计误差,如果训练集的误差降低,但验证集的误差反而上升时,那么就要停止训练了,并返回最小验证集误差的连接权与阈值;而正则化则是对于误差目标函数进行改造,往其中增加一个用于描述网络复杂程度的部分。

四、全局最小与局部最小

用E来表示神经网络上的误差时,神经网络的训练过程就可以看作是一个参数寻优过程,去寻找一个最优参数使得E最小。但此时,在训练中会遇到局部最小,而局部最小不一定是全局最小,我们要找的则是全局最小,所以此时可能就会寻找错误,为此我们有一些算法来帮助我们跳出这个局部最小来,这些算法分别是模拟退火算法、遗传算法、随机梯度下降算法以及以多组不同参数值来初始多个神经网络并从结果中寻找答案。

五、其他神经网络

除了上述的神经网络模型外,还有以下这些神经网络:

5.1 RBF网络

RBF网络也叫径向基函数,它是一种单隐层前馈神经网络,广泛应用于模式识别、函数逼近和分类问题中。RBF网络利用径向基函数作为隐藏层的激活函数,这些函数通常是对称的,如高斯函数。其中高斯函数的形式如下:

5.2 ART网络

ART网络也叫自适应谐振理论网络,它是竞争型学习的重要代表,它由比较层、识别层、识别阈值和重置模块这四部分组成。其中关于竞争型学习,其核心思想是让网络中的神经元为一个给定的输入样本“竞争”,以决定哪个神经元应该被激活。在这一过程中,最接近输入样本的神经元(通常称为获胜神经元)会得到强化,而其他神经元则不会更新或更新程度较小。

5.3 SOM网络

SOM网络也叫自组织映射网络,也是一种竞争型学习的无监督神经网络,它能将高维输入数据映射到低维空间中,并同时保持输入数据在高维空间的拓扑结构。

5.4 级联相关网络

级联相关网络是一种人工神经网络架构。它的设计目的是克服传统多层感知器(MLP)在训练过程中遇到的一些问题,如容易陷入局部极小值、训练速度慢等。级联相关网络的特点在于它可以动态地增加隐藏单元,并且保证每次增加单元后,网络性能都有所提升。

也就是说,在寻常的神经网络中,其网络模型结构通常是固定的,而在这个网络中,网络结构也会是学习的目标之一,所以在学习的过程中,该网络会增加一些隐藏节点,因此,它无需设置网络层数、隐藏神经数目,且训练速度也较快,但相对的,它在数据较小时容易发生过拟合。

5.5 Elman网络

如果我们在前馈神经网络的基础上增加了递归的部分,那么就诞生了“递归神经网络”。而Elman网络就是最常见的递归神经网络之一。其结构如图:

六、深度学习

深度学习是神经网络的一个子领域,专注于构建和训练深层神经网络(具有多个隐藏层的神经网络)。深度学习的目标是通过大量的数据和计算资源来学习复杂的特征表示,从而实现更高级别的任务。

深度学习继承了传统神经网络的基本架构和训练方法,并在此基础上进行了扩展和改进。可以说深度学习就是具有更多隐藏层的神经网络。

七、python代码

最后,我们还是用神经网络算法在iris数据集上直接引用aklearn函数库来实践下,代码如下:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.neural_network import MLPClassifier
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import accuracy_score, classification_report# 加载数据并分割
iris = load_iris()
X = iris.data
y = iris.target
X_train, X_test, y_train, y_test = train_test_split(X,y,random_state=42)# 数据预处理
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)# 构建神经网络
mlp = MLPClassifier(hidden_layer_sizes=(10, 10), max_iter=1000)
mlp.fit(X_train,y_train)# 预测与评估
y_pre = mlp.predict(X_test)
accuracy = accuracy_score(y_test,y_pre)
report = classification_report(y_test,y_pre)
print("The accuracy is: {}".format(accuracy))
print("The report is: {}".format(report))

其结果如下:

The accuracy is: 1.0
The report is:               precision    recall  f1-score   support

           0       1.00      1.00      1.00        15
           1       1.00      1.00      1.00        11
           2       1.00      1.00      1.00        12

    accuracy                           1.00        38
   macro avg       1.00      1.00      1.00        38
weighted avg       1.00      1.00      1.00        38

(补充:在这篇文章中,整体的结构与介绍都与西瓜书的无异,因为这篇就是根据我这几日自学西瓜书时所作的笔记来写的,所以有些不同的地方是我自己的想法,故而可能会有差错,希望见到的人能告知于我)

此上

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/53745.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高校竞赛管理系统的设计与实现

摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统高校竞赛管理系统信息管理难度大,容错率低&am…

Ubuntu 开机自启动 .py / .sh 脚本,可通过脚本启动 roslaunch/roscore等

前言 项目中要求上电自启动定位程序,所以摸索了一种 Ubuntu 系统下开机自启动的方法,开机自启动 .sh 脚本,加载 ROS 环境的同时启动 .py 脚本。在 . py 脚本中启动一系列 ROS 节点。 一、 .sh 脚本的编写 #!/bin/bash # gnome-terminal -- …

Leetcode - 周赛416

目录 一,3295. 举报垃圾信息 二,3296. 移山所需的最少秒数 三,3297. 统计重新排列后包含另一个字符串的子字符串数目 I 四,3298. 统计重新排列后包含另一个字符串的子字符串数目 II 一,3295. 举报垃圾信息 本题就是…

Linux 安装nginx

下载安装 https://nginx.org/en/download.html 解压 tar -zxvf nginx-1.26.2.tar.gz -C /opt chmod 777 -R /opt/nginx-1.26.2/编译 && 安装 # 安装到同目录以免乱套,一定要先创建目录 mkdir /opt/nginx-1.26.2/nginx/# 编译 make # 安装,大…

将Mixamo的模型和动画导入UE5

首先进入Mixamo的官网 , 点击 Character 选择一个模型 (当然你也可以自己上传模型/绑定动画) 然后点击下载 , 这个作为带骨骼的模型 选择FBX格式 , T Pose 直接下载 点击 Animations 选择动画 , 搜索 idle 默认站立动画 点击下载 , 格式选择 FBX , 不带模型只要骨骼 , 帧数选6…

MySQL_表_进阶(2/2)

上一章我们谈了排序子句,使用ORDER BY 字段 DESC/ASC。以及左右连接的多关系查询。 今天,没错,四张表最后两个需求 ✨涉及聚合函数查询与指定别名 四张表: 学院表:(testdb.dept) 课程表:(testdb.course) 选…

Rust编程的if选择语句

【图书介绍】《Rust编程与项目实战》-CSDN博客 《Rust编程与项目实战》(朱文伟,李建英)【摘要 书评 试读】- 京东图书 (jd.com) Rust编程与项目实战_夏天又到了的博客-CSDN博客 Rust语言实现选择结构时,根据某种条件的成立与否而采用不同的程序段进行…

基于nodejs+vue的农产品销售管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏:Java精选实战项目…

FortiGate 无线组网

无线管理与配置 FortiAP 连接 internal 接口之后自动获得 ip 地址:192.168.1.xxx/24在 FortiGate 中创建 SSIDFortiGate 自动发现 FortiAP,将 FortiAP 添加到 FortiGate将 SSID 和 FortiAP 关联创建防火墙策略 下面我们就来一起看看在 FortiGate 中该如…

ModbusTCP通讯错误的排查

Modbus是一种由MODICON公司开发的工业现场总线协议标准,是一项应用层报文传输协议。该协议用于传输数字和模拟变量[1]。有关该协议的报文具体格式,以及一些基本概念,见[1]。 本文以一个例子,阐述当ModbusTCP通讯出现错误的时候&a…

开源鸿蒙OpenHarmony系统更换开机Logo方法,瑞芯微RK3566鸿蒙开发板

本文适用于开源鸿蒙OpenHarmony系统更换开机Logo,本次使用的是触觉智能的Purple Pi OH鸿蒙开源主板,搭载了瑞芯微RK3566芯片,类树莓派设计,是Laval官方社区主荐的一款鸿蒙开发主板。 介绍 OpenHarmony的品牌标志、版本信息、项目…

计算机毕业设计 基于Hadoop的智慧校园数据共享平台的设计与实现 Python 数据分析 可视化大屏 附源码 文档

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

探索EasyCVR视频融合平台:在视频编解码与转码领域的灵活性优势

随着视频监控技术的飞速发展,各类应用场景对视频数据的处理需求日益复杂多样。从公共安全到智慧城市,再到工业监控,高效、灵活的视频处理能力成为衡量视频融合平台性能的重要标准。在众多解决方案中,EasyCVR视频融合平台凭借其在视…

大觅网之自动化部署(Automated Deployment of Da Mi Network)

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 本人主要分享计算机核心技…

音视频整体解码流程和同步流程

目录 1. 整体解码流程1. 初始化 FFmpeg2. 打开媒体文件3. 查找解码器4. 打开解码器5. 读取和解码数据6. 处理解码后的帧7. 释放资源 2. 音视频同步整体流程1. 解复用媒体流2. 解码3. 以音频为时钟源进行音视频同步的策略4. 缓冲区设计 现在先说大体流程,不分析代码 …

使用python爬取豆瓣网站?如何简单的爬取豆瓣网站?

1.对python爬虫的看法 首先说说我对python的看法,我的专业是大数据,我从事的工作是java开发,但是在工作之余,我对python又很感兴趣,因为我觉得python是一门很好的语言,第一:它可以用来爬取数据…

如何使用 Rust 框架进行 RESTful API 的开发?

一、RESTful API 的开发 使用 Rust 框架进行 RESTful API 开发,你可以选择多种流行的 Rust Web 框架,如 Actix-web、Rocket、Warp 和 Tide 等。以下是使用这些框架进行 RESTful API 开发的基本步骤和概念: 选择框架:根据项…

探索 Snowflake 与 Databend 的云原生数仓技术与应用实践 | Data Infra NO.21 回顾

上周六,第二十一期「Data Infra 研究社」在线上与大家相见。活动邀请到了西门子数据分析师陈砚林与 Databend 联合创始人王吟,为我们带来了一场关于 Snowflake 和 Databend 的技术探索。Snowflake,这个市值曾超过 700 亿美元的云原生数据仓库…

李宏毅机器学习2023-HW10-Adversarial Attack

文章目录 TaskBaselineFGSM (Fast Gradient Sign Method (FGSM)I-FGSM(Iterative Fast Gradient Sign Method)MI-FGSM(Momentum Iterative Fast Gradient Sign Method)M-DI2-FGSM(Diverse Input Momentum Iterative Fast Gradient Sign Method) Reportfgsm attackJepg Compress…

性能优化与资源管理:优化Selenium脚本的执行效率,合理管理浏览器实例和系统资源

目录 引言 一、Selenium基础与常用方法 1.1 Selenium简介 1.2 Selenium基础用法 二、Selenium性能优化技巧 2.1 使用WebDriverWait实现显式等待 2.2 启用无头模式 2.3 设置合理的页面加载策略 2.4 禁用图片和JavaScript加载 2.5 优化元素定位 2.6 合理使用隐式等待和…