第6章 符号、逻辑与机器规划
假设你对机器人说:“把红色方块放到蓝色方块上面,但别动支撑着绿色金字塔的积木。”
对人来说,这句话短得近乎琐碎。我们会辨认物体,理解“上面”和“支撑”,知道移动底层积木可能让上方物体掉落,还会在动作前检查手是否空闲。对机器来说,每一处都需要回答:世界中有哪些对象?一句话里的“它”指什么?哪些关系此刻成立?一个动作会改变哪些关系,又有哪些关系保持不变?
搜索算法能在候选行动中选择,却不能自动知道候选从哪里来。要让机器推理和规划,研究者必须先把世界翻译成可操作的符号。
20 世纪中期最有影响力的一条 AI 路线相信:智能活动的关键部分,可以通过符号的建立、组合、检查和变换来实现。它取得过令人印象深刻的成果,也把一个根本困难推到台前:写进机器的世界,怎样才能既足够精确,又没有把真实世界删得只剩一间玩具房?
纽厄尔和西蒙后来把这一路线概括为物理符号系统假说(physical symbol system hypothesis):能够建立和变换符号结构的物理系统,被假设为一般智能行动的必要且充分条件。(Newell 和 Simon 1976年) 这里的“必要且充分”是研究主张,不是已经盖棺定论的事实;后来的连接主义、具身认知和统计学习会从不同方向挑战或改写它。
符号不是字形,而是可操作的指代
在程序里,A、红色方块 或一串内存地址都可以成为符号。重要的不是它长什么样,而是系统把它当作某个对象、类别或关系的代表,并能按规则操作它。
例如,一个积木世界可以用事实表示:
红色(积木A)
方块(积木A)
在上面(积木A, 积木B)
手空闲
再加入一条规则:
如果 在上面(x, y),那么 支撑(y, x)
机器看到的不是红色,也没有触摸到积木。它在数据结构中保存谓词、对象和参数。当某条规则的条件与已知事实匹配时,就产生新事实。
变量让一条规则不必为每块积木重复书写。要把 在上面(x, y) 与 在上面(积木A, 积木B) 对齐,系统寻找替换 \(x=积木A\)、\(y=积木B\)。这种使两个符号表达式一致的过程叫作合一(unification)。
符号表示的力量来自组合。少量对象、关系和通用规则,可以推出许多没有逐条存入的结论;表示的风险也来自组合。一旦某个词的含义、某条规则的适用条件或某个例外没有写对,推理引擎会忠实地放大错误。
核心机制
符号推理的数据流是:把观察或输入编码为事实,用匹配与合一找出可用规则,执行规则产生新事实,再用目标测试决定是否停止。推理的可靠性同时受规则形式和知识内容约束。
从事实出发,还是从问题倒推
规则系统有两种常见的控制方向。
前向链式推理(forward chaining)从现有事实出发,反复触发所有条件已经满足的规则。若系统知道“积木 A 在 B 上面”和“B 在桌上”,它可以逐步推出新的空间关系。前向方法适合持续接收数据、希望发现所有相关结论的场景,但也可能产生大量当前问题用不到的事实。
后向链式推理(backward chaining)从一个目标出发,寻找能推出它的规则,再把规则的条件变成子目标。例如要证明“B 支撑 A”,先找到结论为“支撑(y,x)”的规则,然后尝试证明“在上面(A,B)”。它把计算集中在当前查询,却可能在循环规则和大量替代项中反复尝试。
两种方向都需要一个冲突处理办法:当多条规则同时可用,先执行哪条?可以按规则优先级、事实新旧、条件具体程度或目标相关性排序。这里又出现了上一章的结构:逻辑规则规定什么推导合法,控制策略决定先花计算检查什么。
技术深潜:一轮规则系统实际做什么
把工作记忆中的事实集合写成 \(W\),规则写成“条件 \(C_i\) 满足时,执行动作或加入结论 \(E_i\)”。一轮前向推理大致包含:
- 匹配:为每条规则寻找变量替换,使 \(C_i\) 在 \(W\) 中成立;
- 冲突集合:收集所有当前可触发的规则实例;
- 选择:根据控制策略选一个或若干实例;
- 执行:把结论加入 \(W\),或修改外部环境;
- 停止检查:目标达到、没有规则可用或资源耗尽时结束。
困难常集中在第一步。若工作记忆有很多事实,一条包含多个条件的规则需要尝试大量组合。Rete 等匹配算法会缓存部分匹配结果,减少每轮从头比较的成本,但缓存也占内存,规则变化时还要维护网络。(Forgy 1982年)
更重要的是,推理引擎通常不负责判断输入事实是否真实。若知识库同时包含冲突信息,系统需要额外的一致性处理、优先级或来源追踪。形式上成功触发一条规则,只说明条件在当前表示中匹配,不说明现实中的结论必然正确。
General Problem Solver:把差距变成子问题
Logic Theorist 针对形式定理。纽厄尔、肖和西蒙随后试图提炼一种更通用的求解框架,称为 General Problem Solver,简称 GPS。(Newell 等 1959年)
GPS 的核心思想之一是手段目的分析(means-ends analysis)。系统先比较当前状态与目标状态,找到一个差异;再选择能够缩小这个差异的操作。如果该操作的前提尚未满足,就把“满足前提”设为新的子目标。
想象目标是“把 A 放到 B 上”:
- 当前差异:
在上面(A,B)尚不成立; - 可缩小差异的操作:
放置(A,B); - 操作前提:机器人正拿着 A,B 顶部空闲;
- 若没有拿着 A,就建立子目标
拿起(A); - 拿起 A 又要求 A 顶部没有其他物体,并且手空闲。
人解决问题时经常这样倒推。GPS 的意义在于,它把这种策略写成了可跨若干形式任务复用的控制框架。可是“General”容易使人误会。GPS 并不自行观察任意世界,也不会自动发明任务表示。每个问题仍需要合适的状态描述、差异、操作符和前提。通用的是求解组织方式,不是已经装入了世界上的全部知识。
规划:在行动以前搜索未来
推理的输出可以是一个结论,规划的输出则是一串行动。一个规划器(planner)需要预测:如果执行动作,世界状态会怎样变化?
在 1960 年代末,斯坦福研究所的 Shakey 机器人把感知、规划和移动结合起来。它所在的房间经过专门整理,包含可以识别的墙、门和箱子。与 Shakey 项目相关的 STRIPS 系统,给出了一种影响深远的动作表示。(Fikes 和 Nilsson 1971年)
一个简化的“拿起积木 A”动作可以写成:
动作:拿起(A)
前提:手空闲,A 顶部为空,A 在桌上
删除:手空闲,A 在桌上
添加:手持(A)
这里有三个关键部分:
- 前提条件(preconditions)说明动作何时允许;
- 删除效果说明动作后哪些事实不再成立;
- 添加效果说明哪些事实开始成立。
如果状态 \(S\) 是一组当前为真的命题,动作 \(a\) 的前提集合为 \(Pre(a)\),添加集合为 \(Add(a)\),删除集合为 \(Del(a)\),那么在 \(Pre(a)\subseteq S\) 时,状态转移可以写成:
\[ S' = \bigl(S \setminus Del(a)\bigr) \cup Add(a) \]
规划器从初始状态开始应用动作,或从目标反向寻找能建立目标的动作,最终得到一条使所有目标命题成立的序列。这个形式非常清楚:输入、输出和每一步变化都有明确边界。
它也隐含了强假设。状态被表示为离散事实;动作效果可预测;未被列入删除或添加集合的事实通常被视为保持不变;环境不会在计划过程中自行改变。对于整理过的房间,这些假设可能够用;对于雨天街道、拥挤厨房或多人协作,它们会迅速受到挑战。
什么不会改变:框架问题
假设机器人把杯子从桌上拿起。杯子的位置变了,但墙的颜色没有变,隔壁房间的灯没有因此熄灭,书架上的每本书也没有换位置。
若使用完整逻辑逐项描述动作后果,程序似乎必须同时声明无数“没有变化”的事实。若不声明,又怎样知道它们仍成立?这类困难被概括为框架问题(frame problem)。McCarthy 与 Hayes 在讨论行动和知识的形式化时系统提出了这一问题。(McCarthy 和 Hayes 1969年)
STRIPS 的删除列表提供了一种工程化近似:只列出会变假的事实,其余事实默认保持。然而,默认保持并非总是可靠。移动底层积木时,上方积木可能一起移动;打开冰箱门会改变能耗;把药物加入反应容器可能触发许多未显式写出的变化。
框架问题不只是“规则写得太多”。它揭示了建模中的选择:系统怎样区分相关变化与无关变化?怎样知道一个动作的间接后果?怎样在新情境中保留旧知识,又允许合理例外?后来不同的非单调逻辑、行动演算和概率模型会给出各自答案,但没有一种表示可以免费获得完整常识。
SHRDLU:一间小世界里的流畅对话
1970 年前后,Terry Winograd 开发了 SHRDLU。用户可以用英语与程序交流,让它回答问题、移动虚拟积木,并讨论刚才的动作。(Winograd 1972年)
一段典型互动会涉及“拿起一个大红方块”“找到比它高的物体”“刚才为什么移动那个金字塔”。系统需要分析句法,把名词短语对应到对象,查询积木世界中的关系,形成计划,执行动作,并保存部分对话上下文。
这在当时极具说服力。它不是只回答预先列出的固定句子,而是把语言、知识、推理、规划和行动接在了同一条数据流中。
但 SHRDLU 的成功与环境边界不可分割:
| 积木世界 | 开放现实世界 |
|---|---|
| 对象数量少、类型有限 | 对象和类别几乎无穷 |
| 关系由程序精确定义 | 词义依赖语境、文化和目的 |
| 动作效果离散且可预测 | 行动有噪声、失败和间接后果 |
| 用户话题围绕眼前积木 | 对话可能跳到任何背景知识 |
| 世界状态由程序完全掌握 | 观察不完整,信息可能过时或冲突 |
“程序能在积木世界中理解一句话”是可靠的观察;“它已经获得一般语言理解”则是更强的外推。SHRDLU 不是因为演示有边界就失去价值。相反,它的价值之一正是让研究者看见:当语言共享一个小而完整的世界模型时,许多难题可以协同解决;当边界打开,知识规模和歧义会成为新的主要矛盾。
组合增长再次出现
规划看起来比盲目搜索聪明,因为目标能够指导子目标,动作前提也能排除非法路线。但只要多个子目标相互影响,组合增长就会回来。
为了给 A 腾出位置而移动 B,可能破坏已经完成的“B 在 C 上”;两个动作分别可行,不代表交换顺序后仍可行;某个目标可以由十种动作实现,每种动作又需要多个前提。计划深度增加后,候选序列仍会指数增长。
表示还会改变增长速度。若把时间、资源、失败概率、并行动作和其他行动者都加入状态,模型更接近现实,却也更大。若删去这些因素,规划更快,却可能生成现实中无法执行的计划。
因此,符号规划器的性能不能与世界模型的丰富程度分开报告。一个系统在 100 个动作中迅速找到计划,不等于它能在真实环境中稳定工作;也可能是因为最困难的感知、常识和不确定性已由人提前排除。
符号路线真正留下了什么
符号 AI 有时被简化成一条已经失败的旧路线。这种说法既不准确,也妨碍理解今天的系统。
它留下了至少四项长期有效的工程思想:
第一,把知识与控制分开。同一推理引擎可以操作不同知识库,规则也可以在不重写底层程序的情况下修改。
第二,让中间状态可检查。事实、目标、规则匹配和计划步骤通常能够显示出来,便于解释系统为什么采取某个行动。
第三,明确前提与效果。规划器迫使设计者说明动作依赖什么、改变什么,这对安全检查和任务执行仍很重要。
第四,暴露表示的责任。系统输出并不只取决于推理过程,也取决于世界被怎样编码、哪些知识缺失以及哪些默认假设没有说出口。
今天的数据库查询、编译器、定理证明器、业务规则、知识图谱和机器人规划仍大量使用符号方法。大模型调用工具时,也常需要把意图转成结构化参数,并根据工具返回结果更新状态。符号与学习并不是只能二选一。
不过,在 1970 年代到 1980 年代,最醒目的产业路线不是让系统理解整个世界,而是把范围收窄到一个专业领域:化学分析、医学诊断、计算机配置。既然常识太广,能否先把专家的判断规则写进机器?下一章将看到,这一策略确实创造了价值,也产生了规模化维护的新瓶颈。
本章小结
- 符号表示把对象、属性和关系编码成可匹配、可组合、可变换的结构。
- 合一让含变量的规则适用于具体对象;前向和后向链式推理采用不同的数据流方向。
- GPS 用手段目的分析把目标差异转成操作和子目标,但通用控制框架不等于拥有通用世界知识。
- STRIPS 用前提、添加效果和删除效果表示动作,使规划成为明确的状态搜索。
- 框架问题追问怎样表示行动没有改变的事,以及如何处理间接后果和例外。
- SHRDLU 展示了语言、推理与行动可以在一个受控世界中协同工作,也显示了从小世界外推到开放语言的风险。
- 符号系统的推理质量受知识和表示约束;形式正确不能补回未编码的现实。
思考问题
- 为“做一顿晚饭”写状态和动作时,哪些常识最容易被遗漏?遗漏后会产生什么计划?
- 一个系统能逐步展示每条推理规则,是否就一定比无法展示规则的系统更可信?还需要检查什么?
- 如果扩大 SHRDLU 的物体数量,但仍不允许谈论积木世界之外的事情,这算不算更通用?
延伸阅读
- GPS 的早期报告适合观察手段目的分析如何被写成程序控制结构。(Newell 等 1959年)
- STRIPS 论文展示了动作表示、定理证明与机器人任务规划之间的连接。(Fikes 和 Nilsson 1971年)
- Winograd 的著作给出 SHRDLU 的语言分析、语义表示和对话机制;阅读时应同时记录系统环境的边界。(Winograd 1972年)
- McCarthy 与 Hayes 的文章难度较高,适合继续理解框架问题为何不仅是增加几条规则。(McCarthy 和 Hayes 1969年)