首页 > Python机器学习 阅读数:33

人工神经网络是什么

我们知道,深度学习网络是目前非常热门的研究议题。但在本质上,深度学习网络就是层数较多的神经网络。虽然 sklearn 并不支持深度学习,但久经时间考验的多层感知机(浅层神经网络),它还是支持的。而浅层神经网络是深度学习网络的基础,因此,了解本节知识不仅能解决实际问题,还能为你的知识跃迁(学习深度学习)奠定基础。

那么,什么是人工神经网络呢?有关人工神经网络的定义有很多。这里,我们给出芬兰计算机科学家托伊沃·科霍宁(Teuvo Kohonen)给出的定义:人工神经网络是一种由具有自适应性的简单单元构成的广泛并行互联的网络,它的组织结构能够模拟生物神经系统对真实世界所做出的交互反应。

在生物神经网络中,人类大脑通过增强或者弱化突触进行学习,最终会形成一个复杂的网络,形成一个分布式特征(Distributed Representation)表示。

作为处理数据的一种新模式,人工神经网络的强大之处在于,它拥有很强的学习能力。在得到一个训练集之后,它能通过学习提取所观察事物的各个部分的特征,将特征之间用不同网络节点连接,通过训练连接的网络权重,改变每一个连接的强度,直到顶层的输出得到正确的答案。

神经网络中的“学习”本质

在机器学习中,我们常常提到神经网络,实际上是指神经网络学习。作为机器学习的重要支脉,神经网络学习是怎么看待学习的呢?由于神经网络是以“模仿”生物神经网络为己任的。所以,我们有必要先回顾一下生物神经网络中的学习是如何进行的。

说到生物神经网络,不能不提西班牙科学家、公认的神经科学之父卡哈尔。20 世纪之初,卡哈尔非常痴迷于脑科学结构研究。卡哈尔的工作在外人看来毫无乐趣,因为他的工作非常烦琐,而且没有太多创造性,无非是终日对着显微镜下细若游丝的神经纤维,观察它们的连接情况。

人们常说,“于无声处听惊雷,于无色处见繁花”。对于卡哈尔来说,亦是如此。通过观察和绘制成百上千的显微图片,卡哈尔敏锐地意识到,动物的大脑和人类的大脑一样,层层叠叠堆砌着数以百亿计的细小神经细胞(神经元)。于是,他天天对着显微镜观察标本,再用笔把它们一丝不苟地画出来。

卡哈尔绘制的神经网络图水平之高,逾百年之后仍常出现在很多学术会议报告里,这些插图依然是常用的开场白,见图 1。

卡哈尔(左)与他绘制的神经网络图(右)
图 1:卡哈尔(左)与他绘制的神经网络图(右)

卡哈尔研究发现,生物神经元的结构和我们通常看到的细胞结构不太一样,它们不是规整的球形,而是从圆圆的细胞体处伸出不规则的突起(见图 2)。有的像树杈一样层层伸展—称为树突(dendrite),有的像章鱼的触手一样长长延伸—称为轴突(axon)。卡哈尔命名的术语,一直沿用至今。

生物神经元结构
图 2:生物神经元结构

在卡哈尔看来,这些长相怪异的神经元,是靠突起彼此连接的。树突是信号接收端,轴突是信号输出端。它们彼此相连,形成了一张异常复杂的三维信号网络。

我们知道,人脑中的神经元大概能达到千亿数量级。任何一个神经元产生的生物电信号,平均要传递给上万个与之相连的神经元。神经元之间的信息传递,属于化学物质层面的传递。当它“兴奋”时,就会向与它相连的神经元发送化学物质(神经递质,Neurotransmitter),从而改变这些神经元的电位。

如果某些神经元的电位超过一个阈值,它就会被“激活”,也就是“兴奋”起来,接着向其他神经元发送化学物质,犹如涟漪,一层接着一层传播,如图 3 所示。

大脑神经元的工作流程
图 3:大脑神经元的工作流程

根据卡哈尔的观察,成年动物大脑中的神经元是比较稳定的,不论是在数量上,还是在形状上,都不会发生什么剧烈的变化。那么问题来了。学习的确发生在大脑里,但大脑形态是稳定的,而学习是动态的,还可能一日千里。那么学习的载体到底是什么?

卡哈尔并没能给出回答。数十年后的 1949 年,另一位学者唐纳德·赫布(Donald Hebb)试图给出一个合理的解释,提出了赫赫有名的赫布假说(Hebb Law)。

在《行为的组织》一书中,赫布认为:神经网络的学习过程,最终发生在神经元之间的突触部位,突触的连接强度会随着突触前后神经元的活动而变化,变化的幅度与两个神经元之间的活动性成正比。换句话说,在学习过程中,神经元的数量、形状的确都没发生变化,但是神经元之间的联系强度(也称为权值)发生了变化。这种变化,才是学习的微观本质。

赫布假说可用于解释“联合学习”(associative learning),在这种学习中,由于对神经元重复刺激,使得神经元之间的突触强度增加。赫布理论也成了神经网络学习的生物学基础。生物神经网络的工作机理,极大启发了人工智能领域的科研人员,在此基础上,他们提出了所谓的人工神经网络。

我们知道,人工神经网络性能的好坏,高度依赖于神经系统的复杂程度,它通过调整内部大量“简单单元”之间的连接权重,达到处理信息的目的,并具有自学习和自适应的能力。即使到了现在的深度学习网络,学习的核心依然是调整权重(即不同神经元细胞之间的连接强度)。

神经网络结构的设计

针对“神经网络”四个字,我们可以将其拆分为以下两个部分。
  • 神经:即神经元,什么是神经元?(What)
  • 网络:即连接权重和偏置,它们是怎么连接的?(How)

假如我们尝试判断一张手写数字图片上是否有数字“2”。很自然,我们可以把图片中每一个像素的灰度值作为网络的输入。在输入层,每个像素都是一个数值(如果是彩色图片,则为“红绿蓝”三通道数组),包容这个数值的容器可视作一个神经元。

如果图片的维度是 16×16 像素,那么输入层神经元就可以设计为 256 个(也就是说,输入层是一个包括 256 个灰度值的向量),一个神经元接收的输入值就是归一化处理之后的灰度值。0 代表白色像素点,1 代表黑色像素点,灰度值介于 0~1 之间。也就是说,输入向量的维度(像素个数)要和输入层神经元的个数相同。图 4 展示了神经网络输入层的拓扑结构。

神经网络输入层的拓扑结构
图 4:神经网络输入层的拓扑结构

而对输出层而言,它的神经元个数和输入神经元的个数是没有对应关系的,而与待分事物类别有一定的相关性。比如,对于图 4 所示的例子,如果我们的任务是识别手写数字,而数字包含 0~9 共 10 类。那么,输出神经元数量就仅为 10 个,分别对应数字 0~9 的分类概率。

最终的分类结果,择其大者而判之。比如,如果判定为“2”的概率(如 80%)远远大于判定为其他数字的概率,那么神经网络的最终判定即为数字“2”,而非其他数字。相比于输入层与输出层在设计上的明了直观,神经网络的隐含层设计可就没那么简单了。说好听一点,这是一门艺术,依赖于工匠的打磨。说句不好听的,这就是个体力活,需要不断地试错。

我们可以把隐含层暂定为一个黑箱,它负责实现输入和输出之间的非线性映射变化,具体功能有点“说不清、道不明”(这是神经网络理论的短板所在)。隐含层的层数不固定,每层的神经元个数也不固定,是人们根据实际情况不断调整选取的。

前面我们讨论了什么是神经元,即 What 问题。下面我们再讨论一下神经元之间是如何连接的,即 How 问题。我们把神经元与神经元之间的影响程度称为权重,权重的大小表明连接的强弱,它会“告诉”下一层相邻神经元应该更加关注哪些图案。

除了连接权重,神经元内部还有一个施加于自身的特殊权值,称为偏置(bias)。偏置表明神经元是否更容易被激活。也就是说,它决定“神经元的连接加权之和达到多大才能让激发变得有意义”。

设计神经网络结构的目的在于,让神经网络以更佳的性能来学习。而这里的“学习”,如前所言,就是找到合适的权重和偏置,让损失函数的值最小。