计算创意学系列(完结篇):科学家阻止不了工程师们举起魔杖
2021年初开始的这个计算创意学系列,终于要在一年后的今天走到尾声。
这一年里,我们围绕着“计算机能否实现创造力(Creativity)”的问题展开了方方面面的讨论。我们发现,埋藏在这个问题下面的,还有许多更加基本的问题,都还没有公认的答案,包括什么是创造力、如何鉴别创造力、如何判定创造力的主体、如何在脱离人类主体的语境下定义创造力、如何定义机器和人类共同创作时的创造力等等等等。
我们关注了以上述这些问题为研究主题的新兴学术领域计算创意学(Computational Creativity),考察了这个领域的不少研究成果。虽然这个非常年轻的领域,现在还难以为我们的所有问题提供满意的答案,但至少我们应该对这个问题本身有了更加深入的理解。
我们首先注意到的是,有多种基于不同思考认知过程的结果,都被我们用创造力(Creativity)这一个概念来代表了。比如说,小A在已有的围棋规则下另辟蹊径、发现了一种没人想到的下棋策略而赢过了对手、小B改变了围棋的规则、发明出了一种全新的桌面棋类游戏、小C将传统的围棋用计算机程序来实现、并引入了流行的RPG游戏元素而发明了一种全新的电子游戏——这三种截然不同的思考过程都被认为表现出了创造力。
在第一章和第二章中,我们使用学者玛格丽特·博登(Margaret Ann Boden)的术语,分别将这三种创造力称为探索性创造力(Exploratory Creativity),转型性创造力(Transformational Creativity)和组合性创造力(Combinatorial Creativity),并深入刻画了这三种创造力在思考认知过程上的差别。这是现有的创造力理论对于人类创造力的产生机理的一个基本研究成果。
既然对人类创造力的产生机理有了一定程度的了解,一个自然的问题就是,在人类身上起作用的那些创造力过程,有没有可能也出现在机器上,让机器也具有创造力?
在第三章中,我们首次尝试回答这个问题。我们以解释组合性创造力的理论——概念整合理论为例,介绍了三种组合性创造力的计算性实现。最早的DIVAGO系统非常直接地将概念整合理论变成算法——算法中的元素可以比较明显地对应到概念整合理论中的元素。而到了后来出现的组合性创造力系统——比如我们在第三章中介绍的Metaphor Eyes和Deep Dream/Neural Style Transfer——这种对应关系渐渐变得不清楚了。运行这些算法的机器究竟是不是像人类那样在进行“组合性创造”,也成为越来越有争议的问题。
而这又带来另一个问题:机器有没有可能以跟人类完全不同的方式实现创造力?要回答这个问题,我们首先得重新审视创造力的定义,以一种跟实现原理和实现主体都完全无关的方式来定义创造力——这样我们才有办法评判一个机器是不是表现出了创造力。
在第四章中,我们考察了这样一个简单粗暴的定义:“创造力意味着产生出价值(Value)和新颖性(Novelty)”。我们进一步发现,即使是在计算机的语境下,我们也能够在一定程度上去评估产出的价值(Value)和新颖性(Novelty),甚至在一些具体的语境下“可计算地”去评估价值(Value)和新颖性(Novelty)。
但我们最后又发现,仅仅用价值(Value)和新颖性(Novelty)作为创造力的鉴别标准是不够的。创造的主体应该至少在某种程度上是“有意向性地(Intentionally)”在进行创造,它的创造应该是出于它自身的表达欲和审美价值观。
于是在第五章,我们讨论了一个声称是在“有意向性地”进行创造的算法——DARCI系统。DARCI系统能够接收一个名词所表达的概念作为输入,生成一副表达这个概念的新图片。跟其他只是单纯地模仿训练数据集的图像生成方法相比,DARCI系统的图像生成就有了一个显式的(Explicit)表达意图和创作目的,并且还能在一定程度上与人类用户沟通这个表达意图和创作目的,因此被认为在创造力系统中引入了意向性。
在第五章中,我们还讨论了人工智能学者Colton提出的创造力三脚架(The Creativity Tripod)理论。Colton提出了创造力系统应该具有的三大要素:技能(Skill),鉴赏力(Appreciation)和想象力(Imagination),将“如何算法性地实现创造力”这个问题归结为了“如何算法性地实现技能(Skill),鉴赏力(Appreciation)和想象力(Imagination)”的问题。
在这个讨论中我们认识到,创造力可能是一个能够拆解为多个元素的复杂概念。那么有没有可能,多个主体分别贡献了构成创造力的不同元素,并共同构成了一个创造力主体呢?如果可能的话,那么算法是不是也能够成为这多个主体中的一个呢?
在第六章中我们讨论了这些关于共同创造力(Co-creativity)的问题。我们分别从不同角度考察了三种共同创造力:单个创造力主体的创造能力扩展、多个创造力主体间的涌现式(Emergent)创造以及社会级别的共同创造。我们特别考察了人类与算法间的共同创造力(Human-Computer Co-creativity)。
计算机算法是否能实现创造力
那么,现在让我们再回到最初的问题:计算机算法是否能实现创造力?
这个系列的文章中,我们介绍了许多声称实现了创造力的计算机系统或者算法,包括:
能够将已有概念组合成为新概念的DIVAGO系统(第三章)
组合互联网上的信息生成比喻句的Metaphor Eyes(第三章)
基于深度神经网络的图像生成系统Deep Dream/Neural Style Transfer(第三章)
自动生成桌游的Ludi系统(第四章)
在现有菜谱的启发下生成新菜谱的Q-chef(第四章)
表现出了意向性和自主性的图像生成系统DARCI(第五章)
模拟社会共同创新的Digital Clockwork Muse算法(第六章)
这些系统/算法是否可以被认为实现了创造力呢?
答案是,它们实现了它们各自所定义的那种创造力。
这些系统/算法中,多数都是为了计算创意学的理论研究而研发的系统和算法。这些系统/算法本身就基于一种对创造力的理解。这些系统都是它们的设计者各自所理解的那种创造力的算法实现。
比如说,DIVAGO系统是对概念整合理论的一个直截了当的算法化,如果我们同意概念整合理论正确地解释了组合性创造力的本质,我们就应该认为DIVAGO系统实现了组合性创造力;Digital Clockwork Muse是对DIFI模型(领域-个体-圈子-交互模型)的直截了当的算法化,如果我们同意DIFI模型正确地解释了社会性共同创新的本质,我们就应该认为Digital Clockwork Muse是对社会性共同创新的算法实现。
而我们介绍的一些其他的系统,可能并不是某种创造力理论的直接的算法实现。拿组合性创造力的另外两个系统来举例:Deep Dream和Neural Style Transfer中并没有两个符号化的概念进行组合的直接对应物;Metaphor Eyes更进一步,甚至抛弃了一切概念语义层面上的操作。
这些系统如果声称自己实现了创造力,就会引发更多的争议,而这些争议实际上是对“什么是创造力”这个问题的争议。
在前面的这两个例子中,当我们将Deep Dream/Neural Style Transfer和Metaphor Eyes作为创造力系统来理解的时候,我们势必要对概念整合理论提出挑战。Deep Dream/Neural Style Transfer所提出的挑战是:整合对象的最小单位必须是一个具有完整意义的概念吗?概念的表示又必须是在离散化的符号空间吗?Metaphor Eyes所提出的挑战则是:对两个概念的语义上的组合操作,是否归根结底都能还原到语法上的组合操作?
因此我们看到,对创造力的理论研究能够推动人们去开发算法化的创造力系统,算法化的创造力系统又能够推动人们去重新思考和修正现有创造力理论。
在这个过程中,人类不断深化自己对“创造力”这个一开始非常模糊的概念的理解,顺便推动人工智能技术的边界。在我看来,这才是提出“机器是否能实现创造力”这个问题的意义。
当然,对于有的人来说,提出“机器是否能实现创造力”这个问题时,可能还是在寻求一个肯定性的或者否定性的答案。他们实际上想要的是一种情绪上的助燃剂。
如果我们说“机器最终一定能够实现人类级别的创造力”,我们可能是在迎合一种科技乐观主义情绪;如果我们说“机器无论如何都不可能实现人类级别的创造力”,我们可能是在迎合一种人类至上主义情绪。不论我们想要肯定性的还是否定性的答案,我们总能找到一种对创造力的定义方式,使得这个问题的答案是我们想要的答案。因此这个肯定性的或者否定性的答案,更多反映出的是情绪而不是事实。
而我希望在这个系列中呈现给大家的,是客观中立的讨论。因此我选择了原原本本地描述现有的技术能够做到什么程度,而不是陷入形而上学的讨论。我也不会对这个问题给出一个肯定性的或者否定性的答案。
构建创造力所使用的算法
我们在这个系列所介绍的计算机系统中,遗传算法(Genetic Algorithm)和深度神经网络(Deep Neural Network)是在不同系统中反复出现的算法框架。是什么特征使得这两个算法能够如此频繁地在创造力系统中找到应用?
遗传算法(Genetic Algorithm)是面对庞大搜索空间时的一种搜索策略,模仿达尔文进化论所描述的生物进化过程,将搜索空间中的每一个可能的解都看作是一个生物个体,各自有独一无二的基因型(Genotype),在其作用下演化出各种各样的表现型(Phenotype)。
遗传算法进而引入适应函数(Fitness Function)来模拟生物界的优胜劣汰——适应函数是以个体的表现型为自变量的函数,遗传算法会选择出那些表现型代入适应函数之后取值较高的解,对这些解进行某种形式的“融合”得到下一代的解(模拟生物交配),再用适应函数去评估这些下一代的解,如此重复一定迭代次数之后,将最新一代的解看作是目前计算资源下能找到的近似最优解。
遗传算法(Genetic Algorithm)流程图
遗传算法被应用在了DIVAGO系统、Ludi系统、Sentient Sketchbook和DARCI系统中。
在DIVAGO系统中,遗传算法被用来在大量可能的整合概念中找到最好的那一个。
在Ludi系统中,遗传算法被用来生成能够在“好玩程度”上达标的桌游规则。
在Sentient Sketchbook中,遗传算法被用来搜索满足游戏可玩性指标的游戏地图。
在DARCI系统中,遗传算法则是被用来生成能够使得图片符合给定情绪主题的图像滤镜。
遗传算法在创造力系统中的广泛应用是很容易理解的。遗传算法是面对庞大搜索空间时的一种搜索策略,而我们在第一章中就将创造力活动比喻为了在一个复杂而庞大的概念空间中进行探索。无论我们面对的是一个什么样的问题域(Domain),只要我们能够将这个问题可能的解所构成的搜索空间定义出来,理论上说,我们就可以考虑使用遗传算法来找到问题的解。
而只要一个算法在足够庞大和复杂的空间中搜索,就可能找到从来没被发现过的解——也就是得到有价值的新点子。
深度神经网络(Deep Neural Network)是实现机器学习的一种统计模型。大多数机器学习方法用一个数学统计模型去拟合给定的训练数据中的输入-输出关系。深度神经网络(Deep Neural Network)是一类由多层的“神经元”计算模块组成的复杂数学计算函数,包含了数量庞大的参数用于拟合训练数据。
与传统的机器学习不同,深度学习不仅要用统计模型去“学习”输入中的特征和输出中的特征之间的关系,还要“学习”这些特征本身。也就是说,深度学习的输入往往是原始对象的数据表示(比如一张图片,一段文字),一个深度神经网络要首先从原始对象中提取出对计算任务有用的特征,才能去完成计算任务。
能够自动发现特征,避免了手工去设计特征的编码表示,也正是深度学习优于传统的机器学习很重要的一点。深度神经网络本质上是一个对高维空间中的向量和矩阵进行运算的数学函数,因此它能够“学习”到的特征,也自然是表示为高维空间中的向量或矩阵。
各种形态的深度神经网络
深度神经网络被应用在了Deep Dream、Neural Style Transfer、Q-chef和DARCI系统中。
在Deep Dream中,深度神经网络被用来表示和提取图像上与每个图像类别相关的视觉特征。
在Neural Style Transfer(神经风格迁移器)中,深度神经网络被用来表示和提取图像上分别与图像的内容和风格相关的视觉特征。
在Q-chef中,神经网络则被用来为菜谱数据集建立概率统计模型,从而通过计算某一个食材组合在这个统计模型下的概率,能够反过来推算这个食材组合的新颖性。
在DARCI系统,神经网络被用来统计性地模拟人类在看到一幅图片时会产生的情绪感受。
深度神经网络为什么能够在创造力系统中得到广泛应用?
一个比较明显的原因是,许多创造力系统要解决的问题都不是传统的数理分析性问题,而是涉及到感知和审美的艺术问题,比如生成图像、音乐等。近十年来深度学习在感知问题上——比如计算机视觉——确实取得了用传统方法难以取得的成功。
而深度学习作为一种复杂的概率统计模型,也的确适合为诸如审美、新颖性等难以给出分析性定义且高度主观的概念建模。
但比起基于遗传算法的创造力系统,将一个基于深度学习的内容生成系统称为“具有创造力的”,往往更容易引起争议。
如果我使用大量名词和描绘这个名词的图片组成的训练数据集训练出了一个深度神经网络,能够输入名词(比如“猫”),就生成一幅描绘这个名词的图片(比如猫的图片)。这个神经网络具有创造力吗?
我想大多数人给出的答案会是否定的,因为这个神经网络不过是在模仿训练数据集中的图片。而如果用户输入了一个训练数据集里没有的名词,这个网络多半就不管用了。
但是,别忘了深度神经网络的精髓实际上是表征学习(Representation Learning)。
如果我现在在这个基本的网络中引入基于向量空间的语义模型(Word Embedding),先通过另一个神经网络将所有名词映射到一个高维连续空间,再用训练数据集中图片对应的名词在高维连续空间中的向量值与这些图片来训练深度神经网络。
这样这个神经网络就不仅仅是建立了只在训练数据集中出现的那几个零散的名词和对应图像之间的关系,而是建立了整个名词所组成的高维连续空间与图像特征所组成的另一个高维连续空间之间的对应关系。
也就是说,即使我输入了一个训练数据集中不存在的名词(比如“马鹰”),这个神经网络还是可以找到这个名词在语义高维空间中的位置,并进一步将它映射到图像特征高维空间,从而得到一个训练数据集中没有的图像(比如马的图像和鹰的图像的某种融合)。
这个神经网络具有创造力吗?答案就没有那么直接了。
在这个例子中,深度学习所起的作用,已经远远不仅限于用一个概率统计模型拟合训练数据集。
这个用来拟合的概率统计模型——也就是我所使用的特定深度神经网络——实际上建立起了一个搜索空间。这个搜索空间由模型本身有能力从训练数据集中提取到的图像特征的“模糊(fuzzy)”组合所构成,每一个组合对应一个可能的输出。
通过设计神经网络本身的架构,这个搜索空间可以非常庞大和复杂,并且很显然远远超出训练数据集中的那些图像。
表征学习的本质,就是将训练数据集中的数据分解成为更为基本的元素——“特征(feature)”,然后通过考察所有重组这些元素的可能性,形成庞大而复杂的搜索空间。至于如何分解、分解成哪些基本的元素、再如何重组,就取决于神经网络的架构以及训练过程的参数和随机性。
而通过将输入映射到这个庞大的搜索空间,深度学习相当于是事先为这个搜索空间绘制了地图。训练数据集中的那些输入-输出组合,成为这个地图上的地标,根据这些地标,深度学习再估计出那些没有被地标覆盖的位置的地形地貌。
因此当用户提供一个具体的输入时,一个训练好的深度深度网络能够立刻根据地图给出答案,而不需要现场进行探索。
由此我们看到,从理论上说,由于表征学习所建立起的搜索空间的庞大和复杂,这个过程也带来了“发现有价值的新点子”的可能性。
如果用概念空间探索这个比喻下的语言来说,深度学习对于构建创造力系统而言,是构建概念空间的有用工具。
这也是深度学习与遗传算法很不一样的地方。
在遗传算法中,概念空间是程序的设计者给定的——程序的设计者必须首先定义算法搜索的解的基因型(Genotype),这个基因型的定义就决定了遗传算法的搜索空间。比如,在战略游戏地图设计系统Sentient Sketchbook中,基因型被定义为一个N x N的网格上每一个格子的地形类别,那么遗传算法就只会在N x N个格子所有可能的地形类别组合中进行搜索,不可能超出这个范围。
而在深度学习中,程序设计者不会这样明确地定义解的范围。开发者只是将一堆训练数据丢给神经网络,神经网络再通过上面描述的过程,将训练数据集中的数据分解成为更为基本的元素(“特征”),再基于这些基本元素所有可能的模糊组合,隐含地(implicitly)定义解空间范围的概念。
人工创造力与复杂系统
很多人对于机器能够实现创造力的怀疑,源于这样一种认知:创造力要求产生出“全新”的东西来,而一个只能严格遵循人类设计好的程序运作的机器,怎么可能产生出新的东西来呢?
会这样的想的人,对计算机程序的认知可能还停留在非常传统的程序。传统的程序通常是为处理信息而存在——也就是说,程序要接受某些给定的信息作为输入,经过一系列的分析性计算,从这些给定的信息中推导出程序的输出。
在本系列文章的讨论中,我们看到许许多多的计算机程序,它们的目的不仅仅是分析性地处理信息,还包括创生出新的信息。一个能够创生出新的信息的计算机程序,我们就用拟人化的说法,将它称作是有自主想象力的。
怎样才算是创生出了“新”的信息?比较松散的要求是,程序的输出应该不能通过分析性的推导过程从输入中得到——也就是说,程序的输出是程序的用户不可能预测到的;更加严格的要求则是,程序的输出还应该不能通过分析性的推导过程从程序本身的描述中得到——也就是说,程序的输出是程序的设计者也不可能预测到的。
这就很容易让人想起复杂系统(Complex System)的概念。
复杂系统指的是这样一种由相互作用的单元组成的系统:尽管每个组成单元都遵循非常简单的规则行动,系统整体却由于这些组成单元的大规模相互作用而产生出了极其难以预测的复杂行为——我们称之为涌现行为(Emergent Behavior)。也就是说,系统整体的行为无法从系统本身的描述中预测到。
蚁群是自然界中复杂系统的例子。每一只蚂蚁都只是按照它们各自的基因、以近乎机械化的简单规则行动,但整个蚁群却共同形成了复杂的社会结构,甚至建造出像蚁窝这样极其精致有序的结构。没有任何一只蚂蚁的脑中能找到这个井然有序的社会结构或这个复杂而精致的蚁窝的蓝图——每一只单独的蚂蚁甚至都不知道自己是在为一个怎样庞大复杂的整体在工作。
而对人类来说,就算我们能够完全把握每一只单独的蚂蚁的行为规则,我们也很难预测出整个蚁群的生存形态。
白蚁巢
康威的生命游戏(Game of Life)可能是更加广为人知的复杂系统的例子。
生命游戏发生在一个方格棋盘上,每一个棋盘格子代表一个细胞,每一个细胞有生与死两种状态。每一个回合,游戏会根据前一回合各个细胞的状态决定这一回合各个细胞的状态。决定规则只有下面简单的四条:
- 如果前一回合该细胞为存活状态,且与它临接的细胞少于两个,则该回合该细胞变为死亡状态(模拟个体因为太孤单而死去)
- 如果前一回合该细胞为存活状态,且与它邻接的细胞多于三个,则该回合该细胞变为死亡状态(模拟个体因为资源匮乏而死去)
- 如果前一回合该细胞为存活状态,且与它邻接的细胞有两个或三个,则该回合该细胞保持存活状态
- 如果前一回合该细胞为死亡状态,且与它邻接的细胞有三个,则该回合该细胞变为存活状态(模拟个体的繁殖)
根据棋盘初始状态的不同,上述简单的四条规则演化出了大量复杂而有序的变化模式,棋盘上的那些细胞集体看起来仿佛是在进行具有某种意义的被设计好的活动。
康威的四条规则在某个初始状态下演化出来的一个高度对称的繁殖模式
而这些变化模式没有一个是被设计出来的。虽然四条演化规则本身简单,但它们在整个棋盘规模上大量相互作用所产生的复杂性,使得从棋盘的最初状态来预测最后会出现什么样的演化结果,几乎是不可能的事。
那些著名的变化模式,即使对于设计出了生命游戏的康威来说,也是全新的事物。
像这样的复杂性和不可预测性,在传统的计算机程序设计中,是人们要去尽量避免的。如果拿起一本软件工程教科书,就会发现上面列出的大量被认为“好”的程序开发实践,比如“高内聚、低耦合”的原则、各种设计模式(Design Pattern),全部都是为了降低软件系统的复杂性,让软件系统能够始终处于设计者的掌控之中,让软件系统的行为可预测,甚至还要能够严格地从数学上证明软件输出的正确性——而复杂性是达成所有这些目标的大敌。
而当我们设计一个人工创造力系统的时候,为了能够设计出一个可以产生“新事物”的系统,我们却开始有意识地去促成这种复杂性了。复杂性成为了实现我们所想要的功能的必需品。
在传统的旨在“处理信息”的程序中,程序设计者要严格控制住程序结果的可能性,让它精确地对应且仅对应于正确执行已知的方法所得到的结果。
而在我们所讨论的旨在“创生信息”的程序中,程序设计者却要尽可能扩大程序结果的可能性,来得到自己预料不到的结果。预测程序的输出成为不太可能的事情,甚至通过阅读代码来搞清一个程序是在做什么都会很困难,更别提严格地从数学上证明程序结果的正确性了。
当我们在计算机系统的设计上无可选择地要去拥抱复杂性的时候,我们也将不得不从“分析性的(Analytical)计算机科学”走向“经验性的(Empirical)计算机科学”。我们会开始像研究社会现象或者生态系统那样研究一个机器,而不是像研究某个数学公式那样研究一个机器。
这样的机器,是不是离我们心目中的“人工智能(Artificial Intelligence)”更进一步了呢?
但当人类自己都开始无法把控和理解这些机器的行为的时候,它们还能算是人类科学的产物吗?
将它们称作是“人工(Artificial)”的,是不是就有那么一点牵强了呢?
最后,让我用计算机科学家Paul R. Cohen在著作《人工智能的经验性方法(Empirical Methods for Artificial Intelligence)》序言中的一句话来为本系列作结:
Programs are not experiments, but rather, the laboratory in which experiments are conducted. Questions to nature are answered in the laboratory.
计算机程序不是实验本身,而是做实验的实验室。在这些实验室里得到回答的,是关于自然(Nature)的问题。
计算创意学这个系列的主要内容就到这里结束了。感谢读者们跟我一起走到这里。当然,这个领域的研究还在不断进行下去。今后如果了解到这个领域有意思的新成果,我会以这个系列的番外篇的形式继续分享给大家。
厌氧菌的故事工程学实验室