在过去的70年中,由于人们对人工智能技术发展路线和体系理解的不同,衍生出了三个不同的学派:符号主义学派、联结主义学派和行为主义学派。
符号主义学派认为人们所认知、理解和思考的基本单元是符号,在此基础上可以构建出各种抽象逻辑和知识。和数学公式推导一样,通过抽象逻辑的运算可以形成新的知识。举个例子,假设有一个基本规律是“如果某个细胞是免疫细胞,那么它就可以抵抗病毒”,那么“由于T淋巴细胞是一种免疫细胞,所以它可以抵抗病毒”就是一个显而易见的结论。这就是一种将一般性规律(知识)特殊化的过程,这种推理方式称为演绎推理。与之相反的就是归纳推理,比如当观察到“很多免疫细胞(如T淋巴细胞、B淋巴细胞、粒细胞等)都可以抵抗病毒”时,就可以归纳出上述基本规律。这是一种由现象总结规律的推理方法,在这个推理过程中,可以形成新的知识。还有一种推理方式是通过规律和现象寻找根因。例如,假设有一个现象是“某个细胞可以抵抗病毒”,那么可以追溯并得到其原因“该细胞属于免疫细胞”。这种推理方式称为溯因推理。有时候一个现象会由多种原因造成,这时就需要像侦探一样,不断建立假说并且论证,找到最终原因。这种不断观察现象、提出假设、演绎论证、寻找根因并不断总结规律的过程,与人类从小学习和成长的经历非常类似。因此,以逻辑推理为代表的符号主义思想在人工智能发展初期非常容易被人们接受。
与符号主义学派不同,联结主义学派完全是另一种思路。联结主义学派认为人或者动物的行为、反应是基于周边环境产生的一系列内部“联结”形成的。这种联结类似于大脑内神经元之间的联结,通过不断地联结形成新的抽象,学习到新的内容。由于人类对于大脑的工作机理还了解甚浅,所以最初这种学习方式更多的是提供一种思路。随着算法的发展及其与系统、大数据的结合,联结主义技术(尤其是以深度神经网络为代表的技术)取得了非常大的成就,在图像识别、语音识别等场景下达到了很好的效果,但是这些技术仍然缺乏非常严格的数理证明,所以也经常受到人们的质疑。
行为主义学派源于自动控制理论,通过让机器不断地与外界交互并动态调节自身参数,来达到一定程度的“智能”,旨在构建包括感知和行为在内的一整套智能系统。行为主义认为智能系统不需要知识体系的显式构建,而可以像人类一样自我进化。人类从小学习的过程,其实也是不断试错的过程,因此这种学习方式非常好理解。但由于学习的灵活度很高,要实现真正的智能化机器人仍然非常困难。
这三种学派是从不同的角度去思考和实现人工智能,并没有孰对孰错之分,而恰好可以优势互补,利用彼此优势形成更加综合性的人工智能技术。
从20世纪50年代开始,符号主义和联结主义各自发展,各有优势,并且也在不同阶段取得了不同程度的成就,对当今人工智能的商业化应用起到了非常重要的推动作用。行为主义的主要成就是控制论,但其中用到的一些技术方法(比如神经网络等)也与联结主义关系密切。本节将进一步简要回顾人工智能技术的发展历史,读者可以通过学习其中的经验教训来判断未来人工智能技术的发展方向。
1950—1970年的这段时间是人工智能技术的萌芽发展期。由于符号主义中常用的逻辑推理方法非常严谨,并且能够用计算机模拟一些简单的推理和决策问题,所以吸引了大量研究者和投资者的注意力。联结主义的代表Frank Rosenblatt等人用感知机模型解决了简单分类问题,也受到了一定的关注度,但也很快受到了符号主义的质疑,因为简单的感知机模型只能解决线性分类问题,无法解决更复杂的问题。这段时间人工智能历史的主导者是符号主义。
随着逻辑推理的发展和进一步演进,专家系统的雏形也诞生了。专家系统是指面向某一类应用场景的专用计算机系统,根据预置的人工经验、领域知识等让机器实现自动推理,通过模拟人类的思考和决策过程而实现智能。专家系统一般包括解释器、知识库、推理机。人工输入的信息会首先经过预处理转换为可被处理的“机器语言”,然后机器会利用已有知识库,并通过规则匹配、演绎推理或者一些启发式算法等方式找到最匹配用户问题的答案。1965年,斯坦福大学研制出面向分子结构分析的第一代专家系统样机。但此时的专家系统非常初级,只能解决有限的问题。
其实,很多物理世界的复杂性远超人们的想象。自然语言处理就是典型的例子。自然语言本身是人类知识的体现,包含很多语法规则,这些语法规则就构成了一条条逻辑,看起来很适合逻辑推理。例如,可以利用主谓宾等语法知识对中文句子进行分词,即将句子分解为一系列单独的字词或短语。在自然语言处理中,基于规则的分析有一个专有名称——语法分析树。但是这种语法规则非常多,远超出语言学专家所能定义的范围,并且造成了计算和分析的困难,很难继续下去。与自然语言不同的是,图像识别等计算机视觉任务就很难有逻辑和规则可循了。例如,一张图片在数字化之后只是一个二维像素值数组,很难拿一些规则或知识来将这个二维数组关联到一个抽象的概念。当遇到这些复杂问题的时候,当时的人工智能技术就无能为力了。
因此,从20世纪70年代后期开始,由于人们对人工智能技术的期望过高,同时算法、算力还不足以支撑复杂智能系统的开发,符号主义学派受到了较大的打击;同时,联结主义学派也因一直没有找到很好的训练复杂神经网络的方法,没有太大进展。当时,人工智能系统所能做到的事情非常简单,如只能识别非常简单的单词。这时业内有很多人已经开始质疑人工智能的技术水平了。
其实专家系统的思想非常直接,解决比自然语言处理简单的问题还是可行的。到了20世纪80年代,大型可商用专家系统的成功使人们重新看到了人工智能的曙光。在商业公司的支持下,专家系统取得了非常大的进步,并在一些应用场景下带来了巨大的经济效益。例如,DEC(Digital Equipment Corporation,美国数字设备公司)与卡耐基·梅隆大学对工程设计方面的专家经验做了总结,并合作研发出了可根据订单自动生成计算机零部件配置表的专家系统,加快了计算机生产效率,为DEC公司节省了很多成本。与此同时,IBM(International Business Machine,国际商业机器公司)等巨头也在商业方面对专家系统做了大量投资,在一些场景下发挥了不小的作用。美国麻省理工学院发明了LISP(LISt Processing)机器,将LISP语言作为开发人工智能程序的标准语言。很多对人工智能感兴趣的科研单位都采购了这种机器,LISP机器在当时非常流行。
此外,算法的优化使得多层神经网络的训练成为可能。神经网络也重新复苏,并且被应用在一些商业产品上。例如,1989年贝尔实验室的Yann LeCun等人设计的CNN(Convolutional Neural Network,卷积神经网络)成功应用于银行支票手写字体识别。但是神经网络的应用仍然很有限,当时人工智能的代名词仍然以专家系统为主。
除美国之外,20世纪80年代的日本也在紧锣密鼓地开展人工智能的投资和研发。众所周知,当时日本经济强盛,并在那时提出了“第五代计算机计划”项目,旨在布局下一代计算产业,包括研发更强大的专家系统和人工智能系统,而且把重点放在大型机的研发。
总之,在20世纪80年代,美国和日本主导的人工智能研发都非常活跃。毕竟人工智能太重要了,在商业和政府资本的运作下,20世纪80年代的人工智能研究非常火热,甚至当时就已经出现了自动驾驶的雏形。
20世纪80年代末,日本“第五代计算机计划”项目的宏大目标没有真正实现,该项目最终宣告失败。这也说明人工智能的理论和系统仍然有很多未知问题没有解决,没有取得本质的突破。
在符号主义学派方面,专家系统只能解决非常具体的领域特定问题,并且需要加入很多专家知识和经验。专家系统所依赖的知识获取、表示及知识库构建的成本都比较高,动态变化的领域还需要专家不断地维护其知识库。这些问题都不利于专家系统在更多场景的应用。
在联结主义学派方面,深度神经网络的主要问题是算法、算力不够强大,数据量不够多,距今天的成功还有很远的距离。美国的LISP编程语言由于其语言本身的缺陷导致很多研发人员在开发过程中遇到不少问题。与此同时,20世纪90年代个人计算机的逐渐兴起和后来因特网的流行,吸引了政府和企业的大量投资,人工智能则再次受到了冷落。进入20世纪90年代,人工智能研究虽然仍在进行,但是热潮就没有以前那么高涨了。
在此之前,所有的人工智能研究要大规模复制或应用都非常难,要实现真正通用人工智能仍十分遥远。因此,从20世纪90年代开始,人工智能的学者们也吸取了教训,不再有实现通用人工智能的雄心壮志,而是转而研究一些相对具体的领域,例如机器学习、计算机视觉等,期望能在各自领域内实现一定的突破。实际上,从20世纪90年代到现在,这些领域都取得了非常大的进步。
从2010年开始,深度学习在语音识别、图像识别等领域逐渐取得了突破性进展。2012年,在1000类别的图像分类竞赛中,以AlexNet为代表的深度神经网络的模型精度大幅领先第二名约10个百分点,几年之后,这个数据集上的深度神经网络模型分类精度已经超过人眼。作为联结主义学派的代表,深度学习迅速席卷了学术界和工业界,并且几乎成了人工智能的代名词。但其实在此时期,符号主义学派也并未停止前进。1990—2020年,万维网的发明、互联网时代的到来、大数据的爆发,都对传统的专家系统有着非常深刻的影响。人们发现既然专家知识获取非常难,知识体系构建成本非常高,那就索性采用互联网大数据自动构建知识体系。互联网上天然存在着大量的结构化和非结构化数据,可以利用数据挖掘算法从这些海量数据中自动或半自动地抽取知识。
纵观人工智能的发展历史,不难看出,人工智能的研究和探索确实需要足够的耐心。人工智能的每一次“遇冷”纵然有其他方面的影响,但归根结底还是因为人工智能技术还有很多局限性,没有达到人们的期望,巨大的落差导致了投资的收缩。不过总体上,最近几十年人工智能学者们在各自领域还是发明出了很多新的算法,并在很多场景下实现了真正的商业落地。
其实,无论是哪种技术路线,人工智能技术的发展都不是单一独立的,而是与计算机、互联网、大数据等其他方向的发展密不可分。算力的发展使得训练更大的模型成为可能,互联网和大数据的发展使得数据越来越多,使得深度学习、机器学习模型的训练效果更好,也使得知识的获取门槛更低、知识体系的构建更加完备。
符号主义学派和联结主义学派各自在不同的时代大放异彩,各自优缺点明显,相互融合一定是未来趋势。以专家系统和知识工程为代表的符号主义学派有很强的内在逻辑,可解释性好,易与领域经验相结合;而以深度学习为代表的联结主义学派的基本理论仍然有待深入研究,可解释性差,但能够解决很多实际问题。二者的结合可以取长补短,形成更强的人工智能解决方案。
但是,直到今天,人工智能历史上出现的技术都仅限于弱人工智能。弱人工智能(或专用人工智能)是以某个具体场景下的具体任务为驱动的人工智能。在日常生活中看到的大多是弱人工智能应用,如指纹解锁、机器中英文翻译、下围棋机器人等。与之相对的是强人工智能(或通用人工智能),是指能够自主化完成一系列不同任务,且具备类似人的逻辑推理、联想、意识控制等多种综合能力的智能。很明显,经历了几十年的发展和无数人的探索,这样的智能仍然过于遥远。在日常生活中,仍然没有看到强人工智能的出现,类似电影《终结者》中展示的无所不能的机器人也只能出现在荧幕上。但即便如此,弱人工智能也已经取得了很大的商业化应用价值,因此后续本书的讨论都围绕弱人工智能展开。
经历了几十年的发展,常用的人工智能技术大概分为几个层次(见图1-1):①基础层,主要是指基础的知识学习和推理技术,包括但不限于经典机器学习、深度学习、强化学习、图算法、知识图谱和运筹优化;②应用层,主要是将基础层与常见应用相结合的技术,包括但不限于计算机视觉、自然语言处理、语音识别、搜索推荐、计算机图形学、机器人等;③行业层,主要是基础层和应用层技术在行业领域应用形成的综合性技术。
人工智能面向的行业非常多,如互联网、制造、医疗、地理、交通、水利、金融等,每个行业面临的业务问题通常需要融合多项人工智能技术,本节将主要围绕基础层和应用层技术展开介绍。当面临具体行业问题时,可根据实际情况将相应的基础层和应用层技术进行组合。
基础层技术主要聚焦解决一类通用问题,可用于支撑多个应用层技术。下面将分别介绍几种常用的人工智能基础层技术。
1)经典机器学习
假设数据可以用一个二维矩阵 X 表示(每行表示一条数据,每列表示数据的特征),数据的标签用一个列向量 y 表示(每个值表示每一条数据的标签),那么机器学习就是通过数学统计的方式从数据中发现规律和模式的方法。这个过程也称为有监督机器学习。根据 y 是离散值还是连续值,可以将机器学习问题分为分类问题或回归问题。无论是分类问题还是回归问题,都需要输入数据 X 中包含有真实标签,以此引导机器学习模型发现知识。
图1-1 常用的人工智能技术分层概览
当然输入数据可能没有标签,即 y 不存在,比如某网站有一批用户访问行为数据,需要从这些数据中分析出典型的几种用户访问行为,并且未来会利用这几种典型行为去对用户做分类。在机器学习处理这批数据之前,我们没有办法预先知道有哪几种类型,即缺乏真实标签。这种情况下,就需要利用聚类等方法来实现。我们将这种可以学习无标签数据的机器学习称为无监督学习。介于监督学习和无监督学习之间的,就是半监督学习。它可以同时利用带标签和不带标签的数据来训练机器学习模型。此外,当数据的标签不完全正确或者不够精准时,一般需要采用弱监督学习。实际应用中遇到的数据通常有一部分是有标签的,另一部分是无标签的,而大多数半监督学习算法和弱监督学习算法是在监督学习算法的基础上改进得到的,因此下面主要介绍监督学习算法和无监督学习算法。
监督学习的一些经典算法有逻辑回归、KNN(K-Nearest Neighbors,K-近邻)、决策树、支持向量机、集成学习等。虽然逻辑回归中有“回归”两个字,但它是分类模型。作为最简单的分类模型,逻辑回归采用简单的线性模型和Sigmoid或Softmax函数将数据映射为其属于不同类别的概率。KNN算法根据未知样本到已知样本的距离来预测未知样本的标签。决策树方法将一个机器学习模型表达为一个树形结构。首先对树中每个节点计算一个条件概率分布,然后使用信息增益等指标选择该节点上分类效果最好的特征,每个叶节点输出对应的标签类别。20世纪90年代,Vladimir Vapnik等人发明了具备坚实理论基础的支持向量机算法,并且利用该算法把低维空间的非线性可分问题转化为高维空间的线性可分问题。该算法采用最大类间隔思想,可以用于二分类问题,并可以拓展至多分类问题和回归问题。集成学习旨在通过多个弱分类器组合形成一个强分类器,常用的算法有随机森林、AdaBoost、GBDT(Gradient Boosting Decision Tree)等。
无监督学习问题主要是指聚类算法,其将无标签数据划分为不同的组或聚类簇,使得组内样本数据的相似度大于组间样本数据的相似度。常用的聚类算法有K-Means、DBSCAN(Density-Based Spatial Clustering of Applications with Noise)等。给定聚类簇数目,K-Means算法首先随机初始化每组的中心点,然后根据样本到中心点的距离来分配样本到对应组,最后更新每组的中心点。重复以上步骤直到每组中心点变化量小于给定阈值。DBSCAN是基于密度的聚类算法,不需要提前知道聚类簇数目。
以上介绍的分类、聚类算法都没有考虑时间维度的变化。但往往很多应用场景(如某商品的销售量预估等)都会涉及时间序列的预测。时间序列是指按照时间排序的一组变量值,一般是在相等间隔的时间段内,依照给定的采样率对某种潜在过程进行观测的结果。时间序列预测(或时序分析)是指根据时间序列上过往时刻的数据预测后续时刻的数据。时间序列数据通常是一系列实值型数据,其特殊性在于,当前时刻的数据与之前时刻的数据之间存在着依赖关系,从而可以依据过去数据的模式,推断未来数据的发展规律。时间序列的特征主要为趋势性、季节性、依赖性和不规则性。常见的时序预测算法有ARMA(Autoregressive Moving Average,自回归移动平均)、NARMA(Nonlinear Autoregressive Moving Average,非线性自回归移动平均)、LSTM(Long Short-Term Memory,循环神经网络)等。
概率图模型从一个新的视角来解释机器学习模型。很多分类、聚类、时间序列预测模型都可以用概率图模型表示,如支持向量机有对应的概率版本的向量机,K-Means可以用高斯混合模型来解释。概率图模型在概率模型的基础上,通过图结构来表述概率分布,其中节点表示变量,节点之间的边表示变量之间的概率关系。概率图模型有三个基本问题:①表示问题,即通过图结构来描述概率模型中变量之间的依赖关系;②推断问题,即在已知部分变量时计算其他变量的后验概率分布;③学习问题,即概率图模型中图结构的学习和参数的学习。根据节点之间边的连接类型,概率图模型可以分为有向图模型和无向图模型。常见的有向图模型有朴素贝叶斯模型和隐马尔可夫模型等,而常见的无向图模型有受限玻尔兹曼机模型、条件随机场模型、马尔可夫随机场模型等。
另一方面,机器学习算法与数据库等技术相结合还可以用于挖掘海量数据中的一些特定模式,如可以从数据中发现一些离群的异常点,常用于欺诈检测、系统健康监测等。这种异常检测问题也可以理解为是一个正负类数据样本极度不均衡的一个特殊的分类问题。关联规则分析可以从数据中发现变量之间的相关性,用于发现数据中有强关联的特征项。个性化推荐可以通过分析用户的公开信息和历史行为,对用户的需求和偏好做出预测,常用算法有协同过滤、因式分解机等。
2)深度学习
深度学习属于机器学习的范畴,考虑到最近几年深度学习在学术研究和工业应用方面的重要性,这里将深度学习单独讨论。
对于很多机器学习问题,总体解决思路是首先将数据的原始特征经过简单的映射或者变换得到特征表达,然后利用各种经典机器学习方法进行分类、聚类或者回归。但是对于某些数据,尤其是图像和文本等,简单的映射不能得到很好的特征表达,这种情况下即使拥有再强的分类器或回归器,也无法取得好的效果。传统的做法是利用人的经验设计出预处理方法和特征抽取方法。这个过程能够极大简化问题,甚至有可能将一个线性不可分问题转变成线性可分问题,然后利用各种传统机器学习方法去做分类或者回归。因此,预处理和特征抽取的好坏对最后的分类结果影响非常大。如果设计出来一个判别能力很强的特征,那么分类器就相当容易训练且结果不会差。
早期的科学家为各行各业设计了非常多的特征,的确解决了一些核心问题,如行人识别等。可惜的是,很多现实问题很难设计出理想的特征。因此,人们转向了特征学习方法。很久之前,特征学习已经被广泛研究并取得了很多成就,如稀疏编码,还有一些其他流形学习技术。但是这些方法直接从原始信号中学习特征的效果并不好,比如直接从输入图像像素值中学习特征,仍然没有办法提取多层语义特征。所以,这些特征学习的方法本质还是将特征工程和机器学习算法分离。
作为联结主义学派的典型代表,深度学习是一种从原始数据开始不断通过模型自动学习特征表达的学习方法。基于神经网络的深度学习模型的每一层都可以看作数据的一种特征表示。深度学习将特征学习过程和分类过程融合在一起。对于分类问题,深度学习网络可以通过前面多层处理进行特征学习,在最后一层通过Softmax等函数将全连接层的输出映射到最终分类结果。如前文所述,早在1989年,Yann LeCun等人就利用多层神经网络,在使用极少的特征提取步骤的情况下在手写数字识别任务中取得了当时最好的效果。随后的十几年中,深度学习的算法改进仍在持续。Geoffrey Hinton在2006年提出了基于受限玻尔兹曼机编码的深度神经网络及其分层预训练方法,使得真正意义上的深度多层神经网络的训练更加容易。此后几年,Geoffrey Hinton及其学生利用深度神经网络模型接二连三地在手写体识别、语音识别、图像识别等多项任务中取得了非常高的精度,引发了深度学习的变革。
目前,常用的深度学习模型有CNN、LSTM等。另外,伴随着深度学习技术的发展,诞生了很多标志性的模型架构,如2015年何恺明等人发明的基于残差连接的ResNet,将CNN的层数增加到100层以上仍然可以收敛并取得很好的精度。同时,深度学习的发展也催生了很多新的机器学习方法,如GAN(Generative Adversarial Network,对抗神经网络)就是利用对抗式训练技术找到更好的生成模型的方法。
随着数据的增多、算力的加大、算法和网络结构的设计优化,深度学习模型训练效果每年都在进步。从2010年以后,深度学习促进了很多领域(如计算机视觉、自然语言处理、语言识别等)的进步,在此过程中出现了很多著名的算法模型,如GoogLeNet、VGGNet、ResNet、Faster R-CNN、BERT(Bidirectional Encoder Representation from Transformers)等。
3)强化学习
与经典机器学习、深度学习有很大的不同,强化学习是一种持续与环境交互通过获取奖励来进行训练的决策类人工智能算法。历史上,强化学习的概念脱胎于控制理论体系的最优控制,即在一定的模型和条件约束下,在一个时间窗口内通过连续决策,达成某种目标最优的效果。因此,在很长一段时间内,强化学习和最优控制领域中的自适应动态规划共享同一套理论框架。强化学习更强调从神经学和认知科学的角度模仿生物与环境持续交互,通过不断接受反馈和改进来逐步形成智能。
早在20世纪80年代,强化学习之父Richard Sutton就提出了时间差分等一系列理论创新,逐步将强化学习从优化的框架中独立出来,形成独立的理论体系。在强化学习体系中,有两个基本概念:强化学习主体和环境。主体不断地给环境发送决策信号(或动作),环境根据动作反馈给主体当前的状态和奖励,然后主体再根据环境反馈进行自我修正并发送下一次决策信号给环境。重复上述步骤,就可以通过环境的引导使得强化学习主体做出更适合环境需求的决策。在强化学习中,价值函数(或值函数)用来表达当前状态或决策信号下主体所能获取的累计期望奖励值,可以评价主体做出的决策是否合适;策略函数用来将决策信号(也称为策略)参数化,通过不断迭代学习来优化。
通过几十年的发展,强化学习的经典理论体系得到了充分的开发和验证,Q-Learning、SARSA(State Action Reward State Action)、PG(Policy Gradient)等经典算法被提出并且在部分场景取得了成功。但与此同时,基于拟合函数或查找表的强化学习也暴露了不能处理复杂问题的缺点。2013年,在深度学习快速发展的背景之下,Volodymyr Mnih等人首次提出了深度强化学习概念,创造性地将卷积神经网络和全连接网络分别作为特征提取器和价值函数拟合器,通过端到端的Q-Learning训练方法,在雅达利游戏平台上获得了超越人类玩家的表现,本质上将原先人工定义的部分交给神经网络进行自动学习。
2016—2017年,基于深度强化学习及一系列组合策略所得到的围棋“机器人”AlphaGo,在围棋大赛中接连战胜了人类顶尖棋手李世石、柯洁,标志着以深度强化学习为代表的决策类人工智能达到了一个新的高度。自此之后,强化学习在学术界和工业界进入了飞速发展时期。在学术界,强化学习成为最为热门的研究方向之一;在工业界,强化学习也展现出了巨大的能量,目前已经在游戏、机器人、云计算、金融、自动驾驶等领域起到关键作用。
经过几十年的发展,强化学习已经形成了一个丰富而庞大的体系。虽然它们都采用如上所述的总体框架,但基于若干具体核心逻辑上的差异,可以将其分为若干大类,每一个大类有会对应一系列具体的算法。首先,从是否采用模型直接描述环境的角度看,可以分为Model-free(模型无关)和Model-based(基于模型)两大类算法。此外,从动作是直接由策略函数产生还是由值函数输出取最大值的角度看,可以分为策略梯度和值函数拟合两大类算法。策略类算法包括REINFORCE、PG、A3C(Asynchronous Advantage Actor Critic)、PPO(Proximal Policy Optimization)、IMPALA(IMPortance weighted Actor-Learner Architecture)等,值函数拟合类算法主要包括DQN(DeepQ-Networks)及其一系列衍生算法。从训练数据是否直接由当前策略产生的角度看,可以分为Off-Policy(离轨策略)和On-Policy(在轨策略)。Off-Policy算法包括DQN等,On-Policy算法则包括PG、A3C等。
4)图算法
图是计算机中经典的数据结构之一。在数据规模极其庞大、数据结构愈加复杂的今天,许多应用场景都包含了大量具有互联关系的不同实体,而这些实体之间的关系可以通过图上的边及其属性数据来直观表达。例如,在Facebook和Twitter这类社交网络中,假设以个体为单位的社会关系可以构成一张图,那么图中的点就是人,人与人之间的关系就是边。
各类基于图算法的智能分析技术和数据存储查询技术也受到业界更多的关注与重视,在其他不同的场景下,图算法还被应用于通信网络、交易网络、客户关系网、用户商品推荐、交通网络、知识图谱等诸多领域。随着大数据的发展,图算法的规模越来越大,对系统和算法的要求也越来越高。一般地,实际业务所需的图算法主要用来计算图、节点、关系的衡量指标,根据解决问题的目的不同分为以下几类:图遍历、路径发现、社群发现、图挖掘、图神经网络等。
图遍历也被称为图搜索,是指访问图中每个顶点的过程。对图的访问和更新都以图遍历为基础,经典图搜索算法有PageRank和PersonalRank。PageRank最早用在了搜索引擎中。
路径发现用以识别最符合大型网络中两点之间某些标准(如最短、最便宜、最快等)的路径。最短路径算法是图论研究中的一个经典算法,目的是寻找图中两节点之间的最短路径。很多最短路径算法也可以转换为图搜索问题、动态规划问题等。
社群发现用以划分复杂网络的社群结构。在复杂网络的研究中,如果网络的节点可以容易地分组成(可能重叠的)节点集,使得每组节点在内部密集连接,则称网络具有社群结构。这意味着社群内点的连接更为紧密,社群间的连接较为稀疏。
图挖掘是基于图的数据挖掘,用来发现大量图结构数据的模式。类似于传统的机器学习和数据挖掘,从图数据中发现新颖或异常的模式也至关重要,可以用来辅助业务决策,在社交网络、医药化学、交通运输网络等诸多领域中有着重要意义。
图神经网络是将CNN、LSTM等神经网络或深度学习的方法用于图数据的一类算法。例如,图嵌入将图的网络拓扑信息通过表示学习的方法嵌入到每个节点的向量表示中,图卷积将卷积网络推广到非欧空间,用于图数据的抽象特征表达和抽取。
5)知识图谱
随着符号主义技术路线的不断发展,2012年Google(谷歌)最早提出了知识图谱,基于知识图谱的搜索可以充分利用来源广泛的数据和知识,使得搜索效果更好。知识图谱近几年发展迅速,在智能搜索、智能问答、个性化推荐等领域中得到了广泛应用。知识图谱是利用图数据结构用形式化表达实体之间语义关系的网络结构,旨在从数据中整理、识别和推断事物和概念之间的复杂关系,是人类认知知识的可计算模型,也是机器理解和利用人类知识的桥梁。
知识抽取是知识图谱构建的关键步骤。知识图谱的数据源从数据类型上可分为结构化数据和非结构化数据。早期大部分知识图谱都构建在结构化数据基础之上,而这些结构化数据多是人工整理构建而来,这极大地限制了知识图谱的规模和发展。得益于自然语言处理技术的发展,从海量的非结构化纯文本数据中进行知识抽取构建图谱成为可能。从抽取知识的粒度来区分,知识抽取主要分为实体抽取、关系抽取和事件抽取。
实体抽取也叫命名实体识别,指从非结构化纯文本语料中自动识别出命名实体。早期的实体抽取依赖于规则和模板匹配。从20世纪90年代开始,机器学习迅猛发展,基于条件随机场的模型在实体抽取领域取得了很好的效果,但也需要依赖人工定义的特征。近几年,基于深度学习的方法则直接以文本词向量作为输入,主要使用CNN、LSTM及引入注意力机制的神经网络对语义信息进行建模,达到当前最好的效果。关系抽取的目标是从文本中抽取得到形如“主语、谓词、宾语”的三元组,而三元组则是构建知识图谱的基础。早期基于监督学习的关系抽取方法主要通过流水线的方式把关系抽取转化为关系分类问题:先进行实体抽取,然后通过机器学习分类模型进行关系分类。为了解决流水线误差积累的问题,可端到端对实体抽取和关系抽取建模。此外,为了解决标注数据依赖的问题,远程监督、自助抽样法(Bootstrapping)等方法也常常应用到关系抽取领域当中。事件抽取是指从自然语言文本中抽取出需要的事件信息,并以结构化的形式加以呈现。
知识融合的目标是使来自不同数据源的知识图谱融合形成一致的形式,主要包括本体匹配和实体对齐两大任务。本体匹配主要依靠语言学特征、本体结构特征、逻辑推理等信息,将与本体层等价或相似的实体类、属性和关系匹配起来,从而将两个图谱在本体层融合为同一个本体。实体对齐强调对齐同一个对象的不同实例,传统的方法主要有等价关系推理、基于实体的属性信息的相似度计算等。随着知识表示学习的发展,利用实体的低维向量表示中所蕴含的图谱结构特征进行实体对齐匹配的方法显示出广阔的前景。如何综合利用实体属性的语义信息和关系的结构信息,成为近些年实体对齐领域的研究热点。
知识表示旨在解决三元组表示形式计算效率低、数据稀疏性高、机器无法直接利用等问题。将实体和关系表示为稠密低维实值向量,让模型能够在低维向量空间中高效地利用实体和关系之间的复杂语义关联信息,在知识图谱的补全、融合、推理中均有大量应用。早期主要通过神经网络、矩阵分解等方式学习得到实体和关系的表示,但这类方法普遍计算复杂,难以在大规模知识图谱中有所应用。后续受到词向量平移不变现象的启发,研究者提出了TransE(Translating Embeddings),将知识图谱中实体和关系视为同等向量,并将实体之间的关系看作实体向量的平移,模型计算简单而且效果很好,成为当前的研究热点。近些年,图卷积神经网络以其丰富的图语义表示能力,成为知识表示学习领域研究的新方向。
知识推理是指在已有知识图谱基础上挖掘出图谱中隐含的知识,进而补全、纠正和扩展知识图谱。一般在推理的过程中,会抽象出一些关联规则来辅助进行推理和解释。传统专家系统中的规则普遍通过专家人工总结。由于人类知识的多样性,人工总结的方式无法穷举所有的推理规则,而且成本很高。因此,基于机器学习的推理规则自动挖掘是更好的方案。当前常用的知识推理方法可分为基于演绎的推理和基于归纳的推理两种类型。演绎推理一般围绕本体展开,是自顶向下的推理。针对本体逻辑描述的规范,W3C(World Wide Web Consortium)提出了OWL(Web Ontology Language)和OWL2标准。两者都是基于RDF(Resource Description Framework)语法的描述逻辑,通过TBox(Terminology Box)和ABox(Assertion Box)机制,将知识图谱的推理问题转化为一致性检验问题,从而实现推理任务。基于归纳的知识推理主要利用知识图谱已有信息,通过分析和挖掘,自底向上地整理并发现规律进行推理,常见的有利用知识图谱图结构信息的路径推理、基于关联规则挖掘的规则推理和对知识图谱中的元素进行表示学习的知识表示推理等。
6)运筹优化
严格意义上,运筹优化不完全属于人工智能领域。但是运筹优化所包含的最优化问题、决策问题又是与人工智能息息相关的。最优化问题是在一系列约束条件下获取某个复杂函数极值的问题。很多上述学习类的算法都采用了最优化方法在大规模参数空间中寻找最优参数值。1937年,英国人在二战中对雷达调度的研究被公认为是现代运筹优化的起源,并在战后获得爆发式的发展。运筹学最早发源于战争时期,并在工业、农业、商业中发挥了重要的作用,并作为一个重要分支被纳入现代应用数学体系之下。
1947年,由George Dantzig提出的单纯形法是运筹优化史上的一大里程碑事件,标志着运筹学在理论上更加成熟,实际应用更加深入、广泛。单纯形法用于求解线性规划问题,是运筹学中最基础、最广泛存在且相对较成熟的一种方法。线性规划指问题的目标函数和约束函数均为线性函数。许多复杂的问题通过转化或近似成为线性规划问题而得以求解。如果某个线性规划问题的决策变量为整数,那它就变为整数线性规划问题;如果部分决策变量为整数,那就变为混合整数规划问题。求解混合整数规划非常复杂,是一类NP-hard(Non-deterministic Polynomial-time hard)的问题,求解方法一般为分支定界法和切平面法等。
非线性规划是更为广泛的一类问题,指目标函数和约束函数均不是线性函数的问题。根据目标函数和约束条件的形式,非线性规划问题可以分为凸优化和非凸优化问题。判断一个集合是不是凸集,可以在集合中任意取两个点并连成线段,如果线段上的所有点都包含在该集合中,则这个集合就是凸集,否则就是非凸集。
凸优化问题是指目标函数和约束条件都是凸函数的优化问题。常见的凸优化问题有线性优化问题、二次优化问题及几何优化问题。凸优化问题有一个很重要的性质,即任何局部最优解都是全局最优解。由于这个性质,采用简单的局部算法(如梯度下降法等)即可收敛到全局最优解,求解过程相对简单。
非凸优化问题是很难求解的,因为可行域集合中可能存在无数个局部最优点。然而,实际中大多数问题是非凸的。特别地,深度学习中的损失函数是由很多的非线性函数组成的复合函数,这个函数通常是非凸的。求解这个非凸函数的最优解,通常采用梯度下降法来完成。然而,由于复合函数无法求得显式梯度表达,因此深度学习中通常使用反向传播来逐层求取梯度,并进行模型参数更新。对于有些非凸优化问题,还可以使用松弛或者近似的方法将其转化为凸优化问题再求解。
启发式算法则是另一大类运筹优化求解算法。该方法通过对一些自然现象的模拟,给出优化问题的一个较优可行解。启发式算法的算法结构通常与待解问题关系较小,因此具备较为广泛的适应性,但求得的次优解和最优解之间的距离通常无法得知。经典的启发式算法包括蚁群算法、模拟退火算法、遗传算法、进化算法等。
现代运筹优化问题求解的状态维度往往高达数万维甚至百万维,如工厂的调度优化、气象的数据同化、物流配送问题等。问题维度的提升极大地提高了算法对硬件计算能力的要求。幸运的是,当代芯片技术的发展能够满足运筹优化对算力急速增长的需求。
下面将重点介绍两个开发者经常接触的应用层技术:计算机视觉和自然语言处理。
1)计算机视觉
计算机视觉的发展与机器学习理论的发展密不可分。计算机视觉早期主要解决成像、编码、滤波等信号处理问题,不太涉及感知层面。一方面,随着高清视频的发展,编解码等基础视觉技术也在与深度学习相结合而不停向前发展,业界标准也在持续跟进。另一方面,随着图像、视频理解和分析的需求日益增多,业界也非常关注感知和语义理解问题。根据问题的维度,计算机视觉的问题可以分为2D问题和3D问题。相比2D问题而言,这里的3D问题主要是指在空间维度而非时间维度上新增一个维度。2D问题通常仅限于解决像素平面的感知和理解问题,而3D问题主要是针对真实世界的三维结构的感知和理解问题。由于3D问题(如三维几何重建、深度估计、三维坐标估计、三维目标检测和跟踪等)主要依赖成像的几何学原理,不是本书重点,这里不做太多介绍。本书将聚焦2D视觉类任务,除常见的图像分类、目标定位、目标检测、图像分割(包括语义分割、实例分割和全景分割)、目标跟踪外,还有很多其他任务,如显著性检测问题、图像描述、图像生成、视觉问答等问题。
2D视觉类任务的输入大多类似,是一幅或者多幅图像,但是根据具体任务不同,输出模块的形式有很大的不同。图像分类任务很好理解,只输出一个向量,其每一维表示图像属于不同类别的概率。在图像分类的基础上,我们还想知道图像中的目标具体在图像的什么位置,这类任务就是目标定位。目标检测通常是从图像中输出感兴趣目标的矩形框及标签。在目标定位中,通常只有一个或固定数目的目标,而目标检测更一般化,图像中出现的目标种类和数目都不确定。因此,目标检测是比目标定位更具挑战性的任务。常用的目标检测模型有YOLO(You Only Look Once)系列、SSD(Single Shot MultiBox Detector)、Faster R-CNN、EfficientDet等,这些算法详情见第5章。
进一步地,在分割任务中,需要将整个图像分成像素组,然后对其进行标记和分类。语义分割试图在语义上理解图像中每个像素的角色(如火车、沙发等),其基本思路是对图像进行逐像素分类。具体来说,将整张图像输入深度神经网络,使输出的空间大小和输入一致,通道数等于类别数,分别代表各空间位置属于对应类别的概率。与语义分割有所不同,实例分割不仅需要对图像中不同的对象进行分类,而且还需要确定它们之间的界限、差异和关系。其基本思路是先用目标检测方法将图像中的不同实例框出,再用语义分割方法在不同矩形框内进行逐像素标记。
目标跟踪是指在给定场景中跟踪感兴趣的单个目标或多个目标的过程。简单来说,给出目标在视频第一帧中的初始状态(如位置、尺寸),目标跟踪算法自动估计目标物体在后续帧中的状态。图像描述任务的目的是根据图像生成描述文字。
从方法上来说,计算机视觉算法大致可以分为两种:一种是基于传统机器学习的方法;另外一种是基于深度学习的方法。
用于计算机视觉任务的传统机器学习算法主要包括支持向量机、决策树。基于传统机器学习的计算机视觉算法首先通过特征提取模块将原始图像转化为固定大小的特征向量,然后将特征向量输入分类器模型中进行模型训练。常用的特征提取方法包括SIFT(Scale-Invariant Feature Transform,尺度不变特征变换)、HOG(Histogram of Oriented Gradient,方向梯度直方图)、LBP(Local Binary Pattern,局部二值模式)、Gabor小波等。传统算法的缺点主要是需要特征工程操作,每解决一个具体问题,都需要大量的手工定制特征。而基于深度学习的算法将特征提取模块用深度神经网络来代替,通过大量数据自动发现最佳的特征表达,可以避免算法专家针对每个具体视觉问题进行特征的定制。目前计算机视觉任务的常用算法基本上被深度学习所“垄断”。
2)自然语言处理
自然语言是由人类可以理解的符号组成的具有语法结构的序列,自然语言处理旨在让机器理解人的语言,把非结构化的自然语言转化为结构化的信息。如前文所述,自然语言处理与知识的抽取和表达关系非常密切。
自然语言的应用非常广泛,如媒体都在使用的搜索引擎、机器翻译、对话机器人、垃圾邮件检测、垃圾评论识别、作文自动打分等。总体来说,自然语言处理系统的输入是自然语言,最后输出一个目标,输入的自然语言可以是词、句、篇章对话等,输出的目标可以是标签、词、句、篇章等。不同的输入和输出对象,衍生出不同的自然语言处理任务。根据输入和输出的不同,自然语言处理主要有以下几类任务:词向量表示、文本分类、序列标注、机器翻译、文档摘要等。
词向量表示是自然语言处理中最基本的任务。词向量基本上遵循分布假设,根据这个假设,意思相似的词往往出现在相似的语境中。词向量的主要优点是可以捕获词之间的相似性。词嵌入通常用作深度学习模型中的第一个数据处理层。一般通过优化大型未标记语料中的辅助目标对词嵌入进行预先训练,所学习到的词向量可以捕获一般语法和语义信息。
文本分类旨在通过模型来预测一段文本的标签,这里的标签可以是人们定义的各种符号,比如在垃圾邮件识别场景中输出是否是垃圾邮件,在广告检测场景中输出是否是广告。每个样本的标签可以是单个也可以是多个,分别称为单标签分类任务和多标签分类任务。情感分析可以看作一种特殊的分类任务,重点在于分析文本所蕴含的情感。
序列标注主要包含分词、词性标注和命名实体识别等任务。如前文所述,这些任务也常用于构建知识图谱时的知识抽取。其中,分词是中文常见的一个任务,旨在将连续的字序列按照一定的规范重新组合成词序列;词性标注旨在分析句子中每个词的语法属性,例如判断每个词为名词、动词、形容词等,主要任务是消除词性兼类歧义,可应用于语法分析等任务中;而命名实体识别常用于知识图谱,用于识别文本中实体的类型。
生成式任务主要包含机器翻译、文本摘要等。机器翻译任务对应的输入是一种自然语言文本,输出是另外一种自然语言,如中文到英文、中文到日文等。机器翻译是一个典型的序列生成任务。文本摘要的输入一般是篇幅比较长的文章,输出是篇幅比较短的文本片段。文本摘要在信息爆炸的今天有着非常广泛的应用,帮助人们筛选出重要信息。
类似于计算机视觉,自然语言处理算法大致也可以分为两种:一种是基于传统机器学习的方法;另外一种是基于深度学习的方法。
传统机器学习的算法主要包括支持向量机、逻辑回归、决策树、随机森林等文本分类算法,以及隐马尔可夫模型、条件随机场等序列标注算法。对于机器翻译等任务,传统机器学习没有合适的算法,一般使用语言模型来做单语的序列生成,使用统计机器翻译模型实现双语的序列生成。简单来说,基于传统机器学习的自然语言处理算法首先通过特征提取模块将输入文本数据转化为特征向量,特征可以是 N 元语法( N -Gram)、词典、规则等,然后将特征向量输入分类器模型或序列标注模型中进行模型训练。与计算机视觉一样,传统算法的缺点是需要特征工程操作,同时算法模型对序列建模能力弱,因此效果不如深度学习模型好。
当前基于深度学习的自然语言处理模型主要包括神经语言模型、词向量模型、CNN、LSTM、无监督预训练语言模型等。自然语言处理的关键在于学习词向量表示,将得到的词向量表示输入模型编码模块,模型编码进行各种复杂的神经网络映射计算,包括线性运算和激活函数的非线性运算,最终得到目标的向量输出。根据具体任务不同,向量输出模块的形式也不同,比如分类任务,只输出一个向量,对于序列标注任务,则每个词都对应输出一个向量。在向量输出的基础上,最后通过Softmax等函数,映射到最终的模型输出,如标签、词等。
如前文所述,人工智能技术分化出了很多领域,每个领域都有非常大的应用价值,对于各行各业数字化转型有着非常深刻的影响。例如,日常生活中常见的图像识别、搜索推荐系统、智能客服等应用,都在不同程度上利用了人工智能技术。
人工智能技术的价值主要体现在以下三个方面。
(1)提高业务效率,降低业务成本。目前很多传统行业(如油气、电力、制造、能源等)还有大量业务场景没有进行全面的数字化转型,要么是数据没有积累,要么是数据之间没有联动,无法进行后续的分析,大多数情况下还需要人工完成很多业务的处理。例如,很多行业都会涉及证件、票据类的识别,需要人工查看并录入,如果能够有效利用人工智能中的OCR(Optical Character Recognition,光学字符识别)技术,就可以让机器自动进行字符识别,极大提升信息录入效率。
(2)探索新的业务模式。在既有业务的基础之上,当获取所有的数据之后,就可以进行建模分析。还是以上述OCR技术的应用为例,电子化录入只是完成了第一步,后续可以通过人工智能算法对所有录入的信息进行统计分析,并在业务经验的指引下,通过算法挖掘出一些异常信息,如哪些单位或个人的票据金额有异常等。如果数据量巨大,人工很难发现这些异常。围绕这些统计分析算法和系统,可以推出新的智能分析业务,从而对上层系统提供更有价值的指导建议或告警。因此,人工智能可以使得当前业务场景进一步智能化,不断推出新的业务模式,加快行业智能化转型。
(3)催生新的产品形态。人工智能除可以帮助和增强已有业务外,还可以单独以新的产品形态出现。目前市场上流行的人工智能音箱就是近几年出现的新鲜事物。人工智能音箱通过自动语音识别等技术,实现人机交互,可以根据人的语音指令实现播放音乐、查找新闻及控制其他家庭设备。
在各大行业中,需要进行表格类、图像类、语音类、文本类等数据的处理、分析、挖掘,以及基于这些数据决策控制的场景,都可以与人工智能技术相结合。然而,人工智能在业务场景中的表现效果(如精度等指标)取决于很多因素,如业务逻辑复杂度、数据质量、算法复杂度等。如果期望人工智能技术在实际场景中表现更好,就应该将场景尽可能具体化,减少复杂度,并且在算法和模型的基础上合理地引入业务场景的先验知识。