什么是人工智能(Artificial Intelligence, AI)?

维基百科上是这样解释的:指由人工制造出来的系统所表现出来的智能。直白讲就是让机器拥有智能,但“智能”二字代表的含义十分广泛,比如一款体重秤,能够存储我的体重记录并与手机进行连接传送数据,我们就说这是一款智能体重秤;现在的空调会根据所在城市的天气情况,自动调节温度和风速来控制室内温度,我们就说空调拥有智能。通过观察你会发现,现在的电子设备大多数都带有智能二字:智能手机、智能手表、智能手环,甚至连马桶都带上了“智能”二字,等等等等。此外,由于人工智能存在于多个不同的领域,每个领域对它的解释也各有特点,而且随着科技的发展和进步,人工智能的含义和人们对它的理解也在不断变化。

下面,通过几个例子分别介绍早期阶段人工智能的应用和面临的挑战以及发展到现阶段所取得的成果,来讲解机器学习(Machine Learning)、人工神经网络(Artificial Neural Networks)、深度神经网络(Deep Neural Networks)以及深度学习(Deep Learning)等概念。

在人工智能的早期发展阶段,其主要用于解决一些对人类来说特别困难,但能够通过一系列的数学公式形式化描述出来的问题。比如国际象棋这种比赛,有着明确的游戏规则,棋子的走法可以通过一系列的规则进行数学描述,只要指定计算机按照这些规则去做(这项任务对人类来说特别困难,但对计算机来说相当easy),就可以击败世界上最优秀的象棋选手,因此,1996年IBM研发的深蓝(Deep Blue)超级电脑在一场国际象棋比赛中就击败了世界排名第一的选手。

Deep Blue versus Garry Kasparov

Deep Blue vs. Garry Kasparov

有些任务对于我们人类来说就特别简单,甚至都不经过思考凭直觉就可以轻易得出答案,比如识别手写字体、辨认熟悉的面孔、指认出照片中物体等,但对于计算机来说就不是这样简单了,因为这些任务是无法通过明确的数学规则精确描述的(比如照片中的一张面孔),要想通过硬编码(Hard-code)建立相应的算法来解决这些问题是很困难的。

以上揭示出人与机在处理问题时的本质不同:我们人类大脑能够自动整合复杂的任务,凭借从出生起就不断获取的经验,可以毫不困难的同时考虑很多事,而且通常不会意识到自己在这样做。比如你能很快认出迎面向你走来的熟人,但你可以精确的表达出你的大脑是如何处理这个过程的吗?显然不能。对于计算机,为了完成一项任务,它必须知道每一步的具体操作,而且每一步都会严格执行指令给出的动作。

从另一角度讲,人工智能根本谈不上智能,因为计算机无法像人类一样靠直觉去完成任务,而且不具备从周围环境中获取经验进行学习的能力,所以人工智能面临的主要挑战就是如何让机器去完成一些人类靠直觉甚至都不用思考就可完成的任务(这些任务不容易通过数学规则化的表达出来),以及如何赋予计算机像人类一样的学习能力。

要让计算机像我们人类大脑一样去处理问题,在现阶段还无法实现,何况我们对大脑的活动机理还没搞透(大脑的每一个活动涉及到的神经元数不胜数,要想真正明白这些神经元蕴藏的逻辑关系并给予数学表达更是难上加难),面对这种困境,我们希望计算机拥有这样一种能力:The ability of semi-automated extraction knowledge from data。这种能力就称作机器学习(Machine Learning)

以上就是对机器学习的一种定义,对这种定义有两点说明:

Knowledge from data

知识的获取来自数据(Learning from data),我们收集到的数据必须源于提出的问题或从此数据中提取出有价值的信息。比如我们有某一地区和房价有关的数据(房屋面积、卧室数量、建造时间、当地消费水平、房屋售价等),这样就可以通过机器学习算法学习其中蕴含的模式,从而达到预测房屋价格的目的。

Semi-automated

机器学习的过程不是全自动的,其过程需要我们做出许多决策,比如提供给计算机的数据格式、数据中的某个变量该不该舍掉、通过什么形式学习等等,就如环境对人的成长有很大影响一样,数据的呈现形式和学习方式对机器学习也会有很大影响,而这个过程需要我们做出决策。

机器学习涉及到的面也特别广泛,按类型分可以分为监督式学习(Supervised Learning)、非监督式学习(Unsupervised Learning)和强化学习(Reinforcement Learning),在监督式学习中包括回归类问题和分类问题,非监督式学习中涉及到数据的聚类,教会计算机玩某一游戏(比如下象棋)则属于强化学习范畴。在各种类型的机器学习中,它们的学习过程是怎样的,其中涉及到的学习算法又有哪些等等等等,这里不一一介绍下去,而是将从机器学习的一个分支:人工神经网络讲起,然后介绍深度神经网络和深度学习。

人工神经网络

很多人第一次听说人工神经网络,多少都会联想生物神经网络,从而感觉很神秘,认为其中一定蕴藏着高深难懂的理论,但等你学习一段时间后,你就不会这样认为,其实人工神经网络远没有生物神经网络那样复杂。

提到生物神经网络,你应该对我们大脑中的中枢神经系统不会陌生。它接收我们身体各个器官传送过来的信息,经过一步步的处理后完成相应的动作。在我们的大脑中,这样的信息处理是通过由数以亿计的神经元(或神经细胞)相互协作所构成的神经网络来完成的。人工神经网络就是受人类大脑的这种信息处理方式启发而抽象出的一种简化模型,并借鉴了一些与生物有关的名词,比如“神经元“、“突触”等,但比起大脑的复杂度,人工神经网络一点也不复杂,并且其信息处理方式与大脑也没什么关系,何况人类至今都没有搞清楚大脑的具体工作原理。

每当遇到一个新概念,我们都会有这三个问题:

  • 它是什么样的?
  • 它能做什么?
  • 它是怎么做的?

把这三个问题整明白了,对这个概念也就理解的差不多了,下面将按照这种套路来进行介绍。

人工神经网络结构

人工神经网络是由许多神经元通过一定的规则连接而成的,并具备一定的信息处理能力,其最大的特点就是学习能力,能够根据训练学习到其中存在的模式(建立起输入输出之间的映射关系),从而达到预测的目的。

最基本的神经网络结构由三层神经元构成,分别为输入层、隐含层和输出层,如图所示:

Neural Network

Neural Network

其中,神经元作为神经网络的基本信息处理单元,由三个要素组成:

  1. 权值 𝓌,或称作突触:用于调节相互连接的神经元直接的作用,代表了其之间连接的强度;
  2. 加法器 ∑:求取输入与对应权值的乘积之和(加权和);
  3. 激活函数 𝑓:将第二步得到的加权和输入到激活函数,得到神经元的输出。
Neuron

Neuron

人工神经网络的一个应用实例

下面以识别手写字体为例来一步步讲解神经网络的建立和训练(学习)过程,从而对人工神经网络的应用有一个直观的认识。

神经网络训练数据

上面也提到了,机器学习是Learning form data,因此在建立神经网络之前必须要准备好数据。对于识别手写字体问题,训练神经网络使用最广泛的数据集是MNIST Dataset,这个数据集包含有70000张图片,每张图片为0-9之间的一个手写数字,下图是从数据集中选出的四张图片。

MNIST Samples

MNIST Samples

这70000个数据样本中,其中的60000个样本作为训练集,其余的10000个作为测试集。顾名思义,训练集是用于训练神经网络的,测试集是用于在完成网络训练后测试其性能的。

由于此问题属于监督式学习,在此有必要介绍一下什么是监督式学习。举个简单的例子:大人教小孩辨识动物,当遇到一只猫的时候,大人告诉小孩这是一只猫,当碰到一只狗的时候,告诉小孩这是一只狗,小孩通过这种方式不断地学习,当小孩下次碰到一只猫的时候,就能够独立判断出这是一只猫。因此监督式学习也称作有教师学习,直观解释就是当我们训练神经网络的时候,每提供给网络一个样本(看到一只猫),必须明确指定我们期望的结果(告诉小孩这是猫),这样网络才能去“学习“,所以在监督式学习中,数据样本的特点是都带有label的。

回到这个问题,这些图片都是长和宽均为28像素的灰度图像,每一张图片均可以数字化表示为784(28x28)维的向量,这作为神经网络的输入变量,每张图片都表示0-9之间的一个数字,我们将其编码为10维的向量,比如图片中数字是1,就用向量[1 0 0 0 0 0 0 0 0 0]表示,数字是4,就用向量[0 0 0 1 0 0 0 0 0 0 ]表示。

通过以上介绍,最终每个样本的数学形式是:(x, y),其中x为输入变量,y为输出变量(期望值)。

神经网络的建立

根据提供的数据格式,我们定义神经网络的输入层神经元数为784;输出层神经元数我们定义为10个;网络的输入层和输出层神经元数目设定非常直接,它们都有明确的限制条件,而隐含层的层数以及每层的神经元的数目就没有明确且唯一的设定规则了,正如上面说到机器学习是semi-automated,这就需要人为去做一些决策了,我们姑且设定隐含层层数为1,神经元数为30,这样神经网络的结构确定为784–30-10

神经网络的训练

我们训练的目的是要找到y=f(x)f所代表的映射关系,这个过程就需要用到相应的学习算法去训练网络。你可能会有这样的疑问:训练神经网络训练的是什么?

这里不打算介绍神经网络的具体训练过程,而只是给你一个直观的认识。

在神经网络中,训练的过程就是通过学习算法不断调整神经元之间的权值以及每个神经元的阈值,使得这些网络参数所表示的隐含关系不断地逼近我们要寻找的映射关系f。当训练达到目的后,我们就可以用这个网络模型去进行预测。

以上就是通过解决手写字体识别问题,对神经网络构建过程的简短粗略介绍。我们也知道了训练过程就是不断调整网络结构中的那些参数,但有一个问题我们需要考虑:神经网络中的这些参数到底有什么含义,蕴藏在其背后的原理是什么?我们是否可以对这些参数做出解释?比如,你能说出输入层第二个神经元与隐含层第三个神经元之间的权值代表什么含义吗?它在识别手写字体时起到什么作用?

深度神经网络与深度学习

面对以上问题,我们依然不能给出满意的答案,神经网络模型呈现在我们面前的是一种黑箱模型,我们无法对这种模型作出具体解释。但随着人工智能的发展,人们希望给出一种解释,并让机器具有我们人类这样的学习能力,从而实现真正的人工智能。这就是目前深度神经网络深度学习所面对的问题。

还是从一个具体的例子说起:人脸识别问题,即给定一张照片,让计算机识别出照片中是否包含人脸。我们这样考虑问题:将照片中的人脸识别问题进行分解,即变成一系列的子问题:照片的左上角和右上角是否各有一只眼睛?中间是否包含一个鼻子?中下部是否是一张嘴?照片最顶部是否有头发?

如果以上的子问题答案都是肯定的,或大部分是肯定的,那么我们就可以下结论说:图片中(可能)含有人脸。如果基于以上的分析思路来设计神经网络的话,我们会得到这样一种网络结构:

Deep Neural Networks

Deep Neural Networks

你会发现,上面这种网络结构比较简单,在解决人脸识别问题时表现性能不会太高,因为当我们提供的照片比较复杂时,比如照片中的人脸是侧面照、人脸与周围环境的区分度不是很大或由于光线角度问题,都会导致照片中的人脸很难识别。所以我们再次将上面的子问题进行分解,比如照片中某只眼的识别子问题:是否有一条眉毛?眉毛下有睫毛吗?下面是否有眼球?这样就把眼部识别问题进一步分解成各种子问题,然后我们不断按这种思路进行问题分解,直至将问题分解到像素的级别,从而变成判断某些像素点所形成的简单图形存在与否的问题,而这些像素级别的子问题可由神经元来完成。

Deep Neural Networks

Deep Neural Networks

通过以上设计思路,最终形成的将是一个由多层神经元组成的神经网络,每一层解决的是一系列子问题,随着层数的递增,解决的问题不断变得复杂和抽象,直至到达输出层得出我们问题的解。这样的神经网络就是深度神经网络(Deep Neural Networks),这种解决问题的方式(或方法)就是深度学习(Deep Learning)。

回到我们最初介绍人工智能时提到的挑战:如何让计算机拥有像人类一样的学习能力,并且能够从周围环境中学习以获取经验?也许深度学习给出了答案:面对生活中那些靠直觉就可解决的问题,我们赋予计算机从经验中学习(Learning from data)的能力,并让其理解各个概念之间的层次关系,并根据这种层次关系建立起深度神经网络,从而得到问题的解。

参考