机器学习15:神经网络-Neural Networks

news2024/11/16 19:39:10

神经网络是特征交叉的更复杂版本。本质上,神经网络会学习适当的特征组合。本文主要介绍神经网络的结构、隐藏层、激活函数等内容。

目录

1.神经网络:结构

2.隐藏层

3.激活函数

3.1 常用激活函数

3.2 小结

4.神经网络小练习

4.1 第一个神经网络

4.2 神经网络螺旋

5.参考文献


1.神经网络:结构

在【机器学习8】中,笔者介绍了特征组合(特征交叉),用于解决非线性的分类问题,如图 1 所示:

图 1. 非线性分类问题

“非线性” 意味着我们无法使用以下形式(如:b+w_{1}x_{1}+w_{2}x_{2})的模型准确预测标签, 换句话说,“决策面”不是一条线。之前,我们将 特征交叉 视为非线性问题建模的一种可能方法。现在考虑以下数据集:

图 2. 更困难的非线性分类问题

很显然,图 2 所示的数据集无法使用线性模型求解。为了了解神经网络如何帮助解决非线性问题,我们首先将线性模型表示为图形:

图 3. 线性模型如图所示

图 3 中,每个蓝色圆圈代表一个输入特征,绿色圆圈代表输入的加权和。我们如何改变这个模型以提高其处理非线性问题的能力?

2.隐藏层

在图 4 所示的模型中,我们添加了中间值的 “隐藏层”。隐藏层中的每个黄色节点都是蓝色输入节点值的加权和。输出是黄色节点的加权和。

图 4. 两层模型图

这个模型是线性的吗?是的——它的输出仍然是其输入的线性组合。在下图所示的模型中,我们添加了第二个加权和隐藏层。

图 5. 三层模型图

这个模型仍然是线性的吗?——是的。当我们将输出表示为输入的函数并进行简化时,我们将得到输入的另一个加权和。该总和无法有效地模拟图 2 中的非线性问题。

3.激活函数

为了对非线性问题进行建模,我们可以直接引入非线性。我们可以通过非线性函数对每个隐藏层节点进行管道传输。

在图 6 所示的模型中,隐藏层 1 中每个节点的值在传递到下一层的加权和之前先通过非线性函数进行变换。这种非线性函数称为激活函数。

图 6. 具有激活函数的三层模型图

现在我们已经添加了激活函数,添加层会产生更大的影响。通过在非线性上叠加非线性,我们可以对输入和预测输出之间非常复杂的关系进行建模。简而言之,每一层都在原始输入上有效地学习更复杂、更高级别的函数。

3.1 常用激活函数

以下 sigmoid 激活函数将加权和转换为 0 到 1 之间的值。

F(x)=\frac{1} {1+e^{-x}}

sigmoid 函数的图像如图 7 所示

图 7.Sigmoid 激活函数

下面的修正线性单元激活函数(简称 ReLU)通常比 sigmoid 等平滑函数效果更好,同时也更容易计算。

F(x)=max(0,x)

由于 ReLU 具有更有用的响应范围,在实践中,ReLU 具有一定优越性。相较于 sigmoid ,ReLU 两侧下降得相对较快。

图 8.ReLU 激活函数

事实上,任何数学函数都可以充当激活函数。假设 \sigma 代表我们的激活函数(Relu、Sigmoid 或其他函数)。因此,网络中节点的值由以下公式给出:

\sigma(\boldsymbol w \cdot \boldsymbol x+b)

TensorFlow 为许多激活函数提供开箱即用的支持。我们可以在 TensorFlow 的神经网络包装器列表中找到这些激活函数。不过,在学习机器学习时,建议从 ReLU 开始。

3.2 小结

根据上面的介绍,关于“神经网络” 模型,通常具有如下标准组件:

  • 一组节点,类似于神经元,分层组织。
  • 一组权重,表示每个神经网络层与其下面的层之间的连接。下面的层可能是另一个神经网络层,或某种其他类型的层。
  • 一组偏差,每个节点一个。
  • 转换层中每个节点的输出的激活函数。不同的层可能有不同的激活函数。

需要注意的是:神经网络不一定总是比特征交叉更好,但神经网络确实提供了一种在许多情况下效果良好的灵活替代方案。

4.神经网络小练习

4.1 第一个神经网络

对于如图 9 所示的非线性数据集,我们将训一个小神经网络。神经网络将为我们提供一种学习非线性模型的方法,而无需使用显式特征交叉。

图 9.非线性数据集

 

任务 1:给定的模型将我们的两个输入特征组合到一个神经元中。这个模型会学习任何非线性吗?运行它来确认您的猜测。

图 10.隐藏层一个节点+线性激活函数

显然,由于激活设置为 Linear,因此该模型无法学习任何非线性。损失非常高,我们说模型与 数据拟合不足。

任务 2:尝试将隐藏层中的神经元数量从 1 个增加到 2 个,并尝试从线性激活更改为 ReLU 等非线性激活。如此,能创建一个可以学习非线性的模型吗?它可以有效地对数据进行建模吗?

结果:如图 11 所示,非线性激活函数可以学习非线性模型。然而,具有 2 个神经元的单个隐藏层无法反映该数据集中的所有非线性,并且即使没有噪声也会产生很高的损失:它仍然 不适合数据。这些练习是不确定的,因此有些运行无法学习有效的模型,而其他运行则可以做得很好。最好的模型可能没有您期望的形状!

图 11.隐藏层两个节点+ReLU激活函数

任务 3:尝试使用 ReLU 等非线性激活将隐藏层中的神经元数量从 2 个增加到 3 个。它可以有效地对数据进行建模吗?每次运行的模型质量有何不同?

结果:如图 12 所示,具有 3 个神经元的单个隐藏层足以对数据集进行建模(无噪声),但并非所有运行都会收敛到良好的模型。3 个神经元就足够了,因为 XOR 函数可以表示为 3 个半平面的组合(ReLU 激活)。在具有 3 个神经元和 ReLU 激活的良好模型中,将有 1 个具有几乎垂直线的图像,检测 X1 为正(或负;符号可以切换),1 个具有几乎水平线的图像,检测 X1 的符号 X2 和 1 个带有对角线的图像,检测它们的相互作用。

图 12.隐藏层三个节点+ReLU激活函数

 

任务 4:通过添加或删除隐藏层和每层神经元继续进行实验。还可以随意更改学习率、正则化和其他学习设置。 可以使用的最小神经元数和层数是多少,才能使测试损失达到 0.177 或更低?

结果:具有 3 个神经元的单个隐藏层可以对数据进行建模,但没有冗余,因此有时候无法学习到好的模型。具有超过 3 个神经元的单层具有更多冗余,因此更有可能收敛到良好的模型。

正如我们所看到的,只有 2 个神经元的单个隐藏层无法很好地对数据进行建模。如果尝试一下,将会发现输出层中的所有项目只能是由这两个节点的线条组成的形状。在这种情况下,更深的网络可以比单独的第一个隐藏层更好地对数据集进行建模:第二层中的各个神经元可以通过组合第一层中的神经元来建模更复杂的形状,例如右上象限。虽然添加第二个隐藏层仍然可以比单独第一个隐藏层更好地对数据集进行建模,但向第一层添加更多节点以使更多线条成为第二层构建其形状的套件的一部分可能更有意义。

图 12 二个隐藏层三个节点+ReLU激活函数

 

然而,第一个隐藏层只有 1 个神经元的模型无论多深都无法学习到好的模型。这是因为第一层的输出仅沿一个维度(通常是对角线)变化,这不足以很好地对该数据集进行建模。无论多么复杂,后面的层都无法弥补这一点;输入数据中的信息已不可恢复地丢失。

对于像这样的简单问题,如果我们不尝试建立一个小型网络,而是拥有许多包含大量神经元的层,该怎么办?正如我们所看到的,第一层将能够尝试许多不同的线斜率。第二层将有能力将它们累积成许多不同的形状,并在后续层中形成大量的形状。

通过允许模型通过如此多不同的隐藏神经元考虑如此多不同的形状,我们已经为模型创建了足够的空间,可以轻松地过度拟合训练集中的噪声,从而允许这些复杂的形状匹配训练数据缺点而不是普遍的基本事实。在此示例中,较大的模型可能具有复杂的边界以匹配精确的数据点。在极端情况下,大型模型可以学习单个噪声点周围的 “岛屿”,这称为 记忆 数据。通过允许模型变得更大,我们会发现它实际上通常比仅具有足够神经元来解决问题的更简单模型表现更差

4.2 神经网络螺旋

如图 13 所示,该数据集是一个嘈杂的螺旋。显然,线性模型在这里会失败,但即使是手动定义的特征交叉也可能很难构建。

图 13. “嘈杂”的数据集

任务 1:仅使用 X1和 X2 训练尽可能最好的模型。随意添加或删除层和神经元,更改学习设置,例如学习率、正则化率和批量大小。您可以获得的最佳测试损失是多少?模型输出表面的光滑程度如何?

任务 2:即使使用神经网络,通常也需要进行一定量的特征工程才能实现最佳性能。尝试添加额外的叉积特征或其他转换,例如 sin(X 1 ) 和 sin(X 2 )。你有更好的模型吗?模型输出表面是否更加平滑?

图 14. “嘈杂”的数据集训练结果

上面的任务1和任务2,通过实验发现,对于这种“嘈杂”的数据集,训练模型时需要更多的层、神经元、组合特征才能训练出较低损失的模型。

5.参考文献

链接-https://developers.google.cn/machine-learning/crash-course/introduction-to-neural-networks/video-lecture

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

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

相关文章

异步请求(Ajax,axios,json)

同步/异步请求 表单(前端)向后端发送请求,属于同步请求 同步: 发一个请求, 给一个回应, 会用回应的内容覆盖掉浏览器中内容,这样会打断前端其他的正常操作,在现在的前端中,显得不太友好。 异步: 不同步 前端正常输入时…

腾讯云部署vitepress,高颜值文档博客

首先上官方网站。https://vitepress.dev/ 先看两张效果图。 一定要用这个官网,之前看了一个翻译版本,好像翻了一半不弄了,坑了半天时间也解决不了。目前看起来还没有官翻。 目前使用到的是腾讯云的轻量应用服务器,效果还是非常好…

【CSDN新星计划】初阶牛C/C++赛道——顺序程序设计(数据的表现形式及其运算)

目录 🍊1.数据的表现形式及其运算 🍉1.1常量和变量 🍀1.1.1常量 🍀1.1.2变量 🍀1.1.3常变量 🍀1.1.4标识符 🍉1.2数据类型 🍉1.3整型数据 🍀1.3.1整型数据的分类…

FCPX插件Stupid Raisins Split Pop 2(视频照片动画拆分效果插件)

Stupid RAIsins Split Pop是一个视频照片动画拆分效果插件,它允许您在Final Cut Pro,Motion,Premiere Pro和After Effects中使用。fcpx插件Split Screen非常适合用视频和照片创建动画分割,专为4K UHD和高清视频而设计,…

RAID5重建失败的服务器数据恢复案例

服务器数据恢复环境: 一台IBM某型号服务器,4块SAS磁盘组建了一组RAID5磁盘阵列。服务器安装的windows server操作系统,上面运行了一个Oracle单节点,数据存储为文件系统,无归档。该oracle数据库的数据量不大&#xff0c…

Python爬虫——批量下载微信公众号图片

目标: 微信公众号是现代社交媒体中最受欢迎的平台之一,每天都有数以百万计的人在浏览不同的公众号,其中大部分都包含了图片内容。如果你是一位公众号的管理员或者粉丝,你可能想要在本地保存一些感兴趣的图片。但是,微…

GIT下载安装

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

函数中的 static int 变量

#include <iostream>using namespace std;void function( ) {static int a 3 ; // 不赋值的话是 a 等于0&#xff1b;cout<<"a"<<a<<endl;aa3;cout<<"a"<<a<<endl;}int main(int argc, char** argv) {cout&l…

Apache DolphinScheduler 荣获“掘进技术引力榜”「2023 年度 ROBUST 开源项目」奖项!

经过紧张激烈的投票和严格的专家评审环节&#xff0c;“掘进技术引力榜”活动在上周的稀土掘金开发者大会上公布了「2023 年度 ROBUST 开源项目」奖项的获奖名单&#xff0c;Apache DolphinScheduler 名列其中。 Apache DolphinScheduler 代表上台领奖&#xff08;右三&#x…

蓝桥杯专题-真题版含答案-【蚂蚁感冒】【地宫取宝】【波动数列】【李白打酒】

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…

Java开发的打包和分发机制之jar包

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于jar包的相关操作吧 一.什么是jar包 "jar包"是Java Archive的缩写&#xff0c;它是一种用于打包Java类、资源文件、库等内容的文件格式Jar包是一种特…

flutter聊天界面-聊天气泡长按弹出复制、删除按钮菜单

flutter聊天界面-聊天气泡长按弹出复制、删除按钮菜单 在之前实现了flutter聊天界面的富文本展示内容&#xff0c;这里记录一下当长按聊天气泡的时候弹出复制、删除等菜单功能 一、查看效果 当长按聊天气泡的时候弹出复制、删除等菜单&#xff0c;可新增更多按钮 二、代码实现…

【网络安全带你练爬虫-100练】第8练:json数据的最小项提取

目录 一、目标1&#xff1a;爬取指定json中数据 二、目标2&#xff1a;循环取json中数据 三、目标3&#xff1a;提取每个数据中的某一项 四、网络安全小圈子 一、目标1&#xff1a;爬取指定json中数据 爬取data里数据 核心代码&#xff1a; dirt1 json.loads(res.text)pr…

奉劝各位项目经理,最好别参加8月PMP考试了……

早上好&#xff0c;我是老原。 上周我看到一篇介绍考证的文章&#xff0c;结果在热评看到了PMP证书。 不得不承认&#xff0c;PMP证书现在的火热程度已经超过了我们的想象。前几年我选择考PMP&#xff0c;也只是为了在求职的时候多个优势。 但是现在&#xff0c;几乎我周围所…

ThreadLocal使用场景介绍以及关于内存泄漏的探讨

目录 1. 使用场景一&#xff1a;线程隔离 2. 使用场景二&#xff1a;使用ThreadLocal进行跨函数数据传递 3. ThreadLocal导致的内存泄漏问题 4. ThreadLocal在Spring框架中的应用 5. 扩展&#xff1a;InheritableThreadLocal 转载&#xff1a;【Java】ThreadLocal使用场景…

字节、数据位、ascii码、RS232串口、modbus协议

RS232通信协议详解 - 百度文库 ASCII_百度百科 ascii码表 modebus协议 - 百度文库https://wenku.baidu.com/view/58aae6134431b90d6c85c7b6.html?_wkts_1688713246949&bdQueryascii%E7%A0%81modelbus%E7%A0%81 Modbus 的RTU、ASCII、TCP傻傻搞不清楚&#xff1f;一文全…

归并排序的应用—逆序对的个数

一、&#xff08;题目&#xff09; 给定一个长度为 n 的整数数列&#xff0c;请你计算数列中的逆序对的数量。 逆序对的定义如下&#xff1a;对于数列的第 i个和第 j 个元素&#xff0c;如果满足 i<j且 a[i]>a[j]&#xff0c;则其为一个逆序对&#xff1b;否则不是。 输…

吐血整合!风控与反欺诈相关数据来源(上)

本文会分上、下两篇&#xff0c;介绍各种风控与反欺诈相关的数据来源&#xff0c;包括其主要的数据维度和产品服务形态。 目录&#xff1a; 人行二代征信 持牌征信机构数据 司法大数据 航旅大数据 铁路大数据 税务大数据 交通大数据 电力大数据 保险大数据 人社大数据 一、人行…

vs2019打包发布c#编写的exe应用

由于该应用还要引用其它的exe应用&#xff0c;所以 .NET Framework 4.6.2 脱机安装程序Windows - Microsoft 支持 参考下面的配置即可 VS2019如何打包程序_vs2019 打包_咻咻咻...的博客-CSDN博客https://blog.csdn.net/qq_37043193/article/details/119530253?ops_request_…

JVM源码剖析之Java对象创建过程

关于 "Java的对象创建" 这个话题分布在各种论坛、各种帖子&#xff0c;文章的水平参差不齐。并且大部分仅仅是总结 "面试宝典" 的流程&#xff0c;小部分就是copy其他帖子&#xff0c;极少能看到拿源码作为论证。所以特意写下这篇文章。 版本信息如下&…