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

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

目录

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.mzph.cn/news/301.shtml

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

相关文章

Jina AI 受邀出席 WAIC 2023「科技无障碍」论坛,与行业专家共话 AI 普惠未来

7 月 6 日,2023 世界人工智能大会(WAIC)在上海世博中心及世博展览馆开幕,并在浦东张江、徐汇西岸设分会场,同步在闵行等产业集聚区开展同期活动。本届大会由上海市人民政府和国家发改委、工信部、科技部、国家网信办、…

基于JSP+Servlet的医药药品管理系统

用户类型:双角色角色(患者、管理员[医生]) 设计模式:MVC(jspservletjavabean) 项目架构:B/S架构 开发语言:Java语言 主要技术:jsp、servlet、jdbc、jsp、html5、jquery、css、js…

RabbitMQ之交换机

RabbitMQ之交换机 1. Exchanges1.1 Exchanges 概念1.2 Exchanges 的类型1.3 无名 exchange 2. 临时队列3. 绑定(bindings)4. Fanout4.1 Fanout 介绍4.2 Fanout 实战 5. Direct exchange5.1 Direct exchange 介绍5.2 多重绑定5.3 实战 6. Topics6.1 之前类…

亚马逊云科技143项安全标准与合规性认证,帮助企业满足安全合规要求

在亚马逊云科技,为满足客户不断变化的需求,亚马逊云科技持续创新与迭代,设计的服务能帮助客户满足最严格的安全和合规性要求。针对安全相关工作,亚马逊云科技服务团队与Amazon Security Guardians云守护者项目密切配合&#xff0c…

linux终端前面显示base和不显示base

问题描述:前提是系统里装了anaconda3,有时候两个服务器之间相连长时间没使用或者访问时候前面没显示base。。 解决:我们在做深度学习时需要一个环境,如果前面没显示base的话,你直接conda activate是激活不了我们需要跑…

降级npm后,出现xxx 不是内部或外部命令解决方法

比如我安装了anyproxy npm install anyproxy -g 之后在cmd中输入anyproxy 发现 anyproxy 不是内部或外部命令解决方法. 一般出现这样的问题原因是npm安装出现了问题,全局模块目录没有被添加到系统环境变量。 Windows用户检查下npm的目录是否加入了系统变量P…

实例014 OutLook界面

实例说明 程序主界面包括菜单栏、工具栏、状态栏和树状视图。OutLook界面美观、友好,是一个很实用的程序主界面,并且菜单栏和工具栏是可移动的。运行本例效果如图1.14所示。 图1.14 Out Look界面 技术要点 一般程序的菜单栏和工具栏是不可移动的&…

【观察】杉数科技:释放智能决策“乘数效应”,驱动智能制造高质量增长

毫无疑问,中国制造业在时代背景与国家政策的双重驱动下,正加速向数智化转型,而以数据驱动的智能决策也正成为制造业资源优化配置的“利器”,通过端到端的数据深度感知与决策优化,显然能够将工业和制造业的数据价值发挥…

DAPP(七)——React与智能合约的架构整合

合并一下react和智能合约,创建react脚手架 create-react-app myapp 将合约中对应的文件 复制到 react脚手架的根目录中 结果如下: 下载合约所要的依赖: npm i openzeppelin-solidity 可以在脚手架终端执行truffle的命令语句,t…

AIGC文生图:使用ControlNet 控制 Stable Diffusion

1 ControlNet介绍 1.1 ControlNet是什么? ControlNet是斯坦福大学研究人员开发的Stable Diffusion的扩展,使创作者能够轻松地控制AI图像和视频中的对象。它将根据边缘检测、草图处理或人体姿势等各种条件来控制图像生成。 论坛地址:Adding…

Unity 编辑器-查找所有未被使用的Prefab

需求 接到一个需求,将Res里所有特效相关的prefab检查一下,没有使用的移除。 分析 先拆解一下需求,如下 #mermaid-svg-YiTzyE1BvQ0ZTgLj {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#merm…

android editText获取不到数据

问题分析:在onActivityCreated一开始就创建了findViewById,这时获取的是默认值,需要在点击按钮时重新加载才能获取到输入数据。 需要在点击按钮时重新加载数据:

大坝安全监测中需要做好检查监测

大坝安全监测是人们了解大坝运行状态和安全状况的有效手段和方法。它的目的主要是了解大坝安全状况及其发展态势,是一个包括由获取各种环境、水文、结构、安全信息到经过识别、计算、判断等步骤,最终给出一个大坝安全 程度的全过程。 此过程包括&#xf…

初识stm32

1、什么是单片机? 单片机(Single-Chip Microcomputer)是一种集成电路芯片,把具有数据处理能力的中央处 理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功 能(可能还包括显示驱动电路、…

华为云流水线CodeArts Pipeline怎么样?能实现哪些功能?

华为云流水线服务CodeArts Pipeline,旨在提升编排体验,开放插件平台,并提供标准化的DevOps企业治理模型,将华为公司内的优秀研发实践赋能给伙伴和客户。 灵活编排、高效调度 开放流水线插件 内置企业DevOps研发治理模型 体验通…

【工业机器人】用于轨迹规划和执行器分析的机械手和移动机器人模型(MatlabSimulink)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

C. Strong Password

Problem - C - Codeforces 思路:根据题意我们能够知道就是对于每一位都要再区间范围内,并且不是s的子序列,我们先看第一位,第一位有l[1]-r[1]这几种选择,假如说某一种选择在s中没有那么我们就选择以这个开头的作为答案…

python_股票增加控制人与流通股东等筛选条件

目录 写字前面: 结果展示 获取数据 行业数据 控制人数据 十大流通股东数据 开始合并 1 从行业数据中提取证券股的行业数据 2 合并控制人数据 3 合并十大流通股东 4 把三个结果按列合并 写字前面: 在分析数据的时候,常常需要的字段…

如何实现CAN-SOME/IP通信路由测试

区别于基于UDP的车内通信路由,基于SOME/IP协议的路由增加了服务发现(Service Discovery)和服务发布(Service Publish),那对于测试工程师来说,怎么实现CAN-SOME/IP路由的测试呢? 01 …

【K8S系列】深入解析K8S调度

序言 做一件事并不难,难的是在于坚持。坚持一下也不难,难的是坚持到底。 文章标记颜色说明: 黄色:重要标题红色:用来标记结论绿色:用来标记论点蓝色:用来标记论点 Kubernetes (k8s) 是一个容器编…