数据挖掘:机器智能的关键
使用大数据,相当于在一堆沙子中淘金,不经过处理的原始数据是给不出什么新知识的,大数据能产生的效益在很大程度上取决于使用(和挖掘)数据的水平。在Google,至少有四成的工程师天天在处理数据,然后通过数据得到知识,通过知识使得计算机变得更智能。
我们在强调收集大数据是无目的性的同时,也给处理大数据增加了难度。由于大数据的原始数据常常是没有固定格式、显得杂乱无章的,因此使用大数据的第一步是对数据的过滤和整理,去除与要解决的问题无关的维度,将与问题有关的数据内容进行格式化的整理,以便进一步使用。数据的过滤和整理有时很容易,比如我们希望通过日志分析一款游戏玩家的行为,这只要把相应的维度保留下来,把无关的信息过滤掉即可。但是,在很多应用中,即使这一步也不容易做到。比如在前面提到的机器自动问答的例子中,虽然问题的答案存在于网页之中,但是答案的内容通常是七零八落地分布在不同网页里的,对网页的结构、内容进行分析就成了使用大数据的先决条件。当然,如果没有很好的自然语言理解技术,这第一步都无法完成。
虽然香农告诉我们,信息越多,我们就越能消除系统的不确定性,但是数据中常常不仅仅是信息,还不可避免地夹杂着噪声,这个问题在大数据中特别明显。使用数据的人常常会发现某些数据的质量高,而另外一些数据的质量不是那么高。当然,简单地用质量高和质量低是不足以准确定量地衡量数据质量的。在信息处理领域,大家使用一个被称为信号与噪声之比(Signal Noise Ratio,简称信噪比SNR)的度量来描述信号的质量。如果数据中的信噪比很高,数据就可靠;相反,如果信噪比太低,可能有限的信息会被淹没在噪声中,这样的数据使用后可能产生不了什么好的结果。对于那些夹杂着大量噪声的数据,为了提高数据的信噪比,在使用数据之前,我们常常需要进行降噪处理,损失一部分数据,以提高信噪比。
图5.13 信号中常常夹杂着噪声,当信噪比较高的时候,依然能够恢复出原有的信号
现在,我们可以认为这样处理过的数据能直接使用了,接下来关键的一步就是机器学习。机器学习并不是什么新鲜事,今天广泛使用的机器学习算法,比如人工神经网络算法、最大熵模型、逻辑自回归等,早在40年前就已经成熟了。但是由于数据量不够,导致机器学习的应用范围比较窄,再加上它是介于应用数学、统计学和计算机科学之间的交叉领域,因此一直没有受到太大的重视。2000年以后,随着计算机速度的增加和数据量的暴增,机器学习在很多领域发挥了重大作用。2016年Google创造奇迹的AlphaGo,其训练算法就是人工神经网络。
但是如果认为机器学习就是把几十年前的论文拿过来用计算机的程序实现一遍,那也未免太天真了,因为机器学习一旦上了规模,实现起来可不是一件容易的事情。不幸的是,大数据的机器学习还真是一个上规模的难题。要理解为什么数据量一大机器学习就变得非常困难,我们不妨简单介绍一下机器学习的原理。
机器学习的过程无一例外是一个不断迭代、不断进步的过程,用机器学习的专业术语来说就是“期望值最大化”(Expectation Maximization)的过程:只要事先定出一个学习的目标,这些算法就会不断地优化模型,让它越来越接近真实的情况。可以说,机器学习训练算法迭代的次数越多,或者通俗地说学习得越深入,得到的数学模型效果越好。因此,同样的数据,同样的算法,采用不同深度的机器学习方法,得到的结果会有所不同。
但是机器学习的算法通常都比较“慢”,用比较专业的术语讲,就是计算复杂度太高93,因此随着数据量的增加,计算时间会剧增。在过去,由于计算能力的限制,以及并行计算工具不够有效,人们在机器学习时,通常要在下面两种情况下二选一:
1.数据量大,但是采用比较简单的模型,而且比较少的迭代次数,也就是说用大量的数据做一个浅层的机器学习。
2.数据量较小,但是采用比较复杂的模型,而且经过很多次迭代训练出准确的模型参数。
通常,由大量的数据、较少迭代训练出的“较粗糙”的模型,要比用少量的数据、深度的学习精耕细作得到的模型效果更好。
是否有可能用大量的数据,进行深度的学习,然后得到更好的模型呢?从理论上讲,有这个可能性,而且结果一定会更好。但是,在实际应用中非常难做到,原因是这样的计算量很大,不仅计算时间长,而且需要计算机系统有非常大的内存空间,通常不是几台计算机能够完成的。Google的AlphaGo虽然在和李世石下棋时只用到几十台服务器,但是训练时可是需要上万台服务器的。如果采用成千上万甚至几十万台计算机并行处理,那么过去老的机器学习算法是无法搬到成千上万台计算机构建的并行处理系统的,需要将过去的机器学习算法重新工程化才可行。
2010年,Google宣布开发出名为Google大脑(Google Brain)的深度学习工具。从机器学习理论上来讲,它没有任何突破,只是把过去的人工神经网络并行地实现了。但是从工程的角度上来讲,它有非常大的意义。首先,过去的人工神经网络无法训练很大的模型,即使计算的时间再长也做不到,因为内存中根本放不下和模型参数相关的数据。Google的突破在于找到了一种方法,可以将一个很大的模型上百万参数同时训练的问题,简化为能够分布到上万台(甚至更多)服务器上的小问题,这样使得大型的人工神经网络训练成为可能。当然,Google还找到了(不是发明了)一些对大模型并行训练收效比较快的训练算法,可以在能够接受的时间内,深度训练出一个大型的数学模型。Google在几个带有智能特色的问题上,用这个深度学习的工具对语音识別的参数进行重新训练,就将识别的错误率降低了15%(相对值)94,这对于机器翻译效果同样显著。
Google大脑的成功不仅向业界展示出机器学习在大数据应用中的重要性,而且通过实现一种机器学习并行算法(人工神经网络),向大家证明了深度学习所带来的奇迹。至于Google选择人工神经网络作为机器学习的算法的原因,听上去匪夷所思,细想起来却很有道理——人工神经网络的核心算法几十年来基本上没有变过。人们从直觉上一般会认为不断改进的方法才是好的、应该采用的,但是在工程上却不然,像Google大脑这样试图解决各种问题(而不是一个特定问题)的大数据机器学习工具,实现起来工作量巨大,一旦实现,就希望能够使用很长时间,因此算法需要稳定,不能三天两头地改进。说到这里,读者朋友可能要问,采用一个几十年前的算法,是否会让机器学习的效果受影响。对于某些特定的问题,确实会有一个机器学习算法比其他的好这种情况,但是总体来讲,大部分机器学习算法是等效的,只有量的差别,没有质的差别,而量的差别可以通过规模和数据量来弥补,因此,Google的做法不失为一种好的折中。事实上,Google的AlphaGo采用的是同样的训练算法,这也是Google强调它的算法是通用的原因。95
图5.14 Google大脑的核心是人工神经网络
当然,机器学习的算法很多,Google或者某个大公司也不可能把每一种算法都实现得最有效,而一般的公司也不可能有技术力量去开发工程难度很大的机器学习软件,因此最好的解决方式就是出现一些专门做机器学习的公司,来为需要使用大数据和机器智能的公司提供服务。2012年Google在安迪·鲁宾的主导下,以5亿美元的巨资收购了只有100人左右的小公司DeepMind。这家公司对外宣传其所做的事情是让计算机有思维,其核心技术就是研究通用的机器学习算法,而AlphaGo就是DeepMind团队为了证明他们机器学习算法有效性而开发的一款智能程序。在此之后,Google还收购了多家小型机器学习和人工智能公司。Facebook、雅虎等公司也做了相应的并购或者战略人才引进,由此可以看出目前很多IT公司都在大数据的挖掘和处理上进行战略性布局。
机器学习的方法不可能由每家公司自己去研究,最终会由专业的公司为大众提供机器学习的服务。但是这样又会引发大家的一个忧虑,那就是数据安全和隐私保护的问题。