[有监督学习] 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_score

data = 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

本篇文章仅用于学习和研究目的,不会用于任何商业用途。引用书籍《图解机器学习算法》的内容旨在分享知识和启发思考,尊重原著作者宫崎修一和石田保辉的知识产权。如有侵权或者版权纠纷,请及时联系作者。
———————————————————————————————————————————

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

五分钟“手撕”栈

实现代码放开头,供大家学习与查阅 目录 一、实现代码 二、什么是栈 三、栈的常见操作 底层实现是链表。 入栈 出栈 四、Stack的使用 五、栈的习题 第一题 第二题 第三题 第四题 第五题 第六题 第七题 六、栈、虚拟机栈、栈帧的区别 目录 一、…

Python的第三方库OS库

读者大大们好呀!!!☀️☀️☀️ 🔥 欢迎来到我的博客 👀期待大大的关注哦❗️❗️❗️ 🚀欢迎收看我的主页文章➡️寻至善的主页 文章目录 🔥前言🚀OS/SHUTIL 的方法描述🚀OS/SHUTIL…

Streamsets-JDBC模式使用更新时间字段数据同步

StreamSets的开源地址:https://github.com/streamsets/datacollector-oss Streamsets官网地址:https://streamsets.com/ Streamsets文档地址:https://docs.streamsets.com/portal/datacollector/3.16.x/help/index.html 我又来写Streamsets了…

安全测试扫描利器-Burpsuite

🔥 交流讨论:欢迎加入我们一起学习! 🔥 资源分享:耗时200小时精选的「软件测试」资料包 🔥 教程推荐:火遍全网的《软件测试》教程 📢欢迎点赞 👍 收藏 ⭐留言 &#x1…

全自动打包封箱机:解析其在产品质量与安全保障方面的作用

在当今快节奏的生产环境中,全自动打包封箱机以其高效、精准的特点,正逐渐成为生产线上的得力助手。它不仅提升了生产效率,更在产品质量与安全保障方面发挥着举足轻重的作用。星派将详细解析全自动打包封箱机在产品质量与安全保障方面的作用。…

自监督表示学习和神经音频合成实现语音修复

关键词:语音修复、自监督模型、语音合成、语音增强、神经声码器 语音和/或音频修复的目标是增强局部受损的语音和/或音频信号。早期的工作基于信号处理技术,例如线性预测编码、正弦波建模或图模型。最近,语音/音频修复开始使用深度神经网络&a…

Qt | QSplitter(分离器或分隔符)、QSplitterHandle 类(分界线)

​01、一、QSplitter 类(分离器) 1、QSplitter 类继承自 QFrame 类,也就是说该类是一个带有边框的可视部件。 2、QSplitter 类实现分离器,分离器用于分离两个部件,用户可通过拖动部件之间的分界线来调整子部件的大小。 3、QSplitter 的原理(见上图):QSplitter 的实现原理…

AWS中国峰会2024 半日游

亚马逊云科技中国峰会于2024年5月29-30日在上海举办 今年就去了半天,去年也是去过的,不过今年的活动个人感觉比去年略微凌乱了一点。 今年的峰会方向和去年一致,均是AI方向的各项内容(基础架构、安全、服务、游戏、驾驶、各行各…

浅谈防勒索病毒的关键

主机加固能否做好防勒索病毒的工作,一直是网络安全领域的重要议题。随着信息技术的飞速发展,勒索病毒等网络威胁层出不穷,对企业和个人数据安全构成了严重威胁。因此,如何通过主机加固提升安全防护能力,防止勒索病毒的…

大模型管理工具Ollama搭建及整合springboot

目录 一、Ollama介绍 1.1 什么是Ollama 1.2 Ollama特点与优势 二、Ollama本地部署 2.1 版本选择 2.2 下载安装包 2.3 执行安装 2.4 Ollama常用命令 三、使用Ollama部署千问大模型 3.1 千问大模型介绍 3.2 部署过程 四、springboot接入Ollama 4.1 引入Ollama依赖 4…

音频信号分析与实践

音频信号分析与实践课程,方便理解音频信号原理和过程 1.音频信号采集与播放 两种采样模式和标准的采样流程 人说话的声音一般在2kHz一下: 采样频率的影响:采样率要大于等于信号特征频率的2倍;一般保证信号完整,需要使用10倍以上的…

python找出100~999之间的水仙花数字

水仙花数字:个位,十位,百位的立方之和等于这个数本身 例如:153 1^35^33^3 for i in range(100, 1000):bw i // 100sw i % 100 // 10gw i % 10if bw ** 3 sw ** 3 gw ** 3 i:print(i)

SpringBoot读取json文件

使用SpringBoot读取json文件作为接口&#xff0c;前端Vue可以通过跨域访问接口数据 一、创建SpringBoot 文件 创建一个 SpringBoot 文件&#xff0c;文件结构目录如下&#xff1a; 二、在pom.xml添加依赖 <!--Spring Boot 依赖--> <parent><artifactId>sp…

WireShark下载安装

下载地址 WireShark站内下载资源&#xff1a;&#xff08;土豪方便下载&#xff09; https://download.csdn.net/download/qq_58662768/89377088 官网下载&#xff1a; Wireshark Go Deep 进入主页后&#xff0c;选择Get Acquainted&#xff0c;再选择Download。 选择合适…

TPL0401B使用教程

1.前言 前面做程控放大器的时候&#xff0c;有除开AD602&#xff0c;还有一个AD620&#xff0c;性能更好&#xff0c;不过是通过外部电阻来控制放大倍数的&#xff0c;不过要是接滑动变阻器就太不优雅了&#xff0c;而且单片机怎么控制滑动变阻器&#xff1f;&#xff08;难不…

linux 内核哪种锁可以递归调用 ?

当数据被多线程并发访问(读/写)时&#xff0c;需要对数据加锁。linux 内核中常用的锁有两类&#xff1a;自旋锁和互斥体。在使用锁的时候&#xff0c;最常见的 bug 是死锁问题&#xff0c;死锁问题很多时候比较难定位&#xff0c;并且影响较大。本文先会介绍两种引起死锁的原因…

简易版本的QFD质量屋

比如餐馆要考虑什么因素最重要&#xff0c;这里列出好吃&#xff0c;快速&#xff0c;便宜三类问题&#xff0c;然后设置上图的权重&#xff0c; 然后设置9&#xff0c;3&#xff0c;1三类因子&#xff0c;9比如是最重要的&#xff0c;3&#xff0c;1&#xff0c;依次没那么重要…

开发一个comfyui的自定义节点-支持输入中文prompt

文章目录 目标功能开发环境实现过程翻译中文CLIP编码拓展仓库地址完整代码目标功能 目前comfyui的prompt提示词输入节点 CLIP Text Encode 只支持输入英文的prompt,而有时候我们需要自己制定一些prompt,所以就得将我们想要的提示词翻译为英文后再复制粘贴到该节点的输入框中…

算法练习第26天|46.全排列、47全排列II

46.全排列 46. 全排列 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/permutations/description/ 题目描述&#xff1a; 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1&#xff1a;…

C++STL---vector模拟实现

通过上篇文章&#xff0c;我们知道vector的接口实际上和string是差不多的&#xff0c;但是他俩的内部结构却大不一样&#xff0c;vector内有三个成员变量&#xff1a;_start、_finish、_endofstorage: _start指向容器的头元素&#xff0c;_finish指向有效元素末尾的元素&#x…