神经网络入门实例

简介: 人工神经网络现在非常流行,它应用于图像识别、自然语言处理和自动驾驶汽车等各个领域。作者是一名专业的数据科学家,他写下这篇文章,希望能帮助其他人了解人工神经网络。

这里有一个灰度图像的集合,每个图像都是一个2x2的像素网格,每个像素在0(白色)和255(黑色)之间有一个强度值。我们的目标是建立一个模型,“阶梯”模式识别图像。

0baab30f18ce6ae10bde61033644a1449bb1961a

在这篇文章,我们只关心是否能够合理地匹配数据的模型。

预处理

对于每个图像,我们将像素x1、x2、x3、x4标记,并生成一个输入向量\mathbf{x}

\mathbf{x} = [x1x2x3x4]

这将是我们的模型的输入。我们期望我们的模型能够预测(图像有阶梯模式)或(图像没有阶梯模式)。

875de2e94df137c167eaa36cee91d4ca499c10b2

图像ID

x1

x2

x3

x4

有阶梯模式

1

252

4

155

175

2

175

10

186

200

3

82

131

230

100

498

36

187

43

249

499

1

160

169

242

500

198

134

22

188

 

单层感知器(模型迭代0)

我们构建一个简单的模型是一个单层感知器。感知器使用输入的加权线性组合来返回一个预测值。如果预测的分数超过了选定的阈值,感知器就能预测为真,否则预测为假

f(x)={{1if  w1x1+w2x2+w3x3+w4x4>threshold0otherwise

}

让我们把它重新表述如下

\widehat y = \mathbf w \cdot \mathbf x + b

f(x)={{1if  ˆy>00otherwise

}

\widehat{y} 是我们的预测分数。

以下图像上来说,我们可以把一个感知器作为输入节点。

4927b36e1fa5563a540024e158005fdb5bffc1bc

假设我们构建了以下感知器

\widehat{y} = -0.0019x_1 + -0.0016x_2 + 0.0020x_3 + 0.0023x_4 + 0.0003

以下是感知器在一些训练图像上的表现

07a06f4826d6fdc1749d8b24e8c166f10b5e31aa

这肯定比随机猜测要好,而且也有一定的逻辑意义但是这个模型还是存在一些明显的问题。

1.模型输出一个实数,其值与可能性的概念相关联(较高的值意味着图像代表阶梯的可能性更大),但不能将这些值作为概率的基础,因为它们可以在0-1范围之外。

2.该模型不能反映变量与目标之间的非线性关系。

请考虑以下情况:

情况A

一个图像开始,x=[100,0,0,125]。将x_3从0增加到60。

5f5a7d9064af9d649100b52749306c3307fcbb15

情况B

上个图像开始,x=[100,0,60,125]。将x_3从60增加到120。

3ff3b527dceaa6c13770158d4722fcfedc5a3ea9

直观地说,在 \widehat{y} 中,A的值应该比情形B大得多。然而,由于我们的感知器模型是一个线性方程,所以x_3改变在这两种情况下,在\widehat{y}中产生了等价的+0.12的变化

现在我们先来解决这两个问题。

带有Sigmoid激励函数的单层感知器(模型迭代1)

我们可以通过将感知器封装在一个sigmoid函数中(随后选择不同的权重)来解决上面的问题。回忆一下,sigmoid函数是一个S形曲线,在0到1之间的垂直轴上有一个S形曲线,因此经常被用来模拟一个二进制事件的概率。

sigmoid(z) = \frac{1}{1 + e^{-z}}

6d92c8bbc11b29d1863501505b412ab0fb5970c6

因此,我们可以用下面的图片和等式来更新我们的模型:

e2baa0e5d00c37e705ced795145d693033318545

z = w \cdot x = w_1x_1 + w_2x_2 + w_3x_3 + w_4x_4

\widehat y = sigmoid(z) = \frac{1}{1 + e^{-z}}

看起来熟悉吗?这是逻辑回归,它一个sigmoid“激励函数”,这给我们提供了更大的泛化空间。此外,由于我们现在将\widehat y 解释为一个概率,因此我们必须相应地更新我们的决策规则

 

f(x)={{1if  ˆy>0.50otherwise

 

继续我们上述问题,假设我们提出了以下合适的模型:

[w1w2w3w4]

= [0.1400.1450.1210.092]
 
b = -0.008 

\widehat y = \frac{1}{1 + e^{-(-0.140x_1 -0.145x_2 + 0.121x_3 + 0.092x_4 -0.008)}} 

现在观察该模型相同示例图像上执行的结果。

显然,这修复了上面的问题1。

情况A

一个图像开始,x=[100,0,0,125]。将x_3从0增加到60。

460a7712ef8d479fb8841b9137ba41b807efd31a

情况B

个图像开始,x=[100,0,60,125]。将x_3从60增加到120。

60aa4d1d694dcdf3d4a8f2e7202b0cbdb4fe20d6

注意,当 z = w \cdot x增加时,sigmoid函数的曲率导致A快速增加,但是随着z的不断增加,速度会减慢。这与我们的直觉一致,即A情况是阶梯的可能性比B情况更大。

6b8a795a2b5641ee368ba67bbb84fb4b3207f510

不幸的是,这个模型仍然有以下问题

1. \widehat y 与每个变量都有一个单调的关系如果我们想要识别出有轻度阴影的阶梯?

2.假设图像的最下面一行黑色的。如果左上角的像素是白色的,那么最右边的像素就会变暗,这就增加了阶梯的可能性。如果左上角的像素是黑色的,那么最右边的像素就会变暗,这就会降低阶梯的可能性。换句话说,x_3的变化可能会增加或减少\widehat y ,这取决于其他变量的值。我们目前的模式没有办法做到这一点。

带有Sigmoid激励函数的多层感知器(Model迭代2)

我们可以通过在感知器模型中添加一个额外的层来解决上述两个问题首先构建一些基本模型然后我们将把每个基本模型的输出作为输入,输入另一个感知器。这个模型实际上是一个普通的神经网络。让我们看看它在一些例子中是如何工作的。

1:识别阶梯模式

1.左阶梯被识别出来时,建立一个模型并触发\widehat y_{left}

2.右阶梯被识别出来时,建立一个模型并触发\widehat y_{right}

3.添加基本模型的分数,以便最终的sigmoid函数只有当\widehat y_{left}和\widehat y_{right}值大时才会触发

102974eda6d0f15dc91303466b70b2668f69d134

4ec249c89efb7bcc2599e2409cfee6c5480ed346

另外

1.  最下面一行是黑色时,构建一个模型并触发\widehat y_1

2.当左上角的像素是黑色,右上角的像素是亮的时候构建一个模型,并触发\widehat y_2

3.当左上角的像素是亮的,右上角的像素是黑色时候,构建一个模型并触发\widehat y_3

4.添加基本模型,这样,如果\widehat y_1\widehat y_2很大,或者\widehat y_1\widehat y_3是很大的,那么最终的sigmoid函数会被触发(请注意,\widehat y_2\widehat y_3不能都是大的)

0db9825bb3794c59ca95235f585dda25e4f6b501

6987d7b828b90700560a406e930a1a585c14b24a

2:识别轻度阴影的阶梯

1构建用于“阴影底下一行”、“阴影x1和白色x2”、“阴影x2和白x1”的模型,并触发\widehat y_1, \widehat y_2, \widehat y_3。

2.构建用于黑色底下一行”、“黑色x1和白x2”、“黑色x2和白x1”的模型,并触发\widehat y_4, \widehat y_5, \widehat y_6

3.将这些模型组合在一起,然后将结果用一个sigmoid函数进行计算,因此,黑色”标识符“阴影”标识符中去除

6e92279e1f8ae758c442341457ac970879549531

952ad22dacca8a766779f43fa9b26ae30b4d16b9

以上就是我们利“阶梯”模式识别图像而建立的模型,另外我们还需要注意以下两点:

1.注意术语

单层感知器有一个单独的输出层。但是,我们刚刚构建的模型有一个输出层作为另一个输出层的输入因此它们将被称为双层感知器当模型有三层——一个输入层,一个隐藏层,和一个输出层我们可以称这些模型为神经网络

aa8b5f29a42c4af1d22ea9fb9d5a863e0bbe4da6

2.选择其它激励函数

在我们的例子中,我们使用了一个sigmoid激励函数。但是,我们可以使用其他的激励函数,例如tanh函数和relu函数但是,需要注意的是,激励函数必须是非线性的,否则神经网络将简化为一个等价的单层感知器。

译者注:

人工神经网络(Artificial Neural Network,即ANN ),是20世纪80 年代以来人工智能领域兴起的研究热点。它从信息处理角度对人脑神经元网络进行抽象, 建立某种简单模型,按不同的连接方式组成不同的网络。在工程与学术界也常直接简称为神经网络或类神经网络。神经网络是一种运算模型,由大量的节点(或称神经元)之间相互联接构成。每个节点代表一种特定的输出函数,称为激励函数(activation function)。每两个节点间的连接都代表一个对于通过该连接信号的加权值,称之为权重,这相当于人工神经网络的记忆。网络的输出则依网络的连接方式,权重值和激励函数的不同而不同。而网络自身通常都是对自然界某种算法或者函数的逼近,也可能是对一种逻辑策略的表达。


以上为译文

文章原标题《Introduction To Neural Networks译者:黄小凡,审校:袁虎。

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


目录
打赏
0
0
0
0
1807
分享
相关文章
云栖大会 | Terraform从入门到实践:快速构建你的第一张业务网络
云栖大会 | Terraform从入门到实践:快速构建你的第一张业务网络
鸿蒙应用开发从入门到入行 - 篇7:http网络请求
在本篇文章里,您将掌握鸿蒙开发工具DevEco的基本使用、ArkUI里的基础组件,并通过制作一个简单界面掌握使用
126 8
图卷积网络入门:数学基础与架构设计
本文系统地阐述了图卷积网络的架构原理。通过简化数学表述并聚焦于矩阵运算的核心概念,详细解析了GCN的工作机制。
249 3
图卷积网络入门:数学基础与架构设计
网络编程懒人入门(十六):手把手教你使用网络编程抓包神器Wireshark
Wireshark是一款开源和跨平台的抓包工具。它通过调用操作系统底层的API,直接捕获网卡上的数据包,因此捕获的数据包详细、功能强大。但Wireshark本身稍显复杂,本文将以用抓包实例,手把手带你一步步用好Wireshark,并真正理解抓到的数据包的各项含义。
181 2
深度学习入门:用Python构建你的第一个神经网络
在人工智能的海洋中,深度学习是那艘能够带你远航的船。本文将作为你的航标,引导你搭建第一个神经网络模型,让你领略深度学习的魅力。通过简单直观的语言和实例,我们将一起探索隐藏在数据背后的模式,体验从零开始创造智能系统的快感。准备好了吗?让我们启航吧!
141 3
制造企业ERP系统迁移至阿里云ECS的实例,详细介绍了从需求分析、数据迁移、应用部署、网络配置到性能优化的全过程
本文通过一个制造企业ERP系统迁移至阿里云ECS的实例,详细介绍了从需求分析、数据迁移、应用部署、网络配置到性能优化的全过程,展示了企业级应用上云的实践方法与显著优势,包括弹性计算资源、高可靠性、数据安全及降低维护成本等,为企业数字化转型提供参考。
125 5
构建高效的Python网络爬虫:从入门到实践
本文旨在通过深入浅出的方式,引导读者从零开始构建一个高效的Python网络爬虫。我们将探索爬虫的基本原理、核心组件以及如何利用Python的强大库进行数据抓取和处理。文章不仅提供理论指导,还结合实战案例,让读者能够快速掌握爬虫技术,并应用于实际项目中。无论你是编程新手还是有一定基础的开发者,都能在这篇文章中找到有价值的内容。
深度学习中的卷积神经网络(CNN)入门
【10月更文挑战第41天】在人工智能的璀璨星空下,卷积神经网络(CNN)如一颗耀眼的新星,照亮了图像处理和视觉识别的路径。本文将深入浅出地介绍CNN的基本概念、核心结构和工作原理,同时提供代码示例,带领初学者轻松步入这一神秘而又充满无限可能的领域。
Netty从入门到精通:高性能网络编程的进阶之路
【11月更文挑战第17天】Netty是一个基于Java NIO(Non-blocking I/O)的高性能、异步事件驱动的网络应用框架。使用Netty,开发者可以快速、高效地开发可扩展的网络服务器和客户端程序。本文将带您从Netty的背景、业务场景、功能点、解决问题的关键、底层原理实现,到编写一个详细的Java示例,全面了解Netty,帮助您从入门到精通。
483 0
|
5月前
|
Go语言网络编程的实例
【10月更文挑战第27天】Go语言网络编程的实例
54 7

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等