上面的过程对于人类来说可能在 1 秒钟之内就完成了,但是对于计算机而言则难于上青天。仅仅为了让计算机能够准确地识别出照片中的人脸和面部器官,科学家们就已经付出了多年的努力,若是想要计算机精确地识别出图片中的人姓甚名谁以及评价出这是一个什么样的人则更为困难。
毕竟,我们等等大脑实际上是由约1000亿个神经元和其他种类的细胞共同构成的复杂系统。这 1000 亿个神经元之间相互协作、相互交流,帮助我们应对生活中的各种情况,存储我们宝贵的记忆。
因此,有科学家设想,如果能够将人类的神经元和神经网络这样的结构应用于计算机领域,是否能够让计算机的“思维”方式更加接近人类?于是科学家们开始着手构建计算机的神经网络,由于这是人类设计的而非自然界中存在的,因此被称为“人工神经网络”。
相信大家对于“人工神经网络”这个词并不陌生。自从AlphaGo战胜李世石和柯洁两位 人类围棋大师以来,这个词就频繁出现在各类新闻报道中。
在刷脸支付、模式识别等人工智能成果的介绍中,我们都能看见诸如“BP神经网络”“卷积神经网络”这样的词汇。
而对于这些词汇,新闻报道上往往只是一笔带过,并没有做过多的解释。在这里,我希望能够用通俗的语言将人工智能领域最为核心的深度学习技术介绍给大家。
# 1、生物体中的神经元
在介绍人工神经网络之前,我们先来看看生物体内的神经元是怎样运作的。请看图1。
■ 图1 生物的神经元与简化的神经元
一个神经元竟然具有如此复杂的结构!不过科学家不可能在算法中设计一个这样复杂的神经元,于是就有了图1下方这个神经元的简化模式。
这个简化的神经元最重要的几部分就是树突、细胞体、轴突:
一个神经元往往有多个树突,这些树突能够接收上一个神经元细胞传递来的信号;
细胞体在收集到这些信号之后进行一定的判断,决定做出何种反应(兴奋或抑制);
轴突只有一个,负责将这个细胞体决定输出的信号传送给下一个神经元的树突。
这就是遍布于我们体内的神经元最简单的工作方式。
2、人工神经网络模型的形成
1957 年,心理学家弗兰克·罗森布拉特在康奈尔大学的学习过程中提出了感知器模型。这一模型综合了前人的理论(综合了哪些理论呢?感兴趣的可以参见《漫话人工智能:从二进制到未来智能社会》一书),在人工神经网络的研究上具有里程碑式的意义,感知器模型也被称为第一个真正意义上的神经网络。
为了便于理解,下面举一个单层感知器的例子,以帮助大家了解人工神经网络中激活函数、权值、训练等术语的含义,以及人工神经网络的基本工作原理。这些术语非常容易理解,了解这些术语对之后理解深度神经网络有很大的帮助。
1●一个神经元是怎么工作的?
单层感知器模型的名字中虽然带有“单层”这个词,但实际上它分为两层,分别为输入层 和输出层,如图2所示。
■ 图2 单层感知器模型
假设输入层有3个神经元 1、2、3,输出层有2个神经元A、B。
输入层的 1、2、3 向输出层输出的信号分别为X1、X2、X3;由于输入层3个神经元向输出层神经元传递信号时信号的“重要程度”不同,因此有不同的权值,设由1向A传递的信号权值为 W1A,由2向A传递的信号权值为W2A,由 3向A传递的信号权值为W3A,那么 A接收到1传递来的信号就是X1×W1A,接收到2传递来的信号就是X2×W2A,接收到 3 传递来的信号就是 X3×W 3A。
对于输出层的A 来说,这个神经元是否被“激活”取决于一个激活函数,在这里为了简化,我们假设这个激活函数 A(X) 为神经元1、2、3传来的信号之和:
A(X)= X1×W1A+X2×W2A+X3×W3A
大家千万不要被上面这段的公式吓到,在这里只有最简单的加减法和乘法,而且已经非常接近感知器模型的工作原理了,只要带上具体数字,就很容易理解了。
假如,神经元1向A传递的信号为(X1=1),但这个信号非常“重要”,因此给它一个比较高的权重3。神经元2 向A传递的信号为(X2=2),但是这个信号“不太重要”,因此给它的权重为 0.5。神经元3向A传递的信号为(X3=1),但这个信号起着“拖后腿”的作用,因此给它的权重为-3。那么A的计算结果就是 1×3+2×0.5+1× (-3)=1。这个结果大于0,A被激活,输出1这个信号用于后续计算。
输出层B节点的信号处理过程与A节点类似。
在这里我们看到了一个人工神经元是怎么处理信号的,其实这一过程并不复杂。
但这就和我们身体中的神经元一样,尽管每个神经元的信号处理过程都不算复杂,但是亿万个神经元一起构成的网络却是一个功能极其复杂的系统,如图3所示,能够帮助我们应对生活中多种多样的问题。科学家建造的人工神经网络也是如此。
■ 图3 大脑中复杂的神经网络
上面便是一个只有输入层和输出层的单层感知器模型。这一模型可以说是最简单的人工神经网络的模型,但这一模型的提出对于模式分类有着重要的意义。
后面的神经网络有了两个主要的改进。
一是可以加更多的隐藏层,从图4中我们可以看出,隐藏层实际上就是在输入层和输出层之间增加了几层神经元。千万不要小看这几层神经元,在引入隐藏层后,人工神经网络能够处理很多单层神经网络不能处理的复杂问题。
第二个改进是每一个节点的激活由一个“激活函数”来控制,这个激活函数一般采用非线性函数,这样也增加了神经网格处理复杂非线性问题的能力。
■ 图4 引入隐藏层的人工神经网络模型
2、神经网络的学习能力
关于神经网络的学习能力,我们来用人类的学习做一个形象的比喻。
我们平时有几种学习方式呢?在这里我们将其大体分为以下三种。
死记硬背式。
我们会强行记住每个知识点,但如果知识发生一些变化,我们可能就无法应对这样的变化。这就类似于神经网络中权值不可变的一类模型,这种神经网络模型也基本上没有什么学习能力。
自学。
比如我们并没有学过怎样鉴定植物,但是我们去森林中尝试鉴定,最初我们会把所有绿色有叶子的归为一类,但是随着看到的植物增多(信息量增大),我们开始把植物按照大小分为高的和矮的;再随着看到植物数量的进一步增多,我们发现可以将植物分为草本和木本的。随着信息源源不断地涌入我们的大脑,我们可能自己再创建一个新的规则将这些植物细分。这在神经网络中就体现为权值调整并不取决于一个确切的信号指导,而是取决于这个神经网络自身总结的一些规则。
在老师的指导下学习。
这种学习过程中,我们有一个非常确切的“教师信号”,在给了特定的输入信号之后,教师能够告诉我们正确答案,即输出结果。我们根据这个输入和输出,去不断调整自己的思路,在形成正确的解题思路之后,在面对新题目我们也能用正确的算法做出正确的答案。专业上,我们则称这样的学习方式为监督学习。神经网络会将实际输出与期望输出作比较,并不断调整权值,减小二者之间的差距。