第08章

第八章 文字、符号与算法:思考如何获得可继承的形式

一 把事情写下来,不只是为了以后记得

设想一位研究者准备比较十二份实验记录。如果所有记录只能被逐一听取,她必须在后来信息到来时保留先前信息,并不断重新排列它们之间的关系。现在,把记录写在纸上,按照条件而不是时间次序排开。原来需要在记忆中维持的某些差异,开始以位置、栏目和空白的形式显露。纸张没有替她生成结论,却改变了结论能够怎样发生。

这里发生的,并不是把已经完成的内部思想简单输出。她可能在排列之后才发现,一个被认为相同的条件其实采用了两种单位;也可能直到把失败记录放到一起,才看见它们共同缺少某项准备。记录既保存了过去,也参与了新的辨认。把书写仅仅当作记忆的延长,会漏掉这种改变问题结构的作用。

因此,外部化至少有两种不同意义。一种是把已经知道的东西放到外面,方便再次取回;另一种是通过放到外面,使原来尚未形成的认识关系成为可能。二者常常交织。一个表格可以先为存档而建,后来成为发现异常的工具;一份本来只供自己阅读的草稿,也可能在与他人交换时暴露原先没有注意到的前提。

这并不意味着记录越多,思考越充分。若十二份记录被存入一个无法检索、没有条件说明的文件夹,保存动作可能已经完成,认知条件却没有改善。甚至,堆积会使错误更难发现。封装的价值不由外部材料的体积直接决定,而取决于材料是否以某种可调用、可比较、可修正的方式进入活动。

可以进一步区分三种保存。保存一个结论,留下的是曾经得到什么;保存一个过程,留下的是怎样从某些条件到达结论;保存一种可继续运行的组织,留下的则是后来者怎样在新条件下继续产生、检查或修改结论。第三种保存并不必然比前两种适合所有任务,但它最清楚地表现出能力封装与成品收藏的区别。

以一份研究笔记为例,仅写“这个办法不行”,主要保存了态度;写出在哪些输入上失败,开始保存边界;保留能够重现失败的最小案例和必要设置,才可能使失败成为下一次探索的条件。这里增加的不是装饰性说明,而是后来者重新进入活动的路径。一个被适当组织的失败,可能比十份无法定位原因的成功截图更有继承价值。

记录还改变了人与过去自己的关系。昨日的研究者可能笃信某个假设,今日的研究者则有了反例。若只有当前记忆,过去的想法容易被现在的理解重新解释。保留关键版本,使两个时间中的主体能够相遇,比较的就不只是不同答案,而是自己曾经怎样组织问题。这样的外部条件能够支持自我修正,却不要求把全部心理活动都变成监控数据。

文字的发生史十分复杂,本章不凭一个思想实验重述全部文字文明。我们要辨认的是一种可以具体分析的活动机制:当表达获得稳定形式,人与材料的相遇不再局限于一次即时接触。它可以被延迟、重复、重新排序,也可以由其他人从不同的问题出发重新进入。可继承性由此不只是传递已经完成的意思,还包括给尚未发生的解释留下条件。

人工智能进入书写时,也应当从这个机制判断。自动形成摘要可能帮助研究者获得入口,也可能删去最有价值的例外;自动建立分类可能揭示联系,也可能把不符合既定类别的材料挤到边缘。不能只问生成的文字是否通顺,还要问生成形式改变了哪些可见差异,以及后来者能否返回被压缩的来源。

由此,本书提出一个适用于记录型封装的要求:不仅保存可读的结论,还要保留与目标相称的返回路径。返回并非每次都要走完,而是当新的问题出现时,使用者能够找到相应条件、依据与版本。没有返回路径的简洁,可能只是把认识成本推给未来;有返回路径的简洁,才可能使过去成为新的起点。

二 符号不是缩短句子,而是重新安排可操作的差异

如果把“一个数与另一个数相加”写成两个符号之间的加号,字数确实减少了。但符号的重要作用并不止于节省纸张。它使某些位置可以保持不变,另一些位置可以替换;使两种表达是否具有同样结构,能够以较少的转换被辨认。注意力不必每次沿着长句重新走过,而能够集中到发生变化的部分。

例如,面对a(b+c)=ab+ac,学习者可以把a、b、c替换为不同数,也可以把整个括号当成一个单元。若只记住一条口头规则,这些替换仍可能需要逐句展开;有了合适的符号组织,分配关系能够在不同对象之间被追踪。当然,符号并不保证规则适用于任何新对象。进入矩阵或其他运算结构时,仍须检查哪些性质保留,哪些不再成立。

这里的关键,是稳定与开放同时存在。符号需要足够稳定,才允许不同人围绕同一表达工作;又需要具有可替换位置,才允许新对象进入。完全没有约定的记号难以传递,只有固定答案而没有可变关系的记号则难以生成。能力封装因此并非把一切凝固,而是把某些结构固定下来,让新的变化能够在其中展开。

怀特海在讨论数学符号时,强调简洁表示能让某些推理转换近乎凭视觉完成,并将有限的集中思考留给关键处。[3,第45—46页] 这一论述为我们提供的不是取消数学意义的许可,而是一项认识:好的表示能够使某些活动不必每次重新占用同等注意。下面的分析沿这一问题展开,不把他的全部哲学解释直接等同于本书的封装理论。

假设两种表示具有相同的逻辑内容,其中一种使共同因子容易辨认,另一种需要经过十余次改写才能看见。它们在形式意义上可能等价,在实际研究中却未必具有相同的可用性。一个研究者采用更合适的表示,不只是“少想了几步”,而是使某种原来难以维持的探索得以继续。表示的改变能够改变认知可达域。

这也说明,理解不能仅由解释字数衡量。用一段冗长语言重新展开符号,可能是教学中的必要动作,也可能只是把已稳定的结构重新变得难以使用。关键在于展开之后,学习者是否能够辨认原来没有辨认的关系。若展开只增加负担而没有增加相关认识,就不能因其更费力而把它视为更深理解。

反过来,过度压缩也会损害理解。一个符号同时被用来表示对象、对象的编号和关于对象的估计值,可能使推导表面顺畅,却在不同层级间悄悄滑动。符号封装必须保留足够的类型和条件区别。真正值得追求的,不是最短表达,而是在目标活动中既便于调用,又不隐藏关键差异的表达。

让小林回到她的网络问题。她最初把每个人给出的数值逐行抄写,后来把同时变化的一组数写成向量,把相互影响的权重写成矩阵。这样做并没有证明网络最终会达成一致,但它使“更新规则”成为一个可以单独比较的对象。她能够保持同一初始状态,替换不同矩阵,也能够保持矩阵不变,改变初始状态。问题不再被混在一串故事里。

当输入、规则和输出被区分,错误也能获得不同位置。是记录的数值有误,是规则不满足要求,还是关于长期结果的推断过强?这种位置分化,就是表示带来的实际能力。研究者可以把部分矩阵运算交给工具,而把精力用于比较规则的结构;也可以在工具出现异常时返回运算层,检查究竟发生了什么。

因此,符号并不是替人思考之后留下的空壳。合适的符号安排能够参与思考的形成。但它也不拥有永远正确的特权。一个新问题可能要求改换对象,原来便利的表示便成为限制。成熟的使用者既能够继承符号带来的便利,也能够在必要时质疑符号划定的对象边界,而不是把熟悉的写法当作世界本来的分类。

三 算法把探索变成可重复过程,但不替任何输入担保

从符号走向算法,封装又获得一种不同形式。符号提供可操作的表示,算法则规定在某些条件下怎样逐步处理。它使一类任务不必每次重新探索全部路线。不过,重复运行的能力与任意问题都适合这条路线,完全不是同一件事。算法越容易调用,输入条件与目标含义越需要被明确安置。

考虑求两个正整数的最大公约数。令较大的数a除以较小的数b,得到a=qb+r,其中余数满足零不大于r且r小于b。如果一个数同时整除a与b,它也整除r;如果同时整除b与r,它也整除a。因此,a与b的公约数集合,与b及r的公约数集合相同。把原问题替换为后一问题,并没有改变所求对象。

继续这样的替换,非零余数严格减小,所以过程不能无限保持正余数。最终某次余数为零,前一个非零数就是所求最大公约数。例如,八十四与三十先变成三十与二十四,再变成二十四与六,最后变成六与零,答案为六。这里展示的是通行算法的基本理由,不声称本书发明了这套方法。

在这个例子中,可以清楚看见三种依据。公约数集合保持不变,说明替换没有偷偷改变问题;余数严格下降,说明过程会结束;结束时的形式,说明输出确实对应目标。仅仅重复得到若干正确答案,并不自动提供这三项一般理由。测试可以发现错误,却不能以有限样本替代已经能够给出的数学论证。

一旦这些理由和适用范围得到可靠保存,后来者就不必每次重新发明求解路线。他可以调用算法,比较大量整数结构,或者把最大公约数作为更大构造的一个环节。如果资格制度要求每次调用都先重新讲述整套发现史,它就把继承变成了新的障碍;如果调用者把任意小数或缺失输入都交进去,却不检查任务定义,也没有真正利用可靠封装。

算法还可以被实现为程序。此时,数学过程正确,并不直接保证具体代码实现正确。整数类型、边界处理、输入读取和版本修改都可能引入问题。这些问题需要在相应层级处理。不能因为数学证明成立,就宣布所有软件运行都可靠;也不能因为某个程序可能有错误,就要求所有用户永久回到手工计算。恰当的回应是分层建立依据。

这种分层也解释了执行与理解之间的多样关系。编写算法的人需要面对内部过程;维护程序的人需要面对实现条件;把算法用于另一问题的人需要把握输入、输出及其数学意义。一位研究者可以兼任多个角色,但没有逻辑理由要求每位使用者始终兼任所有角色。不同任务之间的联系应当可检查,而不是被口号式的全能要求取代。

更复杂的生成系统,不能仅凭外观相似被当作确定算法的成熟版本。它可能给出不同候选,需要后续检验;也可能改变表述甚至任务本身。我们应当把候选生成、条件检查、结果验证和研究解释分开组织。某个生成环节尚未获得严格保证,并不意味着全部过程都无法形成可靠性;但它要求我们清楚指出,保证到底来自哪里。

用这个标准看人工智能写证明,问题便不在于机器是否“像人一样想过”。只要需要认证的是数学结论,就应检查证明对象及其假设;需要认证的是学习者能力,就应观察他在相应活动中的实际变化;需要认证贡献来源,则应追踪关键构造的发生。一个算法或模型的成功,不能把三种不同认证合并成一种。

算法封装最值得继承的,是一个可以运行和追问的关系,而不只是一个神秘按钮。对多数调用,按钮可以足够简洁;对边界冲突,应当能够获得适当解释和复核;对新的研究,需要允许内部方法重新成为对象。封装成熟之后,公开细节不必意味着人人每次读完,简化使用也不必意味着永远无人打开。

四 可继承形式必须留下重新发生的余地

到这里,我们已经看到记录、符号和算法的不同作用。记录使活动跨越时间继续相遇,符号使某些差异获得稳定而灵活的表示,算法使一类求解过程获得可重复组织。三者可以彼此嵌套:算法被写成符号,运行结果进入记录,新的记录又促使算法修改。文明继承并不是把一种形式装进仓库,而是维持这种再进入的可能。

这也要求我们重新认识动作与思考的关系。基尔什和马廖研究俄罗斯方块时,区分了直接推进游戏目标的动作与帮助发现难以在头脑中计算的信息的动作。一些旋转或移动的意义,在于改变参与者可以看见的关系,而不只是执行已经决定的计划。[23] 本书不从这一具体任务推出全部认知规律,但它说明外部活动能够参与认识形成。

回到研究笔记,重新排列卡片、改换变量名称、把一段论证拆成两个引理,都可能具有类似的认识作用。它们在成品指标上似乎没有前进,甚至像是在绕远路,却可能使原来隐藏的矛盾出现。评价若只计算最后留下多少文字,就可能把重要的认识活动当作无产出;若只允许内部默想,又可能把帮助认识发生的外部动作误判为依赖。

因此,继承不应只保留最平滑的完成稿。对某些研究任务,关键例外、被排除的方法、版本间的条件变化,同样值得成为可调用材料。它们不是要求后来者重复所有失败,而是使后来者知道哪些地方曾经需要停下。经过适当组织的失败信息,能够帮助新活动避免在同一问题上无知地重新开始。

但这也不是要求把全部历史永久暴露。记录具有成本,参与者也需要未被评价的探索空间。一个合理平台可以保留关键转折和必要依据,而不收集与任务无关的私密过程。研究的可追溯性与人的全面可监控性没有必然联系。前者帮助认识与贡献成立,后者可能让活动围绕可展示性变形。

可继承形式还需要版本意识。一项定义修改之后,旧记录中的同一个词未必保留原义;算法改变输入处理之后,过去的测试结果未必支持现在的实现。如果平台只保留最新成品,后来的研究者可能无法理解前后结果为什么不同。版本不是行政附件,而是说明一个可调用能力在何种条件下成立的时间结构。

继承同样不能只发生在单个平台内部。假如离开一个账户,研究者便失去全部问题记录、定义关系和检验材料,过去的活动虽然曾经高效,却很难成为他持续发展的条件。这里的可迁移性不是要求所有工具完全相同,而是使重要成果能够以可理解的形式离开原容器,并在新的组织中重新接续。

这会改变我们对“个人知识”的看法。个人知识不只是脑内记住的句子,也不是硬盘上所有文件的总和。它应当在个人实际能够重新进入、调用、修正和继续生长的关系中辨认。一份永远找不到或无法解释的材料,不会因为被保存在个人目录里,就自动成为个人可用的认识条件。

对教育而言,最重要的不是让学生在内部拥有文明的全部形式,而是帮助他们获得进入这些形式的能力,并逐步参与形式的修改。学习如何提出一个可以检验的问题、如何标明条件、如何比较两种表示、如何保存一次关键修正,都可能成为新的基础。这些能力不应以是否完全模仿过去的学习道路来判断,而应看它们能否支持后续发生。

文字保存了可返回的记录,符号组织了可操作的差异,算法使一类处理成为可以继承的路线。三者没有取消思考,而是改变了思考能够从哪里开始。它们也没有为一切AI输出预付可信度;新系统仍须说明自己的条件与依据。这样的比较把争论从一段想象历史中解放出来:研究从来不必以个人重演全部过去为唯一入口,数学中的定义、定理和共同检验将进一步显露这一点。