一开始听到“人工神经网络”这个词的时候就觉得好方,毕竟想到人脑的结构那么复杂,第一反应肯定是人工神经网络肯定非常高深。然后就没有然后了,因为觉得它好难就没有“信仰”去了解它了。之后,在看《数学之美》中,吴军博士在讲解Google大脑时,特地讲解了一下什么是人工神经网络,同时他还指出了它并没有想象中那么高深。以下是他的原话:
如果有幸遇到一个好心同时又善于表达的科学家或教授,他愿意花一两个小时的时间,深入浅出地为你讲解人工神经网络的底细,你就会发现,“哦,原来是这么回事”。
其实,除了生物学上的一些名词和一些形象的比喻外,人工神经网络就是一种有向图,和人脑没有半点关系。在这种有向图里面,节点被称为神经元,有向弧则被成为连接每各个节点的神经。
然而,它也不是一般的有向图,因为它具有以下一些特征:
- 这种有向图中的所有节点都是分层的,每一层的节点可以通过有向弧指向上一层的节点。注意,同一层的节点之间没有弧互相连接,而且每一个节点不能跨越一层连接到上上层的节点。在实际应用中,人们一般不会设计超过五层的网络,因为其计算会愈加复杂。
每一条弧上有一个权值。根据这些权值,可以计算某条弧所指向节点的值。
有时,最下面那一层节点被称为输入层,最上面的节点被称为输出层。除了输入层的节点外,各节点都是通过这些输入层的节点的输入值直接或者间接得到的。中间层的节点也可以称作隐含层。
在了解如何应用人工神经网络前,我们先看一下模式分类。
假设在一个二维空间中,我们要区分两个元音a和e,它们的分布如图所示。
模式分类的任务就是要在这个空间中切一刀,将a和e区分开来。之后,每当有新的语音进来,落到左边我们就将它识别成a,落在右边则识别成e。
现在可以用一个人工神经网络来实现这个简单的分类器(虚线),该结构如下:
在这个人工神经网络中,我们有两个输入节点X1和X2,一个输出节点Y。根据给定的权重,我们将Y这一点上的数值设定为两个输入节点数值x1和x2的一种线性组合,即y = 3x1 - x2 - 2
。w0(即-2)是一个常数项,为了后面可以方便地进行判断。
现在将平面上的一些点(0.5,1)、(2,2)、(1,-1)、(-1,-1)
的坐标输入到第一层的两个节点上,然后通过该网络得出对应的输出值y。
(0.5,1)
输出 -1.5(2,2)
输出 2(1,-1)
输出 2(-1,-1)
输出 -4
现在,如果输出值y大于零,那么可以说这个节点属于第一类e,反之则属于第二类a。
最后,我们也可以把这个神经网络中的Y变成中间节点S,增加一个更明显的输出层,包括节点Y1和Y2。
这样我们只需要比较输出节点的值谁大,我们就认为这个点应该属于相应的哪一类。