人工智能:神经网络入门 (第 1 部分,共 3 部分)






4.84/5 (282投票s)
人工智能:
引言
本文是即将发布的3篇文章系列的第一篇。文章内容安排如下:
- 第一部分:本文,将介绍感知器网络(单层神经网络)。
- 第二部分:将介绍多层神经网络以及反向传播训练方法,以解决非线性分类问题,例如 XOR 逻辑门。这是感知器无法做到的。本文将对此进行更详细的解释。
- 第三部分:将介绍如何使用遗传算法 (GA) 来训练多层神经网络以解决某些逻辑问题。
让我们从生物学开始。
大脑中的神经细胞称为神经元。据估计,人脑中有 1010 到 1013 个神经元。每个神经元可以与其他数千个神经元建立联系。神经元是大脑处理信息的基本单位。
那么神经元是什么样的?
神经元由细胞体和从细胞体延伸出的各种突起组成。其中大部分是称为树突的分支。有一条更长的突起(也可能分叉),称为轴突。虚线显示了信号传输开始的轴丘。
下图说明了这一点。
图 1 神经元
神经元的边界称为细胞膜。膜的内外之间存在电压差(膜电位)。
如果输入足够大,就会产生动作电位。动作电位(神经脉冲)然后沿着轴突向下传播,远离细胞体。
图 2 神经元放电
突触
一个神经元与另一个神经元之间的连接称为突触。信息总是通过轴突(参见上图 1)离开神经元,然后通过突触传递到接收神经元。
神经元放电
神经元只有在输入大于某个阈值时才会放电。然而,值得注意的是,放电的大小不会随着刺激的增加而增加,它是一种全有或全无的机制。
图 3 神经元放电
脉冲(信号)很重要,因为其他神经元会接收到它们。神经元通过脉冲进行通信。发送的信息由脉冲编码。
神经元的输入
突触可以是兴奋性的或抑制性的。
到达兴奋性突触的脉冲(信号)倾向于使接收神经元放电。到达抑制性突触的脉冲(信号)倾向于抑制接收神经元放电。
细胞体和突触本质上通过复杂的化学/电过程计算传入的兴奋性和抑制性输入的差异(空间和时间求和)。
当这个差异足够大(与神经元的阈值相比)时,神经元就会放电。
粗略地说,兴奋性脉冲到达其突触的速度越快,它放电的速度就越快(抑制性脉冲同理)。
那么人工神经网络呢?
假设每个神经元都有一个放电率。还假设一个神经元连接到 **m** 个其他神经元,接收 m 个输入“x1 …. … xm”,我们可以想象这种配置看起来像这样:
图 4 人工神经元配置
这种配置实际上称为**感知器**。感知器(Rosenblatt [1962] 的发明)是最早的神经网络模型之一。感知器通过对输入的加权求和来模拟神经元,如果和大于某个可调阈值(否则发送 0 - 这是生物学中描述的全有或全无放电,参见上面的神经元放电部分),则输出 1,这也称为激活函数。
图 4 中的输入 **(x1,x2,x3..xm)** 和连接权重 **(w1,w2,w3..wm)** 通常是实数值,既有正数(+)也有负数(-)。如果某个 **xi** 的特征倾向于使感知器放电,则权重 **wi** 为正;如果特征 **xi** 抑制感知器,则权重 **wi** 为负。
感知器本身由权重、求和处理器、激活函数和可调阈值处理器(此处称为偏置)组成。
为方便起见,通常的做法是将偏置视为另一个输入。下图说明了修改后的配置。
图 5 人工神经元配置,偏置作为附加输入
偏置可以被认为是感知器不考虑其输入而放电的倾向(一种倾向于特定行为方式的倾向)。图 5 所示的感知器配置网络在加权和 > 0 时放电,或者如果你喜欢数学解释的话:
激活函数
激活通常使用以下函数之一。
Sigmoid 函数
输入越强,神经元放电越快(放电率越高)。Sigmoid 函数在多层网络中也很有用,因为 sigmoid 曲线允许微分(这是多层网络反向传播训练所必需的)。
或者如果你喜欢数学解释的话:
阶跃函数
一个基本的开关功能,如果 0 > x 则为 0,否则如果 x >= 0 则为 1。
或者如果你喜欢数学解释的话:
学习
关于学习的说明
在我们继续讨论感知器学习之前,让我们考虑一个现实世界的例子。
你如何教孩子识别椅子?你给他看例子,告诉他:“这是椅子。那不是椅子。”直到孩子学会什么是椅子。在这个阶段,孩子可以看到我们给他的例子,并正确回答“这个物体是椅子吗?”
此外,如果我们给孩子看他以前没见过的物体,只要我们给了他足够多的正面和反面例子,我们就可以期望他正确地识别出新物体是否是椅子。
这正是感知器背后的思想。
感知器中的学习
是修改权重和偏置的过程。感知器计算其输入的二进制函数。感知器可以计算的任何内容都可以学会计算。
“*感知器是一个学习概念的程序,即它可以学习对我们呈现给它的输入响应为 True (1) 或 False (0),通过反复“学习”呈现给它的例子。*”
感知器是单层神经网络,其权重和偏置可以被训练,以便在呈现相应的输入向量时产生正确的目标向量。使用的训练技术称为感知器学习规则。感知器因其从训练向量中泛化的能力以及与随机分布的连接协同工作的能力而引起了极大的兴趣。感知器尤其适用于模式分类中的简单问题。"
Professor Jianfeng feng, Centre for Scientific Computing, Warwick university, England.
学习规则
感知器被训练以对每个输入向量做出响应,对应的目标输出为 0 或 1。已经证明,如果存在解决方案,学习规则可以在有限时间内收敛到解决方案。
学习规则可概括为以下两个方程:
b = b + [ T - A ]
对于所有输入 i
W(i) = W(i) + [ T - A ] * P(i)
其中 **W** 是权重向量,**P** 是呈现给网络的输入向量,**T** 是神经元应显示的正确结果,**A** 是神经元的实际输出,**b** 是偏置。
培训
来自训练集的向量一个接一个地呈现给网络。
如果网络的输出是正确的,则不进行任何更改。
否则,使用感知器学习规则(如上所示)更新权重和偏置。当训练集的每个周期(完整地遍历所有输入训练向量的过程称为一个周期)发生且没有错误时,训练完成。
此时,任何输入训练向量都可以呈现给网络,它将响应正确的输出向量。如果向网络呈现一个不在训练集中的向量 **P**,网络将倾向于通过响应与输入向量 **P** 附近的输入向量的目标向量相似的输出来表现出泛化能力。
那么我们可以用神经网络做什么?
如果我们继续使用单层神经网络,所能完成的任务与多层神经网络所能完成的任务不同。由于本文主要面向单层网络,让我们进一步讨论这些。
单层神经网络
单层神经网络(感知器网络)是输出单元与其他单元独立的网络 - 每个权重仅影响一个输出。使用感知器网络,可以实现线性可分函数,如下图所示(假设我们有一个具有 2 个输入和 1 个输出的网络)。
可以看到,这等同于下面所示的 AND/OR 逻辑门。
图 6 分类任务
这是一个简单的例子,说明了我们可以用一个感知器(本质上是一个神经元)做什么,但如果我们把几个感知器串联起来呢?我们可以构建一些相当复杂的功能。基本上,我们将构建一个等效的电子电路。
然而,感知器网络确实存在局限性。如果向量不是线性可分的,学习将永远无法达到所有向量都被正确分类的点。感知器无法解决线性不可分向量问题的最著名例子是布尔 XOR 问题。
多层神经网络
使用多层神经网络,我们可以解决非线性可分问题,例如上面提到的 XOR 问题,这在使用单层(感知器)网络时是无法实现的。本文系列的下一部分将介绍如何使用多层神经网络,通过反向传播训练方法来做到这一点。
好了,本文就到这里。希望它能让你很好地入门神经网络。我会尽量在有空的时候(在我的硕士论文和其他任务之间)发布另外两篇文章。我想让它们图文并茂,所以可能需要一些时间,但我保证很快就能完成。
你觉得怎么样?
就这样,我想请求一下,如果你喜欢这篇文章,请投我一票。
关注点
我认为 AI 非常有趣,这就是我花时间发布这些文章的原因。所以,我希望其他人也能觉得它有趣,并且它能帮助他们增长知识,就像它丰富了我自己一样。
历史
v1.0 2006/11/17
参考文献
人工智能第二版,Elaine Rich / Kevin Knight。McGraw Hill Inc。
人工智能,一种现代方法,Stuart Russell / Peter Norvig。Prentice Hall。