本文来自微信公众号:返朴(ID: fanpu2019),撰文:王培(美国天普大学计算机与信息科学系)
在和人工智能有关的讨论中常常可以听到这样的看法:“不管一个计算机系统表现得多聪明,它不可能像人这样有创造性,因为它的一切行动都是遵循既定程序的。”这种看法很自然,以至于很多研究人工智能的人都同意。在他们看来,只要他们的程序能解决实际问题就好,至于这些程序是否“像人那样有创造性”是个见仁见智的问题。而在另一方面,从图灵1950年的经典文章《计算机器与智能》开始,那些相信人工智能可能达到人类水平的研究者则试图从各种角度反驳上述看法。
这场争论之所以迟迟不能尘埃落定,原因之一就是大家对“创造性”有不同的理解。常见的分歧体现在下列问题上:
创造性是主要体现在艺术创造、科学发明等活动中,还是普遍存在于日常生活中?
一个主意要多“新”才算“创造”?把已有的材料修改或组合一下算吗?
如果我得到了一个新主意,但后来发现已有别人想出来过,我还能算有创造性吗?
如果我得到了一个新主意,但后来发现它是错误的,我还能算有创造性吗?
在这些问题上争论的双方各有依据。为避免在“创造性”的歧义上纠缠不清,下面我们先讨论这个问题的一个相对确切的版本:一个计算机系统能否解决一个它对其没有程序的问题?
根据经典的计算理论,一个“问题”是一个给定的输入输出关系。以“排序问题”为例,当输入是数列5、3、8时,输出应当是数列3、5、8,也就是说把输入中的数字按从小到大的次序排起来。对一个问题的“解决”体现为一个“算法”,即一个详细的工作流程。比如说“选择排序” 算法的基本流程是先创建一个空的输出序列,然后反复扫描输入序列,每次选出其中最小的数字并将其移至输出序列的末尾,这样当输入序列为空时输出序列就给出了最终结果。
一般而言,一个算法要满足下列基本要求:
1. 其中每个步骤都必须是系统知道怎么做的(如比较两个数字的大小、把一个数字从一处移往另一处等基本操作,或调用另一个已经存在的算法);
2. 从一个固定的起点开始,并在每个步骤结束后,明确指出下一个步骤;
3. 对每个可接受的输入,在有限步骤内结束并生成输出。
如果一个算法符合了一个问题的输入输出关系,则该算法解决了这个问题。一个问题可以有多个解(如排序问题就可以被多个算法解决),也有可能无解(即没有算法)。把一个算法用一个计算机所能执行的方式写出来就得到一个“程序”,而这一过程通常是由人(程序员)完成的。对一个传统的计算机系统而言,其解决问题的能力完全由其中的程序决定。如果没有人来干预,系统对一个问题的处理过程和结果是一直不变的。计算机的这种工作方式使得很多人认为“缺乏创造性”,因为他们觉得完全有理由说问题实际上是被程序员解决的,而计算机仅仅是机械地把这个解决过程忠实地重复于该问题的一个个具体实例之上而已。因为过程和结果是事先注定的,说这种机械重复有创造性似乎很牵强。
在这种情况下,为什么还有人认为计算机能有创造性呢?以往的辩护大致基于下列理由:
复杂:当一个程序非常复杂时,它对一个特定输入的处理往往是没人能够精确预测的,而其结果也可能是以前从来没有出现过的。
协作:对一个问题的处理可能是多个程序协作的结果,而不完全决定于某个程序,所以不能说这个问题是被某个程序员解决的。
随机:如果程序的流程依赖于随机因素(如掷骰子),其结果就不是可精确预测的。
数据:如果程序的流程依赖于系统中存储的数据,其结果就不是仅仅从输入中可以预测的。
学习:解决某些问题的程序不是人工编制的,而是系统自己从输入—输出样本中总结出来的。
尽管上述因素的确可以使得有关的计算机系统看上去更具创造性,它们仍然没有超出计算理论的“基于算法的解题过程”的框架。计算机系统对一个问题的解决是基于算法的,只要其输入输出关系符合该问题的规定,并且解题过程是可重复的,而并不要求这个算法被直接编制在一个程序里。
一个含有随机步骤的算法可以被看成在一组确定算法中选择的结果,而存储的数据通常可以被看作问题或算法的一部分。至于说目前的机器学习是“基于算法的”,这既是指其中的“学习”过程遵循一个事先给定的“学习算法”,也是指学习的结果体现为一个供将来使用的“解题算法”。以图像识别为例,研究者一般是把一批标注好内容(如“汽车”,“老虎”)的图片作为输入提供给一个学习算法,以提取各个标签所对应的图片特征。这个学习算法的输出对应于一个图像识别算法,给它一张图片作为输入,它就会输出一个标签以指出图片的内容。
上述各种算法都很有用,但恰恰是这种基于算法的解题过程给人以“刻板”、“循规蹈矩”的感觉。说人的创造性思维过程不是遵循算法的,这不仅仅是因为创造者自认为不循规蹈矩,而更是因为创造性思维过程一般不是严格可重复的,因此不对应于一个确定的输入输出关系。对同样的输入(问题、感知等),在不同的情景中人们常常生成不同的输出(答案、行动等)。
细分析起来,“解决一个问题”在计算理论中和在日常生活中的意思是不一样的。这主要体现在以下几点:
1. 在计算理论中,一个“问题”通常是一个“类型”,其中包含很多“实例”,而其“解决”必须是一个能处理所有这些实例的方法。比如说一个排序算法不能只会给5、3、8排序。在日常生活中,一个“问题”通常是一个“实例”,而其“解决”不必能推广到同类问题。如果你仅仅是需要给5、3、8排序,你无须考虑你的办法是否也适用于给4、3、2、1排序。
2. 在计算理论中,一个“问题”的定义限定了对每个输入,哪些输出是合理的,而这个输入输出关系是和解题系统的过去经历、当前处境、解题时间等因素无关的。在日常生活中,输出的属性常常要根据经历和处境而定。比如说“创造性”起码要求输出在过去没有出现过,而“灵活性”则要求输出因情景而变。此外,日常生活中的问题一般都是对解决时间有要求的, 而这种时间限制也随情景而变。
3. 在计算理论中,一个“解法”必须是确定的和可重复的。即使其中用随机数,其取值范围和分布函数也是事先给定的。在日常生活中,解决问题的过程常常是“相机行事”,“随机应变”,“灵机一动”的产物,而“契机”、“灵感”等说法无非是指这种过程的不可预知性和不可重复性。
这么说来,基于算法来解题对计算理论中的问题是必须的,而对日常生活中的问题不但不是必须的,有时甚至不是我们所希望的。
既然计算机的所有活动都是被程序控制的,那岂不是说其中所有解题过程都必须是基于算法的,因此就不可能有创造性或灵活性了吗?未必。这里的关键是认识到“有算法”和“有针对某个问题的算法”不是一回事,而“能解决某类的所有问题”和“能解决某个问题”也不是一回事。比如说某个系统可能有比较两数大小和交换两数位置的算法,但没有任何排序算法。在这种情况下,它仍可能发现将5、3、8中的前两个数交换位置就可以解决这个问题。这就是我们平常所谓的“具体情况具体分析”,即针对问题实例用有关知识在当前的约束条件下进行处理,以寻求一个恰当的答复。这个处理仍然可能是由一些算法(如比较、交换等)完成的,但它们都不是针对这个问题(如排序)的,而且即使同一个问题实例再次出现,系统的处理和答复也可能因时过境迁而不同。
参考资料[2]介绍了让计算机以“相机行事”方式解决问题的一个具体设计。和基于算法的工作方式一样,这种系统的基本操作集也是给定的,但在相机行事的工作方式下,这些操作并不被事先组织成针对实际问题的操作序列(即程序)并以此作为解决问题的唯一手段。相反,每个操作可以被独立选用和灵活组合。系统关于一个操作的知识主要体现为对其“前因后果”的描述,即在各种条件下该操作可导致何种效果。这类知识可以是事先由设计者或教育者提供的,也可以是系统从自身的经验中总结的。当接到一个问题时,系统会在时间允许的范围内通过对有关知识的推理来确定当前最适用的操作或操作序列,并在执行后根据实际效果修改有关知识。
在这里,经验的作用之一就是系统会把那些有用的操作序列在后来当做一个复合操作来用,而它们又可以组成更复杂的复合操作。当系统积累了足够多的经验之后,对于某些熟悉的问题可能直接用以往有效的复合操作来解决。但即使在这种情况下,问题和解法的对应关系也不是一成不变的,而是依赖于很多其它因素,如系统中当前的其它活跃任务等。对一个新颖(即设计者、教育者和系统自身都没有考虑过)的问题,系统可能要经历多次失败才能找到有效的解法,也可能一直找不到任何解法。无论如何,这些经历都会影响系统后来的问题解决策略。由于系统外部、内部环境均在不停变化,并且不会严格重复以前的情景,系统的每一次解题过程都和以前不完全一样,因而具有不同程度的创造性。
上述设计已经在计算机上初步实现了。和传统的计算系统不同,这样的系统的问题解决能力不是完全被其初始状态所决定的,而是同时取决于先天因素(初始设计)和后天因素(教育和经历)。和现有的机器学习系统不同,这种系统的学习过程和学习成果均不能用算法来描述,而是更类似于人的相机行事过程。这种系统仍然由大量算法构成,但这些算法都不是针对应用问题的,而是刻画基本操作、推理规则、资源分配策略等系统构件的。对应用问题的解法是这些算法以系统经验为原料创造出来的,并且这些解法不断地被修改和选择,因此不和问题组成固定搭配。对这种系统而言,“一切行动都由算法控制”和“解决某个问题的过程不遵循任何算法”的说法都是对的,不互相矛盾。
有人会坚持说 “这个系统归根结底是靠算法工作的,因此不能算有创造性”,但这种说法完全混淆了有关概念的不同使用方式。当我们比较人类智能和人工智能时,概念要在相同的方式下使用才有意义。我们说“人有创造性”,这是在“解决问题”的层面上谈的,否则岂不是可以说“人归根结底是被遗传基因编了程序的,因此不能算有创造性”。同理,不能说“这个系统还是靠算法解决问题的,只不过它的算法把系统历史和当前状况包括进输入之内了”,因为在这个意义下的算法已经不再是针对当前问题的了。
一个人工智能系统的创造力当然是有前提、有限度的,但这些前提和限度对人同样存在。具体来说,任何系统的创造力都受其先天因素和后天因素的制约,而再有创造性也不能无中生有。
类似地,创造性一定伴随着失败的可能性。保证结果正确性的“创造性思维”是不存在的。计算机可以像人这样有创造性,尽管由于经历上的根本差别,计算机创造出来的结果和人创造出来的结果可能有很大不同。计算机不可能创作出《红楼梦》,但这不是因为它思维能力上的局限性,而是因为它经历上的局限性。
当一个系统以相机行事的方式来解决问题时,传统的基于算法的分析方式不再适用。由于解题方法随情况而变,谈论问题的“可计算性”和解法的“计算复杂性”不再有意义。要刻画直观意义下的“可解问题与不可解问题”和“简单问题与复杂问题”的区别,我们需要一个新的理论框架来把系统的知识和资源约束引入分析之中。
“循规蹈矩”和“相机行事”(或者叫“照既定方针办”和“摸着石头过河”)是用计算机解决问题时的两种可能的工作方式,有各自的适用范围。前者适用于系统有相对充足的知识和资源的情况(系统有针对该问题的算法,且能满足该算法的时间空间要求);后者适用于系统没有相对充足的知识和资源的情况(系统没有针对该问题的算法,或不能满足现有算法的时间空间要求)。请注意后者并不比前者“好”。当两者都能用的时候,实际是前者更好(可靠,高效),而后者是在前者无法使用时才应被采用的。在《人工智能:何为“智”?》一文中,我把上述差别作为计算机科学和人工智能的分界线。根据这种观点,“智能”是“没有(相对于给定问题的和可靠的)办法时的(通用的和尝试性的)办法”。
当前的主流人工智能研究,包括机器学习研究,仍然自缚于传统的计算理论。这个理论框架尽管有极大价值,但仍严重制约了研究人员的想象力和探索范围,以至于没能真正触及智能的很多根本性特征,比如创造性。
以目前最热的“基于大数据的深度学习”为例。这个技术固然有巨大的应用前景,但其基本思路是依照对过去情况的统计结论解决当前的问题。这种策略针对常规问题(比如说照片分类)是有效的,但我们需要创造性的时候往往是统计结论不可得(数据不足或时间不允许)或不可用(遇到特殊情况)的时候。“深度学习”虽然有“深”之名(指其多层网络结构),对问题的概念分析其实非常“浅”,基本上囿于输入输出关系,而网络中间结点一般不对应于有意义的概念。
当我们处理视觉信息时,大脑所做的远不止给图像贴“正确”的标签,而是对其进行依赖于“此时此地”的概念分析,因此常常从同一张照片中得到不同的结论。基于大数据的深度学习难以解决人工智能的基本问题,其主要原因之一是没有这种随机应变的能力,而这里的“随机”与统计学里这个词的意思可是完全不一样的。
参考资料:
[1] Margaret A. Boden, The Creative Mind: Myths and Mechanisms (2nd Edition), Routledge, 2003.
[2] Pei Wang, Solving a problem with or without a program, Journal of Artificial General Intelligence, 3(3):43-73, 2013.
《返朴》,致力好科普。国际著名物理学家文小刚与生物学家颜宁联袂担任总编,与几十位学者组成的编委会一起,与你共同求索。关注《返朴》(微信号:fanpu2019)参与更多讨论。二次转载或合作请联系fanpu2019@outlook.com。