大数据领域前沿研究--深度学习、数据库选择和人工智能的革命

深度学习(DL)和人工智能(AI)已经不再是科幻小说中遥不可及的目标,目前已成为了互联网和大数据等领域的前沿研究内容。

由于云计算提供强的计算能力、提出的先进算法以及充裕的资金,这创造了五年前难以想象的新技术。此外,层出不穷的丰富数据也使得深度学习成为了现实。

相关内容分成四个部分,主要深入探索深度学习、数据库的选择以及相关实际商业应用问题等。

在今天的第I部分内容中,主要是讲解人工智能的历史以及它现在高速发展的原因;

在第II部分内容中,将讨论一下人工智能、机器学习和深度学习之间的区别;

在第III部分内容中,将深入研究深度学习以及在为新项目选择数据库时需要评估的关键事项;

在第IV部分内容中,将讨论深度学习为何使用MongoDB,并提供相关使用实例;

第I部分

人工智能的历史

我们目前生活在人工智能开始崭露头角的时代,人工智能不仅创造了扰乱工业和变革工作场所的可能性,而且还可以解决一些社会上的挑战。比如自动驾驶可以挽救数万人的生命、增加老年人和残疾人的流动性,精准医学可以开展个体化治疗以延长生命,智能建筑有助于减少碳排放并节约能源等,这些只是人工智能承诺的一些潜在的好处,并且大多已经取得相关突破性的进展。

到2018年,Gartner公司估计机器将占全球所有业务内容的20%,并预计60亿个联网设备将产生大量的数据。人工智能对理解这一切显得至关重要,AI不再局限于科幻电影中,人工智能和机器学习正在被现实世界中的相关业务采用。

自从艾伦·图灵(Alan Turing)于1950年写了篇论文《计算机器与智能》以来,人工智能一直是人们的一个梦想。在这篇论文中,图灵提出了一个根本性的问题——“机器能思考吗?”,并考虑计算机是否能像人类那样进行思考。人工智能领域的研究真正诞生于1956年的夏天,一组聚集在达特茅斯学院(Dartmouth College)的研究人员发起了一系列的研究项目,他们的目标是让计算机做出像人类一样行为。“人工智能”这一词也是第一次在这所学院被创造出来,该会议的概念形成了一个合法的跨学科交流的研究领域。

在接下来的十年中,随着新技术的发展受到当代技术的限制,人工智能的发展经历了繁荣和萧条周期。在1968年,科幻电影《2001:太空漫游》中的智能电脑——HAL9000说了一句著名的话,“对不起,戴夫,恐怕我不能那么做”,这帮助AI在主流意识中留下了不可磨灭的印象。在20世纪70年代末,电影《星球大战》中智能机器人帮助拯救银河的场景进一步巩固了AI在主流文化中的地位。

但直到20世纪90年代末,人工智能才开始从科幻传说转变为现实世界中的实际应用。1997年初,由IBM的深蓝国际象棋程序击败了当时的世界冠军Garry Kasparov,人工智能在上世界90年代迎来了一个新的时代,AI的研究进展也开始加速。研究人员变得开始关注人工智能的相关子问题,并利用它来解决现实世界中的应用任务,比如图像和语音识别等。研究人员没有试图构造由专家知识决定的逻辑规则,而是开始研究如何通过算法学习逻辑规则本身,这一趋势有助于将研究重点转移到人工神经网络(ANNs)中。在20世纪40年代,人工神经网络被发明成“松散地”模仿人脑的学习方式。当反向传播梯度下降算法得到改进时,人工神经网络的研究于1986年开始变得流行起来,反向传播算法减少了人工神经网络训练时需要大量手工调参问题,因此反向传播算法(BP)也是一种有效的减少人工智能训练时间的方法。

即使在算法方面取得新的进展,但神经网络仍然受到技术上的限制,这些限制也影响了ANNs在过去几十年的应用情况。直到2000年中期,人工智能才重新掀起一次科技浪潮。在2006年,多伦多大学的Geoffrey Hinton提出对人工神经网络进行修改,并将其研究成果称为“深度学习(Deep Neural Network)”。Hinton对人工神经网络添加多个隐藏层并对每层进行数学优化,逐层学习使得模型训练变得更快。在2012年,斯坦福大学的Andrew Ng进一步推动了深度学习的发展,他建造了一个简陋的利用图形处理单元(GPU)实现深度神经网络的模型,Andrew Ng发现集群GPU仿真训练深度学习模型比通用的CPU训练快得多,对于同样的任务而言,GPU可能只需要一天的时间,而CPU需要几周的时间才能产生相同的结果,这是由于GPU是大规模并行架构,而且能同时处理多个任务。

从本质上讲,将软件算法与高性能的硬件相结合已经酝酿了几十年,这也将迎来AI正在经历的快速发展。

人工智能现在为什么高速发展?

目前有四个主要因素推动了人工智能的发展:

1.更丰富的数据。人工智能需要大量的数据来学习,社交的数字化为其进步提供了可利用的原材料。诸如物联网(传感器等)、社交和移动计算、科学和学术界、医疗保健以及许多新的应用程序等来源的大数据可以用来训练人工智能模型。不出意料,目前在人工智能领域投资较多的公司,比如亚马逊、苹果、百度、谷歌、微软等,同时也是数据较多的公司。

2.更便宜的计算成本。在过去,即使人工智能相关算法得到改进,硬件仍然是一个制约因素。由于硬件和新的计算模型取得新的突破,尤其是GPU,加速了人工智能的发展过程。GPU由于其自身的并行处理能力及高效的执行矩阵乘法的方式使得其在人工智能社区得到普及应用,这也缔造了英伟达这一优秀公司的行业地位。 最近,英特尔在Xeon和Xeon Phi处理器中增加了新的深度学习指令,这允许其能更好地进行并行和高效的矩阵运算。随着人工智能技术的应用,硬件厂商现在需要专门针对人工智能进行开发、设计和制造相关产品,这些进步将导致更好的硬件设计、性能、功耗以及配置文件。

3.更复杂的算法。更高效的性能和更便宜的计算花费使得科研人员能够开发和训练更高级的算法,这是因为他们不再受限于过去硬件约束的限制。因此,深度学习现在正以惊人的精确度解决特定的问题(例如,语音识别、图像分类、手写识别、欺诈检测等),更先进的算法继续推动人工智能技术的发展。

4.更广泛的投资。在过去的几十年中,人工智能的研究和发展主要局限于大学和研究院等机构。资金缺乏以及人工智能问题的困难性导致其发展甚微。如今,人工智能投资不再局限于大学实验室,而是在许多领域都在进行发展——政府、风险资本支持的初创公司、互联网巨头和各行业的大型企业等。

第II部分

人工智能、机器学习和深度学习之间的区别

在很多情况下,人工智能、机器学习和深度学习可以互换使用。但实际上,机器学习和深度学习都是人工智能的子集。人工智能作为计算机科学研究领域中的一个分支,其重点是建立能够具有智能行为的机器,而机器学习和深度学习则是利用算法筛选数据,并从数据中学习、预测或采取自主行动的实践。因此,这些算法不需要根据特定的约束进行编程,而是使用大量数据进行训练,使其能够独立学习、推理和执行特定的任务。

那么,机器学习和深度学习之间存在哪些区别呢?在定义深度学习之前,先深入地理解机器学习吧。

机器学习:有监督VS.无监督

机器学习方法主要分成两大类:有监督学习和无监督学习。

有监督学习:目前,有监督学习是机器学习中最为常用的算法。在有监督学习的情况下,相关算法的输入是开发人员和分析人员手动标记的数据,即有标记的数据,这些标记就是数据的期望输出值,使用这些数据来训练模型并生成预测。监督学习任务又可以分为两大类:回归和分类问题。

上图演示了一个简单的回归问题。从图中可以看到,存在两个输入或特征(平方英尺和价格),被用于生成拟合曲线,并预测未来的房地产价格。这个模型相当简单,只考虑了房子的面积这一个特征对房价的影响,在国内的话,如果只考虑这房子面积这一个特征就去购买或投资房产的话,将会闹出笑话。因此,一般而言,考虑的特征越多,模型会越复杂,预测也会更加准确。

上图演示了一个有监督分类问题。使用的数据集是有标记为良性肿瘤和恶性肿瘤的乳腺癌患者。有监督分类算法试图通过将数据拟合成直线将肿瘤划分为两种不同的类别。当算法学习好后,即划分直线确定,将来的数据可以之间通过这条划分直线来确定患者的肿瘤是良性或恶性。分类问题导致离散输出,但不一定限制固定数据集的输出数量,上图中只有两个离散输出,但可以有更多分类类别(1表示良性,2表示恶性,3表示待定等)。

无监督学习。在有监督学习的示例中,可以看到使用的数据集都具有标记(良性或恶性分类),数据标记有助于算法确定正确的答案是什么,进而调整模型参数以使得模型输出尽可能与标记相近。而在无监督学习中,数据集是不具有标记的,需要依赖于算法来发现数据中的结构和模型。

从上图中可以看到,每个数据点代表的信息不明确,因此要求算法在不受任何监督的情况下查找数据中存在的结构信息。图中的无监督学习算法可以确定两个不同的集群,并在集群之间进行直线分类。无监督学习广泛应用于新闻、社会网络分析、市场分割及银河系周围的天文分析等许多应用案例中。

第III部分

深度学习是什么?

深度学习是机器学习研究领域中的一个分支,近年来在图像识别、自然语言处理和图像分类等领域应用十分火热,受到世界范围内的广泛关注。深度学习是人工神经网络(ANN)的一种改进,正如人工神经网络一样,是模拟人类大脑学习和解决问题的一种方法。

在深入了解深度学习的工作原理前,首先理解人工神经网络(ANN)是如何工作的。人工神经网络是由一组互相连接的神经元组成,类似于人类大脑中的神经元网络。

上图是一个简化的神经元连接示意图。神经网络中的每个神经元接收与之连接的其它神经元的输入信息(Xi),然后通过计算后输出到网络中的其它神经元或节点。神经元之间的连接参数用权重(Wj)表示,权重的大小表示二者连接的强度,权重的值可正可负。将所有的输入信息都与对应的连接权重相乘(X1W1,X2W2等)并进行求和作为该节点的输出。最后一步是对神经元执行计算或激活函数处理。激活函数允许人工神经网络模拟简单模式无法正确表示的复杂的非线性问题,常用的激活函数是Sigmoid函数。

上图表示一个三层的神经网络,从左往右第一层为输入层,输入对应的特征(X1,X2,X3),第二层被称作隐藏层,隐藏层可以有多层,第三层是输出层。对于一个层而言,只要该层不是输入层或输出层,那么该层就可以称作隐藏层。

“深度”学习最初就是这样产生的,因为其含有多个隐藏层,通常包含多于3个的隐藏层。在一些情况下,隐藏层的个数高达1200多个。

多个隐藏层的好处是什么呢?在某些模式下,可能需要更加深入的调查,因此多个隐藏层可以进行额外的特征处理。深度学习在图像分类领域中表现优异,甚至在某些特定任务上超过了人类的表现。现在,通过一个额外隐藏层有助于面部识别的例子来说明这一点。

当一张图片被输入到一个深层次的学习网络中时,它首先被分解成图像像素。然后该算法将在图像中的某些位置寻找特定形状的图案。第一个隐藏层可能试图揭示特定的面部模式:眼睛、嘴巴、鼻子、耳朵等。添加一个额外的隐藏层来解析更加细粒度的属性。例如,“嘴巴”可以进一步分解为“牙齿”、“嘴唇”、“牙龈”等。添加额外的隐藏层可以将这些模式更进一步抽象。最终的结果是一个深层的学习网络可以将一个非常复杂的问题分解成一系列简单的问题。隐藏层的本质是一个层次化的特征学习,它们能够更好地提取特征。目前,大多数深度学习算法都是有监督学习,即对已知的标记数据进行深度学习。

训练是如何工作的?

训练深度学习的最终目的是降低代价函数,即期望输出与实际输出之间的差异尽可能小。节点之间的连接将会有特定的权重,不断修改这些权重参数使得网络的代价函数变小。通过修改权重值,可以将代价函数最小化到全局最小值,这意味着模型的误差降到最小值。深度学习之所以计算如此密集就是因为它需要找到合适的数以十亿的连接权重值,这需要通过不断迭代训练调整得到,以找到使得代价函数全局最小值的权重集。

深度学习中最为常用的训练方法是反向传播梯度下降算法。梯度下降算法是一种有效的数学优化方法,它能有效地处理大量的数据(特征),而不必强力进行维度分析。梯度下降算法根据权重函数的全局最小值来计算梯度(斜率)。在训练过程中,首先随机分配权重并计算出一个误差。然后基于这个误差,通过使用梯度下降算法来修改权重,之后反向逐层调整每层的权重参数,当调整完每层参数后又正向进行传播,计算得到一个新的误差,之后基于新的误差调整每层的参数,一直迭代到代价函数达到全局最小值为止。可能会出现一些例子,梯度下降算法是以局部最小值而不是全局最小值来计算的,减轻这个问题的方法是使用凸的代价函数或对参数产生更多的随机性。

深度学习中对数据库的思考

非关系数据库在促进机器学习和深度学习技术的最新进展中起着不可或缺的作用。收集和存储大量结构化和非结构化的数据的能力为提升深度学习预测提供的必要的原材料。在构建深度学习应用程序时,选择用于管理底层数据的数据库时要牢记一些注意事项。

灵活的数据模型。在深度学习中,数据需要经历三个阶段——输入数据、训练数据和结果数据。深度学习是一个动态的过程,通常涉及大量的实验,比如,实验过程中参数调整是很正常的事情,加上非结构化数据的输入、输出结果的修改是自然而然地发生。随着新的信息和见解被发现,重要的是在灵活数据模型上选择一个合适的数据库,避免在数据结构需要改变时需要执行昂贵的模式迁移。

规模。深度学习面临的最大挑战之一是模型训练耗费的时间比较长,有些模型可能需要几个星期的训练时间,这是由于梯度下降等算法需要通过多次迭代来调整模型的数十亿个参数。为了减少训练次数,深度学习框架尝试并行运算,将训练负荷分布到多个高性能的服务器上。

并行化训练主要有两种方式:数据并行性和模型并行性。

数据并行性。通过分布式系统将数据分割成多个节点进行处理并存储,比如Apache Spark、MongoDB和Apache hadoop。

模型并行性。通过相关软件库和框架在多个节点上分割模型及其相关层,如TensorFlow、Caffe和Theano。分裂提供并行性,但是在协调不同节点之间的输出时会产生性能代价。

除了模型训练阶段耗费时间长外,深度学习的另一个大挑战是输入数据集不断增长,这增加了训练参数的数量。这不仅意味着输入数据集可能超过可用的服务器内存,而且还意味着涉及梯度下降的矩阵也能超过节点的内存。因此,缩放比扩展更加重要,这使得工作负载和相关的数据集在多个节点上分布,允许并行执行计算。

容错。许多深度学习算法使用检验点作为故障发生时恢复训练数据的一种方法。然而,频繁设置的检查点需要大量的系统开销。另一种方法是利用驻留在分割节点上的多个数据副本,这些副本提供冗余和数据可用性,而无需消耗系统主节点上的资源。

一致性。对于大多数深度学习算法而言,建议使用强数据一致性模型,具有强一致性的分布式数据库集群中每个节点都运行在最新的数据副本上。虽然有些算法可以容忍一定程度的不一致性,比如随机梯度下降算法(SGD),但强一致性能够提供最精确的结果。然而,在某些情况下,算法更加看重训练时间而不是精度,那么最终的一致性是可以接受的。为了优化精度和性能,数据库应该提供可调的一致性。

第IV部分

为什么MongoDB适合深度学习?

如果你没有阅读第III部分的内容,强力推荐阅读一下,以更多地了解在做深度学习项目时选择数据库应该考虑的关键因素有哪些。在以下的讲解部分中,开发者和数据科学家可以利用MongoDB作为一个灵活、可扩展、高性能的分布式数据库来满足人工智能应用开发的严峻考验。

灵活的数据模型

MongoDB的文档数据模型,便于开发者和数据科学家存储和结合其他任何数据库的数据,且没有放弃利用复杂的验证规则来管理数据的质量。该模式可以在不停用应用程序或数据库的情况下动态地修改数据,这是由关系数据库系统的模式修改或重新设计的代价高所引起的。

这种数据模型的灵活性对于深度学习是特别有价值的,这需要不断的实验来发现新的见解和预测:

输入数据集可以包括快速变化的结构化数据和非结构化数据,这些数据集可以从点击流、日志文件、社交网络和物联网传感器流、CSV文件、txt文本、图像、视频等,这些数据集很多都不能映射成关系数据库固定的行和列格式。

深度学习的训练过程中往往会增加新的隐藏层、特征标签、参数以及输入数据,这需要频繁地修改底层数据模型。

因此,一个支持各种输入数据集的数据库能够无缝地修改模型训练的参数,这对于深度学习而言是不可多得的。

丰富的编程和查询模型

MongoDB为开发者和数据科学家提供本地驱动程序和认证连接来建立深度学习模型,PyMongo驱动器是一个用于MongoDB的Python工具,也是一个被推荐的Python操作MongoDB数据库的方式。社区也开发了R语言的MongoDB客户端,这也可用于R语言程序员。

MongoDB的查询语句和丰富的二级索引使得开发人员能够开发应用程序,可以以多种方式查询和数据分析。数据可以在毫秒级的响应时间内通过单键、范围、文本搜索、图表和地理空间查询到复杂的聚合和MapReduce任务。

为了在分布式数据库集群上并行处理数据,MongoDB提供了聚合管道(aggregation pipeline)和MapReduce。MongoDB聚合管道是仿照数据处理管道的基本原理设计,数据经过一个一个的阶段,每阶段将数据处理后的结果传递给下一个阶段,最终得到多重处理后的结果。其中,最基本的管道阶段提供像查询等操作的过滤器及输出文档格式的转换等功能,其它管道操作提供按特定字段对文档进行分组、排序以及聚合数组中的内容等功能。此外,管道阶段可以使用操作符进行相关计算,比如计算跨文档集合的平均值或标准差等。MongoDB同样也提供了原生MapReduce操作,使用JavaScript函数来执行相关的map和reduce阶段。

除了原生的查询框架外,MongoDB同样也提供了针对Apache Spark的一种高性能连接器,该连接器连接了Spark所有的库,包括Python、R、Scala和Java。对于机器学习、图表以及SQL API等分析而言,MongoDB数据可以作为其数据帧和数据集。

针对于Apache Spark的MongoDB连接器可以利用好MongoDB的聚合管道以及提取、筛选和处理其所需数据范围的二级索引。比如,分析特定地理位置的所有客户这一任务,简单的非关系数据存储不支持二级或在数据库中聚合。而在这种情况下,Spark需要基于简单的主键提取所有数据,这意味着数据科学家和工程师们在进行该过程时需要更多的时间上和硬件上的开销。为了最大限度地提高性能,对于分布式数据集而言,MongoDB连接器可以将弹性分布数据集(RDDs)和源MongoDB节点同地协作,进而最小化跨集群之间的数据移动并减少延迟。

可升缩性和冗余性

模型的训练时间可以通过建立一个深度学习平台以及可扩展数据库层来减少,MongoDB提供了以下一些措施来尽可能地增大吞吐量以及尽可能地减少深度学习工作负载的延迟。

WiredTiger是MongoDB的默认存储引擎,也是世界上部署最广泛的嵌入式数据管理软件,它是基于现代多核架构,并使用了多种编程技术,如风险指针、无锁算法、快速锁定和消息传递等。WiredTiger尽可能地增大每个CPU核和时钟周期内的计算工作量,此外,WiredTiger使用紧凑的文件格式和压缩存储尽可能地减少磁盘开销。

对于大多数对延迟敏感的深度学习应用而言,MongoDB可以配置存储引擎。基于WiredTiger这个存储引擎,可以在不牺牲传统数据库提供的丰富灵活查询、实时分析和可升缩能力的情况下,为用户提供内存计算的好处。

为了并行地进行模型训练以及缩放输入数据集,MongoDB使用分片(sharding)技术。MongoDB分片是完全弹性地、自动地调整集群中的数据作为输入数据集的增长,或者是添加和删除节点。

在MongoDB集群中,每个分片数据自动分发到多个驻留在不同节点上的多个副本,其副本集提供冗余性以在训练数据发生故障时恢复数据,并减少检查点的开销。

可调一致性

在一般情况下,MongoDB具有强一致性。启动深度学习应用程序可用立体读取已写入的数据库中的内容,从而避免了最终一致性系统导致的开发人员复杂。强一致性会为机器学习算法提供最准确的结果,然而,在某些情况下,如随机梯度下降算法(SGD),其结果不是很好但尚可接受。

MongoDB人工智能部署情况

基于MongoDB具备上述讨论的性质,MongoDB已经作为许多人工智能和深度学习平台的数据库,不同应用程序和行业用户的选择如下:

IBM Watson:分析与可视化

沃森分析是IBM的云托管服务,提供智能数据发现来指导数据探索、自动预测分析和可视化输出。沃森分析应用场景十分广泛,比如银行、保险、零售、电信、石油和政府应用等。MongoDB被用来管理数据存储,提供所有源数据集的元数据和分析可视化,并存储在丰富的JSON文档结构中,可以支持数以万计的用户并发访问服务。

x.ai:个人助理

x.ai是智能驱动的个人助理,它能够为用户安排会议。用户将他们的日历连接到x.ai上,然后只要邮件抄送给[email protected],该公司的虚拟私人助理Amy就能接手你的会议日常安排。MongoDB作为x.ai的整个平台记录系统,支持所有的服务,包括自然语言处理、有监督学习、分析和电子邮件通信等。MongoDB灵活的数据模型成为使得x.ai迅速适应于训练集和输入数据集的关键,同时也支持复杂的数据结构。更多内容可以看此案例了解。

汽车贸易商:预测价值

英国最大的汽车市场广泛应用机器学习,使用的关于车的规格及细节数据都存储在MongoDB中。比如,先前车主的个数、颜色、里程数、保险历史等。这些数据由汽车贸易商的数据科学团队编写的机器学习算法提取得到,并建立模型以预测准确的价值,然后再写入数据库中,选择MongoDB由于其灵活的数据模型和分布式设计。更多内容可以看此案例了解。

Mintigo:销售和市场预测

Mintigo是一家以企业为重点的预测市场和销售的平台。在B2B营销领域,Mintigo利用数据进行营销分析和预测,识别最有可能购买其产品的潜在客户,帮助公司客户提升销量。Mintigo运行在AWS上,是用Python编写的机器学习算法。MongoDB被用来存储TB量级的数据集,这是看中了其数据流采集和存储的可扩展性和灵活性、高效的查询框架和二级索引,而无需扫描数据库中的所有记录。更多内容可以看此案例了解。

零售定位分析

一个美国的移动APP开发者在MongoDB上建立的智能引擎,实时处理和存储数以百万计顾客的丰富地理空间数据点。该智能引擎使用可伸缩的机器学习和多维分析技术来展示行为模式,允许零售商通过移动设备预测和定位目标客户。MongoDB支持具有复杂索引和查询的空间数据结构,为机器学习算法提供基础。MongoDB的分片扩展设计使得公司可以容纳10-100百万的客户数据点。

自然语言处理(NLP)

一个北美的人工智能开发者已经构建了由主要消费电子产品嵌入到智能家居和移动设备中的自然语言处理软件。设备和用户之间的所有交互都存储在MongoDB中,然后反馈给学习算法。选择MongoDB的原因是其架构的灵活性,且支持快速变化的数据结构。

将数据科学引入人才招聘

该公司与财富500强的人力资源部门合作,利用数据科学和员工情况处理成堆的简历和候选者。该公司通过将人工智能应用于简历以外的数据数千个信息源,包括公共的和企业数据,为申请者提供实时分析和优先次序。通过人工智能算法产生的预测分析,招聘人员可以立即确定主动申请以及潜在的应聘者中最佳的候选人,加快整个招聘过程、降低雇佣成本。选择MongoDB作为底层数据库是由于其数据模型的灵活性和可伸缩性,此外,大范围的安全管理权保护了个人可识别信息(PII)。

;