神经网络入门指南

简介: 多层感知器和反向传播算法是什么?他们的工作原理又是怎样的?刚刚入门机器学习的你,是不是还在被这些问题困扰呢?今天我们就通过一些生动形象的例子来向大家介绍神经网络。

人工神经网络(ANN)是一种从信息处理角度对人脑神经元网络进行抽象从而建立的某种简单模型,按不同的连接方式组成不同的网络。其在语音识别、计算机视觉和文本处理等方面取得的突破性成果。在下文,我们将深入了解一种名为多层感知器的人工神经网络。

神经元

在神经网络中,神经元是计算的基本单元,也被称为节点或单元。它接受其他节点或外部的输入,在计算后产生输出。每两个节点间的连接都代表一个对于通过该连接信号的加权值,称之为权重(w)。该节点将一个函数f(定义如下)作用于输入的加权和,如下图所示

d265fbc1d6349242647863331a060a8805b2c7b0
上述网络采用数值输入X1和X2、与输入相关联的权重w1和w2以及输入权重b(称为偏置)。稍后我们会介绍更多关于偏置的细节。

神经元输出Y的计算上图所示。函数f是非线性的,称为激活函数。它的作用是将非线性引入到神经元的输出中,以此达到神经元学习非线性表示的目的,满足实际环境的数据要求。

每个激活函数都取一个数并对它进行特定的运算。在实际应用中我们可能会遇到下面几种激活函数:

Sigmoid函数:σ(x)=1/(1+exp(−x))

tanh函数:tanh(x)=2σ(2x)−1

ReLU函数:f(x)=max(0, x)

下面是这几个激活函数的图像

77d6db41ac38ae65b2fc1700dc029a25b4f98e61

偏差的重要性:如果没有偏置的话,我们所有的分割线都是经过原点的,但是现实问题并不会那么如我们所愿.都是能够是经过原点线性可分的。

前馈神经网络

前馈神经网络是第一个也是最简单的人工神经网络,各神经元从输入层开始,接收前一级输入,并输出到下一级,直至输出层。整个网络中无反馈,可用一个有向无环图表示。

前馈神经网络结构如下图所示

94e3447214182880540d293433c4a7234f16a886

前馈神经网络由三种节点组成:

1.输入节点-输入阶段将来自外部的信息提供给网络,统称为输入层。任何输入节点都不执行计算,它们只是将信息传递给隐含阶段。

2.隐含节点-隐含节点与外界没有直接联系(因此名称为隐含)。他们执行计算并将信息从输入节点传输到输出节点。隐藏节点的集合形成隐藏层。虽然前馈网络只有一个输入层和一个输出层,但它可以没有或有多个隐藏层。

3.输出节点-输出节点统称为输出层,负责计算并将信息从网络传输到外部世界。

前馈网络的两个例子如下:

1.单层感知器-这是最简单的前馈神经网络,不包含任何隐藏层。

2.多层感知器- 多层感知器具有一个或多个隐藏层。我们只讨论下面的多层感知器,因为它们比实际应用中的单层感知器更常用。

多层感知器

多层感知器(MLP)包含一个或多个隐藏层(除了一个输入层和一个输出层)。单层感知器只能学习线性函数,而多层感知器也可以学习非线性函数。

下图显示了具有单个隐藏层的多层感知器。需要注意的是,所有连接都有与之相关的权重,但图中只显示了三个权重(w0w1w2)。

输入层:输入层有三个节点。偏置节点的值为1,其他两个节点将X1X2作为外部输入(数字值取决于输入数据集)。

如上所述,在输入层中不执行计算,所以来自输入层中的节点的输出分别是1X1X2,这些输入被馈送到隐藏层中。

隐藏层:隐藏层也有三个节点,其偏置节点的输出为1,隐藏层中另外两个节点的输出取决于输入层(1X1X2)的输出以及与其相关的权重。

下图显示了其中一个隐藏节点的输出计算。同样,可以计算其他隐藏节点的输出。然后,这些输出被反馈到输出层中的节点。

1d6a1f9c2cc451059575628e06e950e6df6b67a7

输出层:输出层有两个节点,它们从隐藏层获取输入,并执行与隐藏节点相似的计算。计算结果(Y1Y2)将成为多层感知器的输出。

给定一组特征X =(x1,x2,...)和一个目标y,多层感知器可以学习特征和目标之间的关系,无论是分类还是回归。

我们举个例子来更好地理解多层感知器。假设我们有以下的学生标记数据集:

3ea0cf1b3d6f9cea5527693205036a323a8ce59b

两个输入栏显示学生学习的小时数和学生获得的期中分数。最终结果栏可以有两个值10,表示学生是否通过了期末测试。例如,我们可以看到,如果学生学习了35个小时,并在期中获得了67分,他最终通过了期末测试。

现在假设我们想预测一个学习25小时,期中70分的学生是否能通过期末测试。

18680f6df80f62a145029a0cb7ec4f03ff224a20

这是一个二元分类问题,其中多层感知器可以从给定的例子(训练数据)中学习,并给出一个新的数据点的预测。我们将在下面看到多层感知器如何学习这种关系。

训练我们的多层感知器

下图所示的多层感知器在输入层(除了偏置节点之外)有两个节点,它们采用输入小时分析期中标记。它也有一个带有两个节点(除了偏置节点)的隐藏层。输出层也有两个节点 - 上层节点输出通过的概率,而下层节点输出失败的概率。

在分类任务中,我们通常使用Softmax函数作为多层感知器的输出层中的激活函数,以确保输出是确实存在的,并且它们概率相加为1Softmax函数采用任意实值向量,并且将其化为一个在01之间的矢量,其总和为1。所以,在这种情况下

P(合格)+P(不合格)= 1

1步:向前传播

网络中的所有权重都是随机分配的。让我们考虑图中标记为V的隐藏层节点。假设从输入到该节点的连接的权重是w1w2w3(如图所示)。

然后网络将第一个训练样例作为输入(我们知道对于输入3567,通过的概率是1)。

  • 输入到网络= [3567]
  • 来自网络的期望输出(目标)= [1,0]
那么考虑节点的输出 V 可以计算如下( f 是一个激活函数,如S igmoid函数 ):

V = f1 * w1 + 35 * w2 + 67 * w3

同样,也计算隐藏层中另一个节点的输出。隐藏层中两个节点的输出作为输出层中两个节点的输入。这使我们能够计算输出层中两个节点的输出概率。

假设输出层两个节点的输出概率分别为0.40.6(因为权重是随机分配的,所以输出也是随机的)。我们可以看到,计算的概率(0.40.6)与期望的概率(分别为10)相差很远,因此图中的网络被认为有不正确的输出

1bf591f8cc3cdbbb67137a2a9d4632d526f2a3e0

2步:向后传播和权重更新

我们计算输出节点处的总误差,并使用反向传播将这些误差返回网络以计算梯度。然后,我们使用一种优化方法诸如梯度下降,以减小输出层误差在网络中的权重。这将在下面的图中显示。

假设与所考虑的节点相关的新权重是w4,w5和w6(在反向传播和调整权重之后)。

65b236b63a2fd965150b4b6262c138bdf42ef5bf

如果我们现在再次向网络输入相同的示例,则网络应该比以前执行得更好,因为权重现在已经被调整到最小化误差。如图所示,与之前的[0.6,-0.4]相比,输出节点的误差现在降低到[0.2,-0.2]。这意味着我们的神经网络已经学会了正确的分类我们的第一个训练样例。

7f86572b8a18f0604b52ddbfe360782b4274fb54

我们在数据集中重复这个过程和所有其他的训练样例。那么,神经网络将完全学会这些例子。

如果我们现在要预测一个学习25小时,期中有70分的学生是否能通过期末测试,我们就要经过前向传播步骤,找到通过和失败的概率

多层感知器的三维可视化

Adam Harley创建了一个已经在手写数字的MNIST数据库上训练(使用反向传播)的多层感知器的三维可视化

网络将784个数字像素值作为来自手写数字(其在输入层中具有对应于像素的784个节点)的28×28图像的输入。网络在第一个隐藏层有300个节点,第二个隐藏层有100个节点,输出层有10个节点(对应于10个数字)。

虽然这里描述的网络比前一节讨论的要大得多(使用更多的隐藏层和节点),但正向传播步骤和反向传播步骤中的所有计算都是按照相同的方式(在每个节点处)进行的之前。

下图显示的是当输入是数字“5”时的网络。

74216a0915cfb50f5d561a0531deab9308d6bd73

较亮的颜色表示比其他更高的输出值的节点。在输入层中,亮节点是那些接收较高像素值作为输入的节点。在输出层中,唯一亮节点对应于数字5(它的输出概率为1,比输出概率为0的其他九个节点高)。这表明MLP已经正确分类输入的数字。我强烈推荐使用这个可视化例子来观察不同层次的节点之间的连接。


以上为译文

文章原标题A Quick Introduction to Neural Networks,作者:Ujjwal Karn,译者:Anchor C.,审校:虎说八道。

文章为简译,更为详细的内容请查看原文

相关文章
|
13天前
|
JSON Dart 前端开发
鸿蒙应用开发从入门到入行 - 篇7:http网络请求
在本篇文章里,您将掌握鸿蒙开发工具DevEco的基本使用、ArkUI里的基础组件,并通过制作一个简单界面掌握使用
53 8
|
1月前
|
机器学习/深度学习 资源调度 算法
图卷积网络入门:数学基础与架构设计
本文系统地阐述了图卷积网络的架构原理。通过简化数学表述并聚焦于矩阵运算的核心概念,详细解析了GCN的工作机制。
92 3
图卷积网络入门:数学基础与架构设计
|
25天前
|
Web App开发 网络协议 安全
网络编程懒人入门(十六):手把手教你使用网络编程抓包神器Wireshark
Wireshark是一款开源和跨平台的抓包工具。它通过调用操作系统底层的API,直接捕获网卡上的数据包,因此捕获的数据包详细、功能强大。但Wireshark本身稍显复杂,本文将以用抓包实例,手把手带你一步步用好Wireshark,并真正理解抓到的数据包的各项含义。
78 2
|
1月前
|
机器学习/深度学习 人工智能 算法
深度学习入门:用Python构建你的第一个神经网络
在人工智能的海洋中,深度学习是那艘能够带你远航的船。本文将作为你的航标,引导你搭建第一个神经网络模型,让你领略深度学习的魅力。通过简单直观的语言和实例,我们将一起探索隐藏在数据背后的模式,体验从零开始创造智能系统的快感。准备好了吗?让我们启航吧!
76 3
|
2月前
|
数据采集 XML 存储
构建高效的Python网络爬虫:从入门到实践
本文旨在通过深入浅出的方式,引导读者从零开始构建一个高效的Python网络爬虫。我们将探索爬虫的基本原理、核心组件以及如何利用Python的强大库进行数据抓取和处理。文章不仅提供理论指导,还结合实战案例,让读者能够快速掌握爬虫技术,并应用于实际项目中。无论你是编程新手还是有一定基础的开发者,都能在这篇文章中找到有价值的内容。
|
2月前
|
机器学习/深度学习 人工智能 算法框架/工具
深度学习中的卷积神经网络(CNN)入门
【10月更文挑战第41天】在人工智能的璀璨星空下,卷积神经网络(CNN)如一颗耀眼的新星,照亮了图像处理和视觉识别的路径。本文将深入浅出地介绍CNN的基本概念、核心结构和工作原理,同时提供代码示例,带领初学者轻松步入这一神秘而又充满无限可能的领域。
|
2月前
|
消息中间件 编解码 网络协议
Netty从入门到精通:高性能网络编程的进阶之路
【11月更文挑战第17天】Netty是一个基于Java NIO(Non-blocking I/O)的高性能、异步事件驱动的网络应用框架。使用Netty,开发者可以快速、高效地开发可扩展的网络服务器和客户端程序。本文将带您从Netty的背景、业务场景、功能点、解决问题的关键、底层原理实现,到编写一个详细的Java示例,全面了解Netty,帮助您从入门到精通。
197 0
|
2月前
|
机器学习/深度学习 自然语言处理 前端开发
前端神经网络入门:Brain.js - 详细介绍和对比不同的实现 - CNN、RNN、DNN、FFNN -无需准备环境打开浏览器即可测试运行-支持WebGPU加速
本文介绍了如何使用 JavaScript 神经网络库 **Brain.js** 实现不同类型的神经网络,包括前馈神经网络(FFNN)、深度神经网络(DNN)和循环神经网络(RNN)。通过简单的示例和代码,帮助前端开发者快速入门并理解神经网络的基本概念。文章还对比了各类神经网络的特点和适用场景,并简要介绍了卷积神经网络(CNN)的替代方案。
189 1
|
3月前
|
弹性计算 人工智能 运维
Terraform从入门到实践:快速构建你的第一张业务网络(上)
本次分享主题为《Terraform从入门到实践:快速构建你的第一张业务网络》。首先介绍如何入门和实践Terraform,随后演示如何使用Terraform快速构建业务网络。内容涵盖云上运维挑战及IaC解决方案,并重磅发布Terraform Explorer产品,旨在降低使用门槛并提升用户体验。此外,还将分享Terraform在实际生产中的最佳实践,帮助解决云上运维难题。
187 1
Terraform从入门到实践:快速构建你的第一张业务网络(上)
|
3月前
|
机器学习/深度学习 PyTorch 算法框架/工具
深度学习入门案例:运用神经网络实现价格分类
深度学习入门案例:运用神经网络实现价格分类

热门文章

最新文章