松耦合,语义界面,及人工智能
松耦合,语义界面,及人工智能
辉格
2022年6月13日
上周我就AI的当前状况做了点小思考,昨天又花了不少时间想这事情,发现许多曾经想过的点好像都串起来了,值得写一写。
让我绕远一点,从传统软件开发说起。
在遗留系统上工作过的人可能都有体会,当一个系统变得日益庞大复杂时,它会慢慢的绞成一团乱麻,添加新特性,修改旧特性,都变得越来越难以下手,因为很多地方都是牵一发而动全身,你改了这里,不知道哪里会冒出一堆bug。
因为意识到处处是地雷,新来的程序员轻易不敢动旧代码,每当要进行一项改动时,只敢小心翼翼的找到一处他认为最适宜的切入点,从那里开始插入他的新代码,结果就像在一个庞大身躯上又安装了一条新假肢,久而久之,这副躯体就变成了一头全身长满假肢的怪物,每条假肢上又接出若干条假肢,许多遥远假肢之间还常常连着一些电线,这些电线自然也是绞成一团……
这是一种非常自然的倾向,只要没有系统性的手段加以阻止,持续强力一种贯彻某种结构方案和设计原则,就必定会发生。
广而言之,任何紧耦合系统都是如此,这也是为何软件工程界如此强调松耦合,每个谈论这一话题的人都是三句不离解耦。
一个典型的紧耦合系统是生物的基因组,每个变异常会影响数千个性状,每个性状常受数千个基因的影响,真真是牵一发而动全身,也正因此,行为遗传学研究才如此困难,像亨廷顿舞蹈症这种单点突变性状太少了,不足以为该学科持续赢得声誉,大众更关心的那些性状,往往涉及上千基因,其中每个的贡献率都很低,需要使用高端统计工具才能从海量样本数据中捞出一点点线索,能捞出的往往也只是贡献率排名靠前的那几个因子。(参考Robert Plomin – Blueprint: How DNA Makes Us Who We Are)
基因组可能是迄今我们发现的耦合最紧的一套信息系统,绞的最乱的一团乱麻,原因当然是,它是盲眼钟表匠的作品,没有一位设计师来执行一套设计方案,贯彻一组设计原则,每项改动都是(掷飞镖+自然选择)的结果,毫无设计原则可言,而且它又那么古老,数十亿年来积累了无数补丁,不夸张的说,它就是一大包补丁组成的。
从任一时刻看,一套软件的开发似乎通常都有一位设计师在贯彻某种方案或原则,可是从长期看,设计师/程序员来来去去,换了一波又一波,其中大部分是庸人或懒人,不庸不懒的那些,也常常为了赶进度而将设计原则抛诸脑后,结果,在宏观效果上,其中每位的每项行动,最终也都不过是一支随机飞镖,测试、QA和客户则构成了他们的自然选择环境,最终系统还是会被绞乱,沦为一团乱麻。
依我看,任何紧耦合系统最终都会遭遇某种极限,在某个临界点之后,让系统在功能上变得更丰富更强大的任何努力都将是得不偿失的,系统仍然可能继续进化,但此后的进化会以一种(姑可称为)生态位漂移的方式进行,即,系统可能增加某些新特性,增强某些旧特性,但为此不得不牺牲另一些特性,在某处进行改进的同时,容忍另一些地方冒出一些难以修复的bug(因为其乱麻性质,避免或修复这些被新改动牵出的新问题成本太高了),有时候这些地方反正已经很少被用到了,所以也没人介意,久而久之,系统抛弃了某些特性,发展了另一些特性,从而适应了新的生态位。(可以想象,在很长时间内,那些被抛弃的特性的遗骸会像一条条阑尾那样继续挂在这副丑陋的庞大躯体上)
我想把紧耦合系统面临的这种发展极限称为科斯临界点,在他那篇经典论文《厂商的性质》中,科斯指出,企业与市场的边界所在,取决于组织成本与交易成本之间的权衡,企业将一些原本通过市场交易分工协调起来的生产活动纳入企业内部集中管理,避免了一些交易成本,同时带来了组织成本。
不妨(过度简化的)将企业视为紧耦合系统,市场则是松耦合系统,当你将越来越多活动纳入企业内,到某个临界点,新增组织成本将超出新减交易成本,此时继续扩大企业将是得不偿失的,这是因为(如上述),当企业这种紧耦合系统庞大且古老到一定程度,将不可避免的变成一团乱麻,任何功能新增都会变得非常困难而昂贵,这也是为何我们总是需要市场(的理由之一),我在《群居的艺术》里专门用一章(秩序的解耦#7:创造复杂性的新途径)讨论了这个问题。
(枝节:这里的企业=紧耦合/市场=松耦合的二分当然是过度简化的,实际上耦合度是一个连续谱,财务上独立的企业之间的耦合度未必很低,有些承包商与其顾客之间的耦合度和企业部门间相差无几,这也是产业聚集效应的根源所在,而同时员工与企业的耦合度也可以很低(温州有些企业里每台机床都有独立电表),张五常的论文《厂商的合约性质》是理解这一连续谱的好起点。)
用系统论术语说,从孤立生产者到市场分工合作体系的发展,是一种元系统跃迁(metasystem transition),而元系统跃迁是突破紧耦合系统发展极限的一条常见途径:当丰富壮大一个紧耦合系统的努力变得日益得不偿失时,出路不是继续改进既有系统,而是另起一个层次,将既有系统纳入一个多系统共生合作体系中,从而创造出一个具有更多层次的系统,而在该体系中,各成员系统之间是松耦合的(或者更准确的说,它们之间的耦合是足够松的)。
那么,在元系统跃迁过程中究竟发生了什么,是什么条件的存在或出现,让各成员系统之间能在松耦合条件下建立合作共生关系的?
如果你也是程序员,头脑里大概会很快冒出一个答案:关键条件是某种接口或曰界面(interface)的出现,界面的存在使得各成员之间能够发生交流和交易,同时又不必过度相互依赖与纠缠,在相当程度上能够继续各自发展自己的特性与功能,往往还能保持可替换性,即,一个成员常可以将某方面的既有合作者替换成另一个合作者,只要后者能对同一合作界面做出符合预期的响应,比如将电力供应商从一家更换成另一家,只要后者支持同样的接口标准(电压、频率、接线规范等)。
软件工程中,对付那些已经达到科斯临界点却又不愿丢弃的遗留系统时,一个常见办法就是为它创造出一套界面来,比如让它将某些数据输出到指定格式的文件中,或写入某个外部数据库里,或反过来,让它从此类来源读入数据,或将其中仍有价值的代码重新包装成支持新接口的库,或让它接受某种脚本命令并做出相应动作,甚至,可能的话,将整个系统包装成一个能对给定请求做出响应的服务,诸如此类,都是在创造界面,让它能与新体系中的其他成员展开合作,同时不必过度触碰既有代码。
其他领域的元系统跃迁也必定涉及界面的创造(或适当界面恰好已经存在),比如在真核革命中,新创生的真核细胞体系中,被捕获而最终成为线粒体的细胞与其他细胞内共生体的交互界面就是ATP,这是线粒体作为细胞电池为其他细胞活动提供能量的标准界面,所有从线粒体输出的能量都以ATP形式存在,而细胞内的所有能量用户都知道怎么利用ATP;类似的,当蚂蚁蜜蜂等昆虫发展出真社会巢群时,它们的交互界面是一组外激素信号。
那么,这一切和AI有什么关系呢?不急,我很快就会说到。
现在让我们来看神经系统。初级神经元网络是基因组之外的又一个紧耦合系统,一团乱的不能再乱的乱麻;你可以训练一个神经元网络学会某种技能,但你无法解释训练得到的结果,如果有人问你它是怎么成功执行某项功能的,你唯一能做的是把整个网络中的突触连接(及其强度)描绘一遍——它们是如此这般连接的,所以它做到了——这根本不是解释,一个解释的信息量必须小于它所解释的东西的信息量,否则就只是描绘。
这一乱麻特性使得你无法直接改动一个神经元网络令其符合你的某种意图,要让它表现的有所不同,你只能给它设定新的训练环境,施加不同的激励反馈,给它喂不同的数据,希望它能学出点新模样,但你不能直接干预训练结果,因为这些结果是难以名状的、无从理解的,你无法预料一处改动会导致何种行为改变,这一不可能性比改动乱麻遗留系统的不可能性要高出一万倍。
所以不难理解,这种神经元系统发展到一定程度,也会(和其他紧耦合系统一样)碰到科斯临界点,而突破这一局限的出路同样是创造出交互界面,虽然具体实现方式和其他领域十分不同。
高级动物的神经系统朝分层和模块化的方向发展,在一些高度专业化的皮层内,神经元被清晰严整的分入一个个层次,每个神经元的输入与输出范围都严格受限,而且扇入/扇出系数往往很小,通常都只接受来自前一层上紧邻少数几个神经元的输入,其输出也只投射到下一层的少数几个紧邻神经元。
比如在阅读过程中,从最简单的线条形状识别,到最终的字符和词汇识别,经历几个层次,其中每个神经元都只专注于一种形状,或一种线条组合,或一个独特字符,这些神经元的输出不会被随便越过几个层次或越出模块投射到其他遥远脑区,它们输出的信息在被其他脑区利用之前,通常要经过前额叶皮层中某些高级认知模块的中介,到达那里的信息已经是经过好几层加工的抽象表征,诸如“那里有朵红色的花”之类(参考:Stanislas Dehaene《脑的阅读》)。
(枝节:这种输入输出限制当然不是密不透风的,一个重要的例外是,知觉皮层的神经元会接受来自其服务对象前额叶的输入,这是一种非常关键的反馈机制,是高级认知中枢在告诉初级知觉皮层:你送来的信息是否足够有趣,就好比国家情报总监(DNI)在告诉其下属情报机构,对他们传来的某条情报有多感兴趣,这一反馈继而将影响后者的后续情报采集取向,比如,上级若对某类信息表现出高度兴趣,采集者可能会降低识别此类情形的阈值,导致更多假阳性,而在错失成本远高于误认成本的情况下,这可能是值得的。)
限制神经元投射范围,并且在进一步向其他脑区投射之前,把初级信号变成符号化的抽象表征,这一步极为关键,其实就是一种界面化,而这是大脑模块化,且模块之间实现松耦合的基础,来自各大感官的知觉系统与其他系统的交互只需通过高层符号界面进行,整个系统就不会纠缠为一团乱麻(虽然单一模块内仍然可以是一团乱麻)。
人类在认知系统界面化的方向上又跨出了一大步,人类不仅能产生符号化的知觉表征,还能对知觉行为本身进行表征,我不仅能认出一只兔子(一阶知觉),还会说(或在头脑中默想):“我看到了一只兔子”(二阶知觉),还会对自己的知觉结果提出疑问:“我好像看到了一只兔子,我会不会看错了?”——这是三阶知觉,因为我首先需要对我的二阶知觉本身形成知觉——“我觉得“我看到了一只兔子”,我的这一知觉是否正确?”,而这一二阶知觉的正确性又取决于一阶知觉“那里有一只兔子”的正确性)。
我还能对他人说出我的一阶知觉:“这是一只兔子”,从而在听者的头脑中产生二阶知觉“他看到了一只兔子”,对方可能会(如果他足够信任我)也可能不会(如果他不够信任我)将这一二阶认知转换为自己的一阶认知“那里有只兔子”。
二阶知觉能力让我们能够产生一种非常新颖高级的意识活动,动物或许也有意识(取决于定义),但它们显然没有我们这么高级的意识活动,比如斟酌与反思:“我上次在这个地方也见过一团白色东西跑过,当时我以为那是只兔子,后来的事情证明我弄错了,所以这次我得看仔细点,别再弄错了”,或“那好像只兔子,可是且慢,为何它的眼睛不是红色的?咦,它怎么发出了这种叫声?我可从来没听到兔子会叫”……
据Stanislas Dehaene的理论(见《脑与意识》),意识是一种由前额叶皮层激发的全脑激活状态,前额叶就像DNI,当它从各知觉系统收到某些类型的情报时,会将其向全脑广播,在数百毫秒中、在分布广泛的众多脑区触发一波高度活跃的神经活动,假如Dehaene是对的,那么丹内特的多重草稿模型中的每个意识瞬间,就是来自不同知觉模块的多重草稿中成功抢到麦克风的那个,经由全脑广播而触发的一轮脑活动,这些意识瞬间继而在记忆中被组织为一套连贯的自我中心叙事,后者构成了我们对世界的体验。
就本文主题而言,重要的是,这种二阶知觉表征是符号化的,或者说是语义化的,经过了好几层抽象,早已远离了各知觉模块的初级表征,比如,当我们阅读时,经由前额叶向全脑广播的信息中,不会包括那些有关笔画线条的表征信息,甚至不会是字符表征,而是一些词汇/短语或(可能更经常的)是与这些词汇/短语有关的概念表征(除非某一时刻前额叶不知何故突然将关注点转向笔画线条本身,这种关注转向当然也是由来自其他模块的某种信号所触发)。
这就意味着,各种高级意识活动之间的互动,是通过一种语义界面进行的,因而也是松耦合的,它们之间的互动关系既有合作,也有竞争(抢麦),这一情形很像国会中发生在议员之间的事情,他们或各自表达自己的看法,提出各自主张和立场,或针对其他议员的观点提出正面或反面的证据,或支持或反对的理由,他们相互争辩或支持,站队和拉帮结派……,最终,某种决议会从中产生,它就像动作信号输出到运动或内分泌中枢,变成行动。(我在《沐猿而冠》附录〈何为理性动物〉中详细展开了这个国会隐喻)
语义界面的存在使得高级意识功能在松耦合前提下实现模块化,其后果是,我们的各种认知技能与知识构件可以各自独立发展,并通过语义界面相互合作,如此一来,我们的理性能力和知识体系便有了一个极为广阔的积累性发展空间。
让我解释一下这是什么意思。
所谓理性,并不是一个单一算法,而是由众多独立平行构件(算法)组成,比如,我们或许有一个类似三段论推理机的模块,或许有一部贝叶斯推断机,或有一个数数模块,一个四则运算模块,还有许多危险探测装置(恐高,幽闭恐惧,密集恐惧,蛇形恐惧,是最基础的几种),以及机会探测装置(有人看见美女就两眼放光,有人则对赚钱机会有着敏锐嗅觉),这些探测装置并不试图对观察对象整体建模,而只对某些特征线索敏感,但它们都是我们理性的组成部分,这些模块既相互竞争,也会相互合作与强化。
设想我们的头脑就是一部正在被生活经历所训练的人工智能系统,它不是作为一个整体而囫囵学习的,各模块、各组件有着自己独立的学习进程,每个只专注输入信息中某个特定侧面或某些特征线索,每个也有着自己不同的模型骨架(比如这是部贝叶斯推断机,那是个加法装置,还有个是逻辑矛盾探测器……)。
这种模块专业化使得系统具有一种内在保守性,不会随训练数据的变化而过度摆动,因为每个模块的输入输出和反馈回路都被其“专业兴趣”局限住了,会自动忽略训练数据中的其他方面;这一点背后的原理是世界之可理解性假设:世界的某些局部与侧面一定比其整体更稳定、更一致、更少变,否则世界便是不可理解的;经验也告诉我们,专家与非专家的一个区别就是,前者的观点更少随近期事态变动而摇摆。
举个例子,虽然我不懂围棋,但我相信,假如我们修改围棋规则,把棋盘从19×19换成21×21,顶尖棋手们的专业经验可能很大部分报废了,但也会有很多仍然有用,可是对于一个只会囫囵学习的智能系统,其经验将完全报废,一切必须从头开始。
模块的内在保守性是可积累发展的前提,每个模块保持大致稳定,各自随训练继续而精炼(即框架稳定的同时在边际上改进),同时系统时不时添加一些新模块,令其认知能力随可用模块增长而不断升级增强,变得越来越全面、老练和精到。
再举个例子,某人若是对赚钱机会有着敏锐嗅觉,他有潜力成为一位好投资者,可是如果他懂一点基础会计知识,会一点财务精算,那就有望成为更好的投资者,如果他还受过一些风险控制训练,那就更好了,重要的是,机会嗅探,财务精算,风险控制,这三个模块最好是独立存在,这样的好处是:1)它们本身会更稳定持久,持续精炼,2)它们可以被分别传授和训练,因而在缺乏实景训练数据时也可能习得,3)它们可以实现跨系统分工与合作,比如人际分工。
让我一点点说。
假如风控模块不是独立的,而是以无从辨认的形态分散于系统各处,和其他东西纠缠在一起,它就无法稳定,在繁荣期的训练数据影响下,风控标准会迅速降低,因为更有纪律的风控倾向得不到多少正面反馈,反之,在萧条期,系统的风控倾向又会摆向另一个极端,这种大幅摇摆使得它无法实现可持续积累和精炼(现实中很多投资者头脑中的风控模块正是如此)。
(为了说明模块独立性为何会带来稳定持久性,我想再多说几句,一个输入输出和反馈回路被充分局限住的模块,常常能达到一种近乎于(但不完全是)自我激励的状态,它能为自己找事做,并从结果中得到满足,因而总是自得其乐的沉醉于其中,比如男人头脑里有一个腰臀曲线探测器,从实用功能上说,这是用来探测生育期女人的裸露躯体的,这个探测器可以在输入极为有限的情况下持续自我训练和激励并乐在其中,这也是某些色情图片如此有吸引力的缘故所在,尽管在现代传播条件下该模块的这种表现其实根本得不到任何现实回报,如果系统是囫囵学习的,没有模块独立性,当代男人对色情图片的兴趣早就丧失殆尽了,所以,如果你希望系统里有一个忠实勤勉持久敏锐的风控模块,它最好像男人的腰臀曲线探测器那么自主存在和自我激励,每一次都会为自己能察觉任何风险线索而兴奋不已。)
假如风控模块不是独立的,或者不是通过语义界面与其他模块交互的,它也无法在系统间被传授,传授的好处是可以免去实景训练的高昂成本,哪怕效果差一些(因为当经验通过语义界面传输时,难免会丢失一些信息,所谓默会知识,就是那些无法穿透语义界面的知识),往往也是值得的,如果你读几本书或听一席话就能学到一些基本的风险识别技能,哪怕只是一点点,得失比也比在市场浪涛中亲身获取这些教训高多了。
假如风控模块不是独立的,或者不是通过语义界面与其他模块交互的,它也无法在系统间实现分工合作,一位投资者就无法将风控事务委托给他人完成,与此类似的任何松耦合分工合作都不可能发生,虽然仍会有一些其他形式的合作,比如对默会知识的手把手传授,但这种合作注定只能以极小的规模发生,因为它是紧耦合的。
人类认知系统跨出的一大步,就是将语义界面向外开放了,并且通过人际协调博弈而形成共同接受的语义界面;自然语言的出现,使得语义界面不仅是系统内各模块间交互的界面,还成了系统间交互的界面,正是这一步促成了人类认知与知识系统的另一次元系统跃迁,它创造了大规模分工合作体系,大型复杂社会,以及文明。
依我的有限了解,当前深度学习派人工智能所走的路线,看起来和语义界面路线是背道而驰的,深度神经元网络(DNN)虽然是分层的,但每个层次的输出到底是什么,是说不清楚的,或者说,是没有语义化的,也正因此,这种系统的学习结果是无法被检查、解释和改动的,整个一黑箱,你没办法把它打开,看看其中那条逻辑不对劲,能不能改一改,不可能,天地一笼统。
(再多解释几句,语义化的意思是,至少在模块或层次间交互的那些地方,每个神经元的特定输入输出值,必须有稳定持久的含义,唯如此,其他模块/层次才能持久的知道该如何与它互动,如何利用它输出的值,在想给它施加某种影响或希望从它那里引出某种结果时,该如何给它喂输入值,这些不能说不清楚,哪怕你凭空发明一个概念也好,那也算说清楚了(正如许多知识领域在发展过程中都会发明新概念),因为凭空发明的新概念只有在初次使用时才是不清楚的,随着它被反复使用,意思就清楚起来了——输出者在什么情况下会输出它,输入者在输入它后会做点什么——此后,只要交互各方保持对该语义约定的大致遵守,语义便稳定了下来。)
而且,好像也没有什么机制让DNN能够自发形成自主独立持久的模块(这一点和上一点其实互为因果),它比完全不分层的囫囵联结主义当然好多了,但也只好那么多,所以我的感觉是,尽管它在一些领域取得了耀眼突破,但很快会碰上极限。
话说回来,语义界面也不是没有代价,界面就是一种契约,语义界面是基于一套概念框架的一组契约,不仅契约本身是一种束缚,概念框架在帮助我们认识世界的同时,也约束了我们的认知可能性,不妨称之为范式锁入,虽然一个足够灵活开放的系统会不时引入新概念和新模块(在很多情况下这是通过类比/隐喻从旧概念中衍生出来的),但至少在特定时期内,特定任务域中,这种约束会妨碍我们的认知潜力,让我们难以跳出框架思考。
所以,在某些情况下,不受概念框架约束的囫囵学习可能是有用的,它能帮助我们发现一些在现有概念框架中难以言喻名状的情况,或许是某种风险,或者某种机会,或某种门道机巧,说不清楚它是什么,但它确实在那里,或确实管用;然后,这种发现如果被证明足够有价值,可能继而在采用语义界面的系统中促发一轮观念更新运动,一套新的概念框架被创造出来,就像库恩式科学革命中的情形。
总之,深度学习派确实取得了不小成就,其应用潜力或许也不小,但无论如何,沿这条道路大概走不到类人智能的程度。