前言:
而今同学们对“算法的时间复杂性取决于什么”可能比较关切,大家都需要学习一些“算法的时间复杂性取决于什么”的相关文章。那么小编同时在网络上网罗了一些有关“算法的时间复杂性取决于什么””的相关资讯,希望各位老铁们能喜欢,我们一起来了解一下吧!撰文 | 王培(美国天普大学计算机与信息科学系)
在一个知识、资源相对充足的理想环境下圆满地解决问题不算有多大本事,承认在现实的约束下无法做到完美,但仍尽力而为,这才是智能的体现。
解决问题需要时间,而形势往往不容许仔细斟酌。可以说,所谓 “难题” 就是那些我们对其没有充分知识(“不知道”)和时间资源(“没想到”)的问题,而解决这些难题,正是体现智能的时候。基于这种认识,我才把 “智能” 定义为 “在知识和资源相对不足时的适应能力”(见《人工智能:何为“智”?》)。前面几篇文章主要讲在 “知识不足” 条件下的应对方案(如《你这是什么逻辑?》),本文主要分析 “时间资源不足”的情况。
对时间要求的不同应对
在历史上,对问题的解决过程研究最细的是数学家们,研究的结果有关于计算和算法的理论,这些理论后来成了计算机科学技术的理论基础。简而言之,人们将一个数学或计算问题的解法表示为一个确定、可行、有限的算法,而各式各样的程序可以看作是相应算法的具体实现。(《计算机能有创造性吗?》一文中对此有进一步介绍)
解法→算法→程序
当我们用计算机中的一个程序来解决一个实际问题时,所需要的时间一般来说是确定的。其长短取决于若干因素,包括计算机硬件设备的运行速度、具体问题实例的难度、算法的时间复杂性等等。在前两点不变的情况下,我们当然希望用最简捷的算法——这方面的研究成果目前主要是计算复杂性理论。
在具体应用中,即使是已知最快的算法,也可能还不够快。这里有几种情况,一种是问题本身有明确的时间要求。如果用计算机直接控制某个物理过程,比如自动驾驶汽车,每个计算任务的完成就绝不能超时。另一种情境没有严格时间限制,但任务的完成应该是越快越好,比如回答用户的查询。即使是那些看似没有时间要求的问题,实际上也不可能不考虑计算时间。以下围棋为例,如果时间完全不是问题,那就可以通过穷举所有可能性来找到最优步骤。实际上, “系统地考虑所有可能性,然后选取最好的结果” 甚至可以说是解决所有问题的万能方案,只是我们极少有时间这么做。
要解决时间不足的问题,一个天真的想法是完全依赖计算机运行速度的提高或系统结构的进化,比如采用大规模并行计算,甚至量子计算。尽管这些进展的确非常重要,但仍不可能完全满足对计算时间的要求。目前的硬件速度和几十年前已不可同日而语,但大量新需求的涌现还是轻而易举地消耗掉了这份红利。尽管量子计算会对某些计算问题(如因式分解)的速度产生革命性的影响,但目前尚无理由认为所有计算问题都可以用此法加速。和无止境的需求相比,机器总是不够快的。
解决这一问题,首先要转变观念。
对数学问题来说,正确性是首要条件,只有在解法正确的前提下,讨论解题时间才有意义。但在实际应用中,在很多情况下,最重要的是及时提供答案,即使答案的质量差些,也远比迟到的答案强,等情况完全确定再采取行动,甚至可能造成致命的后果。因此,为了降低时间开销,有时可以容许修改要求,比如说放宽答案的标准(接受近似解),缩小考虑的范围(忽略罕见情况)等等。
满足特定时间要求的计算系统称为 “实时系统”,其基本设计思路大略分为以下几类:
• 量体裁衣:根据给定时间要求为系统设计算法及软硬件配置,以保证按时解决问题。这适用于时间要求和工作环境不变的情况。
• 各取所需:事先准备一组算法,各有不同的时间要求和答案质量。当一个问题实际出现时,根据其容许的时间选取最好的解法。这适用于仅有若干种时间要求的情况。
• 当场定制:用一个 “元算法” ,为每个具体问题根据其时间要求规划出一个适当的算法。这适用于算法生成规则简单的情况。
• 按质论价:为一个问题提供一系列的解,耗时越长的质量越高。这适用于答案可以逐步优化的情况。
最后这个技术值得多说几句。这种解题方式叫 “随时算法”(anytime algorithm,也可以译成 “任意时间算法”)[1]。很多算法(比如说各种迭代逼近算法)都可以被改写成这种形式,只要始终保存已发现的诸答案中最好的那个,在收到(用户或另一个程序发出的)终止命令时先报告它然后停下来就行了。尽管设计和实现都不难,随时算法的理论意义却尚未得到充分的认识。虽然仍被称为 “算法”,但这种解题过程已经违反了经典算法概念中 “会在得到答案后自行终止运行” 的要求,所以不能再谈它需要多少时间得到答案,而是要谈给它多少时间得到答案。对这种过程而言,算法复杂性、可计算性等概念都不再有意义了。
思维中的经济学
对人的思维活动而言,时间约束是常态。和数学、计算机科学中的常规设定不同,我们面对的绝大多数问题都有或明或暗、或强或弱的时间要求,而一个迟到的答复质量再高也可能完全没有价值。我们一般是在答案的质量和及时性之间找平衡,有时间就细想,没时间就只能大概估计一下。“时间常常是不够用的”——这听上去像常识,但将其设定为前提条件以后,我们可以更自然地重新解释很多现象。
从知觉开始,心理学中的 “格式塔学派” (德语:Gestalttheorie,不是为格式修的塔)早就发现我们看到的东西是经过加工处理的,而非 “世界的原貌”。比如下图一般会被看成一个白色的三角形压在三个黑色的圆形之上,尽管这个三角形是“补完”出来的,而非完整的线条画出来的。有人会纠结于 “此三角形是真的存在还是幻觉” 这种问题,但换一个角度来说,也可以认为我们的知觉总是试图用已有 “心理词汇” 尽可能简单地描述当前的情形,以便加快处理过程。
另一个重要的心理机制是 “注意”。我在《人工智能怎么为自己设定目标?》中说过,真正的智能系统一定是同时有多个目标或任务的,它们在内容上可能互相冲突(鱼和熊掌不可兼得)。即便目标相容,它们也一定相互竞争,以获取更多的时间资源,而 “注意” 就是这种竞争的体现,即,系统要根据这些任务的相对急迫性分配处理时间。虽然这听上去没什么新鲜的,在日常生活中相关的误区却不少:
• 有人常常通过争辩 “甲比乙更重要” 把一个 “分配” 问题换成“选择” 问题。即使甲的确更重要,也绝不说明它应该得到所有资源,而乙该被置之不理。重复我在前文中说过的,“历史已经反复展示了不惜一切代价追求某目标所造成的灾难,不管这个目标本身多么有价值”。
• “注意某个事物” 就意味着在一定程度上忽视其它事物,因为注意力是有限的。这里的根本原因仍是时间不够,所以不可能什么都 “认真重视,作为头等大事来抓”。所有事 “都重视” 其实意味着 “都不太重视”。
总而言之, “注意” 是个程度问题,没有定量模型是很难说清的。不考虑时间有限所导致的注意力分配,会严重误判思维所具有的能力。
与此对应的是“遗忘”机制,其常常被视为“劣势”。在比较计算机和人脑时,“不会遗忘” 常常被列为机器的一大优势,但遗忘恰恰是在为已有知识和当前任务排出轻重缓急,虽然常常会出错。在现实的环境中,随时有大量信息涌入,问题解决有时间要求,一个智能系统要在这样的环境中工作,必须要有遗忘的功能。因为,时间有限,我们不能一视同仁地记住所有信息。就算记忆空间不是问题,查询时间也一定会成为瓶颈。遗忘是集中注意力的一个必要条件。
实际上,我自己常常用这些 “缺陷” 来判断一个人工智能系统的真实水平。不管一个系统解决问题的能力有多强,如果它只 “记” 不 “忘”,这就说明它没有管理自身资源的能力;如果它从不犯错,这就说明它没有探索未知的能力。这当然不是说系统应该随便乱删东西或胡说八道,而是说某类错误是智能的必然代价。我们一般都会同意某些过失是可以接受的,比如 “不知者不为过”, “忙中难免有失” 都是这个意思。这里的微妙之处在于,区分哪些错误是 “合理的”,而哪些不是。
情绪化反应和种种 “非理性行为” 也都和这一点有关(见《人工智能,让机器也会“感情用事”》)。在知识和资源不足的情况下,及时做出尽可能有根据的反应,实际上体现了一种高级的理性,而情感表达了对情景和对象的好恶,是一种重要的评价机制。传统的理性模型都是基于演绎逻辑或概率论的,其中不容许有 “不知道” 和 “没想到” 的可能性,也没有情感的存身之地。大家都知道,没人能一直遵循纯粹的理性来生活,不意味着人没进化好。人工智能领域的奠基人之一司马贺(Herbert Simon)就提出,人脑体现的实际上是一种 “有限理性” (Bounded rationality)。他指出,囿于人类的认知能力和可用资源,我们追求的一般不是 “最优解”,而是 “满意解”。他在1978年得的诺贝尔经济学奖也和这个观点有关。
一个更早的著名观点是马赫(Ernst Mach)的 “思维经济原则”,即,对于事实,科学理论应该用最少量的思维开销作出尽可能完善的陈述。曾经,这一观点被批判,因为它否定了科学概念和理论的客观性;但以当今的科学观来看,事情远没有这么简单。我在一篇关于元理论的文章[2]中提出,无论是在个体中评价概念和信念,还是在群体中评价理论体系,都应该考虑三个维度:(1)正确性(和已有证据的吻合程度),(2)指导性(对未来行为的限定程度),(3)简单性(描述的简略程度)。
这三个维度彼此独立。就是说,在某一方面得了高分,不意味在另一方面也必然如此。目前的问题是,很多人把第一点理解为 “和事实的吻合程度”,而对另两点认识不足,或者以为它们的价值最终还是要归结到正确性上来。在《证实、证伪、证明、证据:何以为“证”?》中,我说到了 “证据” 和 “事实” 的差别,以及波普尔(Karl Popper)证伪主义的实际意义在于强调了理论的指导意义,所以 “既要大胆又要谨慎” 之类的指示没什么价值,尽管说得好像不错。至于第三点,“奥卡姆剃刀”(Occam's Razor)、理论的 “美感” 之类的论述,都可以看成是在表述理论的简单性及其相关特征,但不该以“美的更可能是真的”作为理由。由于资源约束的存在,简单性本身就是价值,不用关联于正确性。
以上三者对适应性系统都同样重要。知识也好,理论也罢,只能用以往经验来辩护,所以要尽可能与证据一致;由于它们的终极功能是指导未来行为,所以要尽可能具体、明晰;因为大家时间都有限,所以要尽可能简单,否则不好用。当然,这些都是个程度问题,而不同知识和理论的比较往往还是可能的。比如说爱因斯坦的理论比牛顿的更精确,同时也更复杂。当三者不可兼得的时候,具体的取舍就要看当时的情景对各方面的要求或容忍程度了。无论如何,一个理论如果有任意一种得分太低,大概什么时候都不会有价值。
纳思中的时间管理
最后又要说到我设计的人工智能系统 “纳思” 了。由于其基本预设之一就是 “时间总是不够”,纳思和绝大多数计算机系统(包括其它人工智能系统和实时系统)都有着根本的区别。
每一个提交给纳思的任务都有一个 “紧迫性” 的初值,或者由用户指定,或者由系统根据其性质确定。这个值代表了任务间的相对迫切、重要程度。系统后面可以根据自身的经验和情况的变化对这个值进行调整。
对绝大多数任务而言,系统都没有一个固定的处理算法,而是通过推理,逐步使用现有的知识对其进行转换和简化,直至得到一个解。一般说来,使用的知识越多,解的质量也就越高。在时间不足的情况下,没有多少任务在处理过程中能够考虑到所有相关知识。系统的设计目标不是在某个任务上达到最高的质量,而是力图最大限度地完成全部现有任务。因此那些超出系统当前能力范围的任务往往会被放弃掉。
如果任务是一个待答复的问题,随着推理的深入,系统可能会得到多个答案,并向用户报告那个迄今为止质量最高的答案。和一般的计算机系统为每个问题提供一次答案不同,纳思既可能不提供答案(好比说 “对不起,我不知道”),也可能提供多次(好比说 “对不起,刚才那个答案有考虑不周之处,现在我认为……”)。后一种情形类似于前面提到的随时算法,只是纳思在任务层面不遵循事先确定的算法,而是 “具体问题具体分析” [3]。这和前面提到的其它基于算法的方案有根本差别,比如说,纳思的推理过程不是严格可重复的。
纳思的知识是组织在一个动态存储结构中的。除了任务有不同的紧迫度之外,知识也有不同的优先度,其中除了综合前面提到的正确性(真值)、指导性(实际使用历史)、简单性之外,还考虑了与当前情境的相关性。由于优先度高的知识会更容易被系统考虑到,优先度的衰减就表现为“相对遗忘”(多花些时间还能想起来),而删除低优先度的知识就对应于“绝对遗忘”(再也想不起来)了。
纳思背后的理论预设比司马贺的 “有限理性” 离传统模型更远,因为在这里,系统的知识和资源已经不仅是 “有限”,而是 “不足”了,因此常常连 “满意解“ 都不可得,而只能在找到的解中挑出相对而言最好的(或者说最不差的)。乍看起来,纳思的行为有太多负面特征(解题过程不确定,会忽略任务或遗忘知识,不保证答案质量等等),调试和评价也比传统软件更复杂,但这很可能是一个真正的智能系统所必须付出的代价。在一个知识、资源相对充足的理想环境下圆满地解决问题不算有多大本事,承认在现实的约束下无法做到完美,但仍尽力而为,这才是智能的体现。
参考文献
[1] Shlomo Zilberstein, “Using Anytime Algorithms in Intelligent Systems”, AI Magazine, Fall 1996, pages 73-83, 1996
[2] Pei Wang, “Theories of Artificial Intelligence: Meta-theoretical considerations”, In Theoretical Foundations of Artificial General Intelligence, pages 307-325, Atlantis Press, Paris, 2012
[3] Pei Wang, “Case-by-case problem solving”, Proceedings of the Second Conference on Artificial General Intelligence, pages 180-185, Arlington, Virginia, March 2009
注:本文所提到之作者其他文章,可进入“返朴”公众号底部菜单“精品专栏-AI那厮”查阅。点击,可查阅作者所有科普文章和科普视频。
特 别 提 示
1. 进入『返朴』微信公众号底部菜单“精品专栏“,可查阅不同主题系列科普文章。
2. 『返朴』开通了按月检索文章功能。关注公众号,回复四位数组成的年份+月份,如“1903”,可获取2019年3月的文章索引,以此类推。
版权说明:欢迎个人转发,任何形式的媒体或机构未经授权,不得转载和摘编。转载授权请在「返朴」微信公众号内联系后台。
标签: #算法的时间复杂性取决于什么 #算法的时间复杂性取决于什么因素