CS50ai-Knowledge
总结
# 知识表示与逻辑推理 |
Knowledge
本节探讨如何在人工智能中表现知识并对现有知识进行推理得出结论。
Knowledge-Based Agents
Sentence
句子是 AI 存储知识并用它来推断新信息的方式,是一种用知识表示语言对世界的断言。
Propositional Logic
命题逻辑基于命题,即关于世界的陈述,可以是真或者假。
Propositional Symbols
命题符号,一般使用 (P、Q、R)
。
Logical Connectives
逻辑连接词,用于连接命题符号的逻辑符号。
- Not (¬) :用于反转命题的真值。
- **And (∧)**:连接两个不同的命题,仅当 P 和 Q 都为真时,命题 P∧Q 才为真,表示且。
- **Or (∨)**:连接两个不同的命题,只要其中一个参数为真就为真,表示或。
有两种类型的或,包含或(Inclusive Or)和排他或(Exclusive Or)。排他或也就是异或(XOR,用符号 ⊕ 表示),两者都为真,结果为假。
- **Implication(→)**:如果 P 则 Q,P 被称为前件(Antecedent),Q 被称为后件(consequent)。
- 如果 P 为真,Q 为真,则结果为真;Q 为假,则结果为假。
- 如果 P 为假,无论 Q 的真值如何,结果都为真(trivially true)。
- Biconditional(↔):相当于当且仅当,P↔Q = P→Q∧Q→P。即当 P 和 Q 同时为真或者同时为假时,结果为真;P 和 Q 不同时,结果为假。
Model
模型是为每个命题分配一个真值,即 {P = True, Q = False}。如果有 n 个命题,那么就会有 $n^2$ 个可能的模型。
Knowledge Base
知识库是知识型智能体(agent)所掌握的一组句子集合。这是以命题逻辑句子形式提供给人工智能系统的关于世界的知识。这些知识可以用来对世界做出额外的推理。
Entailment(⊨)
如果 α ⊨ β (α 蕴含 β),那么在任何 α 为真的世界中,β 也为真。
Implication:是两个命题之间的逻辑连接词。
Entailment:是一种关系,表示如果 α 中信息为真,β 中所有信息都是真的。
Inference
推理是从旧句子中推导出新句子的过程。首先,考虑模型检查(Model Checking)算法:
- 确定 KB ⊨ α 是否成立(即我们能否通过知识库 KB 得出 α 为真的结论)
- 枚举所有可能的模型。
- 如果在每个 KB 为真的模型中,α 都为真,则结论成立。
例如:P:今天是星期二;Q:下雨;R:Herry 要去跑步;KB:(P ∧ ¬Q) → R。现在我们想知道 KB ⊨ R,即 R 到底是不是真的。
from logic import * |
check_all 递归为每一个 Symbols 分配真值并将其添加到 Model 中,所有的 Symbols 都分配完真值之后,如果 KB 为真,R 也为真就输出真;R 为假,说明不成立,输出假,即表示不能得到这样的结论。如果 KB 为假,不是我们要考虑的,直接返回 True,不影响最后的结果。
Knowledge Engineering
知识工程是弄清楚如何在人工智能中表示命题和逻辑的过程。
Inference Rules
模型检查算法效率较低,而推理规则让我们能够根据现有知识生成新信息。
假言推理(Modus Ponens): 如果 $$\alpha \rightarrow \beta$$ 且 $$\alpha$$,则 $$\beta$$。
合取消去(And Elimination): 如果 $$\alpha \land \beta$$,则 $$\alpha$$。
双重否定消去(Double Negation Elimination): 如果 $$\neg(\neg \alpha)$$,则 $$\alpha$$。
蕴涵消去(Implication Elimination): 如果 $$\alpha \rightarrow \beta$$,则 $$\neg \alpha \lor \beta$$。
双条件消去(Biconditional Elimination): 如果 $$\alpha \leftrightarrow \beta$$,则 $$\alpha \rightarrow \beta \land \beta \rightarrow \alpha$$。
德摩根定律(De Morgan’s Law): $$\neg (\alpha \land \beta) \equiv \neg \alpha \lor \neg \beta$$;$$\neg (\alpha \lor \beta) \equiv \neg \alpha \land \neg \beta$$
分配律(Distributive Property): $$\alpha \land (\beta \lor \gamma) \equiv (\alpha \land \beta) \lor (\alpha \land \gamma)$$;$$\alpha \lor (\beta \land \gamma) \equiv (\alpha \lor \beta) \land (\alpha \lor \gamma)$$
知识和搜索问题
推理被视为具有以下属性的搜索问题:
- 初始状态(Initial State):启动知识库;
- 动作(Action):推理规则;
- 转换模型(Transition Model):推理后的新知识库;
- 目标测试(Goal Test):检查要证明的语句是否在知识库中;
- 路径成本函数(Path Cost Function):证明中的步骤数。
Resolution
归结(Resolution)是一个强大的推理规则,它基于补充文字,即一个命题符号和它的否定形式,例如 P 和 ¬P。归结规则允许我们通过推理生成新句子,从而获得新的知识。
如果我们知道 $P \lor Q$ 并且还知道 $\neg P$,那么就能推理出 $Q$。
归结可以进一步推广:
如果我们知道 $P \lor Q$ 并且还知道 $\neg P \lor R$,那么就能推理出 $Q \lor R$。
从句和合取范式(CNF)
- 从句(Clause):是文字的析取(例如 $$P \lor Q \lor R$$)。
- 合取范式(CNF):是从句的合取,例如 $$(A \lor B \lor C) \land (D \lor \neg E) \land (F \lor G)$$。
转换为合取范式的步骤
- 消去双条件:将 $$(\alpha \leftrightarrow \beta)$$ 转换为 $$(\alpha \rightarrow \beta) \land (\beta \rightarrow \alpha)$$。
- 消去蕴涵:将 $$(\alpha \rightarrow \beta)$$ 转换为 $$(\neg \alpha \lor \beta)$$。
- 移动否定:使用德摩根定律,将否定移到文字上。$$\neg (\alpha \land \beta) \equiv \neg \alpha \lor \neg \beta$$
- 分配律:应用分配律以达到合取范式。
例子:将 $$(P \lor Q) \rightarrow R$$ 转换为 CNF。
- 消去蕴涵:$$\neg (P \lor Q) \lor R$$
- 德摩根定律:$$(\neg P \land \neg Q) \lor R$$
- 分配律:$$(\neg P \lor R) \land (\neg Q \lor R)$$
推理算法
推理算法通过分解生成新子句,直到生成空子句(即矛盾),从而证明知识库的蕴涵关系。
证明过程:
- 将 $$(KB \land \neg \alpha)$$ 转换为 CNF。
- 检查是否可以通过分解生成新子句。
- 如果生成空子句,则证明 $$(KB \models \alpha)$$。
- 如果无法生成矛盾,则无蕴涵。
例子:验证 $$(A \lor B) \land (\neg B \lor C) \land (\neg C)$$ 是否蕴涵 $$A$$。
- 假设 $$A$$ 为假,得到 $$(A \lor B) \land (\neg B \lor C) \land (\neg C) \land (\neg A)$$。
- 由于 $$\neg C$$,可知 $$B$$ 为假,添加 $$(\neg B)$$。
- 由于 $$\neg B$$,可知 $$A$$ 为真,添加 $$(A)$$。
- 现在有互补文字 $$(A)$$ 和 $$(\neg A)$$,生成空子句,证明矛盾。
通过以上步骤,我们可以利用分解和合取范式的转换来进行有效的逻辑推理和证明。
First Order Logic
一阶逻辑使用两种符号:常量符号和谓词符号,可以表达更复杂的思想。
- 常量符号:表示对象。例如 Minerva 等。
- 谓词符号:类似于关系或函数,接受一个或多个参数并返回真或假。例如,谓词 Person(Minerva) 表示 Minerva 是一个人。
通用量化(Universal Quantification)
通用量化使用符号 ∀ 来表示“对于所有”。例如,表达式 $$\forall x. \text{BelongsTo}(x, \text{Gryffindor}) \rightarrow \neg \text{BelongsTo}(x, \text{Hufflepuff})$$ 表示对于每一个符号 x,如果 x 属于 Gryffindor,则 x 不属于 Hufflepuff。
存在量化(Existential Quantification)
存在量化与通用量化相对,表示“至少存在一个”。使用符号 ∃ 表示。例如,表达式 $$\exists x. \text{House}(x) \land \text{BelongsTo}(\text{Minerva}, x)$$ 表示至少存在一个符号 x,它既是一个房子且 Minerva 属于它。这表达了 Minerva 属于某个房子的思想。
混合量化
存在量化和通用量化可以在同一个句子中使用。例如,表达式 $$\forall x. \text{Person}(x) \rightarrow (\exists y. \text{House}(y) \land \text{BelongsTo}(x, y))$$ 表示如果 x 是一个人,那么至少存在一个房子 y,使得这个人属于该房子。换句话说,每个人都属于一个房子。