正文
过去十年里,他们收集了大量的数据,并开始意识到他们提供的服务系统可以不止一种。他们可以提供个性化的服务系统,至少对于大公司来说是这样的。
小公司在提供大量的服务系统这一点上是无法和大公司对抗的,但他们也意识到可以提供更个性化的服务系统,所以许多小公司也开始向个性化方向调整。
那么,你作为一个技术员,该怎么做呢?
我要做的就是重复这个算法可能,成百上千次,用更专业化的数据和更个性化的数据,每种都进行循环重复。我不会用每个个人的数据去重复,而是用一些分成小组的数据比如同一家庭的数据等。
我在后台做这件事时需要很多电脑,不仅仅是服务系统,而是成千上万种模型,这就是我们现在所处的状况。很多人都在学着构建这样的系统,而且他们通常都会成功。
但真正的难题并不在这里,老板也意识到了一些情况。我们知道统计模型是有错误的,因为它是基于现有数据,但是你不能让错误次数随着服务系统的人越来越多而不断增大,我可以忍受少量错误,但我不能忍受错误持续增长,否则当我把这个服务系统投放市场时,它第一天产生10个错误,一年后这个服务系统变得极受欢迎,但产生了10,000个错误,那么这10,000个人将会不高兴了,然后他们就会想搞个大新闻,抱怨你的服务系统并没有那么好。
所以我只能忍受保持不变的错误数据,它不能随着系统规模的扩大而扩大。作为一个统计学家,我认为那才是真正的问题所在。我曾考虑过错误率成比例的增加时,用统计学里的L2或是L1范数去控制这种错误,相当于要去控制L无限范数,你就要思考如何用尾概率和幂定律等去做这件事。我的学生们,如果他们被培养的不错的话,都会知道怎么去思考这些问题,怎么去构建这样一个系统。然而更糟糕的是,你的老板不仅要求你解决这个问题,还会顺便要求你这个系统至少得和老系统跑的一样快,好吧,现在我们必须得有计算思想了。前半件事就是一种系统再加上统计和机器学习,现在我们还要预计运行时间,我们想要这个系统在一定的时间内完成,于是你发现你做的事情和计算机科学家非常相像。
统计学家没有运行时间的概念,统计理论体系里的人们从来不会讨论这个问题,机器学习领域里也不讨论。我们不知道什么叫好的最低运行时间,我们没有一个概念可以把允许承担的统计风险和运行放在一起考量。所以在统计学里,你知道通常调用的数据量,了解正在评估的参数的维度假设空间的复杂性,有赖以构建系统的方程,但你不知道运行时间,并且数据量不同运行时间还不一样。这本是计算机科学家应该干的活,他们本该介入并把一些量转化成运行时间。
这对我的学生们来说开始成为一个小挑战了。他们会说我可以构建一个系统,如果它运行的慢那你就得给我更多电脑,但我还是不能打包票,为什么现在不能运行缓慢。因为大部分这种服务系统具有时间预算,比如你的搜索引擎,你要几十毫秒才能得到反馈,是吧?那就是九十年代时最好的搜索引擎的反应时长。
点了搜索按钮几十毫秒之后你才能得到反馈,而不是瞬时得到结果。前几代的搜索引擎下,点击按钮甚至需要等待一段不确定的时间,一般是好几秒,这对使用者来说是件很沮丧的事,所以他们花了很大功夫优化这点,最后反应变成了几毫秒到几十毫秒。
所以如果现在你说我要构建一个服务系统,它将是个性化的,会给你更好的信息,但是它跑起来比较慢,没有人会满意的。我打赌这对于系统构建人员来说是个不小的限制因素,使得这个任务更具挑战性了。
如果你思考的再长远一些,比如老板说这个系统应该也是可伸缩的,今天我有10TB的数据,五年后我将有PB级别的数据量,每个人我都会有更多的数据,把个性化做的更好。这看上去没什么问题,更多的数据就应该得到更好的模型,但是对算法而言,数据越多意味着运行时间也越长,处理数据也需要更多时间,如果读数据进行采样的话,又会得到更多你并不想要的误差,你又必须去控制这些误差。所以实际上当前我们并没构建这样一个系统的准则,真的只靠人们不断地尝试和猜测,如果系统没有按照预期运行,就去购买更多的电脑,最终他们意识到花费太多的钱仍然没有效果,公司也因此破产。更糟糕的是,他们今天设计了这个系统,花了很多钱,但是最后却很少能够正常工作,新的数据进来了,系统却不能扩展。
这对很多行业和公司来说都是致命的,如果只是对搜索或电商还不算什么大问题,系统挂了你顶多是得到了不好的搜索结果,还不算太糟糕,没有出人命,也没人受伤。但是当你换一个行业,比如在个性化医疗领域应用大数据系统的时候,你可能会得到很差的预测结果,系统会很慢,而且有可能会出人命!如果应用在交通、金融等领域,可能会伤害到很多人。我认为这些问题实际上都是正在发生的,我认为很多大数据系统都在做糟糕的预测,人们使用不必要的药物,接受不必要的手术,产生不必要的问题。
而且我认为这种状态实际上只会变得更糟,直到我们发展出一种科学 一套工程原则——可以允许我们思考数据。我喜欢用的一个类比是修建高楼和桥梁,几千年来这些实践让人类社会更加先进发达,但当发生高楼倒塌或桥梁断裂事故的时候,也会夺走人的生命。
最后一门叫做土木工程的学科出现了。研究给定一个建筑的高度,给定明确的风力大小,给定土壤等等,怎么修建建筑。但在大数据领域,我们没有任何和这相似的东西。
我们有计算机科学、统计学、机器学习,我们有很多新想法,我们很聪明,可以做任何事情。但是当我们设计一个系统时,我们不知道错误率和时间,不知道在大规模情况下是否能有更好的决策,不知道这会随着时间推移变得更差。而且当实际构建这样的系统时还要面临很多其他问题,比如很多数据是来自于很注重隐私的人,他们不想给你医疗数据,特别是不想让你公开给任何人。所以你不能只是把数据拿过来就分析,你必须考虑数据收集的问题,这里面也有管理风险、带宽限制等等。
这些问题全都要考虑到,因为它们会影响到统计推断的质量,它们会让误差增加,这是很常见的工业界对员工的要求,但是在学术界并没有这样的领域能提供这些解决方案,至少对我而言是这样。我认为这是下个世纪的挑战,不是把我们现有的想法拿过来直接应用,而是作为科学来认真思考和践行。所以,这个问题上一个非常有帮助的表述是——计算思维和推断思维的结合。
计算思维不是说知道如何编程和使用数据库,而是一种思想。
关于思考一个问题的抽象概念、模块性、性能……一切你在计算机课堂上学到的东西,而不仅仅是编程。计算机背景的人应该很熟悉这些,不熟悉的可能是推断思维。那是已经有超过两百年历史的统计学里的东西,不是一个新的领域,不是拿到数据就开始进行操作,像做数据库的人那样。
首先要考虑数据从哪来,数据背后是什么,数据获取的过程中有什么问题,这就是推断,还不严格属于计算机科学的研究范畴。即便最后得到的东西都是所谓的算法,你也必须思考背后的统计采样和总体。所以其实我并不是太喜欢机器学习这个词,我认为并没有什么新东西,还是统计思维。但是因为计算机科学家不太懂统计推断的东西,所以他们取了一个新名字叫做机器学习。
很多机器学习的工作都没有考虑推断、采样以及总体,只是把机器学习模型应用到数据却没有得到正确的答案,因为没有考虑偏差、因果推断等内容。我认为把两者结合起来并且认真研究是真正的挑战。我我以前更多关注算法和系统,过去几年越来越像个理论家,逐渐更关注理论同时在某些方面也是关注系统。我在实验室里设计系统的过程中看到了理论性的问题,所以我去寻找计算机和统计的理论,它们有什么概念可以怎么结合起来。所以我们发展了数据科学这个交叉学科,这并不容易。
统计决策理论里有损失函数和风险,但它的基础理论中没有运行时间的概念,你可以去查看几十年来成千上万的统计决策相关的论文,你不会看到任何一篇提及了运行时间;同样地,在计算机这边你可以找到成千上万的论文讨论复杂度,各种复杂度理论,但是却找不到关于统计风险的文章。而利用统计风险理论可以控制基于数据的错误率。此外,对统计估计问题的深刻理解不仅仅包括学习算法、还包括学习下界,学习你可能做的最好的是什么,但是在计算机理论里却没有太多关于下界的。有倒是有,但是不多。
接下来的演讲将进入我今天的重点主题,谈谈一些关于“理论”(theory)的问题。
在统计学“推算”(inference)概念上的“计算”(computational)限制,以及一些关于建立数据分析栈的问题。
差不多是AMP实验室里所做的事情,以及后续的叫RISE实验室的一些发展动态。
我们已经建立了一个系统来替代Spark。我想告诉大家,
事实上这是我首次向公众宣布这个信息。这个打算替代Spark的工程正在进行中,这个替代会在1月份完成,而我在今天就宣布了。