图灵奖得主John Hopcroft:计算机科学的新方向
一、个人职业生涯简介
能够参加今天的活动,能够有机会跟你们来讲一讲计算机科学未来的发展方向,我感到非常高兴。我们现在所进入的信息时代,将是我接下来演讲的背景。开始之前,请允许我简单介绍一下我自己。
康奈尔大学计算机系工程学与应用数学教授,1986年图灵奖获得者John Hopcroft博士
1964年,我毕业于电子工程系(当时还没有计算机系),而后受聘于普林斯顿电子工程系。很遗憾的是,当时的负责人说我被安排教授计算机的学科。因为没有课本,我也不太清楚这个学科要讲什么。但是今天回头看,正是教授这样的一门课程才使我成为了一名计算机科学家。每当国家需要高级计算机科学家时,我总是列于名单之上。值得一提的是,当时的美国总统问我是否愿意效力于美国科学委员会,监管美国全球研究基金会时,我才只有四十多岁。你们可以想象一下,如果我当时从事的研究工作是高能物理学的话,要获得那样的机会 ,可能今天我还在等待那些辈分在我之前的研究人员退休。我把这些跟我的学生讲时,他们总是说,你太幸运了,因为你毕业于1964年,而现在已经是2012年了。今天,我的演讲所要表达的一点就是,这个期间确实在计算机科学领域发生了一些根本性的变化,但是如果你们也能够为自己找到一个正确的定位的话,也将会拥有一个非常美好的职业生涯。
二、演讲内容概述
计算机科学经历了很多根本性的变革。在过去三十年当中,我们关注计算机怎样有更好的用处,包括在编译器、系统、算法、数据库、编程语言等方面。而在未来,我们更多的是关注将计算机应用于哪些领域。然后你们将会涉及到跟科学文献上的理念交流,社交网络通信的演进,非结构数据源当中的信息提取等一系列应用。
我今天想要强调的是变革的驱动力,其中一部分就是关于计算和通信技术的融合。也许通信比计算更重要一些,因为通信有大量的数据,数字型的数据,还有联网的终端和传感器,都理论计算机带来重大影响。我们需要这些理论支持我们新的方向,我们也必须更新我们计算科学的教育。
所以,在我的演讲当中,将首先简单的概述一下我们的未来一些发展方向;接下来介绍一下基于科学的要求,如何支持未来的活动;最后,回答一些经常被问到的问题,比如到底我们的科学基础是什么样的。里克.雷斯特(Rick Rashid)博士之前提到了大数据。我也稍微地和大家聊一下。当下,我们拥有足够多的信息。全球差不多有174份的报纸,但是你每天需要看这么多的报纸吗?这么多大数据你可能来不及看。因此,你需要计算机程序提取这些数据,将你感兴趣的数据抽取出来。那么,这个数据的规模究竟有多大?以Facebook为例,他们每天要上传两亿五千万张照片。
计算机科学会进一步发展,将会对科学的每个领域产生影响。这是我们最近发布的最基本的一个例子,但是我想指出的是,计算机科学家在其中发挥了非常关键的作用。比如在质子对撞方面,他们看了一千万亿个研究,以人的能力是不可能做这种计算的,这完全是由计算机实现的。他们从中挑出感兴趣的质子。因此,这就非常好的展示了在我们所能想到的任何学科,计算科学所发生的作用。
三、计算机科学的发展方向
1.稀疏矢量
我们知道,目前的数据库工具是不足以捕获、分析、研究和可视化我们目前所面对的数量级的数据的。因此,我们必须开发更多的理论,这将是在你们事业中应该做的。比如说大型图形,当我在上学时,可以在一张纸上画一张图,有20到30个象限。但是你们以后要画的图形,可能有上百万个象限,还要考虑到各种各样的组成元素,比如说波谱的分析,高维、多维减法等等。我还想指出的就是,如果你们想做研究的话,大家看一下不同学科的主题,有些主题是经常出现的,也是最基本的一个,就是我们所说的稀疏矢量,他们需要六七个坐标。你们会问稀疏矢量为什么是有意思的研究领域,回答就是在不同的学科都会碰到它,包括很多方面,像生物学、信号处理方面,甚至在一些科学文献中流动子的跟踪。
比如说这是一棵苹果树,你要做的就是要开发一些新的方法,找到拥有非常好基因的苹果。我们画一个矩阵,每一个矩阵中的点代表苹果园中的某一棵苹果树,而我们要找到其中我们好基因的苹果树。我们看一下,要画这样的图谱,我们要去找到线条中我们想改善的杰出的苹果的一些属性,比如说更圆,更红,这是我们喜欢的基因类型。那么,我们如何做这一点呢?就是解决这样一个公式。那么你肯定会说,这没什么道理,因为你有更多的列和行,那么这是基于矢量的方法。如果我们想找一个稀疏的解决方案的话,这就是你们要探讨的。你们会问,哪些是数学性的数量,我们可以用来解释。比如说有两个稀疏的解法,也就是找到这两种类型的基因,可以带来我们希望数学可以定义的苹果的属性。它们是否可以带来等于数学属性的这样一个等式。这就是我们谈到为什么稀疏矢量是非常重要的,因为在其他学科也能够用到。
2.零知识证明
还有一点,就是要搭建相应的数据库。在不久的将来,我们将会把一些医疗病例技术数字化,比如说中国常见的病史。那么以后去看医生的话,这个医生能把我以前所有病情记录都下载下来了,依此给我提供最好的治疗。但是我并不想保险公司能够看到我的病史去看我病例的历史,因为这与他们无关。那么,对于保险公司来说,他要了解的就是是否欠医生钱。他们只需要关心是否有欠钱的行为,这个病是否被治愈,至于到底这个病人接受了什么样的治疗方案,他们并不需要过问。其实,还存在一些研究人员,他们想研究这些数据,想获得一些统计学方面的信息。在这其中非常关键的一点就是,绝不能泄露个体的信息。
还有其他相关的研究,比如说零知识证明。所谓的零知识证明就是,不需要你提供其他信息就能够被证明是真实的。举个简单的例子,我现在假设大家都会玩九宫格。我想向你证明,我知道如何写入正确的数据,使每一个3×3的九宫格里面填入的数字等于9。那我如何证明呢?这就是零知识证明。首先我把我的答案写到一块硬壳板上,然后用卡纸把它们盖上。这样的话,你们就看不清了。下面我会让你问我一些问题。你说给我展示一下第一行?我就会把卡纸翻过来展示一下,你就会看到,我确实知道这行的答案,但是我却不给你任何的信息,也就是说到底哪个数字应该放在哪个位置上。然后我又把这个数字,进行检查3×3的的九宫格,那么你是相信我有答案的。我想说的是,这并不是一种非常严苛的证明,我不能100%的证明这个答案,但是你可以观察得到,我的卡纸,我拿起它的顺序和放下它的顺序不一样,所以我知道这个答案的概率非常之高。通过你的问题,你可以看一下,可能我不知道这些答案的证据。是不是可以用这样的方法解决更复杂的问题?
接下来我们来看一下,如果把三种颜色说放到这样的方式中,令任何一列或者一行都不出现同样的颜色,我们就可以延伸成一个大图(Large Graphic)。首先,假设我们是在做生意,但是你有一点担心,因为你要先付钱,才能给你展示我做出颜色的答案;而我也会担心,如果我先给你看颜色的答案,拿不到钱怎么办?所以为了做好生意,该怎么办呢?我给大家一个很好的解决方案,就是说我能够获得这个答案,但是我却不让你知道这个答案是什么样的。下面我们要做的就是,将图中每一个颜色卡,我把它们都放到信封里面,然后将这个信封封上。这样的话,你可以问我问题,就像在做速度游戏一样,你可以选一个边缘,然后我给你两个信封。你把这个信封打开说:“这两个信封里的卡纸颜色是不一样的。”如果我确实有这个颜色,但是我并没有明确的告诉你,到底哪一张卡是在边缘的哪一端,所以你还是不知道答案。如果这个答案还不能让你信服的话,你还想看另外一个边缘的答案的信封。然后我再给你这个信封,这个时候你就会获得一定的先机,我不会这样做,我会把所有的信封都扔掉,然后再重新做一个,再把我的卡片放在新的信封里,然后你再去让我给你一些信封去满足某一个边缘。也就是说我把第一次的信封和第二次的信封变成不一样的,又混合在一起,你就不知道答案了。目的就是说,你绝对不会明白我真正的答案是什么。所以你问了我足够的问题,你觉得我确实已经能够证明我知道答案的结论了。实际上你可以不用信封。
衍生到计算机科学应用层面,就是所谓的“加密”。我可以把这些颜色答案加密,比如说你不跟我要信封,把信封打开,而是让我给你加密的密钥。如果是电脑计算的话,可以每秒产生数以几百万计算的边缘。这就零知识证明的意思,几乎每一个数据库都会出现这样的情况。
下面再举个例子,是和公路、汽车相关的。我经常开车到费城,车上按了导航系统,指导我沿着红线进入洲际公路。因为我经常在这个路上开。所以,注意到有很多的车,不走红线路,而是走紫色的线路。我跟着这个线路走后,发现里程数更短一些。但是我的导航系统为什么没有指出这条紫色的路线呢?答案就是这个系统只是让我走主路,它们不知道其他的小路。假设你们的汽车能够记录这样的地理的地标信息,并且导航系统能够计算经纬度的话,那么它们就能够为你指出更好、更快、更短的路径了。如果这个功能实现,将至少可以降低车耗油量1%。全国来说至少意味着几千万美元的节约。然而,事情的关键是,我并不想下载GPS的地理坐标,因为可能这就会泄露我在哪儿工作,我停车在哪里,今天这个时间在哪里,这将会导致个人信息的泄露。所以,我其实并不希望导航系统GPS记录我的信息。
3.社交网络
社会学家以前可能一次只能研究几千个人,但现在有了社交网络,我们可以去研究几百万个体之间的互动。下面为大家展示一些你们可以做的事情。一个非常重要的研究方向就是,弄清楚这些社区是如何形成和演进的。早期这个领域的工作,叫做平均切割(Mean Cut)。他们会把这个图分成一段一段,就是任何一个点都有一个平均距离的连接,他们以小图的方式来解决。事实上,我们绝不希望去研究一个由一百万个点组成的大图,然后分成各有五十万小点的小图,那么我们怎么做呢?早期的研究要假设出这样的一个社区:在这个社区的人,他们在社区内和人之间的联系,之间联系的距离比圈外的人的线要短。但其实并不是这样的。作为个体,我在社区外有很多要连接的人,我们知道在这个社区之外存在数以亿计的人,所以很有可能,我和这个社区之外的一种连接的路程其实更短,要比社区之内更短,因为我们可以看到这个社区之外存在的人的数量更多的,这就是为什么这个概率更大。同时,我们还可以问一下,我都存在于哪些社区?因为我同时存在于多个社区。所以要做的基础性工作就是,我刚才谈到的如何找到社区。下面我举个例子。
这张图代表顶点之间的临近性。大家可以看到左上角,每一个顶点都互相连接。但是在社区之间并没有连接,如果有这样的情况的话,你会发现,我们所说的在右边的这样的奇异向量,我们可以看到这些向量,把它们组成一个三维的图,这是一个例子。也就是说,在这个社区中的所有的点,所有的人,都是和一个点连接的。那么,也就是说即使这两点之间,这两个人之间没有直接的联系,但是他们也间接的实现了中心的连接。所以,我们就可以使用K平均来找到这些社区。但是有一个问题,如果这些社区之间出现了重叠,比如说两个社区之间有重叠的话,那么我们就会看到有三个集群,而不是两个。也就是说有两个是在这个象限,在坐标的两个极端点。
所以,我们不是说要进行“行”的奇异向量计算,而是要找到零常规向量。也就是说用这三个矢量,来抽取出一个社区。我们希望找到那个最小的零常规的向量,当然这就是所有的零的一个向量。后来,我们发现了最小的0的向量是NP号的。我们刚才描述的就是如何找到网络的全球结构,这也是我们如何把它应用到一个有一百万,甚至三百万个点的图。我们希望修改这个算法,用于更多的网络。下面有一个实际的例子,展示我们都做了什么:
假设,有三个池塘,他们互相连接,我们把一个圆片扔到了其中一个池塘里。在我们把这个圆片扔进去之后,我们知道这个圆片掉到了哪个池塘里,但是过了一会儿之后,我们不知道它到底落在这个池塘的哪个位置。再过一段时间,就不知道这个圆偏流到哪个池塘了。下面要做的就是进行一个比喻,找到这个奇异的向量,发现发生了什么情况?我们做一个随机的游动,包括它怎么融合起来,它聚合之后会做什么呢。我会采取五个步骤,这些步骤有足够的时间,在五十个大的社区覆盖,但是并没有覆盖到所有的网络。这样做是为什么呢?就是找到一个最近的向量,就是在他的子空间里面,我只需要五步就把这个子空间填满了,这是非常好的办法,就是找到相关的社区。
这里有一些研究,目前做的当中有一个范数的向量,并不是指标性的向量,跟零一样,需要一个门限值,就像这样的向量的情况,你可以决定什么时候切割这个限值,找到你的社区。实际上你并不一定想要在这样的子空间里找到这个向量。你最不愿意做的就是找到跟这个子空间最近的一个向量。我们做什么呢?我们可以把一个Y的范数最小化,再加上一个恒定的量,再加上子空间的角度,如果这是恒定无限的,你可以在这个子空间里找到一个向量。如果变成0的话,一个范数的向量,你可以找到恒定的答案,得到这样的结果。人们对一些研究问题非常感兴趣,就是随机的长度多长,需要填充的子空间,以及人在几个社区当中。我们需要这样的研究,这些典型例子是好的,在上百个领域做这样的研究,这是你们以后在社区当中也可以做的。
我们跳过一下,其中有一点就是需要了解比较大的图。这张大图,我在上学的时候,差不多有15个顶点,可以在这个纸上画出来,有上10页的顶点。然后这些小图也是很重要的,其中在你的图上可以随机的擦除掉其中一个顶和边,它不会影响到你的属性。有一系列的大图,可以提供定例的图例,还有一些图形,就是选择N个顶点,然后再将这些潜在的边缘放到里面,这是非常好的理论,证明了很多的定理,还有很多的书籍是关于这个图的。
这是现实中美联航的航路图,在北美地区的。这个图里面有很多城市的顶点,城市之间有直航的边,你可以看一下分布的情况。通过双范数,生成这些图的模型。我们从一些小的顶和边添加做起,在里面加了一些顶和边,我们需要一些规则,如何联系所有新加的边,叫做偏好性的连接,这当然是一种随机的,一定的概率到某种程度上,你可以得到一个叫做明律的分布。再举个例子,就拿这个图来说。在我们教授课程的时候,经常让学生到外面找一个数据库。他们可以很容易的进行转换,把它变成一张图的数据库。这个数据库是学生拿过来,其中有2073个蛋白质,成为顶,3602个互动,属于边,这个里面再进行计算,把这里面的分量结合起来,然后变成48个独立的顶,这是在其他蛋白里面没有的。其中还有179个对相互之间可以互动的。这都是我们所说的社区大小。
接下来,我们会编写一个计算机程序。但是如何检验这个计算机的程序呢?我们把这个社区大小和社区数量乘在一起,它变成了什么呢?在合成的成分当中,我们只是得到了899个蛋白质,还我们缺少1851个。是我这个程序有错误了吗?我们运行的时间长一些,并没有达到1000个。进一步进行推算,我们有很大的数量,1851个,他们找到的缺少的部分。也许你们很奇怪,这张图怎么有这么大的组成部分和分量呢?这样的大图,每一个现实的图当中,都有这样的内容,这都是非常重要的。你们要能够理解它怎么形成的。在你的数据库里面可以做这样的实验,可以有不同的结果。
4.高维
我上面讲的很多都是基于科学的内容来支持我们的理论。接下来,我们来看一看什么样的情况是针对高维的。高维和2D、3D是不一样的。在二维、三维当中可以随机放一些点,然后测量之间的距离。这两个最远的距离,比这两个更近的地方放的更远一些。在高维当中进行计算的重复,进行点的计算,所有的距离都是一样的。为什么会是这样的情况呢?原因是是你需要一些提取坐标,把它们加在一起,这两个座标之间的距离进行平均化,会有一些数字,你会有大量的随机的数字,我们叫做大量数据的定律。你可以得到跟我们期待的非常类似的结果,但还有很多不一样的,就是关于高维的。
如果我们来看一个高维的立方体。这个体积就是一个,三个,每一个方块加在一起,成为一个立方体。如果放到高维里面看这个立方体,这个球体转化成了一个叫做圆形的0。可实际上并不是这样,在高维里面的分布,所有概质的质量都是高斯的情况。如果发现高维高斯的情况,它还是在最初的原点上。然后你问一下其中有多少的概率,就是它这个质量,我们把这样概率分布在这个球体上,你会得到0,真正的值是0。这个里面并没有所谓叫做质量集中的概率。另外,你找到这样一个概率的质量,必须要向外扩展,这个球是叫做0值的,这是我们叫做维度的一个规则,这个里面找不到任何一个概率的质量。因为它们下降都非常快。这个球体的质量是作为多范数的方式增长的,它并不是这种线性的变化。有两个高斯的数据,想知道哪一个高斯产生在哪一个点上,需要做数学计算。因为这两个环形并没有相互集中在一起,这两个高斯在高维里面的情况会到达随机点。你会注意红色和蓝色很多地方都是重叠的。如果换成这样的地方,没有给你颜色,你看一下,你会说,我们现在如何区别不同的高斯,有很高的概率,我们进行怎么区别。
如果看一下两个随机点的距离,都是同一个高斯点产生的,它会有这样一个D的开方,半径的环面,同样的做什么呢?就是做类似的计算,就是半径球体的开方,还有两点之间的平均距离就是开方的情况。第一个随机点先生成,然后做什么呢?把我这些座标系统先进行调整,把它对准北极这一点,然后再生成第二个随机点,我可以向你们保证,第二个随机点会在我们大圆上,就是赤道的轴上,为什么?因为所有的表面都是在赤道的地方,并没有表面的因素。北极的三维就不是这个情况,比如10或者12的近似的计算,没有一个合适的角度,就是2D,还有开方的时候,就能够看到,如果有两个高斯的话,可以来计算一下两个高斯点之间随机距离的计算。我们还是需要一个合适的角度,技术细节就不讲了。
我在做这样估算的时候,并不是在环面上,而是在这个圆面上,你能解决的可能是这个的一半,或者1/4,但是我们可以做得更好一点。其中就是减少这个维度,我们能做什么呢?如果我来画一条线,在两个高斯中间画一条线,这些点都放在这个线上,看发生什么情况?因为中心两边的距离还是一样的,这个里面更加接近于放在一起。因为从这条线的距离都是高斯的噪音,可以找出来。可以通过数学计算,可以找到这些线。然后通过一个恒定的距离,就可以把两个高斯点分开。
我下面要展示的就是一个基于科学的高维的数据库的情况,比如说排位问题,比如说教职员工,学生之间的联系,包括对一些餐厅的点的数据进行排位。我们还有协作式的过滤,通过一些数学的理论,告诉你们哪些是好的东西,然后也可以减少这个维度。这是一系列的领域,需要我们接下来进行开发,需要新的科学来予以支持。
三、结束语
我讲的非常快,希望你们,在计算科学的时期,利用大数据,还有一些传感器,社交网络的信息进行探索。重要的一点就是计算机科学可以支持这些科学活动。到这里,我就讲完了。我希望你们记住,计算机科学正面临一个巨大变革的时期,你们代表着未来,如果你们做得很好,能够很好的定位自己的话,你们将会有一个非常好的职业生涯。谢谢!