王蕴韬
中国信息通信研究院北京100037
当前,伴随网络及计算机技术的长足发展,人工智能随着深度学习技术应用的突破取得极大进展,各种落地应用及概念产品层出不穷,人们对其在生产生活中的革命性创新充满期待。捋顺人工智能算法脉络,解析基本算法应用场景,可使我们对人工智能技术有一个更为理性深入和全面的理解及思考。
纵观人工智能技术发展历史,人工智能在实现上可归类为六种途径,即符号主义、连接主义、学习主义、行为主义、进化主义和群体主义[1]。六种途径并非泾渭分明,它们只是从不同的角度提出了解决方案,如学习主义就用到了人工神经网络来实现。目前流行的机器学习以及深度学习算法实际上是符号主义、连接主义以及行为主义理论的进一步拓展。
对于机器学习的理解,笔者认为可以从三个问题入手,即学什么、怎么学、做什么。首先,机器学习需要学习的内容是能够表征此项任务的函数,即能够实现人们需要的输入和输出的映射关系,从信息论的角度来看,其学习的目标是确定两个状态空间内所有可能取值之间的关系,使得熵尽可能最低[2]。其次,机器怎么学。要实现学习目标,就要教给机器一套评判的方法,而不同于告诉机器每个具体步骤如何操作的传统方法,这需要对机器描述过程演进为对机器描述结果。从数学角度来看,就是为机器定义一个合适的损失函数,能够合理量化真实结果和训练结果的误差,并将之反馈给机器继续作迭代训练。最后,机器学习究竟要做什么,其实主要做三件事,即分类(Classification)、回归(Regression)和聚类(Clustering),其中分类和回归属于监督学习的范畴,而聚类则属于非监督学习的范畴。目前多数人工智能落地应用的背后,都是通过对现实问题抽象成相应的数学模型,分解为这三类基本任务的有机组合,并对其进行建模求解的过程。
这里,我们首先讨论当前的三大最常见的机器学习任务及其常用算法[3]。
首先是回归。回归是一种用于连续型数值变量预测和建模的监督学习算法;回归任务的特征是具有数值型目标变量的标注数据集。回归算法有很多种,其中最为常用的算法主要有四种:第一是(正则化)线性回归,它最简的形式是用一个连续的超平面来拟合数据集;第二是回归树(集成方法),该方法又称为决策树,通过将数据集重复分割成不同的分支来最大化每次分离的信息增益,从而让回归树很自然地学到非线性关系,集成方法包括随机森林(RF)或梯度提升树(GBM);除此之外,还有最邻近算法和深度学习。
第二是分类。分类算法用于分类变量建模及预测的监督学习算法,许多回归算法都有其对应的分类形式,分类算法往往适用于类别(或其可能性)的预测,而非数值。其中最为常用的算法主要有五种。1)(正则化)逻辑回归。逻辑回归通过逻辑函数将预测映射到0到1的区间,因此预测值可被视为某一类别的概率。2)分类树(集成方法)。对应于回归树的分类算法是分类树。通常,它们都是指决策树,更为严谨的说法是“分类回归树”,也就是非常有名的CART算法。3)支持向量机。支持向量机使用一个名为核函数的技巧,来将非线性问题变换为线性问题,其本质是计算两个观测数据的距离。支持向量机算法所寻找的是能够最大化样本间隔的决策边界,因此又被称为大间距分类器。4)朴素贝叶斯。基于条件概率和计数的简单算法,其本质是一个概率表,通过训练数据来更新其中的概率。它预测新观察值的过程,就是根据样本的特征值在概率表中来寻找最为可能的类别。被称为“朴素”的原因是其核心的特征条件独立性假设(例如,每一项输入特征都相互独立)在现实中几乎是不成立的。5)深度学习方法。
第三是聚类[4]。聚类算法基于数据内部结构来寻找样本自然族群(集群)的无监督学习任务,使用案例包括用户画像、电商物品聚类、社交网络分析等。其中最为常用的算法主要有五种。1)K均值。基于样本点间的几何距离来度量聚类的通用目的算法。由于集群围绕在聚类中心,结果会接近于球状并具有相似的大小。2)仿射传播。基于两个样本点之间的图形距离来确定集群,其结果倾向于更小且大小不等的集群。3)分层/层次。主要完成层次聚类的目标。4)DBSCAN。基于密度的聚类算法,它将样本点的密集区域组成集群;其最新进展是HDBSCAN,它允许集群的密度可变。
在机器学习领域内,两个最为重要的概念是维度及特征选取。其中“维度(Dimensionality)”通常指数据集中的特征数量(即输入变量的个数)。而特征选取是从你的数据集中过滤掉不相关或冗余的特征。
特征选取(Feature Selection)[5]主要包括四种方法。1)方差阈值。摒弃掉观测样本那些观测值改变较小的特征(即,它们的方差小于某个设定的阈值)。这样的特征价值极小。2)相关性阈值。去掉那些高度相关的特征(这些特征的特征值变化与其他特征非常相似),它们提供的是冗余信息。3)遗传算法。可用于不同任务的一大类算法的统称。它们受进化生物学与自然选择的启发,结合变异与交叉,在解空间内进行高效的遍历搜索。4)逐步搜索。逐步搜索是一个基于序列式搜索的监督式特征选取算法。它有两种形式:前向搜索和反向搜索。
值得注意的是,特征选取与特征提取不同,其关键区别在于:特征选取是从原特征集中选取一个子特征集,而特征提取则是在原特征集的基础上重新构造出一些(一个或多个)全新的特征。
特征提取(Feature Extraction)主要用来创造一个新的、较小的特征集,但仍能保留绝大部分有用的信息,主要包括三种方法。1)主成分分析。非监督式算法,它用来创造原始特征的线性组合。新创造出来的特征他们之间都是正交的,也就是没有关联性。具体来说,这些新特征是按它们本身变化程度的大小来进行排列的。第一个主成分代表了你的数据集中变化最为剧烈的特征,第二个主成分代表了变化程度排在第二位的特征,以此类推。 2)线性判别分析。监督式学习方式,它必须使用有标记的数据集。3)自编码机。人工神经网络,它是用来重新构建原始输入的。关键是在隐含层搭建比输入层和输出层更少数量的神经元。这样,隐含层就会不断学习如何用更少的特征来表征原始图像。
机器学习还包括密度估计(Density Estimation)和异常检测(Abnormal Detection)的任务,在此略过。总的来说归类机器学习算法一向都非常棘手,由于其背后实现原理、数学原理等存在差异,其分类标准存在多个维度,而常见的分类标准主要包括:生成/判别、参数/非参数、监督/非监督等。
笔者认为,深度学习在机器学习算法中独树一帜取得长足发展的原因主要有三点。
第一,深度学习算法能够在可实现算力内完成相关计算任务。传统机器学习算法在语音识别、物体识别方面无法有效展开应用,其重要原因之一就是这类算法无法使用语音及图像的高维度数据(Highdimensional Data)在高维空间学习复杂的函数,这类高维空间通常也意味着对算力的极大消耗,即使算力极为丰富的现阶段也无法有效满足其算力需求;因此,深度学习方法应运而生。传统机器学习算法所面临的问题被称作维度诅咒(Curse of Dimensionality),高维度数据的参数设置需求随着变量的增加呈指数型增长,对计算能力提出了极大挑战,近乎无法完成。而深度学习采用多层调参,层层收敛的方式,将参数数量始终控制在一个较为合理的水平,使得原本不可计算的模型可运算了,其理解如图1所示。
第二,深度神经网络具有完备性。从理论上来说,深度神经网络可以表征任何函数[6],因此深度神经网络可以通过不同的参数及网络结构对任意函数进行拟合,排除了其无法学习到复杂函数的可能性。
第三,深度学习的特征选取完备。深度学习具有自动学习特征的能力,这也是深度学习又叫无监督特征学习(Unsupervised Feature Learning)的原因。从深度学习模型中选择某一神经层的特征后就可以用来进行最终目标模型的训练,而不需要人为参与特征选取。
人工智能算法从专家系统至特征工程到深度学习这个过程中,人工参与在逐渐减少,而机器工作在逐渐增加,深度学习算法由于其优异表现得到了主流认可,在多方应用中得到长足发展。而其背后的算法主要包括两个方面[7]。
图1 深度学习网络层层收敛可计算
一是卷积神经网络(Convolutional Neural Network,CNN)。卷积神经网络是近年发展起来,并引起广泛重视的一种高效识别方法。现在,CNN已经成为众多科学领域的研究热点之一,K.Fukushima在1980年提出的新识别机是卷积神经网络的第一个实现网络。随后,更多的科研工作者对该网络进行了改进。其中,具有代表性的研究成果是Alexander和Taylor提出的“改进认知机”,该方法综合了各种改进方法的优点并避免了耗时的误差反向传播。
一般地,CNN的基本结构包括两层。1)特征提取层。每个神经元的输入与前一层的局部接受域相连,并提取该局部的特征。一旦该局部特征被提取后,它与其它特征间的位置关系也随之确定下来。2)特征映射层。网络的每个计算层由多个特征映射组成,每个特征映射是一个平面,平面上所有神经元的权值相等。特征映射结构采用sigmoid函数作为卷积网络的激活函数,使得特征映射具有位移不变性。此外,由于一个映射面上的神经元共享权值,因而减少了网络自由参数的个数。卷积神经网络中的每一个卷积层都紧跟着一个用来求局部平均与二次提取的计算层,这种特有的两次特征提取结构减小了特征分辨率。
CNN主要用来识别位移、缩放及其他形式扭曲不变性的二维图形。由于CNN的特征检测层通过训练数据进行学习,所以在使用CNN时,避免了显示的特征抽取,而隐式地从训练数据中进行学习;再者由于同一特征映射面上的神经元权值相同,所以网络可以并行学习,这也是卷积网络相对于神经元彼此相连网络的一大优势。卷积神经网络以其局部权值共享的特殊结构在语音识别和图像处理方面有着独特的优越性,其布局更接近于实际的生物神经网络,权值共享降低了网络的复杂性,特别是多维输入向量的图像可以直接输入网络这一特点避免了特征提取和分类过程中数据重建的复杂度。
第二是递归神经网络(Recurrent Neural Network,RNN)。在实际应用中,我们会遇到很多的多序列形数据,如自然语言处理问题中的单词、语音处理中每帧的声音信号、每天股票价格的时间序列数据等。为了建模序列问题,RNN引入了隐状态h(hidden state)的概念。一个RNN网络中可以存在一个或多个隐状态,计算时每一步使用的参数都是一样的,即每个步骤的参数都是共享的,这是RNN的重要特点之一。同时需要注意的是,RNN网络的输入和输出序列必须是等长的。由于这个限制的存在,经典RNN的试用范围比较小,但也有一些问题适合经典的RNN结构建模,如计算视频中每一帧的分类标签。因为要对每一帧进行机选,一次输入和输出序列等长;又如输入为字符,输出为下一个字符的概率,著名的用于生成文章、诗歌甚至是代码的Char RNN(The Unreasonable Effectiveness of Recurrent Neural Networks)就是一个很好的例子。
当我们要处理的问题输入是一个序列,输出是一个单独的值而不是序列的时候,需要对RNN网络中最后一个h进行输出变化即可完成。这种结构通常用来处理序列分类问题。如输入一段文字判别它所属的类别,输入一个句子判断其情感倾向,输入一段视频并判断它的类别等等。对于输入不是序列而输出为序列的情况,只需要在序列开始时进行输入计算或把输入信息作为每个阶段的输入即可。这种网络结构可以处理的问题包括两方面,一是从图像生成文字,此时输入的是图像的特征,而输出的序列是一段句子,二是从类别生成语音或音乐等。
RNN最重要的一个变种是N输入M输出,这种结构又叫做Encoder-Decoder模型,也可称之为Seq2Seq模型。实际生产生活中我们遇到的大部分问题序列都是不等长的,如机器翻译中源语言和目标语言中的句子往往没有相同的长度。为此Encoder-Decoder结构会先将输入数据编码成一个上下文向量C,得到C的方式有多种,最简单的方法就是把Encoder的最后一个隐状态赋值给C,还可以对最后的隐状态做一个变换得到C,也可以对所有的隐状态做变换。在得到C后,就用另一个RNN网络对其解码,这部分RNN网络被称为Decoder。具体做法就是将C当做之前的初始状态输入到Decoder网络中。
由于这种Encoder-Decoder结构不限制输入和输出的序列长度,因此应用范围广泛,常见应用包括:1)机器翻译,Encoder-Decoder的最经典应用是在机器翻译领域最先提出的;2)文本摘要,输入是一段文本序列,输出是这段文本序列的摘要序列;3)阅读理解,将输入的文章和问题分别编码,再对其进行解码得到问题的答案;4)语音识别,输入是语音信号序列,输出是文字序列。
在Encoder-Decoder结构中,Encoder把所有的输入序列都编码成一个统一的语义特征C再解码,因此,C中必须包含原始序列中的所有信息,它的长度就成了限制模型性能的瓶颈。如机器翻译问题,当需要翻译的句子较长时,一个C可能存不下那么多信息,就会造成翻译精度的下降。而Attention机制通过在每个时间输入不同的C来解决这个问题,每一个C会自动去选取与当前所要输出的结果最合适的上下文信息。
以上简要介绍了深度学习CNN及RNN两类网络的基本原理及应用场景,虽然其在多种识别、感知任务中表现优异,但笔者认为也存在着以下三方面的不足[8]。
1)数据基础问题。我们在实际生产生活中所收集到的数据往往都是小数据,而不是大数据。比如说,我们手机上的个人数据,在教育、医疗、基因的检测与实验、学生测验、客服问答上的数据,都是小数据。所以只有实现从大数据向小数据迁移的通用模型,才能真正帮助更多的领域用上人工智能,这是人工智能的普及性问题,但基于大数据迭代的深度学习模型无法胜任小数据场景业务。
2)模型可靠性问题。深度学习模型非常脆弱,稍加移动、离开现有的场景数据,它的效果就会降低;因此深度学习模型的可靠性是一个重要问题。对机器学习来说,由于训练数据和实际应用数据存在区别,训练出来的模型被用于处理它没有见过的数据时,效果就会大打折扣。而缓解这一问题的办法,正是迁移学习,它能把可靠性提升一个台阶。
3)应用上的问题,特别是机器学习模型在应用个性化方面的问题。比如在手机上,在推荐信息、服务的时候,它要适用于个人的行为。因为任何个人的数据都是小数据,个性化的问题就是如何把云端的通用模型适配到终端的小数据上,让它也能工作。这就是迁移学习比较适合的事情,帮助机器学习从云端往移动端迁移。
结合第四部分分析可以看出,人工智能技术未来重要发展方向之一就是迁移学习,而深度学习虽然在当前已经大放异彩,但未来仍存在很大的提升空间。
迁移学习存在天然优势[9]。深度学习的特点是用非线性的方法把原始特征从低层转化成高层,这个过程很复杂,它的好处有目共睹,但副产品是特征分层。这对于迁移学习却是具有优势的,优势之一就是能够对迁移学习的效果进行量化。也就是在不同的迁移目标下,知识从一个领域到另一个领域,不同的层次能迁移多少是可以定量描述的。当然,这里并非所有的参数都能迁移,有一部分知识可以迁移,一部分参数和特征是可以共享的。在深度学习模型中,有些参数负责描述一个领域的内容,有些参数负责描述一个领域的结构;结构的概念比较抽象,内容的概念比较具体,那么描述结构这部分的参数就特别适合迁移。所以人们现在还在寻找一种能把结构和内容区分开的模型,一种类似于深度学习的模型,从而把可迁移部分和不可迁移部分定量地分开。
多任务学习取得相当进展。当几个不同的任务一起来学习的时候,往往会取得很多优异结果,这就是多任务学习。多任务学习会发现不同领域所共有的知识,因此也更容易抽象出高层的知识,从而使得表达不同领域之间的共性更为容易。所以,多任务学习和迁移学习的目标是一致的,都是要实现比较稳定的知识表达,殊途而同归。
综上,关于人工智能技术发展需求及方向,笔者认为主要包括两方面。第一是快,深度学习的训练现在还存在效率低效果差等问题,而解决这些问题除了使用新的算法,还需要在系统架构上实现突破。如参数服务器、底层服务器架构等方向目前均在快速发展。在计算速度、训练速度上如何加快将是非常重要的一个问题。第二是可靠性,如本文第四部分阐述的观点,迁移学习对于人工智能技术能否合理地推广应用到小数据领域十分重要;多任务学习虽然发展潜力巨大,但由于各个领域基本要素不同,如图像领域的基本结构是像素,语音领域的基本结构就是声波频率,自然语言领域则很难界定其基本要素[10],因此一个通用的人工智能系统现阶段还是不具有实际意义的,人工智能的落地一定是场景强相关的,场景对一个垂直型的机器学习非常重要。
人工智能技术经过六十余年发展,相关知识沉淀浩如烟海,本文仅针对人工智能技术中机器学习、深度学习常用算法进行了简要的梳理解析,希望能更为客观谨慎地看待人工智能技术发展。当前深度学习算法及网络发展日新月异,相关观点及技术新旧更替极快,本文谈及的算法及观点难免存在疏漏和偏差,恳望同仁指正。
[1]刘峡壁.人工智能导论:方法与系统[M].北京:国防工业出版社,2008
[2]深层学习为何要“Deep”[EB/OL].[2018-02-05].https://zhuanlan.zhihu.com/p/24245040
[3]Christopher M Bishop.Pattern Recognition and machine learning[M].Singapore:Springer,2006
[4]孙吉贵,刘杰,赵连宇.聚类算法研究[J].Journal of Software,2008,19(1):48-61
[5]Khalid S,Khalil T,Nasreen S.A survey of feature selection and feature extraction techniques in machine learning[C]//2014 Science and Information Conference,London,2014:372-378
[6]Michael Nielsen.Neural Network and deep learning[EB/OL].[2017-12-28].http://neuralnetworksanddeeplearning.com/
[7]Ian Goodfellow,Yoshua Bengio,Aaron Courville.Deep Learning[M].MIT Press,2016
[8]杨强.深度学习的迁移模型[C]//中国人工智能大会,杭州,2017
[9]Pan S J,Yang Q.A Survey on Transfer Learning[J].IEEE Transactions on Knowledge & Data Engineering.2010,22(10):1345-1359
[10]宗成庆.统计自然语言处理(第2版)[M].北京:清华大学出版社,2008