[有监督学习] 8.详细图解神经网络
神经网络
一直以来,人们都认为神经网络(Neural Network,NN)是模仿生物体的神经网络设计而成的。神经网络既可以用于回归,也可以用于分类,但在实际应用中常用于分类。基于神经网络的深
度学习因在图像识别和语音识别等领域表现优异而广为人知。
概述
神经网络在输入数据和输出结果之间插入了叫作中间层的层,能够学习复杂的决策边界。它既可以用于回归,也可以用于分类,但主要还是应用于分类问题。本节也以分类问题为例进行说明。
图 2-35 是一个典型的神经网络的网络结构。
▲图 2-35 神经网络的典型网络结构
在图 2-35 中,输入数据为三维数据,中间层为二维数据,输出为一维数据(关于从输入层到中间层、从中间层到输出层之间的计算,后面的“算法说明”部分将详细介绍)。左端的层叫作输入层,表示输入数据本身。右端的层叫作输出层,取输入数据分类结果的概率。在二元分类的情况下,输出层输出的概率只有一个。在多元分类的情况下,输出层同时输出属于每个分类对象的标签的概率。通过在输入层和输出层中间叠加中间层,神经网络得以学习复杂的决策边界。
下面我们将神经网络应用于具体任务,查看它的结果。本节将对一个叫作 MNIST 的手写数字数据集进行分类。MNIST 包含从 0 到 9 的 10 个手写数字的图片,我们对图片进行分类。MNIST 的图片是 8 × 8 的灰度图像,如图 2-36 所示。
▲图 2-36 MNIST 手写数字数据示例
本次创建的神经网络如图 2-37 所示,图中省略了各个节点之间的连接线。
▲图 2-37 MNIST 的神经网络示意图
输入层表示输入图像(64 维向量)本身。如果将各个点的像素值存储在长度为 64 的一维数组的元素中,则可以将其视为 64 维数据来处理。下面通过神经网络来学习使用上述方法得到的 64 维数据。
中间层使用 Sigmoid 等非线性函数计算输入层传来的数据。中间层的维度是超参数。使维度变大可以学习更加复杂的边界,但是容易发生过拟合。本次设置中间层为 16 维。下面的“算法说明”部分将再次介绍中间层的计算方法、中间层的维度和学习结果的关系。
输出层也同样使用非线性函数计算中间层传来的数据。本次任务是对 0~9 这 10 个数字进行分类。因此,输出层输出的是输入手写图像分别为 0~9 这 10 个数字的概率。
下面使用这个神经网络进行学习,并进行分类(图 2-38)。
▲图 2-38 使用神经网络进行分类
图中的 Label 代表作为正确答案的数字,Prediction 代表作为神经网络的分类结果的数字,下方的图像是输入数据。可以看出,神经网络可以正确地识别出这些手写数字。
算法说明
通过叠加中间层,神经网络可以学习复杂的决策边界。下面首先介绍一下只由输入层和输出层构成的简单感知机,然后再探讨如何通过叠加中间层来学习更加复杂的决策边界。
简单感知机
简单感知机是将非线性函数应用于对特征值加权后的结果并进行识别的模型。下面看一个例子:某特征的维度为 2,输入的特征值为
,使用下面的非线性函数 f 计算概率 y:
我们将其中的特征值的系数 w1 和 w2 称为权重,将常数项 w0 称为偏置。权重和偏置都是学习参数。非线性函数 f 叫作激活函数,它以加权后的特征值之和作为输入,计算概率y。常用的激活函数有 Sigmoid 函数等。
图 2-39 的左边是简单感知机的示意图,展示了如何对加权后的输入和偏置之和应用激活函数并计算输出。我们有时也可以像图 2-39 右边那样省略求和的部分和激活函数,只显示输入和输出部分。在这种简化图中常常省略节点的变量名。
▲图 2-39 权重和激活函数的关系
简单感知机与逻辑回归具有类似的特性。其实在用 Sigmoid 函数作为激活函数 f 时,简单感知机和逻辑回归是等价的。
神经网络
通过叠加简单感知机,神经网络得以表示复杂的决策边界。简单感知机不能很好地学习某些数据的决策边界。逻辑回归无法成功地对非线性决策边界进行分类,简单感知机也是如此。比如,对于如图 2-40 所示的线性不可分的数据,简单感知机无法进行正确分类。
▲图 2-40 简单感知机无法正确分类的例子
神经网络通过下面介绍的方式解决这个问题。首先,设置区分右上角的点和其他点的层、区分左下角的点和其他点的层。这些夹在输入和输出之间的层叫作中间层或隐藏层。然后,设置综合这两个输出结果并进行最终决定的层。通过这种做法,我们就可以根据数据是否进入被两条直线夹住的地方来分类了。
图 2-41 的左侧表示各个层的学习情况,右侧是模型的示意图。右图表示从二维输入到两个中间层的输出,再到得到最终的输出的过程。图中的节点表示特征及其输出等变量,边表示用于进行下一个变量的计算的输入。
▲图 2-41 神经网络的结构
神经网络通过这种设置中间层的方式,可以利用单一算法学习各种决策边界。通过调节中间层的数量及层的深度,神经网络可以学习更复杂的边界,如图 2-42 所示。
▲图 2-42 神经网络的示意图
示例代码
下面读取“概述”部分提到的 MNIST 数据集,将其分割成训练数据和验证数据,使用训练数据训练模型,使用验证数据评估正确率。每次运行结果都有所不同,不过结果的正确率都在 95% 左右。
from sklearn.datasets import load_digits
from sklearn.neural_network import MLPClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_scoredata = load_digits()
X = data.images.reshape(len(data.images), -1)
y = data.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
model = MLPClassifier(hidden_layer_sizes=(16, ))
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
accuracy_score(y_pred, y_test)
结果:
0.9629629629629629
详细说明
通过增加中间层的数量和增加中间层的节点数量等方法,神经网络可以学习复杂的数据。但是,模型变得复杂之后容易过拟合。下面介绍一种名为 Early Stopping(早停法)的防止过拟合的方法。
Early Stopping
Early Stopping是指在进入过拟合状态前停止训练的防止过拟合的方法。与正则化的方法相比,它让人觉得有些不一样。
Early Stopping进一步划分训练数据,将其中一部分作为训练中的评估数据。在训练过程中使用评估数据,依次记录损失等评估指标,以了解训练的进度。在训练过程中,如果评估数据的损失开始恶化,开始出现过拟合的趋势,就停止训练,结束学习。这种在过拟合之前停止训练的做法就叫作Early Stopping(图 2-43 Early Stopping)

▲图 2-43 Early Stopping
———————————————————————————————————————————
文章来源:书籍《图解机器学习算法》
作者:秋庭伸也 杉山阿圣 寺田学
出版社:人民邮电出版社
ISBN:9787115563569
本篇文章仅用于学习和研究目的,不会用于任何商业用途。引用书籍《图解机器学习算法》的内容旨在分享知识和启发思考,尊重原著作者宫崎修一和石田保辉的知识产权。如有侵权或者版权纠纷,请及时联系作者。
———————————————————————————————————————————
相关文章:
[有监督学习] 8.详细图解神经网络
神经网络 一直以来,人们都认为神经网络(Neural Network,NN)是模仿生物体的神经网络设计而成的。神经网络既可以用于回归,也可以用于分类,但在实际应用中常用于分类。基于神经网络的深 度学习因在图像识别和…...
我给线程池管理框架hippo4j找bug
1 虚拟机参数不生效 hippo4j的docker启动脚本位于 docker/docker-startup.sh 。从下图可以看到 JAVA_OPT放在了jar包名 hippo4j-server.jar之后,而只有项目参数才放在jar包名之后。 实际上这里JAVA_OPT中包含虚拟机参数,而虚拟机参数要放在jar包名之前…...
win10键盘按乱了,如何恢复?
今天键盘被宝宝给按乱了,好不容易给重新调整回来,记录备忘: 1、win10的asdw和方向键互换了: 使用Fnw键来回切换,OK! 2、键盘的win键失效,例如:按winD无法显示桌面。此时…...
5.29工效学-人因工程人机交互
对于工效学这门课,一直都感觉很有意思,是一个值得再认真一点的课。可惜上课的时候效率不高,有感兴趣的东西课后也没有自行去拓展开来,前面的课我感觉还讲了比较重要的东西,但是,全忘了呢(真的对…...
头歌数据结构与算法课程设计中-硬币找零
给定n种不同面值的硬币k_i和每种硬币的数量x_i以及一个总金额k,请编写一个程序计算最少需要几枚硬币凑出这个金额k,凑出的方案是什么? 如果凑不出则输出“凑不出” 输入描述: 第一行两个正整数,n和k 然后n行每行两个数k_i和x_i 表示k_i面值的硬币有x_i个,中间以空格分隔 输…...
Golang的内存关系
1.Page Golang的Page,在操作系统对虚拟内存管理的MMU定义的物理页有相似的定义,默认的Page为8KB 2.mSpan 多个连续的Page称之为是一个Span,其定义含义有操作系统的管理的页表相似 3.Size Class Size Class: 相当于 一个等级和刻度, 比如 第二等级 就代表 一个Pag…...
VRTK4.0学习——(二)
手柄绑定以及显示 1.导入CameraRigs.UnityXRPluginFramework 和 CameraRigs.TrackedAlias 预设,将CameraRigs.UnityXRPluginFramework拖入CameraRigs.TrackedAlias的Elements中即可,运行软件后即可看到手柄了 注:如果无法看到手柄ÿ…...
体验Photoshop:无需下载,直接在浏览器编辑图片
搜索Photoshop时,映入眼帘的是PS软件下载,自学PS软件需要多长时间,学PS软件有必要报班吗...PS软件的设计功能很多,除了常见的图像处理功能外,还涉及图形、文本、视频、出版等。不管你是平面设计师,UI/UX设计…...
Codeforces Round 895 (Div. 3)(A,B,C)题解(自己VP的,没有参加这场比赛)
A. Two Vessels 题解: 这题直接计算两个杯子之间的差值,然后直接除以2倍杯子的容量直接过,没有任何难度 #include<bits/stdc.h> using namespace std;int t; int a,b,c;int main() {cin>>t;while(t--){cin>>a>>b>…...
9秒爬取庆余年2分集剧情
版本一: 要创建一个Python爬虫程序来爬取指定网站的分集剧情,我们需要使用requests库来发送HTTP请求,以及BeautifulSoup库来解析HTML内容。以下是一个简单的示例,展示了如何爬取你提供的网站的分集剧情,并将每集剧情保存到本地的.txt文件中。 首先,确保你已经安装了req…...
阿里云布置net core 项目
一、 创建镜像 给镜像添加触发器,编译的时候会触发k8s集群里的taget链接,从而更新项目 二,创建k8s集群 使用镜像创建 添加基本信息 镜像名称:镜像仓库》基本信息公网地址镜像Tag:创建镜像时的镜像版本镜像配置为:总…...
两整数之和 ---- 位运算
题目链接 题目: 分析: 题目中要求不能使用-, 考虑到我们的位运算异或^, 是无进位加法, 可以使用如果是无进位加法, 那么我们就要找到进位, 并进行计算, 进位只有1和1相加时才会产生进位1, 而0和1相加无进位, 进位为0, 那么我们就想到了&运算, 1&1 1, 0&1 0, 所…...
长城电脑压缩文件丢失了怎么办?怎么解决
在数字化时代,电脑已成为我们日常生活和工作中不可或缺的设备。长城电脑作为国内知名品牌,以其稳定可靠的性能赢得了广大用户的信赖。然而,即便是可靠的电脑,也难免会遇到一些问题。其中,压缩文件丢失无疑是一个令人头…...
论文笔记《基于深度学习模型的药物-靶标结合亲和力预测》
基于深度学习模型的药物-靶标结合亲和力预测 这是一篇二区的文章,算是一个综述,记录一下在阅读过程中遇到的问题。 文章目录 基于深度学习模型的药物-靶标结合亲和力预测前言一、蛋白质接触图谱二、为什么蛋白质图谱的准确性对DTA模型预测结果没有影响1…...
ArrayList和LinkedList对比,ArrayList使用注意事项
ArrayList和LinkedList对比,ArrayList使用注意事项 ArrayList 和 LinkedList 是 Java 中常用的两种集合类,它们在内部实现和性能上有一些重要的区别。 ArrayList: ArrayList 是基于动态数组实现的。它内部使用一个数组来存储元素,当数组空间…...
小熊家务帮day5-day7 客户管理模块1 (小程序认证,手机验证码认证,账号密码认证,修改密码,找回密码等)
客户管理模块 1.认证模块1.1 认证方式介绍1.1.1 小程序认证1.1.2 手机验证码登录1.1.3 账号密码认证 1.2 小程序认证1.2.1 小程序申请1.2.2 创建客户后端工程jzo2o-customer1.2.3 开发部署前端1.2.4 小程序认证流程1.2.4.1 customer小程序认证接口设计Controller层Service层调用…...
计算机图形学入门02:线性代数基础
1.向量(Vetors) 向量表示一个方向,还能表示长度(向量的摸)。一般使用单位向量表示方向。 向量加减:平行四边形法则、三角形法则。比卡尔坐标系描述向量,坐标直接相加。 1.1向量点乘(…...
函数:计算数组的元素和
一、计算数组的元素和 参数传递给函数时,实际上只有数组的首地址作为指针传递给了函数。 在函数定义中的int a[ ]等价于int *a。在只有地址信息的情况下,是无法知道数组里有多少个元素的,因此在计算数组中的元素和时,要加一个参…...
如何进行数据库分库分表
当数据库的数据量增长到一定程度,单一数据库或表可能会遇到性能瓶颈,此时分库分表是一种常见的解决方案。以下是如何进行数据库分库分表的详细步骤和考虑因素,结合了参考文章中的相关信息: 一、分库分表概述 分库分表是为了解决…...
Spring-Cloud-CircuitBreaker-Resilience4j (3.1.1)
介绍 Resilience4j 是一个专为函数式编程而设计的轻量级容错库。Resilience4j 提供高阶函数(装饰器),以增强任何功能接口、lambda 表达式或方法引用,包括断路器、速率限制器、重试或隔板。您可以在任何函数接口、lambda 表达式或…...
华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...
MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...
