斯法基斯:我目前的研究是建立一个不需要修正和测试的系统。因为你知道,我们建立系统时需要大量的时间和金钱,然而有时候测试系统的代价比开发系统的代价还要大。这是一个复杂的问题,非常非常复杂,测试花的代价太大了。
斯法基斯:首先,复杂性有很多种,第一个是我们看到的世界本身很复杂,我们从不同的细节程度观察世界,比如可以在不同程度上观察物理世界、生物世界、计算机世界,不同的细节程度的物理世界、生物世界、计算机世界也有区别,这就是观察到的复杂。
第二个复杂是计算复杂。在计算之前还有个非计算结果问题,就是说有些问题无法用计算解决,比如一个系统的变量X由一个值决定。然后才能谈到计算复杂性。什么是计算复杂性,我先举一个非常简单的例子,一个开关有一对「开」和「关」,这是两个状态,那么两个开关就有两对「开」和「关」,最多有四个状态,以此类推,3个开关就有8个状态,6个开关就有最多有60个状态。如果有300个开关呢?算出来的是天文数字。每增加一个开关,复杂性就会指数增长。系统设计里面也是如此,每增加一个关键性,它的复杂性就会成指数的增长。
我再举一个例子,给大家解释什么是观察到的复杂性和一个计算性的复杂性。比如我是空客的工程师,要用我的程序软件计算一下最差情况的执行时间和最好情况的执行时间。这是系统里面的概率问题。但是我面临显示状态中有很多散碎的信息,你很难去精确,只能接近于他的状态,这就是观察到的复杂性,由于你有了一些技术,你可以有一些更精确的估计,这就是计算性的复杂性。
第三个是设计复杂性,这个是很重要的。什么是设计复杂性呢?比方说我是一个设计师,我要设计一个系统,我必须要考虑到两个参数。第一个是执行的平台。平台上有一个单处理器系统,有分散式系统,还有移动系统和自组织系统。执行层面上的系统越多就执行起来就越复杂。因为在执行层面上,执行的平台上有越来越多的元素。此外,还需要考虑有可转换系统,数据流系统和应对系统等等,我这边在复杂的系统里面可能有单处理器的系统,有分散式的系统,比方说你需要计算非同步交换数据,就要去设置这个分散式系统,你要引进或者删除一些元素,就要有一个移动系统。由于这个移动系统太复杂度太,所以你就需要有一个自组织系统,在移动系统基础之上,让这些元素自己能形成一个一个集群,然后做一些事情实现自己的目标,这个就是执行平台的复杂性。
第二个就是外界环境的参数。简单的系统是我输出一个A,这就一个单一输入单一输出的简单转换系统。复杂的是数据流系统,输入一个A后得到不是单一的A,而是数据流和信息流。这种系统与外界的互动就有限制了。还有反应式的系统,能够不停的跟外界系统进行互动,给出一些有目的的行为,这也很复杂。还有一个更芜杂的系统,反应式系统。
这系统设计过程中,设计者得去处理好多不同的语言,有建模的语言,有性能评估的语言,所以问题就是你怎么统一这些不同的语言,我的观点是我们需要一个更高层次的编程语言。但是我们的编程语言很多年没有进化和改进了。然而今天的设计师建立系统时,需要在不同语言中往下流动。这里面就会有一个和谐性问题,要把不同的语言都嵌入到主语言里面,这在技术上是可行的。
还有一个问题是,在任何工程设计里面,工程师都是从原件开始往上建立系统,但是计算机在这个单位里面的元素到底是什么,以及元素之间的可交互性到底有多少,我们没有达成一致。我有一个自己的观点,我们不断往系统里添加元素时,系统还是好的。比方说微笑的元素组合在一起,可以变成一个更大的微笑的元素。我们需要在组合这些元素时,确保正确性。这就还需要组合性原则,就像用砖垒墙一样,新进来的元素,不能把这个墙推翻,不能使整个系统处于危险境地,这是不同元素之间干扰的问题,比方说在计算机系统里面,在缺乏可组合性原则的情况下,你加一个元素,再加一个元素,开始很好,你再加入一个新元素时,这个系统就受到了威胁,这很有趣。谷歌有一个项目,可以从一个骨架开始,加不同的元素然后做成一个自己的手机。网络评论都很怀疑这种做法能否成功。关于设计复杂性我能说的还有很多,在这就不多说了。
总之,当你设计系统时,需要把三种复杂性都考虑进来。从物理世界开始,到设计的复杂性,还有计算的复杂性,要同时处理这三个复杂性,我把它叫全局复杂性。
斯法基斯:人工智能是一种智能,能够收集知识的技能。我们以学习为例,你有了一些信号,映射一些信号然后将这些信号与概念联系起来。通常,你怎么收集知识呢?你可以看着单词然后学会它,也可以推理,你脑子里有课一些知识,通过推理,收集新的知识。你可以通过学习也可以通过推理来收集知识。 但是像AlphaGo这样的机器并不收集知识,它只是计算大量国际象棋中已经有的解决方案,选择一个最优解。为什么它能赢了世界冠军,就是因为它的记忆量特别大算的非常快,这对人来说很难。我们已经教会计算机可以通过学习来收集知识,但是无法教会它们推理,以及根据推理形成常识。
斯法基斯:这是一个很大的问题,我也研究这个问题很多年了,我想说,计算机我们要小心这个智能的结果,因为人与电脑最大的区别就是电脑更快、更精确,所以,你有一个计算机它可以打败国际上一些大师,围棋大师。这并不是真的智能,真正的智能是什么呢?创造知识。知识是什么呢?知识就是一些信息,我可以用一些信息来理解一些情景,一些问题。在技术里面,计算机可以创造知识,但是这里和人类说的知识不一样,因为计算机创造的知识只是找到不同事件的相关事情,但是它并不理解事情之间的关系,它不是科学知识,而是另外一种知识,实际上这是某一种计算机的一种技能。比如说计算机数据,你应该很谨慎的对待它,因为这种知识不能在关键性的系统里面使用,你不能把用机器学到的东西放到汽车设计里面。也没有哪一个认证系统允许你这样做。
斯法基斯:人工智能可以学习知识,但是不会推理。推理和学习不一样。推理是用来解决问题的。现在的这些计算机做的还不好,我们需要其他种类的计算机需要一种新型的生物计算机和神经计算机。
斯法基斯:它们是一个层面上的问题。我们有三种复杂性一种是科学的复杂性 我观察的世界是复杂的。第二个是计算复杂性,第三个复杂性是设计上的复杂性,这种复杂性是指我需要设计解决问题的方法。你说的这些都是科学的复杂性。
复杂性是一个很重要的话题,今天将讲设计系统里面的复杂性,以及如何处理这里面的复杂性,在我的职业生涯当中,在汽车行业或者飞机行业里面,我都涉及到复杂性系统设计的任务。
首先,系统设计这个概念是来自于传统的系统工程,比方说土木工程,怎么建一个桥让它不能塌陷。建立一些人造物,从一个想法,你想要什么,比方说,我想做一个苹果派,我有一个想法,你就要有一个成份、配方、资源,这也是你设计的一部分,因为你要设计一个人造品,在设计系统的时候也是一样的,首先要有一个客户的要求,做一些软件,你如何做一个系统和平台来执行,这里的关键就是你是否做的正确,那么他的和谐性和正确性就是这样定义的,就是你做的系统是符合客户要求的,对于系统来说,正确性它是值得信赖的就是一个可信赖的系统,就是在各种各样的情况下,能够稳健的执行功能,无论有设计错误发生,还是有外界环境的变化,或者有恶意的侵入,在这些情况下,你都能保证系统运行良好,这样可信任的系统不应该太贵,应该节约资源来设计这个系统,一个工程师应该在成本跟质量和优化之间有一个平衡,这就是系统工程里面一个问题。
现在我们设计的系统有这种不同的关键性,比如说安全关键性,人身安全的关键性,比如说飞机的安全,同时,你有一些信息安全。作为工程师,往下是一个任务关键性还有一些是最佳努力关键性,这是四个不同关键性级别,这些不同的关键性级别区别到底是什么呢?也就是说你的努力、成本、金钱,比如说做一个飞机,它的稳定性应该是十的负九次方的容忍性,最佳努力的这个关键性就是十的负四次方。如果太贵的话,我没有那么多钱。比方说,你要买飞机的话,1970 年的时候,你要买一辆飞机,需要整个美国的 GDP 才能买得到,它非常的贵,也非常的复杂,如果有一个系统,又复杂,又可靠,那么这个确实是一个成本的问题,昨天我说了做了一个物联网的讲话,物联网确实不能完全依赖于自动化的服务,如果我们没有这种可能性去建立一个大型的可信赖的系统的话。那么,这些复杂性到底从哪里来,很多因素造成系统的复杂性,很容易理解,比方说这是一个物质世界,在这个世界里面,我们这里有信息、有知识、有形式化的知识,这些作为科学设计,在这之后就是可观察到的复杂性,这就是我们每日面对的客观世界的观察到的复杂性。
当我们设计系统的时候,有一个设计复杂性,这是人类设计系统的时候,从我们的知识出发建立人造物,这就是计算复杂性,比方说你有模型,我想要解决问题,要回答一些问题,关于这些模型的问题,我需要做一些计算,这就是计算性的复杂性,所以有三种复杂性。我们要处理这三种复杂性,现在我要解释一下这几种复杂性,首先是观察到的复杂性,它是来自于什么呢?我们观察到的外界世界本身就是复杂的,可以从不同的细节程度观察它,可以在物理世界、生物世界、计算机世界观察的不同程度,不同的细度里面这个系统里面有什么区别,这个是观察到的复杂性,一会我还要详细来讲。
我们还有计算的复杂性,你想要去一些决定,你有一个问题要解决这个问题,你要设计一些东西来解决这个东西,有一些非计算性的结果,就是说你不能够用计算机计算来得到的一些东西。比方说,有一个软件,你不能说这个软件已经终止了,或者说是这个系统的变量X是由一个值决定的,这个就是非计算性的结果,然后在这儿之后有一个计算性的复杂性,这里面有一些有意思的结果,就是说,如果你不能够精确的理解计算的系统是什么,你可以近似的理解,还是逃不开复杂性,这就是计算的复杂性,我就能解释到这里了。
为什么会有这样的计算机?比方说我们有一个开关,可以开、可以关,这是两个状态,我们有两个开关的话,那就是二的二次方状态,比如说三百个开关,那就是二的三百次方的状态。这个是整个的宇宙,你有 300 比特,那么这个复杂的程度就像一个宇宙来说,你的系统比宇宙还要复杂。我再举一个例子,这个实时的系统,给大家解释什么是观察到的复杂性和一个计算性的复杂性,现在我是一个空客的工程师吧,要计算一下最差情况的执行时间和最好情况的执行时间,这是针对于我的软件程序。这就是一个真正系统里面的概率,这就是分散情况,对于可观察到的复杂性,你很难去精确的决定这个具体的行为,因为它太复杂了,因为他有广告、有底盘,这里面太复杂了,你只能接近于他的状态,这就是观察到的复杂性,由于你有了一些技术,你可以有一些更精确的估计,这就是计算性的复杂性。当然了,我没有时间来解释这两个具体的概念的展开,那么,我当然欢迎大家的提问了。
现在我要讲一下设计的复杂性,这个是很重要的。什么是设计复杂性呢?比方说我是一个设计师,我要设计一个系统,我必须要考虑到两个参数。一个是执行的平台,有一个单处理器系统,有可能是集中化的系统,还有小的一个壳的单处理器,还有一个分散式的系统,还有移动的系统和自组织的系统,就是越来越复杂,因为你在执行层面上,执行的平台上有越来越多的元素。另外一个参数你需要考虑的时候,就是你要有一个可转换的系统,数据流系统和应对的系统等等,我这边在复杂的系统里面可能有单处理器的系统,有分散式的系统,比方说你有一个计算其他能够非同步的交换数据,你还要去设置这个分散式的系统,你能够拿进来或者删除一些元素,还有一个移动的系统,这个移动系统的复杂度太多了,然后你就有一个自组织的系统,然后在移动系统基础之上这些元素自己能够成为一个一个集群,然后自己为了一些目标来做一些事情,比方说某种功能的机器人,这个就是执行平台的复杂性。
第二个就是外界环境的参数。我可能很简单,也可能很复杂,我输出一个A,这就一个单一的输入而单一输出的简单转换的系统,第二个就是数据流的系统,我得到不是单一的A,而是数据流和信息流,就是一个加密和解码器,这里面就有一些限制了,我这些系统外界怎么样互动就有限制了,还有反应式的系统,能够不停的跟外界系统进行互动,以便于给出一些有目的的行为,我看到全局设计的复杂性的话,转换系统和数据流系统为了不同执行功能。这里是人的物联网,有物联网再加上有一些增密化的服务,但是基本的模式还是服务器跟客户,客户想要服务器,我有服务器的核,我有另外的一个更芜杂的系统,那就是反应式的系统,你看反应式的系统,我有一个计时器,建立一个机器人,就是在建立这样一个更加复杂的系统,如果你要去测量不同线路上的复杂性,比方说自动化的高速,还有车辆管理,还有自动化的工厂,还有智能电网,还有谷歌的车,谁能说谷歌的车会在城市里呢?这是我不认为我将来谷歌的这种车真的能在这个城市里跑,这个技术上实在是太困难了,我没有时间展开来讲了。所以,当你设计系统的时候,你是把这三种复杂性都能得到,因为你是从物理世界开始的,是一个复杂的外界世界,还有一个设计的复杂性,还有计算的复杂性,你得同时处理这三个复杂性,我现在叫全局复杂性。现在有一个问题,我如何应对设计复杂性,我现在在这一点上可以讲的很多很多。
首先,有一个很深刻的理论,要开发一个系统,有一个V的模式,这是一个不好的模式,因为你要检验,你觉得我理解了这个系统,这个要求,你用一个模式去测试,你自以为这个系统已经确认了,这是一个不好的模式,当你应用他的话,所谓的灵巧的计算,这是一个不好的概念,灵巧计算在我看来,我觉得不太好。因为这个灵巧设计看起来是合乎原理的,我们应该找到一个更好的方法,我们应该从设计流开始,我们现在还没有这样更先进的模式,还有一个就是语言的问题,系统设计者我们得去应对不同的语言,好多好多不同的语言,这是一个困难,怎么去协调这些原因,你有建模的语言,有性能评估的语言,所以问题就是你怎么统一这些不的语言,我的观点就是当我们需要一个更高层次的编程的语言,我们的编程语言很多年没有进化和改进了,我们需要更高层次的变成语言,同时,我们还需要一个语义的统一。因为,今日设计师设计系统的时候,他们建立系统,去确认跟验证,去一个模式写编码,这个设计流就不同的往下流动,这里面就会有一个和谐性,从技术上是可行的,把不同的语言把它嵌入,都嵌入到主语言里面,你想要这个好的设计流就要嵌入到这里面,现在的方法就是把C语言等等都嵌入到里面,如果你有问题的话,你可以随时来问。
我们还需要元素,在设计里面,任何的工程设计里面,工程师都是从原件开始往上建立系统,大家都没有达成一致,说计算机在这个单位里面它的元素到底是什么,以及元素之间到底可交互性是什么,这个我们没有一致。但是我有一个自己的观点,我们需要一些理论,比方说,我们达成一致说,我们共认到一些元素,我们得把这些元素连接起来,就像从货架上买不同元素元素,你不同的加,不同的加,系统还是好的。比方说微笑的元素组合在一起,可以变成一个更大的微笑的元素,所以,我要建设的正确性,而不是去确认,就是在你组合和复合的时候,要确保它建设中的正确性,但是还不够,我们还需要组合性原则,如果现在有更多的元素,我想要建立一个更复杂的系统,就像用砖垒墙一样,新进来的这个元素,不应该把这个墙推翻,不是整个系统处于危险境地,这个是不同元素之间干扰的问题,比方说在计算机系统里面,由于缺乏可组合性原则,问题就是你加了一个元素,再加一个元素,开始很好,当你加入一个新的元素,这个系统就受到了威胁,很有趣的一个问题。
就是谷歌它的一个项目,我的手机可以从一个骨架开始,加不同的元素然后做成一个自己的手机,很有意思,一开始我们是从模块化开始的,网络上人们的评论说都是很怀疑这样一个做法是否能成功。还有一个智能的系统,智能系统、人工智能能够帮助到我们来处理这些系统的复杂性,如何帮助到我们呢?首先,就是当你设计系统的时候,你不能拥有所有的工具来去处理到这个系统能遇到的各种各样的负面情况,所以,我们需要一个智能的控制器,有点像人类的思维在工作一样,我们人类有三种功能,一个是我们管理课题,就是我们的大脑说,我有一个欲望,我想要去体育场或者电影院,或者是参观,你需要有一个优化的程序,就是说,对外界的世界我要优化,做出决定,我想要去看足球,所以,我想要去体育场,我有了一个计划的功能,你学到了一些东西。要不然我去电影院吧,你又有新的收入,你要改变计划,这就是系统设计的一个例子。这里有一个问题,因为我已经设计了几个控制器,现在我要问的是,这个控制器不应该太贵,你现在有三个控制器,它的收益不能比你的计算的能量要小,也就是说,你不能靠更大的计算能量来完成这些控制的功能,作为结论来说,作为工程设计师,我们应该更加小心,以一个严谨的方式来建造系统,来做一个基于原件的系统建造。
还有一个可建造性,我们用这样一个架构,这样一个想法,就使得一些被证明是正确的理论和想法,这样就确保我现在做的事情是正确的,而不是说,我随便做一个东西去检验和确认,如果你用这个方法会浪费更多的钱,也会提升失败率。