人工智能的概念、原理、技术和工具

By 肖睿@北大青鸟

零.导论

人工智能(AI:Artificial Intelligence)是一种能够模拟人类智能行为和思维过程的系统,是基于数学、逻辑学、脑科学与神经科学、知识论和认知科学、心理学、控制理论、计算机科学的交叉学科和应用。1956年达特茅斯会议上,正式确定了“人工智能”这个术语,并以1947年提出的图灵实验作为测试一个人工智能系统是否具备智能的标准。

一.发展历史和脉络

人类的发展史就是不断地用工具复制和拓展自身能力的历史:用兵器拓展了武力、用机械拓展了体力、用汽车拓展了移动能力、用互联网拓展了信息能力等等。自从70年前计算机诞生,人类就希望用计算机来拓展人类的智力,但直到目前为止,计算机仍旧被称为“最聪明的傻瓜”,因为它具备强大的计算能力和记忆能力,但只能依照人类给出的算法和指令来解决固定的问题。下面,我们从策略、原理、模型三个维度来看一下人工智能的发展历史。

1、策略:确定型算法---学习型算法

人们认识世界的方式有两种:一种是通过把感知到的东西一般化(抽象和归纳),形成知识(事物的本质、原理和模型),然后通过具体化(推理和演绎)的方式去解决具体的问题。另外一种是通过感知到的东西直接推导或理解将要发生的东西,不需要经过中间的理论抽象和原理分析过程,所谓熟能生巧、读书破万卷下笔如有神的玩法。前一种往往被归于理性思维,要知其所以然,也是传统科学思维的主流思考路径,很多理工科出身的人也非常习惯于这种思维方式。后一种往往被归于直觉思维,只需要知道可能的结果,不需要知道所以然,不需要知道背后的原理和机制,对很多人的思维方式都是一个非常大的挑战。

与此对应,人们使用计算机解决问题或者完成任务的方式也有两种:一种是人们知道解决问题或完成任务的方法或步骤,通过编程的方式形成应用软件,并通过应用软件让计算机按照设计好的指令工作,或者让计算机按照抽象好的规则和推理来工作(专家系统方法),使用的是确定型算法。另外一种是人们不知道解决问题或完成任务的方法或步骤,通过提供数据让计算机自己学习规律来解决问题或完成任务,即机器学习的方法,使用的是学习型算法。

可以说,在机器学习算法出现之前,人工智能算法的主要思路是确定型算法,人类需要先用自己的知识和智能来抽象问题、形成模型、找到解决方案,之后让计算机进行计算和搜索,尤其是在符号推理时代。随着大数据、计算能力问题的解决,随着机器学习算法的成熟,人工智能已经进入了学习型算法的时代,让机器去学习而不是让人先去学习。

2、原理:符号推理---数学模型---统计学习

在早期阶段,人工智能的实现原理主要是使用知识的符号表达和规则推理,顶峰是知识工程、专家系统、定理机器证明,并产生了专用于符号推理的Lisp语言和Prolog语言。这个方向在上个世纪80年代走到了顶峰,主要基于知识库、规则库和搜索算法,也被称为知识工程,在很多应用领域开发了专家系统,部分专家系统也取得了商业上的实用效果。但由于过分依赖于领域专家知识的抽取和表达,解决问题的领域也很窄,所以在上个世纪末符号推理方法逐步没落,同时也让人工智能领域进入了一段较长的黑暗时期。

数学模型的思路其实不是来自于人工智能本身,而是来自于信号处理和控制领域的应用,其主要思路是:通过数据来估计出一个数学模型,作为智能的抽象表达方式,并通过该数学模型来发现系统内部的结构知识,同时预测系统的状态。这种方法的主要成果是模式识别(PR,Pattern Recognition)和早期的机器学习系统(ML,Machine Learning)。这种方法严重依赖于数学的抽象和表达能力,基于统计分布假设形成抽象模型,适合相对简单的系统的模拟。

统计学习(Statistic Learning)的理论奠基于50年前的苏联,是继欧几里得的简单代数几何,莱布尼兹和牛顿的微积分后的第三代数学理论。统计学习与其说是现代人工智能的主要方法,不如说是人工智能领域中新一代数学方法的应用。不同于统计推理(以数学模型为核心、依赖于分布假设),统计学习无需分布假设,而是以算法为核心、依赖于大数据和计算能力的新一代机器学习方法。

简单地说,在把世界抽象成符号或数字之后,符号推理试图运用规则和推理的手段获得认识世界和解决问题的智能,数学模型试图运用计算和推理的手段获得认识世界和解决问题的智能,统计学习试图运用计算和感知的手段获得认识世界和解决问题的智能。

3、模型:单体---连接---深度神经网络

人工智能有许多中实现路径,但人工神经网络(ANN:Artificial Neural Network)是目前为止历史最悠久也最主流的实现方式。人工神经网络也简称神经网络,是一种基于对生物脑的结构和机制的简单模拟而形成的一种方法和工具。在人工智能60年的发展历程中,神经网络经历了从单体,到连接,到深度网络三次高潮。

第一次高潮是赫布神经元模型的提出(1949年,认为神经元的本质是有多个树突和一个轴突的神经细胞,而智能就体现在神经细胞的自主连接及其可塑性中),并于1958年用计算机实现了一个人工神经元模型,该模型由多个输入、一个输出、一个计算和激活函数组成,称为感知机(Perceptron)。感知机是需要用数据训练的,训练的结果就是输入的权重参数、输出的权重参数,以及计算函数和激活函数的类型。1963年,明斯基在《感知机》中证明了以感知机算法为基础的人工神经元模型无法解决XOR问题(实际就是非线性可分问题),表达能力有限。自此之后,人工神经元理论进入了近20年的低潮期。

第二次高潮出现在1985年反向传播算法(BP,Back Propagation)出现之后的10年(实际上,由多个人工神经元组成的人工神经网络,以及BP算法在1974年就已经出现,但没有引起重视)。在此期间,符号推理方法继续得到发展和应用,同时发端于模式识别领域的基于统计推理的机器学习方法也取得了比较大的发展和成果。此时的人工神经网络已经出现了多层的概念(每一层的神经元互相不进行连接,每个神经元只连接临近层的神经元),但受限于计算能力和算法策略,多数都是2-3层的浅层神经网络。

第三次高潮出现在2006年的深度神经网络(一般在6层以上)DNN(Deep Neural Network)。Hinton在2006年提出了深度置信网络(DBN,Deep Belief Network),每个神经元是一个受限玻尔兹曼机RBM,可以利用非监督贪心逐层训练算法,解决了DNN中无法优化的问题。得益于机器学习算法进入了以统计学习理论为基础的时代,同时得益于以分布式云计算和GPU计算为代表的计算能力大幅提升,也得益于大数据时代数据资源的极大丰富,使得基于深度神经网络的深度学习成为可能,并由此使得人工智能进入了深度学习(DL,Deep Learning)时代。

二.目前进展和应用

目前人工智能是一门交叉学科,其主要的理论基础来自于三个领域:机器学习(基于概率论和统计学习(不是数理统计)、线性代数、微积分),脑神经科学,计算机科学和数据科学。目前人工智能的主流技术是基于机器学习算法和深度神经网络架构的深度学习技术。

人工智能、机器学习、深度学习之间的关系,是一种近似包含的关系。用一个不严密的比喻就是: 1)、人工智能是一类使用计算机实现智能系统的方案和技术支撑,如同可以进行内容发布的网站(使用互联网技术解决内容发布问题)。 2)、机器学习是一类解决智能问题的算法,如同实现内容发布网站的Linux系的程序语言、中间件、操作系统、网络和硬件设备,解决大小不一的内容发布网站遇到的各种问题。 3)、深度学习是用很多层神经元构成的神经网络达到机器学习的功能,主要解决了特征标记的问题,是一种基于大数据和大计算能力的实用的智能系统解决方案,如同一种基于Hadoop生态圈的适合大访问量的门户网站的实现方案,并且已经产生了一些典型的商业应用。

下面,对机器学习技术、深度学习技术进行简单的梳理。

1、机器学习

智能的核心是学习,机器学习脱胎于信号处理领域的模式识别,尤其是图像识别问题。机器学习算法主要解决两个问题:发现规律、做出预测,解决的是如何从数据中发现知识的问题。

早期的机器学习采用了比较多的传统数学方法,尤其是数理统计方法,通过数据分布假设和数据集来建立数学模型,其哲学思想是传统的自然哲学(世界是简单有规律的,我们可以也需要先理解这个世界),路径是从现象归纳出一般规律,之后从一般规律演绎出预测。由于真实问题往往很难服从于简单的数据分布,所以早期的机器学习对实际问题的解决能力十分有限,也很难利用高维大数据资源。

现在的机器学习主要基于统计学习方法,通过数据集和基于计算机的迭代算法来做出规律发现、统计预测,其哲学思想是复杂世界哲学(世界是复杂的,我们无法理解,但可以良好行动),路径是从现象通过算法作出预测,对其机制和原理保持黑盒的状态。

机器学习系统的作用是输入数据,输出信息,一般流程是: 1)、根据问题设计元数据方案,确定采用哪些维度的数据,并将数据进行标注和特征化处理。 2)、确定目标结果的衡量标准,主要是计算量和预测精度。 3)、确定机器学习算法。 4)、生成训练数据集、验证数据集、测试数据集。 5)、通过学习,获得算法模型。 6)、用算法模型进行发现和预测。

机器学习的算法总体上可以分为三种模型思路,这三种思路不是互斥的,在很多算法中是混合使用的。第一种是几何模型,把训练数据映射为几何空间中的点,然后使用线性代数的方法做出各种度量、优化。第二种是概率模型,使用概率论的方法来估计模型参数。第三种是逻辑模型。其中,几何模型中使用的算法比较多,这类算法有三个主要核心要素:度量函数,损失函数,优化方法。

总体来说,机器学习算法主要解决的问题包括五大类:分类(Classification,包括二元分类和多元分类)、回归(Regression)、聚类(Clustering)、排序(Ranking)、降维(Dimensionality Reduction),其中最成熟的是分类算法、回归算法(可以近似为多元分类算法)、聚类算法。从广义上来看,人工神经网络也是一种机器学习算法。

分类是模式识别领域要解决的主要问题,实际上就是把高维的特征空间映射到一个低维的结果空间中,主要的经典算法有:感知机(Perceptron)、k-近邻(k-NN,k-Nearest Neighbor)、朴素贝叶斯法(NB,Naïve Bayes)、决策树(DT,Decision Tree)、最大熵模型(主要是逻辑回归,LR,Logistics Regression)、支持向量机(SVM,Support Vector Machine)、Boost提升法、隐马尔科夫模型(HMM, Hidden Markov Model)、条件随机场(CRF,Conditional Random Field)、以及比较通用的期望极大算法(EM,Expectation Maximization)。分类算法是机器学习中使用频率最高的算法,也是统计学习理论应用的主要领域,属于一种监督学习方法。

聚类是为了发现数据的内在结构(数据模式),可用于对数据进行标注和预处理,也用于从一群无标注的生数据中发现概念,属于一种非监督学习方法。主要的经典算法有:k均值(k-means),高斯混合模型(GMM,Gaussian Mixture Model),k中值(k-medoids),分层聚类(Hierarchical clusting),谱聚类(Spectral Clusting),其中k均值算法可以说是其他四类算法的基础。 另外,基于用户行为的协同过滤算法(CF,Collaborative Filtering)和协同排序算法(CR,Collaborative Ranking)也经常用于推荐系统中(有时数据条件比较好的时候,为了获得更好的效果,也会结合内容过滤算法(CF,Content Filtering))。

机器学习算法本身对于数据量和计算能力要求不高,但大数据、高性能计算的确有助于产生更复杂的参数模型,从而产生更好的发现和预测结果。在工程实践中,机器学习算法在很多领域中都有成熟的算法库和软件包,机器学习领域常用的语言和库有MATLAB、R、Python,也有Java、C++等其他语言的使用,包括Apache的Mahout机器学习算法库,甚至SPSS和SAS应用软件中也加入了大量的机器学习算法。

2、深度学习

深度学习是一种基于深度神经网络的机器学习方法,构成神经网络的基本单元是人工神经元,并采用了分层的网络连接方式和感知机算法,也被称为深度机器学习。传统的数据标注和特征提取都是由人工完成的(一般称为特征工程师,或者采用众包的模式),这种情况对于大数据量以及一些特殊应用(如:图像识别)并不现实。而深度学习可以从大量未标注或者简单标注的数据中自动抽取特征信息(即非监督的特征提取),不需要特征工程师的投入,这也是它能够在实际应用领域取得突破的重要因素,尤其是在数据量很大,并持续增长,或者需要实时反应,无法大规模地使用人工标注的系统中。可以说,数据的预处理或特征自动抽取能力,是深度学习的核心优势和主要应用场景。

从Geoffrey Hinton 2006年的论文算起,这一波深度学习浪潮刚刚10年,从深度学习算法在ImageNet比赛中一鸣惊人算起,深度学习的流行也不过4年,2016年随着AlphaGO的广告效应和Google Tensor Flow的高调推出,深度学习正在成为学术界和工业界的明星技术。深度学习非常适合处理数据中包含结构信息、容易特征化、采用分层处理的问题,目前在图像识别、语音识别、自然语言理解(采用了非搜索算法)、自动驾驶、推荐系统、系统预警等领域取得了接近于商用的巨大进步。 深度学习目前的应用场景还十分有限,而且算法模型对场景和数据的以来比较严重,许多调参过程缺乏理论支撑,变成了完全依靠经验和运气的“黑科技”,这些都是需要突破的问题。

依赖于海量大数据,以及基于GPU和云计算的大计算能力,深度学习实际上如同密码领域的暴力破解一样,通过训练出极其庞大的复杂连续函数,来获得智能系统。目前常用的深度学习的训练策略包括监督学习、非监督学习、半监督学习、强化学习,前三种主要取决于训练数据集的标注程度,也是主要的机器学习策略,而强化学习是一种依靠行为和环境之间的反馈结果自我循环学习的手段,也是深度学习常用的训练策略。

目前深度学习使用的主要深度神经网络模型有三种,包括最常用的卷积神经网络(CNN,Conventional Neural Network)、递归神经网络(RNN,Recursive Neural Network),以及刚刚起步的脉冲神经网络(SNN,Spiking Neural Network,不同于感知机模型,其神经元是基于1952年提出的脉冲神经元模型)。

CNN采用了共享感受区域和权值的方式极大减少了需要选脸的参数个数,非常适合图像、语音的应用领域。RNN引入了序列的概念,更容易用记忆来表达时序关系和因果关系,比较适合寻找和利用数据之间的关联。现在还有一种现在比较常用的循环神经网络(RNN,Recurrent Neural Network),属于递归神经网络的一种变体,外加其缩写也是RNN,目前一般将其归并为递归神经网络模型中。区别是,递归神经网络是空间维度展开,采用了树形结构,而循环神经网络采用了时间维度展开,近些年取得了的较大发展和应用的循环神经网络模型是LSTM模型。

以上这些是基本的深度神经网络模型,在深度学习实践中,根据不同的场景、不同的问题和任务、以及数据集大小和质量的不同,会在这些基础的模型之上进行改进甚至重新设计。

深度学习的流程与机器学习系统的流程类似: 1)、根据问题设计元数据方案,确定采用哪些维度的数据,必要时将数据进行标注和特征化处理。 2)、确定目标结果的衡量标准,主要是计算量和预测精度。 3)、确定采用的深度神经网络模型类型。常用CNN、RNN或SNN,但也可以采用它们的变形,或直接重新定义新的模型结构。 4)、确定输入变量数量,输出变量数量,隐层数,每层神经元个数和类型,以及学习策略。 5)、生成训练数据集、验证数据集、测试数据集。 6)、直接设置,或者调整超级参数(包括:初始值、步进长度、错误误差等)。 7)、通过学习,获得算法模型。 8)、用验证数据集和步骤2的衡量标准来评估算法模型。 9)、用算法模型进行发现和预测。

以上是深度学习的一般步骤。由于深度学习目前还是一个以试错方式进行算法建模,缺乏理论基础,经常采用经验和直觉来进行,尤其步骤6中需要使用大量的调参技巧。在实际操作中,步骤3到步骤8一般会反复迭代多次才能获得满意的算法模型。

需要补充的是,人类的智能包括两个层次,一个是感知(例如:听、看、感觉),一个是认知(例如:推理、识别、创造)。目前比较成功的深度学习应用基本集中在感知层次,智能水平刚刚接近于青蛙、老鼠等低等生物的智能。

3、深度学习应用工具

深度学习的理论基础并不完善,但其在工业上的应用已经能取得突破性的成果。在实际应用中,深度学习的效果一般取决于三个核心因素:数据的质量和大小,深度学习模型的设计和工具的适用性,使用人员的经验和参与程度。

目前深度学习在工业界的应用工具和框架非常多,在github上就开源了几十种,下面介绍常见的7种:

1)、Tensor Flow。 基于C++和Python实现,支持CUDA技术,提供多种语言接口,可以配置在能力跨度很大的计算平台上,目前已经支持多CPU和分布式训练,是推出最晚,但影响最大的、发展最快的、也最有潜力的深度学习框架。Google于2011年推出了使用深度置信网络的深度学习系统DistBelief,用于解决Google应用中的语音识别和图片搜索问题。由于DistBelief的使用完全依赖于Google内部的基础设施,代码无法开源和重用,于是Google在2015年推出了一个开源的、可移植的大规模机器学习框架Tensor Flow,在原生支持RNN的同时,目前也支持多种深度学习模型,并于2016年推出了基于分布式系统的版本,以及基于云的深度学习服务。

2)、Caffe。 使用C++和Python实现,支持CUDA技术。是2013年BVLC(Berkeley Vision and Learning Center)开发的一个实现了CNN模型的深度学习框架。该工具由于率先采用了GPU上的CUDA技术,所以速度非常快,非常适合做特征提取,尤其是图像识别和语音识别,也是第一个主流的工业级应用框架。同时,由于代码组织完善、封装比较完善,社区也比较活跃、资料和案例比较丰富,也是比较适合深度学习领域,尤其是用于图像识别领域的RNN模型的初学者入门工具。

3)、Theano。 使用python实现。是2008年由LISA推出的深度学习框架,支持大多数的机器学习算法。该工具虽然速度比较慢,但由于理论性比较规范,对CNN、RNN模型都有原生支持,在国外教育领域普及率很高,很多机器学习课程都是基于Theano来进行开展的,同时很多深度学习框架和工具的思想也来源于它。有点类似于产生并流行于计算机语言教育领域的Pascal语言的定位,目前一般用来做研究使用。另外,目前业界也有很多基于Theano设计的深度学习框架,比较有名的是Keras(目前也支持Tensor Flow作为底层框架)。

4)、Deeplearning4j。 使用Java实现,是首个商用级别的基于Java的深度学习开源库。是2014年由创业公司发布的一个面向生产环境和商业应用的高成熟度深度学习开源库,可与Hadoop和Spark等大数据系统集成,即插即用。使用 Deeplearning4j的往往是传统的数据挖掘业务,比如埃森哲、雪弗兰、IBM等。

5)、CNTK。 使用C++实现,支持多机多CPU多GPU(CUDA技术)。是微软推出的开源的、高性能、高灵活性和扩展性的深度学习工具,是比较底层也比较复杂,学习曲线比较高,也是目前性能最好的深度学习工具和框架,在github上使用CNN的性能测试一直都遥遥领先于其他深度学习工具和框架。

6)、Neuroph。 使用Java实现。是一个比Caffe更加简单的神经网络框架,主要包括一个API库和一个可视化图形工具,适合初学者学习深度学习的基本理论和工作流程,但不适合做出真正工业级的项目。

7)、Torch。 使用Lua实现,支持CUDA技术,对CNN的支持非常好。是比较早期(2000年)出现的一个支持大部分机器学习算法的科学技术框架,是一个比较成熟、在工业界应用比较广泛的深度学习框架,目前最新的版本是Torch7,Facebook和Google都在使用这个工具进行深度学习项目研究和工业级的应用。

深度学习领域目前发展非常快速,新的工具和框架层出不穷,已有的工具和框架也在快速发展和融合,以上只是介绍了截止到2016年9月,本人使用或了解过的一些工具和框架,个人推荐的是Tensor Flow(持续关注、项目应用,RNN为主,对CNN也有支持)和Caffe(入门学习、研究应用,CNN为主)。另外,目前国内对于Theano(大学和研究所里面使用较多)和DeepLearning4J(Hadoop生态圈有一些应用)也比较多,也值得关注。

最后,深度学习得益于大数据、计算能力提升、以及机器学习算法的成熟,成为当前人工智能领域的主流技术框架,目前在两个方向上正在拓展: 1)、正在从解决特定问题到解决通用问题的拓展,即模型表达的泛化问题。这一点学术界和工业界都抱有很大的期望,但现实并不乐观,基于DNN的深度学习的泛化能力比较差,还有很多理论和工程问题可能需要突破。 2)、感知和认知是智慧生命最主要的两种智能表现,前者普遍存在于所有生命体的神经系统中,在深度学习中表现为以图像识别、语音识别等模式识别为主的深度学习系统,后者则是人类大脑的主要智能表现方式,表现为RAM(推理和归纳、注意、记忆)问题。当前,深度学习在拓展感知领域应用的同时,也在向认知问题的应用和基础研究拓展,这一点在很大程度上得益于脑神经科学的发展成果。

三.发展趋势和展望

如同软件工程领域的一句名言“没有银弹”,我相信在人工智能领域里面,深度学习也不是银弹。深度学习相对于今天的人工智能领域来说,很有可能就像牛顿的万有引力定律对于物理学的地位一样,只是一个初级的技术集合。几十年之后会出现更多的、应用更广的人工智能技术,人工智能领域还会出现越来越多的黑科技和应用创意。我们不妨展望一下:

1、增量学习。是通过对新增数据的预测,不断自动矫正和调整现有算法模型的一种模式,也称为在线学习。

2、迁移学习。主要期望通过相近或相似领域成熟的参数模型来解决本领域的问题,增量学习可以近似地看作是一种迁移学习。目前已经是比较热闹的领域,但还没有看到真正有效果的商业级应用。

3、人工智能模型、知识库、数据集会更加开源。人们不必从头开始训练一个模型,如同不用从一个0岁的婴儿开始训练、而是直接复制一个10岁的儿童开始训练一样。

4、多模式引擎。不但基于机器学习和深度学习,也融合了基于符号推理和认知科学的领域知识。

5、非冯诺依曼计算机。包括生物计算机和量子计算机等非硅基计算机,也包括类脑计算(结构层次模仿脑,器件层次逼近脑,智能层次超越脑)。

6、脑机接口。

以上1、2、3已经是目前研究的热点,并在实验室和小规模应用中取得了突破,而4、5、6还在处于理论、模型、发展路径的摸索阶段。

results matching ""

    No results matching ""