人工智能大抄


2 智能体

0. AI 定义与理性智能体

0.1. AI 的四种定义视角

教材常把 AI 定义分成四类:

维度 像人一样 (…humanly) 理性地 (…rationally)
思考 Thinking humanly Thinking rationally
行动 Acting humanly Acting rationally

本课更偏向:理性智能体 (rational agent),即在给定感知和知识下,选择期望性能最好的行动。

0.2. 图灵测试

图灵测试关注机器是否能表现出与人类不可区分的智能行为。需要能力:

  • 自然语言处理。
  • 知识表示。
  • 自动推理。
  • 机器学习。
  • 若是 Total Turing Test,还包括感知和机器人行动。

0.3. 理性智能体

理性不等于全知。理性智能体根据:

  • 当前感知序列。
  • 已有知识。
  • 可执行行动。
  • 性能度量。

选择能最大化期望性能的行动。

1. 智能体基础

1.1. 智能体定义

智能体通过传感器感知环境,通过执行器作用于环境。

1
agent = sensors + actuators + agent program

智能体函数:f:percept sequenceactionf: \text{percept sequence} \to \text{action}。注意输入是感知序列,不只是当前感知。

1.2. 理性智能体

理性智能体对每个可能感知序列,选择能最大化期望性能度量的行动。理性取决于:

  • 性能度量。
  • 先验知识。
  • 可执行行动。
  • 当前感知序列。

理性不等于:全知;永远成功;事后看最优。

1.3. PEAS

PEAS 用于描述任务环境:

  • P Performance measure:性能度量。
  • E Environment:环境。
  • A Actuators:执行器。
  • S Sensors:传感器。

例:自动驾驶出租车

  • P:安全、准时、舒适、盈利、守法。
  • E:道路、行人、车辆、交通灯、天气。
  • A:方向盘、油门、刹车、喇叭、显示屏。
  • S:摄像头、雷达、GPS、速度计、麦克风。

2. 环境与智能体类型

2.1. 环境类型

  • 完全可观测:传感器能获得决策所需全部状态。
  • 部分可观测:有隐藏状态或传感器噪声。
  • 单智能体:只需考虑自身行动。
  • 多智能体:其他智能体也会行动,可能合作或竞争。
  • 确定性:当前状态和行动完全决定下一状态。
  • 随机性:结果有概率分布。
  • 片段式 (episodic):每次决策互不影响。
  • 序贯式 (sequential):当前行动影响未来。
  • 静态:智能体思考时环境不变。
  • 动态:环境会变化。
  • 半动态 (semidynamic):环境不变但性能随时间变化,如限时考试。
  • 离散:状态、时间、行动有限或可数。
  • 连续:变量连续,如自动驾驶位置和速度。
  • 已知:智能体知道行动结果模型。
  • 未知:需要学习模型。

2.2. 智能体类型

2.2.1. 简单反射智能体
基于当前感知选择行动:if condition then action。适用于完全可观测环境。缺点:没有记忆。

2.2.2. 基于模型的反射智能体
维护内部状态:internal state = update(previous state, action, percept)。适用于部分可观测环境。

2.2.3. 基于目标的智能体
使用目标信息选择行动,常需要搜索/规划。例:目标 = 到达 Bucharest。

2.2.4. 基于效用的智能体
不只判断是否达成目标,还比较不同结果好坏。最大化期望效用:argmaxaE[U(Result(a))]\arg\max_a E[U(\text{Result}(a))]

2.2.5. 学习智能体
能通过经验改进性能。包含:performance element、learning element、critic、problem generator。

2.3. LLM Agentic AI(隔壁班补充)

隔壁班课件提到大语言模型驱动的 Agentic AI。可理解为:

  • LLM 负责理解任务、规划步骤。
  • 工具调用负责执行搜索、代码、数据库、网页等操作。
  • 记忆模块保存上下文。

低概率概念题,了解即可。

3. 考试速查

3.1. 常见判断题

  • 智能体函数输入是感知序列:
  • 性能度量由智能体自己随意定义:,通常由任务设计者给出。
  • 简单反射智能体适合部分可观测复杂环境:
  • 基于效用的智能体能处理目标之间的权衡:

3.2. 最后一分钟版

  • PEAS:Performance, Environment, Actuators, Sensors。
  • 理性 = 在给定信息下最大化期望性能。
  • 环境分类:可观测/确定/片段/静态/离散/单智能体/已知。
  • 智能体类型:简单反射、模型反射、目标、效用、学习。

3 问题求解与无信息搜索

问题建模,BFS,UCS,DFS,DLS,IDS,手画搜索树

目录:0. 快速定位 · 1. 基本概念 · 2. 无信息搜索算法 · 3. 建模与手算模板 · 4. 考试速查

0. 快速定位

  • 题目问"怎样表示问题":看"问题形式化五要素"。
  • 题目问"哪个算法最优/完备/省空间":看"搜索算法对比表"。
  • 题目给搜索树问下一步扩展谁:看"队列规则"。
  • 题目要求自己建模,如 2020 三位数变换题:看"状态必须包含什么"。

1. 基本概念

1.1. 问题求解智能体

问题求解智能体通常是 goal-based agent:先给出目标,再把当前世界抽象成状态空间,在状态空间中搜索一条从初始状态到目标状态的行动序列。

课件特别强调:这是 offline problem solving,即先搜索完整计划,再闭眼执行。若执行中才获得新信息,则属于 online problem solving,不是本章重点。

1.2. 问题形式化五要素

一个良定义问题通常包含:

  1. 状态空间 (state space):所有可能状态的集合。
  2. 初始状态 (initial state):搜索起点。
  3. 行动/后继函数 (actions/successor function):在某状态能做什么,做完到哪里。
  4. 目标测试 (goal test):判断状态是否满足目标。
  5. 路径代价 (path cost):路径总代价,通常是单步代价累加。

标准写法:Problem=(States, InitialState, Actions, TransitionModel, GoalTest, PathCost)\text{Problem} = (\text{States, InitialState, Actions, TransitionModel, GoalTest, PathCost})。课件有时把后继函数写成:S(x)=action, successor state,S(x) = \langle \text{action, successor state} \rangle, \dots,其中单步代价写作 c(x,a,y)0c(x, a, y) \geq 0

1.2.1. 状态与节点不要混淆

  • 状态 (state):世界的一种配置,例如"人在 Arad",“水壶水量为 (0,8,3)(0,8,3)”。
  • 节点 (node):搜索树中的数据结构,通常包含:state、parent、action、path-cost g(n)g(n)、depth。

同一个状态可能在搜索树中出现多次,因为它可能由不同路径到达。

考试常见坑:如果题目有"上一步不能操作同一位"之类限制,这个限制会影响未来后继,因此必须放进状态,而不只是节点注释。

例:2020 三位数搜索题。状态不能只写三位数 567,还要写"上一次改变的是哪一位":

1
state = (number, last_changed_digit)

初始状态可写:(567, None),否则无法判断下一步是否违反"连续两步不可操作同一位"。

1.3. 搜索树与状态空间图

状态空间图:每个状态是一个节点;每个合法行动是边;图可能有环。

搜索树:根是初始状态;每条从根到某节点的路径表示一个候选计划;节点可以重复包含同一个状态;实际问题通常无法展开整棵树。

  • 树搜索不检查重复状态,容易陷入环。
  • 图搜索使用 explored/closed 集合,避免重复扩展。

1.4. 通用搜索框架

1
2
3
4
5
6
7
8
9
10
11
12
frontier = [initial node]
explored = empty
while frontier not empty:
n = choose_node(frontier, strategy)
if goal_test(n.state): return solution_path(n)
add n.state to explored
for each successor s of n.state:
if s not in explored/frontier:
add child node to frontier
else if new path is better:
update frontier
return failure

不同搜索算法本质区别在于 choose_node 和 frontier 的组织方式。

  • 生成 (Generate):计算出一个后继节点,并把它放进 frontier 里等待。
  • 扩展 (Expand):从 frontier 中按照 choose_node 取出要扩展的节点,并计算它所有的后继节点。

1.5. 评价搜索策略的四个指标

  • 完备性 (completeness):若存在解,是否一定能找到。
  • 最优性 (optimality):是否保证找到最低路径代价的解。
  • 时间复杂度:通常用分支因子 bb、最浅目标深度 dd、最大深度 mm 表示。
  • 空间复杂度:搜索过程中最多存多少节点。

符号:

  • bb:branching factor,每个节点最多后继数。
  • dd:最浅目标深度。
  • mm:搜索树最大深度,可能无限。
  • CC^*:最优解代价。
  • ε\varepsilon:最小正单步代价。

2. 无信息搜索算法

2.1. 无信息搜索算法对比表

无信息搜索仅使用从问题定义中获取到的信息(初始状态,状态转移规则,目标状态测试条件),没有任何其他启发式信息。

算法 选择规则 完备 最优 时间 空间 适用
BFS 最浅节点,FIFO 是,若 bb 有限 是,若单步代价相同 O(bd+1)O(b^{d+1}) O(bd+1)O(b^{d+1}) 单位代价最短步数
UCS 最小 g(n)g(n) 是,若代价 ε\geq \varepsilon O(b1+C/ε)O(b^{1+\lfloor C^*/\varepsilon \rfloor}) 同时间量级 非单位代价最优路径
DFS 最深节点,LIFO 否,可能进入无限分支 O(bm)O(b^m) O(bm)O(bm) 空间很紧、只想找任意解
DLS 深度限制 ll 的 DFS ldl \geq d O(bl)O(b^l) O(bl)O(bl) 已知深度上界
IDS 逐步加深 DLS 是,若单步代价相同 O(bd)O(b^d) O(bd)O(bd) 单位代价且想省空间
  • 2021 选择题:所有边代价为 1,没有启发式,又要求省空间并保证最优,选迭代加深 DFS
  • 2020 判断题:BFS 是 UCS 的特例。若每条边单步代价相同,UCS 按 gg 递增扩展,等价于按深度扩展,因此正确。

2.2. 广度优先搜索(BFS)

BFS 用队列:

1
2
1. pop from front
2. push children to back

性质:

  • 按深度逐层扩展。
  • 当所有边代价相同,第一次找到目标就是最浅目标,也是最优解。
  • 空间爆炸严重,因为要保存整层 frontier。

考试手算规则:

  1. 从左到右生成子节点。
  2. 同层先生成者先扩展。
  3. 若题目规定并列按字母序,按题目来。

2.3. 代价一致搜索(UCS)

BFS 的升级版,应对每步代价不同的情况。UCS 每次扩展 g(n)g(n) 最小的节点,使用优先队列来选出 g(n)g(n) 最小的节点:

g(n)从初始节点到 n 的已知路径代价=父节点 g+cost(p,n)g(n) \triangleq \text{从初始节点到 } n \text{ 的已知路径代价} = \text{父节点 } g + \text{cost}(p, n)

操作步骤:

  1. 初始化:将起点放入优先队列,累计代价设为 0。准备一个空的"已探索集合"(记录去过的地方,防止绕圈)。
  2. 循环检查队列
    • 如果优先队列空了,说明找不到路,宣告失败。
    • 弹出队列中代价最小的节点。
    • 目标测试:如果这个节点是终点,宣告成功!直接输出到达这里的路径。
  3. 扩展节点
    • 将刚弹出的节点加入"已探索集合"。
    • 观察它的所有邻居节点,计算到达每个邻居的新累计代价(当前节点累计代价 + 走到邻居的单步代价)。
  4. 状态更新(UCS 最关键的一步)
    • 如果邻居既不在队列里,也不在已探索集合里 → 直接作为新发现加入优先队列。
    • 如果邻居已经在优先队列里,但你刚算出的新代价比队列里记录的代价更低 → 发现了一条抄近道的路!立即更新队列里该节点的代价和父节点信息。
  5. 返回第 2 步继续循环。

性质:

  • 只要所有单步代价非负,且存在最小正代价,就完备。
  • 保证最优。
  • BFS 是"所有单步代价相同"的 UCS。

关键细节:

  • 目标测试应该在弹出 frontier 准备扩展时做,而不是刚生成目标时就停。因为刚生成的目标路径不一定是最低代价。
  • 若发现到同一状态的更低代价路径,需要更新 frontier。

2.4. 深度优先搜索(DFS)

DFS 用栈:

1
2
1. pop from top
2. push children so that leftmost child is expanded first

性质:

  • 空间低,只保存当前路径和旁支。
  • 不完备:无限深路径会卡住。
  • 不最优:先找到的深层解可能代价很差。

适合:状态空间很大但解很深;只需要一个解;有深度上界或不会出现无限分支。

2.5. 深度有限搜索(DLS)

DLS 给 DFS 加深度限制 ll

  • 深度超过 ll 不再展开。
  • 可以返回三种结果:success、failure、cutoff。
  • l<dl < d,找不到解;若 ll 太大,又退化为 DFS。

2.6. 迭代加深搜索(IDS)

IDS 依次运行:

1
2
3
4
DLS(limit=0)
DLS(limit=1)
DLS(limit=2)
...

为什么重复搜索仍然不亏?因为树中绝大多数节点在最深层,浅层重复展开的代价相对小。

性质:

  • BFS 的完备性和单位代价最优性。
  • DFS 的低空间复杂度。
  • 单位代价搜索中非常常考。

2.7. 双向搜索

思路:同时从初始状态和目标状态搜索,直到两个 frontier 相遇。

复杂度:理想情况下从 O(bd)O(b^d) 降为 O(bd/2)O(b^{d/2})

限制:

  • 必须能反向生成前驱。
  • 目标状态要明确。
  • 要能快速检测两个 frontier 是否相交。

3. 建模与手算模板

3.1. 状态空间建模模板

3.1.1. 罗马尼亚路径规划

  • 状态:所在城市。
  • 初始状态:Arad。
  • 行动:沿道路开往相邻城市。
  • 转移模型:Result(In(Arad),Go(Sibiu))=In(Sibiu)\text{Result}(\text{In(Arad)}, \text{Go(Sibiu)}) = \text{In(Sibiu)}
  • 目标测试:是否在 Bucharest。
  • 路径代价:道路距离之和。

3.1.2. 水壶问题

三壶容量为 12、8、3,加水目标 1 加仑:

1
2
3
4
5
6
state = (V12, V8, V3)
0 <= Vi <= Ci
initial = (0,0,0)
goal = any Vi == 1
actions = Fill(i), Empty(i), Pour(i,j)
path cost = 每步 1

倒水动作:

1
2
3
amount = min(Vi, Cj - Vj)
Vi' = Vi - amount
Vj' = Vj + amount

3.1.3. 传教士与野人

1
2
3
state = (M_left, C_left, Boat_left)
initial = (3,3,1)
goal = (0,0,0)

合法状态必须满足两岸安全:

1
2
M_left == 0 or M_left >= C_left
M_right == 0 or M_right >= C_right

动作:Cross(m,c),  1m+c2\text{Cross}(m, c),\; 1 \leq m + c \leq 2。该题检查重复状态非常必要,因为动作可逆,树搜索会反复过河。

3.2. 2020 三位数 A* 题的状态设计

题意:从三位数 SSGG,每步对某一位加 1 或减 1,不能进位/借位,不能进入 bad 集合,连续两步不能改同一位。

状态必须写:state = (digits, last_position),例如:

1
2
3
(567, None)
(667, hundreds)
(677, tens)

后继函数:

1
2
3
4
5
6
7
8
for pos in {百位, 十位, 个位}:
if pos == last_position: continue
for delta in {-1,+1}:
new_digit = digit[pos] + delta
if 0 <= new_digit <= 9:
new_number = replace(number, pos, new_digit)
if new_number not in bad:
successor = (new_number, pos)

路径代价:

1
2
每步 cost = 1
g(n) = 已移动步数

可采纳启发函数:h(n)=当前百位目标百位+当前十位目标十位+当前个位目标个位h(n) = |\text{当前百位} - \text{目标百位}| + |\text{当前十位} - \text{目标十位}| + |\text{当前个位} - \text{目标个位}|

理由:每一步只能改变一位且只能改变 1,因此至少需要各位数字差值之和这么多步。bad 集合和"不可连续改同一位"只会增加所需步数,不会让它更少。

若想更紧但仍简单,可考虑由于"不能连续改同一位"造成的额外等待,但考试一般写曼哈顿数字差即可。

3.3. 搜索题手算答题框架

对任何搜索树题:

  1. 写 frontier 的排序依据。
  2. 写已扩展节点。
  3. 对每个 frontier 节点标关键值:
    • BFS/DFS:深度和生成顺序。
    • UCS:g(n)g(n)
    • Greedy:h(n)h(n)
    • A*:f(n)=g(n)+h(n)f(n)=g(n)+h(n)
  4. 选最优先节点。
  5. 并列时按题目规则:左到右、字母序、深度优先等。

3.4. 搜索树绘制

按照题目给定的扩展顺序。扩展一个结点时,给出所有合法的后继结点;节点按照扩展顺序进行标号,只有被扩展的节点标号,目标节点被扩展时停止。

4. 考试速查

4.1. 常见判断题

  • BFS 在单位代价下最优:
  • DFS 不一定完备:,可能无限深。
  • DFS 扩展节点一定不少于 A*:,具体取决于图和启发式。
  • UCS 可以处理非单位代价并保证最优:,要求非负代价。
  • 图搜索比树搜索一定更快:不绝对,但避免重复状态通常更稳。

4.2. 最后一分钟版

  • 问题形式化:状态、初始、行动/转移、目标测试、路径代价。
  • 节点比状态多:父节点、动作、路径代价、深度。
  • BFS:单位代价最优,空间爆炸。
  • UCS:按 gg,非负代价最优。
  • DFS:省空间,不完备不最优。
  • IDS:单位代价最优且省空间,考试很爱。
  • 有历史限制的题,历史变量要放入状态。

4 有信息搜索

A*,启发式函数,局部搜索

目录:0. 快速定位 · 1. 最佳优先与 A* 基础 · 2. 启发式性质与证明 · 3. 局部搜索 · 4. 考试速查

0. 快速定位

  • 手算 A*:看"A* 搜索流程"和"罗马尼亚例题模板"。
  • 判断启发式是否 admissible/consistent:看"两个定义"。
  • 多个启发式比较:看"启发式支配关系"。
  • 局部搜索:看"爬山/模拟退火/束搜索/遗传算法"。

1. 最佳优先与 A* 基础

最佳优先搜索维护一个优先队列 frontier,每次扩展评价函数 f(n)f(n) 最小的节点:

1
2
3
4
5
6
7
best_first_search(problem, f):
frontier = priority queue ordered by f
insert initial node
while frontier not empty:
n = pop_min(frontier)
if goal(n): return solution
expand n and insert/update children

不同的 f(n)f(n) 得到不同算法:

  • 贪心最佳优先搜索:f(n)=h(n)f(n)=h(n)
  • A* 搜索:f(n)=g(n)+h(n)f(n)=g(n)+h(n)
  • UCS:f(n)=g(n)f(n)=g(n)

1.2. 启发函数 h(n)

h(n)h(n) 估计从节点 nn 到目标的最小剩余代价,如果 nn 是目标,则 h(n)=0h(n)=0

例:罗马尼亚地图中,h(n)h(n) 可取城市到 Bucharest 的直线距离。启发式越接近真实剩余代价 h(n)h^*(n),搜索越少;但如果高估,A* 最优性可能丢失。

评价函数:f(n)=h(n)f(n) = h(n)

特点:

  • 只看"离目标看起来多近"。
  • 通常很快。
  • 不保证最优。
  • 在图搜索中若避免重复,有限状态空间下完备;树搜索遇到环或无限空间不一定完备。

常见错误:贪心不看已经走过多远,所以可能为了小 hh 绕远路。

评价函数:f(n)=g(n)+h(n)f(n) = g(n) + h(n),其中:

  • g(n)g(n):从初始状态到 nn 的已知实际路径代价。
  • h(n)h(n):从 nn 到目标的估计最小剩余代价。
  • f(n)f(n):经过 nn 到目标的总路径代价估计。

A* 每次扩展 ff 最小的节点。

1.5. A* 搜索流程

1
2
3
4
5
6
7
8
9
10
11
12
frontier = priority queue by f=g+h
explored = empty
while frontier not empty:
n = pop node with smallest f
if goal(n): return path
add n.state to explored
for each successor child:
compute g(child), h(child), f(child)
if child.state not seen:
push child
else if new g is smaller:
update parent/g/f

若题目要求手算,每个节点写:Node: g=?, h=?, f=g+h=?。并列规则按题目给定;若没给,一般按生成顺序或字母序说明即可。

2. 启发式性质与证明

2.1. 可采纳启发式 Admissible Heuristic

定义:0h(n)h(n)0 \leq h(n) \leq h^*(n),即永不高估真实最小剩余代价。

结论:

  • 树搜索 A* 使用可采纳启发式,保证最优。
  • 图搜索 A* 通常还需要一致性来简单保证最优;若只可采纳但不一致,需要允许节点重开。

典型可采纳例子:

  • 八数码错位块数:不在同一位置的块的数目。
  • 八数码曼哈顿距离,水平竖直移动,由于每次只能移动一个棋子,不能交换两枚棋子的位置。
  • 地图路径中的直线距离。
  • 三位数变换题的各位数字差绝对值之和。

2.2. 一致启发式 Consistent Heuristic

定义,也叫单调性:h(n)c(n,a,n)+h(n)h(n) \leq c(n, a, n') + h(n')(通过 aa 到达 nn'),并且 h(goal)=0h(\text{goal}) = 0

直观:估计距离满足三角不等式。

重要结论:一致性 ⇒ 可采纳

证明套路:沿着从 nn 到目标的最优路径反复套用三角不等式,中间的 hh 抵消,得到 h(n)h(n)h(n) \leq h^*(n)

一致性的好处:

  • A* 图搜索第一次从 frontier 弹出某状态时,该状态的最优 gg 已确定。
  • 不需要重新打开 closed 节点。

2.3. 可采纳但不一致例子

构造路径:A1B10GA \xrightarrow{1} B \xrightarrow{10} G

真实代价:h(A)=11,  h(B)=10,  h(G)=0h^*(A) = 11,\; h^*(B) = 10,\; h^*(G) = 0

定义:h(A)=10,  h(B)=5,  h(G)=0h(A) = 10,\; h(B) = 5,\; h(G) = 0

  • 可采纳:1011,  51010 \leq 11,\; 5 \leq 10
  • 不一致:

h(A)c(A,B)+h(B)101+5(错)h(A) \leq c(A,B) + h(B) \\ 10 \leq 1 + 5 \quad \text{(错)}

2.4. 启发式支配关系(占优)

若两个启发式都可采纳,且对所有节点:h2(n)h1(n)h_2(n) \geq h_1(n),则 h2h_2 支配 h1h_1,通常扩展节点不多于 h1h_1,因为它更接近真实代价。

2021 判断题:若 h1h_1h2h_2 都可采纳:

h3(n)=max(h1(n),h2(n))h4(n)=min(h1(n),h2(n))h_3(n) = \max(h_1(n), h_2(n)) \\ h_4(n) = \min(h_1(n), h_2(n))

h3h_3 仍可采纳,而且支配 h4h_4。所以在 A* 中通常更好。但"更好"若被严格理解为所有情况下扩展节点严格更少,则不一定严格;考试一般判断"max 不差于 min"。

2.5. A* 最优性证明核心

设最优解代价为 CC^*。若 hh 可采纳,则最优路径上任意 frontier 节点 nn 有:

f(n)=g(n)+h(n)g(n)+h(n)=Cf(n) = g(n) + h(n) \leq g(n) + h^*(n) = C^*

任何次优目标 GG' 的:f(G)=g(G)=C>Cf(G') = g(G') = C' > C^*,所以 A* 不会在所有最优路径节点被处理前选中次优目标。

2.6. 加权启发式路径算法

作业题给:f(n)=(2w)g(n)+wh(n)f(n) = (2-w)g(n) + wh(n)

0w<20 \leq w < 2,除以正数 (2w)(2-w)f(n)=g(n)+[w/(2w)]h(n)f'(n) = g(n) + [w/(2-w)]h(n)

为了保证最优,启发项系数不能超过 1:

w2w1    w1\frac{w}{2-w} \leq 1 \;\Rightarrow\; w \leq 1

所以 0w10 \leq w \leq 1 保证最优。

特殊情况:

  • w=0w=0f=2gf=2g,等价 UCS。
  • w=1w=1f=g+hf=g+h,标准 A*。
  • w=2w=2f=2hf=2h,等价贪心搜索。

2.7. 高估不超过 c 的启发式

若:h(n)h(n)+ch(n) \leq h^*(n) + c,则 A* 返回解代价 CC' 满足:CC+cC' \leq C^* + c

证明模板:

  1. A* 终止时选择目标 GG',所以 C=f(G)C'=f(G')
  2. 最优路径上存在 frontier 节点 nn
  3. f(n)=g(n)+h(n)g(n)+h(n)+c=C+cf(n)=g(n)+h(n) \leq g(n)+h^*(n)+c = C^*+c
  4. A* 选择 GG',所以 C=f(G)f(n)C'=f(G') \leq f(n)
  5. CC+cC' \leq C^*+c

2.8. 2020 三位数 A* 手算模版

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
(1) 567(0) [g=0, h=3, f=3]
├── 467(1) [g=1, h=4, f=5]
├── 557(2) [g=1, h=4, f=5]
├── 568(3) [g=1, h=4, f=5]
├── 566(3) [g=1, h=4, f=5]
└── (2) 577(2) [g=1, h=2, f=3]
├── 477(1) [g=2, h=3, f=5]
├── 578(3) [g=2, h=3, f=5]
├── 576(3) [g=2, h=3, f=5]
└── (3) 677(1) [g=2, h=1, f=3]
├── 678(3) [g=3, h=2, f=5]
├── 676(3) [g=3, h=2, f=5]
└── (4) 687(2) [g=3, h=2, f=5] <-- 注:此步 f=5 且 g=3 的节点有三个,这里随机选
├── 587(1) [g=4, h=3, f=7]
├── 688(3) [g=4, h=3, f=7]
├── 686(3) [g=4, h=3, f=7]
└── (5) 787(1) [g=4, h=1, f=5]
├── 797(2) [g=5, h=2, f=7]
├── 788(3) [g=5, h=2, f=7]
├── 786(3) [g=5, h=2, f=7]
└── (6) 777(2) [g=5, h=0, f=5] <-- 目标节点

2.9. 2021 搜索树题通法

题目给一棵已经扩展 A、B 的树,问不同算法下一步扩展谁:

  • DFS:看当前最深、最左/最右规则。
  • UCS:算 g(n)g(n),选最小。
  • Greedy:看 h(n)h(n),选最小。
  • A*:算 f(n)=g(n)+h(n)f(n)=g(n)+h(n),选最小。

注意:题目常规定"子节点从左到右展开;并列按字母序",必须照做。

3. 局部搜索

3.1. Local Search 局部搜索

局部搜索不关心完整路径,只关心当前状态本身。适合:

  • 状态空间巨大。
  • 只要最终配置,不需要行动序列。

典型:N 皇后、排课、布局优化。

核心思想:

1
2
3
current = some state
repeat:
move to a neighbor according to objective function

3.2. Hill-Climbing 爬山法

每步选择邻居中评价最好的状态。

优点:内存极小;实现简单。

缺点:

  • 局部最优 (local maximum/minimum)。
  • 平台 (plateau):邻居评价一样,走不动。
  • 山脊 (ridge):需要一串绕行才能上升,单步贪心困难。

变体:

  • 随机重启爬山:从多个随机初始点开始。
  • first-choice hill climbing:随机看邻居,找到更好就走。
  • stochastic hill climbing:按改进程度概率选择。

3.3. Simulated Annealing 模拟退火

允许以一定概率走向更差状态,避免局部最优。接受更差状态的概率:P=exp(ΔE/T)P = \exp(\Delta E / T)。若是最大化问题,ΔE=value(new)value(current)\Delta E = \text{value(new)} - \text{value(current)},更差时为负。温度 TT 越高越容易接受坏动作,越低越像爬山。

流程:

1
2
3
4
5
6
7
8
current = initial
for t = 1..:
T = schedule(t)
if T == 0: return current
next = random neighbor
DeltaE = value(next) - value(current)
if DeltaE > 0: current = next
else current = next with probability exp(DeltaE/T)

理论:若降温足够慢,可收敛到全局最优;实际中用于近似优化。

3.4. Local Beam Search 局部束搜索

同时保留 kk 个状态:

1
2
3
4
start with k random states
repeat:
generate all successors of k states
choose best k among all successors

区别于随机重启:

  • 随机重启是多条搜索互不交流。
  • 束搜索中好的状态会占据资源,信息会共享。

缺点:容易所有束集中到同一区域,失去多样性。

3.5. Genetic Algorithm 遗传算法

基本元素:

  • 个体:候选解,通常编码为字符串。
  • 适应度函数 (fitness):评价个体好坏。
  • 选择 (selection):适应度高的更容易繁殖。
  • 交叉 (crossover):两个父代片段组合。
  • 变异 (mutation):随机修改少量基因。

流程:

1
2
3
4
5
6
7
population = random individuals
repeat:
evaluate fitness
select parents
crossover
mutate
form next generation

优点:全局探索能力强。缺点:参数多、收敛慢、不保证最优。

4. 考试速查

4.1. 常见判断题

  • 可采纳启发式永不高估:
  • 一致启发式一定可采纳:
  • 可采纳启发式一定一致:
  • max(h1,h2)\max(h_1, h_2) 若二者可采纳,仍可采纳:
  • 贪心最佳优先搜索一定最优:
  • A* 中 gg 是已经走过的代价,hh 是估计剩余代价:

4.2. 最后一分钟版

  • Greedy:f=hf=h,快但不最优。
  • A*:f=g+hf=g+hhh 可采纳/一致时保证最优。
  • Admissible:hhh \leq h^*
  • Consistent:h(n)c(n,n)+h(n)h(n) \leq c(n, n') + h(n')
  • 一致推出可采纳。
  • max 组合启发式比 min 更强。
  • 局部搜索不保路径,只保当前状态;爬山怕局部最优,退火能偶尔走差。

5 约束满足问题

重点是回溯搜索、MRV/LCV、前向检查、AC-3、树结构 CSP。

目录:0. 快速定位 · 1. CSP 基础 · 2. 回溯与约束传播 · 3. 结构与典型题 · 4. 考试速查

0. 快速定位

  • 题目让定义 CSP:看"CSP 三要素"。
  • 手工求解地图染色/密码算术:看"回溯搜索改进"。
  • 题目提 AC-3/弧相容:看"Arc Consistency 和 AC-3"。
  • 问复杂度:看"复杂度常用结论"。

1. CSP 基础

1.1. CSP 三要素

约束满足问题由三部分组成:CSP=(X,D,C)\text{CSP} = (X, D, C)

  • X={X1,,Xn}X = \{X_1, \dots, X_n\}:变量集合。
  • D={D1,,Dn}D = \{D_1, \dots, D_n\}:每个变量的取值域。
  • CC:约束集合,限制变量之间可同时取哪些值。

目标:给每个变量赋值,使所有约束同时满足。

例:地图染色

  • 变量:每个地区,如 WA, NT, SA, Q, NSW, V, T。
  • 域:{red,green,blue}\{red, green, blue\}
  • 约束:相邻地区颜色不同,如 WANTWA \neq NT

1.2. CSP 与普通搜索的区别

  • 普通搜索状态可能是世界任意配置;CSP 状态通常是部分赋值WA=red,  NT=greenWA = red,\; NT = green
  • 行动是给一个尚未赋值变量赋值。
  • 目标测试是所有变量都有值且所有约束满足。
  • CSP 的优势:约束结构明确,可以用通用推理减少搜索。

1.3. 约束类型

  • 一元约束:只涉及一个变量,如 XredX \neq red
  • 二元约束:涉及两个变量,如 WANTWA \neq NT
  • 高阶约束:涉及多个变量,如 Alldiff(A,B,C,D)\text{Alldiff}(A,B,C,D)

高阶约束常可转为二元约束,但可能引入额外变量。

2. 回溯与约束传播

2.1. 回溯搜索 Backtracking

朴素 DFS 会考虑变量顺序的排列,浪费巨大。CSP 通常用回溯:

1
2
3
4
5
6
7
8
9
10
11
12
BACKTRACK(assignment):
if assignment complete: return assignment
var = SELECT-UNASSIGNED-VARIABLE(assignment)
for value in ORDER-DOMAIN-VALUES(var):
if value consistent with assignment:
add var=value
inferences = INFERENCE(...)
if inferences not failure:
result = BACKTRACK(assignment + inferences)
if result != failure: return result
remove var=value and inferences
return failure

回溯搜索一次只给一个变量赋值,不重复考虑变量排列。

2.2. 变量选择:MRV

MRV = Minimum Remaining Values,最少剩余值。选择当前合法取值最少的未赋值变量。

直觉:先处理最容易失败的变量,早点剪枝。

例:若 SA 只剩 1 种颜色,Q 还剩 3 种,则先选 SA。

2.3. 变量选择:Degree Heuristic

度启发式选择与最多未赋值变量相连的变量。常作为 MRV 并列时的 tie-breaker。

直觉:约束别人最多的变量越早赋值,越能减少后续分支。

2.4. 值选择:LCV

LCV = Least Constraining Value,最少约束值。选择对其他变量剩余取值删得最少的值。

直觉:保留后续灵活性。

与 MRV 的方向不同:

  • MRV 选变量:优先最危险的变量。
  • LCV 选值:优先最温和的值。

2.5. 前向检查 Forward Checking

每赋值一个变量,就删除邻居变量域中不再合法的值。若某个未赋值变量域变空,立刻回溯。

例:地图染色,赋 WA=redWA=red 后,从 NT 和 SA 的域中删掉 red。

优点:简单有效。缺点:只看一步邻居,不能发现更深层的隐含冲突。

2.6. Arc Consistency 弧相容

对二元约束 XiXjX_i \to X_j,若对 XiX_i 域中每个值 xx,都存在 XjX_j 域中某个值 yy 使约束满足,则称弧 XiXjX_i \to X_j 相容。

若某个 xx 找不到支持值,就从 DiD_i 中删除 xx

注意方向性:XiXjX_i \to X_j 相容不代表 XjXiX_j \to X_i 相容。

2.7. AC-3 算法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
AC3(csp):
queue = all arcs (Xi, Xj)
while queue not empty:
(Xi, Xj) = pop(queue)
if REVISE(Xi, Xj):
if Di empty: return false
for each Xk in Neighbors(Xi) except Xj:
add (Xk, Xi) to queue
return true

REVISE(Xi, Xj):
revised = false
for x in Di:
if no y in Dj satisfies constraint(Xi=x, Xj=y):
delete x from Di
revised = true
return revised

何时用:

  • 搜索前先跑 AC-3,缩小域。
  • 回溯中每次赋值后维护弧相容,称 MAC。

2.8. AC-3 复杂度

若:nn 个变量;每个变量域大小最多 ddcc 条二元约束。

  • 每次 REVISE 最多 O(d2)O(d^2),每条弧最多被重新检查 O(d)O(d) 次,常见结论:O(cd3)O(cd^3)
  • 树结构 CSP 可在线性量级求解,常见教材结论:O(nd2)O(nd^2)。作业题若问"树结构 CSP 上 AC-3 最坏复杂度",通常写 O(nd2)O(nd^2),因为树中边数 O(n)O(n),每条边处理受限。

3. 结构与典型题

3.1. 树结构 CSP

若约束图是树,可以不回溯地求解:

  1. 任选根,给变量排序,使父节点在子节点之前。
  2. 从叶子到根,对每条边执行 RemoveInconsistent(Parent, Child)。
  3. 从根到叶依次赋值:父节点定值后,给子节点选任一与父值相容的值。

复杂度:O(nd2)O(nd^2)

若约束图不是树,可以考虑:

  • cutset conditioning:枚举少量变量,使剩余图变成树。
  • tree decomposition:树分解。

3.2. 局部搜索解 CSP

常用 min-conflicts:

1
2
3
4
5
start with complete random assignment
repeat:
if assignment satisfies all constraints: return it
choose a conflicted variable
assign it a value minimizing number of conflicts

适合 N 皇后等大规模 CSP。缺点:不保证最优,也可能卡住,需要随机重启。

3.3. 密码算术题思路

例如:

1
2
3
  SEND
+ MORE
= MONEY
  • 变量:S, E, N, D, M, O, R, Y。
  • 域:数字 0–9。
  • 约束:
    • Alldiff(S,E,N,D,M,O,R,Y)\text{Alldiff}(S,E,N,D,M,O,R,Y)
    • 首字母 S0,  M0S \neq 0,\; M \neq 0
    • 每列加法和进位约束。

求解技巧:先写进位变量;使用 MRV(例如最高位常能推 M=1M=1);使用前向检查删域。

4. 考试速查

4.1. 常见考试问法

4.1.1. MRV、Degree、LCV 分别是什么?

  • MRV:选剩余合法值最少的变量。
  • Degree:选约束最多的变量。
  • LCV:选排除别人合法值最少的值。

4.1.2. 前向检查与 AC-3 区别?

  • 前向检查只在已赋值变量到未赋值邻居之间删值。
  • AC-3 维护所有相关弧相容,能传播更远。

4.1.3. 弧相容是否保证全局一致?

不保证。弧相容只是局部一致,仍可能无解。

4.1.4. 为什么 CSP 回溯比普通 DFS 少?

因为赋值顺序的排列不会被当作不同路径重复搜索;同一部分赋值只考虑一次。

4.2. 最后一分钟版

  • CSP = 变量 + 域 + 约束。
  • 状态 = 部分赋值。
  • MRV 选变量,LCV 选值。
  • Forward checking:赋值后删邻居域。
  • AC-3:维护弧相容,REVISE 删没有支持的值。
  • 树结构 CSP 可 O(nd2)O(nd^2) 求解。

6 博弈

Minimax,alpha-beta 剪枝

目录:0. 快速定位 · 1. 博弈建模与 Minimax · 2. Alpha-Beta 剪枝 · 3. 资源限制与扩展 · 4. 考试速查

0. 快速定位

  • 给博弈树求值:看"Minimax 手算规则"。
  • 问剪枝叶子:看"Alpha-Beta 手算规则"。
  • 深度限制和评估函数:看"资源限制搜索"。
  • MCTS:考试重点写不考,只保留概念。

1. 博弈建模与 Minimax

1.1. 博弈问题定义

问题定义:

  • 两人轮流行动:玩家(MAX)试图最大化游戏结果,玩家(MIN)则试图最小化游戏结果。
  • 零和:输、赢、平。
  • 完全信息:两人都可以看到整个游戏的全部状态。
  • 确定性:行动的结果是确定的。

例如井字棋、国际象棋、围棋。

形式化包含:

  • 初始状态。
  • 当前状态 ss,游戏中棋盘或环境的当前配置。
  • 当前行动方 Player(s)\text{Player}(s)
  • 合法行动 Actions(s)\text{Actions}(s)
  • 转移模型 Result(s,a)\text{Result}(s,a),表示 ss 经过 aa 的后继状态。
  • 终止测试 Terminal-Test(s)\text{Terminal-Test}(s),用于判断游戏是否已经到达终局。
  • 效用函数 Utility(s,player)\text{Utility}(s, \text{player}),当游戏结束时,用于评估当前终止状态的 player 最终得分或收益。

零和意味着:Utility(s,MAX)+Utility(s,MIN)=0\text{Utility}(s, \text{MAX}) + \text{Utility}(s, \text{MIN}) = 0

1.2. Minimax 原理

Minimax 算法是一个悲观算法,其假设对手非常强大,招招致命,为了让自己死得不太难看,选择能够最优化最坏结果的策略。

  • 输入:当前状态 ss,游戏规则 rule。
  • 输出:下一步的行动 aa,该行动能够让我的最低收益最大化,选择其他行动的最坏结果不可能比这个好。

操作:

  1. ss,根据 rule 推导出全部的对局可能(博弈树)。
  2. 从叶子节点往上,算出所有节点的 Minimax 值。
  3. return argmaxaMinimaxValue(Result(s,a))\arg\max_a \text{MinimaxValue}(\text{Result}(s, a))

MinimaxValue 计算方式:

  1. 叶子节点:其效用值就是 Minimax 值。
  2. Max 节点:取子节点中的最大值作为 Minimax 值。
  3. Min 节点:取子节点中的最小值作为 Minimax 值。

1.3. Minimax 特性

  • 完备性:如果博弈树是有限的,该算法是完备的。
  • 最优性:当对手采用最优策略时,该算法保证能找到最优解。
  • 时间复杂度O(bm)O(b^m),其中 bb 是分支因子,mm 是树的最大深度。
  • 空间复杂度:因为该算法基于深度优先探索,空间复杂度为 O(bm)O(bm)

2. Alpha-Beta 剪枝

2.1. 原理

Alpha-beta 返回与 minimax 完全相同的结果,但不展开不可能影响最终决策的分支。

含义:

  • alpha:记录 Max 当前在探索博弈树的过程中,所能取得到的最好的最坏结果(最大值),如果探索某分支时发现所能取得的最好的最坏结果比 alpha 还小,直接剪掉该分支。
  • beta:记录 Min 当前探索中,所能取得到的最好的最坏结果(最小值),若比 beta 大,则剪掉。

Minimax 的推导,采用深度优先遍历,有一个向下传递(给子节点提供初值)和向上汇报(给父节点提供更新依据)的过程。

初值:

  • 根节点:α=,  β=+\alpha = -\infty,\; \beta = +\infty
  • 其他节点:父节点提供初值。

更新:

  • Max:α=max(α,Min 返回值)\alpha = \max(\alpha, \text{Min 返回值}),比 α\alpha 大就更新。
  • Min:β=min(β,Max 返回值)\beta = \min(\beta, \text{Max 返回值}),比 β\beta 小就更新。

剪枝:

  • 一句话:当在一个节点得到子节点返回值 vv 并更新后,若 αβ\alpha \geq \beta,该节点不再探索后续子节点,也不向父节点返回值。
  • 两句话:
    • MAX 节点:若当前值 vβv \geq \beta,剪掉剩余子节点。
    • MIN 节点:若当前值 vαv \leq \alpha,剪掉剩余子节点。

2.2. Alpha-Beta 手算规则

从左到右搜索时:

  1. 根节点:α=,  β=+\alpha = -\infty,\; \beta = +\infty
  2. 下传当前 (α,β)(\alpha, \beta) 窗口。
  3. 从左到右依次看子节点的值 vv
  4. MAX 节点不断更新 α=max(α,v)\alpha = \max(\alpha, v)
  5. MIN 节点不断更新 β=min(β,v)\beta = \min(\beta, v)
  6. 一旦 αβ\alpha \geq \beta,当前节点后面没看的兄弟分支全部剪掉,该节点不用返回值,返回也不会导致父节点更新。
  7. 若没有发生剪枝,照常返回 Minimax 值,更新父节点的 α\alphaβ\beta

答题时要注意:

  • 看清当前节点是 Max 还是 Min,不要更新错了,尤其是回传的时候对父节点的更新。
  • 哪个节点处剪枝。
  • 被剪掉的是哪些叶子或子树。
  • 已经访问过的节点不能算剪枝。

2.3. 正确性分析

若在 MIN 节点发现 vαv \leq \alpha

  • MAX 的祖先已经有一个选择能保证至少 α\alpha
  • 当前 MIN 节点最终值只会更小或相等。
  • MAX 永远不会选择这条路,所以剩余子节点无关。

若在 MAX 节点发现 vβv \geq \beta

  • MIN 的祖先已经有一个选择能把结果压到至多 β\beta
  • 当前 MAX 节点最终值只会更大或相等。
  • MIN 永远不会允许这条路,所以剩余子节点无关。

2.4. 剪枝效率

  • 最坏排序:几乎不剪,O(bm)O(b^m)
  • 最优排序:约 O(bm/2)O(b^{m/2}),相当于深度翻倍。

所以实际程序常先用启发式排序,把看起来好的行动放前面。

3. 资源限制与扩展

3.1. 资源限制搜索

完整 minimax 太深时,用深度限制:

1
2
Cutoff-Test(s, depth)
Eval(s)

当达到深度限制或状态足够稳定时,用评估函数估计效用。

典型写法:

1
2
3
4
H-Minimax(s, depth):
if terminal(s): return utility(s)
if depth == 0: return Eval(s)
...

2020 题问深度为 3 和深度为 4 时选择不同,原因通常是:深度限制下叶子值只是评估值,不一定等于真实终局效用;看得更深后会修正浅层误判。

3.2. 评估函数

评估函数应:

  • 与真实胜率/效用相关。
  • 计算快。
  • 对非终局状态给出合理排序。

井字棋作业例子:Eval(s)=3X2(s)+X1(s)(3O2(s)+O1(s))\text{Eval}(s) = 3X_2(s) + X_1(s) - (3O_2(s) + O_1(s))

其中:

  • XnX_n:恰好有 nn 个 X 且无 O 的行/列/对角线数。
  • OnO_n:恰好有 nn 个 O 且无 X 的行/列/对角线数。

3.3. Horizon Effect 水平线效应

深度限制可能把必然发生的坏事推到搜索边界之外,导致评估函数看不见。

缓解:

  • quiescence search:在局面剧烈变化时继续搜到稳定局面。
  • iterative deepening:逐步加深并保留当前最好结果。

3.4. 随机博弈 Expectiminimax

若有随机事件,如掷骰子,加入 chance 节点。递归:

  • MAX 节点取最大。
  • MIN 节点取最小。
  • Chance 节点取期望:iP(i)value(childi)\sum_i P(i) * \text{value}(\text{child}_i)

低概率考,记住 chance 节点不是 max/min,而是加权平均。

3.5. 不完全信息博弈

如牌类游戏,玩家不知道完整状态。核心概念:

  • belief state:对可能真实状态的概率分布。
  • information set:玩家无法区分的一组状态。

本课只需概念了解。

3.6. MCTS 蒙特卡洛树搜索(不考)

来源:隔壁班 MCTS.pdf。考试重点写"蒙特卡洛不考",这里只保留概念。

MCTS 四步:

  1. Selection:从根按策略选择到叶子。
  2. Expansion:扩展一个新节点。
  3. Simulation/Rollout:随机模拟到终局。
  4. Backpropagation:把结果回传更新访问次数和价值。

常用 UCB/UCT 平衡探索与利用:UCT=exploitation+exploration\text{UCT} = \text{exploitation} + \text{exploration}

直观:

  • exploitation:选择平均回报高的动作。
  • exploration:给访问次数少的动作机会。

AlphaGo 使用过 MCTS,但细节不作为本课考试重点。

4. 考试速查

4.1. 常见判断题

  • Minimax 假设对手也最优:
  • Alpha-beta 会改变 minimax 的最终值:
  • Alpha-beta 剪枝效果与节点顺序无关:
  • MAX 节点取子节点最大值,MIN 节点取最小值:
  • 随机节点取最大值:,应取期望。

4.2. 最后一分钟版

  • Minimax:MAX 取 max,MIN 取 min,自底向上回传。
  • Alpha:MAX 已知最好下界;Beta:MIN 已知最好上界。
  • 剪枝条件:αβ\alpha \geq \beta
  • MAX 节点 vβv \geq \beta 可剪;MIN 节点 vαv \leq \alpha 可剪。
  • Alpha-beta 不改变答案,只减少展开。
  • 深度限制时叶子值是评估值,不一定是真实终局值。

概率与贝叶斯网络大抄

主线:现实中的智能体不能只靠"真/假/未知"行动;概率给出信念程度,完整联合分布原则上能回答所有概率查询,但规模太大;独立性和条件独立性压缩联合分布;贝叶斯网络把条件独立结构画成图,并用枚举、变量消元、朴素贝叶斯等方法做推理和分类。

目录:0. 一句话总图 · 1. 为什么 AI 需要概率 · 3. 概率分布 · 4. 条件概率/乘法/链式 · 5. 用完整联合分布做推理 · 7. 条件独立 · 8. 贝叶斯公式 · 9. 多证据贝叶斯和朴素贝叶斯 · 10. 概率分布从哪里来 · 11. 贝叶斯网络 · 12. d-separation · 13. 如何构建贝叶斯网络 · 14. 精确推理 · 15. 按图写联合分布和按图判独立 · 16. 朴素贝叶斯作为贝叶斯网络 · 17. 考试速查 · 18. 常见坑 · 19. 最后一页压缩版

0. 一句话总图

逻辑推理问的是:KBαKB \models \alpha

概率推理问的是:P(αe)P(\alpha \mid e)

也就是"已经看到证据 ee 后,结论 α\alpha 有多可信"。第 13 章先给概率语言本身,第 14 章再给一种紧凑表示概率分布的图模型:贝叶斯网络。

这两章的知识可以串成一条链:

  1. 不确定性来自部分可观察、传感器噪声、行动结果不确定、模型太复杂、惰性和无知。
  2. 概率把"不确定的命题"变成 [0,1][0, 1] 中的信念程度。
  3. 完整联合分布能回答一切查询,但对 nn 个布尔变量需要指数规模。
  4. 边缘化、条件化、乘法规则、链式法则是概率推理的代数工具。
  5. 独立和条件独立能把巨大联合分布分解成小块。
  6. 贝叶斯网络用有向无环图表达条件独立,用每个节点的 CPT 定义完整联合分布。
  7. 查询时用枚举或变量消元把隐藏变量求和消去,最后归一化。
  8. 朴素贝叶斯是最简单的贝叶斯网络之一,用强条件独立假设换取高效分类。

1. 为什么 AI 需要概率

1.1 逻辑不够用的地方

现实智能体很少能完全确定世界状态。例如出发去机场时,智能体要考虑路况、其他司机、天气、轮胎、交通报告和许多无法完整建模的因素。

如果只用逻辑规则,容易出现两个极端:

  • 规则太强,会推出错误结论,例如"提前 25 分钟出发一定能赶上飞机"。
  • 规则太弱,必须列出所有例外,最后得到难以行动的条件句,例如"如果桥上没事故、不下雨、轮胎没坏、路上不堵……那么可以赶上"。

概率推理把这种问题改写成:

P(OnTimeLeave25,e)=0.04P(\text{OnTime} \mid \text{Leave25}, e) = 0.04

这句话不保证一定到达,也不说完全不知道,而是给出在当前证据 ee 下的信念程度。

课件开头用三个任务提醒你:手写数字识别、文本分类、图像分割本质上都不是"确定地套规则",而是在证据不完整、特征有噪声、类别边界不绝对清楚时做判断。概率模型就是给这些分类判断提供统一语言。

1.2 不确定性的来源

课件把不确定性来源分成几类:

  • 真实随机性:有些过程本身就是概率性的,例如掷骰子、抛硬币。
  • 惰性:严格列举所有例外太费劲,规则太大也难以使用。
  • 理论无知:领域没有完整一致的理论,例如医学诊断。
  • 实践无知:理论上相关因素存在,但当前个案没有收集到所有信息。
  • 传感器噪声:观测结果不一定等于真实状态。
  • 行动结果不确定:同一行动在不同隐藏状态下可能产生不同结果。

所以概率不是"世界必然随机"的同义词,它也可以表示智能体因为信息不足而产生的主观信念。

1.3 频率主义与贝叶斯观点

频率主义把概率看作长期重复试验中的极限频率:

P(A)=limNnANP(A) = \lim_{N \to \infty} \frac{n_A}{N}

其中 nAn_A 是事件 AANN 次机会中发生的次数。这个解释适合抛硬币、抽样检测等可重复实验。

贝叶斯观点把概率看作在不完整知识下对事件可信度的度量。例如"第三次世界大战发生的概率"无法靠大量重复试验定义,但仍可以讨论给定证据下的主观可信度。

AI 中常用贝叶斯观点,因为智能体面对的往往是单次决策、单个病人、单封邮件或单张图片。

1.4 概率和效用分工

概率回答"我相信什么":P(ArriveOnTimea,e)P(\text{ArriveOnTime} \mid a, e)

效用回答"我偏好什么":U(arrive, wait, miss)U(\text{arrive, wait, miss})

决策论把二者合起来:

Decision theory=Probability theory+Utility theory\text{Decision theory} = \text{Probability theory} + \text{Utility theory}

如果提前 1440 分钟出发几乎一定赶上飞机,但要在机场过夜,是否值得取决于效用,而不只取决于概率。

3. 概率分布

3.1 先验概率和概率分布

先验概率是在没有新证据时对命题的信念:P(Cavity=true)=0.1P(\text{Cavity} = \text{true}) = 0.1

一个随机变量的概率分布给出它所有可能取值的概率。例如:

P(Weather)=0.72,0.10,0.08,0.10P(\text{Weather}) = \langle 0.72, 0.10, 0.08, 0.10 \rangle

它是归一化的:wP(Weather=w)=1\sum_w P(\text{Weather} = w) = 1

3.2 完整联合分布

完整联合分布给出一组随机变量每种完整赋值的概率。若变量为 X1,,XnX_1, \dots, X_n,完整联合分布就是:

P(X1,,Xn)P(X_1, \dots, X_n)

nn 个布尔变量,需要 2n2^n 个原子事件概率;因为总和必须为 1,独立参数数目是:2n12^n - 1

完整联合分布的优点是原则上能回答所有查询。缺点也非常致命:变量稍多就无法存储、无法人工填写、无法高效求和。

3.3 边缘分布和边缘化

边缘化就是把不关心的变量求和消掉。若有联合分布 P(A,B)P(A, B),则:

P(A)=bP(A,b)P(A) = \sum_b P(A, b)

若变量更多:

P(A)=bcP(A,b,c)P(A) = \sum_b \sum_c P(A, b, c)

更一般地,对命题 φ\varphi

P(φ)=ω:ωφP(ω)P(\varphi) = \sum_{\omega:\, \omega \models \varphi} P(\omega)

其中 ω\omega 是原子事件。

4. 条件概率、乘法规则和链式法则

4.1 条件概率

条件概率表示在证据 BB 已知为真后,对 AA 的信念:

P(AB)=P(A,B)P(B)P(A \mid B) = \frac{P(A, B)}{P(B)}

前提是:P(B)>0P(B) > 0。条件概率也满足概率公理。例如 0P(Ae)10 \leq P(A \mid e) \leq 1。对变量 AA 的所有取值 a1,,aka_1, \dots, a_ki=1kP(A=aie)=1\sum_{i=1}^{k} P(A = a_i \mid e) = 1。布尔变量有:P(¬ae)=1P(ae)P(\lnot a \mid e) = 1 - P(a \mid e)

4.2 乘法规则

条件概率定义可改写为乘法规则:

P(AB)=P(AB)P(B)P(A \land B) = P(A \mid B)P(B)

也可以写成:P(AB)=P(BA)P(A)P(A \land B) = P(B \mid A)P(A)。因此:P(AB)P(B)=P(BA)P(A)P(A \mid B)P(B) = P(B \mid A)P(A)

4.3 链式法则

链式法则由乘法规则反复使用得到:

P(X1,,Xn)=i=1nP(XiX1,,Xi1)P(X_1, \dots, X_n) = \prod_{i=1}^{n} P(X_i \mid X_1, \dots, X_{i-1})

例如:

P(A,B,C)=P(AB,C)P(BC)P(C)P(A, B, C) = P(A \mid B, C)\,P(B \mid C)\,P(C)

也可以按其他顺序写:P(A,B,C)=P(CA,B)P(BA)P(A)P(A, B, C) = P(C \mid A, B)\,P(B \mid A)\,P(A)

没有独立性假设时,不能随便把联合概率拆成 P(A)P(B)P(C)P(A)P(B)P(C)。但链式法则永远成立,只是条件项可能很复杂。

5. 用完整联合分布做推理

5.1 枚举推理思想

如果手里有完整联合分布,任何查询都可以通过枚举原子事件来做。查询 P(YE=e)P(Y \mid E = e),设隐藏变量为 H=XYEH = X - Y - E,则:

P(YE=e)=αP(Y,E=e)P(Y \mid E = e) = \alpha\, P(Y, E = e)

其中:

P(Y,E=e)=hP(Y,E=e,H=h)P(Y, E = e) = \sum_h P(Y, E = e, H = h)

归一化常数 α\alpha 让查询变量所有取值的概率和为 1。

5.2 归一化

很多推理题不必先算分母,可以先算未归一化向量。例如:

P(Cavityt)=αP(Cavity,t)P(\text{Cavity} \mid t) = \alpha\, P(\text{Cavity}, t)

若求和得到 P(Cavity,t)=0.12,0.08P(\text{Cavity}, t) = \langle 0.12, 0.08 \rangle,则归一化:

α=10.12+0.08=5\alpha = \frac{1}{0.12 + 0.08} = 5

所以:P(Cavityt)=0.6,0.4P(\text{Cavity} \mid t) = \langle 0.6, 0.4 \rangle

考试中常写成 Q(x)=P(x,e)Q(x) = P(x, e),再用:

P(xe)=Q(x)xQ(x)P(x \mid e) = \frac{Q(x)}{\sum_{x'} Q(x')}

5.3 完整联合分布推理的问题

若最大变量取值数为 dd,变量数为 nn,枚举完整联合分布最坏时间复杂度为 O(dn)O(d^n),存储完整联合分布也需要 O(dn)O(d^n)

此外还要问:这些 O(dn)O(d^n) 个概率从哪里来?这直接引出独立性、条件独立性和贝叶斯网络。

7. 条件独立

7.1 条件独立的定义

AABB 在给定 CC 后条件独立,记为 ABCA \perp B \mid C,等价写法:

P(AB,C)=P(AC)P(A \mid B, C) = P(A \mid C)

P(BA,C)=P(BC)P(B \mid A, C) = P(B \mid C)

P(A,BC)=P(AC)P(BC)P(A, B \mid C) = P(A \mid C)P(B \mid C)

含义:在已经知道 CC 后,BB 不再给 AA 提供额外信息。

7.2 条件独立不等于独立

报警器例子:

  • JohnCalls:John 打电话。
  • MaryCalls:Mary 打电话。
  • Alarm:警报响。

不观测警报时,John 打电话会提高 Mary 打电话的概率,因为它暗示警报可能响了:

P(MaryCallsJohnCalls)P(MaryCalls)P(\text{MaryCalls} \mid \text{JohnCalls}) \neq P(\text{MaryCalls})

但若已经知道警报状态,John 是否打电话不再影响 Mary 是否打电话:

P(MaryCallsAlarm, JohnCalls)=P(MaryCallsAlarm)P(\text{MaryCalls} \mid \text{Alarm, JohnCalls}) = P(\text{MaryCalls} \mid \text{Alarm})

所以二者不独立,但在给定 Alarm 后条件独立。

8. 贝叶斯公式

8.1 贝叶斯公式

由乘法规则 P(AB)=P(AB)P(B)=P(BA)P(A)P(A \land B) = P(A \mid B)P(B) = P(B \mid A)P(A) 得到贝叶斯公式:

P(AB)=P(BA)P(A)P(B)P(A \mid B) = \frac{P(B \mid A)P(A)}{P(B)}

若把假设写成 HH,证据写成 ee

P(He)=P(eH)P(H)P(e)P(H \mid e) = \frac{P(e \mid H)P(H)}{P(e)}

其中:

  • P(H)P(H) 是先验。
  • P(eH)P(e \mid H) 是似然。
  • P(He)P(H \mid e) 是后验。
  • P(e)P(e) 是证据概率,也是归一化分母。

常用归一化写法:P(He)=αP(eH)P(H)P(H \mid e) = \alpha\, P(e \mid H)P(H)

8.2 为什么贝叶斯公式重要

很多领域中,因果概率容易给出,诊断概率才是我们想问的。

  • 因果方向:P(EffectCause)P(\text{Effect} \mid \text{Cause})
  • 诊断方向:P(CauseEffect)P(\text{Cause} \mid \text{Effect})

贝叶斯公式把二者联系起来:

P(CauseEffect)=P(EffectCause)P(Cause)P(Effect)P(\text{Cause} \mid \text{Effect}) = \frac{P(\text{Effect} \mid \text{Cause})P(\text{Cause})}{P(\text{Effect})}

这也是为什么很多 AI 系统(如语音识别和机器翻译)会把难求的后验转为更容易估计的似然和先验。

8.3 全概率公式展开分母

B1,,BkB_1, \dots, B_k 构成互斥完备划分,则:

P(A)=iP(ABi)P(Bi)P(A) = \sum_i P(A \mid B_i)P(B_i)

布尔情形:P(A)=P(AB)P(B)+P(A¬B)P(¬B)P(A) = P(A \mid B)P(B) + P(A \mid \lnot B)P(\lnot B)

贝叶斯题里分母通常就是用全概率公式展开。

9. 多证据贝叶斯和朴素贝叶斯

9.1 多证据贝叶斯

若一个原因 CC 产生多个证据 E1,,EnE_1, \dots, E_n,贝叶斯公式给出:

P(CE1,,En)=αP(E1,,EnC)P(C)P(C \mid E_1, \dots, E_n) = \alpha\, P(E_1, \dots, E_n \mid C)P(C)

如果给定原因 CC 后,各证据条件独立 EiEjCE_i \perp E_j \mid C,则:

P(E1,,EnC)=iP(EiC)P(E_1, \dots, E_n \mid C) = \prod_i P(E_i \mid C)

于是:

P(CE1,,En)=αP(C)iP(EiC)P(C \mid E_1, \dots, E_n) = \alpha\, P(C) \prod_i P(E_i \mid C)

这就是朴素贝叶斯的核心。

9.2 朴素贝叶斯假设

朴素贝叶斯假设是:给定类别 YY 后,所有属性 X1,,XnX_1, \dots, X_n 条件独立。

P(X1,,XnY)=iP(XiY)P(X_1, \dots, X_n \mid Y) = \prod_i P(X_i \mid Y)

分类时:

y^=argmaxyP(yx1,,xn)\hat{y} = \arg\max_y P(y \mid x_1, \dots, x_n)

由贝叶斯公式:

y^=argmaxyP(y)iP(xiy)\hat{y} = \arg\max_y P(y) \prod_i P(x_i \mid y)

注意:朴素贝叶斯不是说特征无条件独立,而是说它们在给定类别后条件独立。

9.3 文本分类

文本分类中:

  • CC:文档类别。
  • WiW_i:第 ii 个词是否出现。

模型参数:P(C=c)P(C = c)P(Wi=trueC=c)P(W_i = \text{true} \mid C = c)

训练时:

P(C=c)=#{类别为 c 的文档}#{全部文档}P(C = c) = \frac{\#\{\text{类别为 } c \text{ 的文档}\}}{\#\{\text{全部文档}\}}

P(Wi=trueC=c)=#{类别 c 中包含词 i 的文档}#{类别为 c 的文档}P(W_i = \text{true} \mid C = c) = \frac{\#\{\text{类别 } c \text{ 中包含词 } i \text{ 的文档}\}}{\#\{\text{类别为 } c \text{ 的文档}\}}

分类新文档:

score(c)=P(C=c)iP(Wi=wiC=c)\text{score}(c) = P(C = c) \prod_i P(W_i = w_i \mid C = c)

为避免连乘下溢,实际常取对数:

logscore(c)=logP(C=c)+ilogP(Wi=wiC=c)\log \text{score}(c) = \log P(C = c) + \sum_i \log P(W_i = w_i \mid C = c)

需要平滑,否则某个词从未出现会让整个乘积变成 0。最常见是拉普拉斯平滑:

P(Wi=trueC=c)=Nic+1Nc+2P(W_i = \text{true} \mid C = c) = \frac{N_{ic} + 1}{N_c + 2}

其中 NicN_{ic} 是类别 cc 中包含词 ii 的文档数,NcN_c 是类别 cc 的文档数,布尔词特征有两个取值。

9.4 数字识别例子

手写数字识别可以把每个像素位置作为一个特征:Fij{on, off}F_{ij} \in \{\text{on, off}\},类别是数字 D{0,1,,9}D \in \{0, 1, \dots, 9\}

朴素贝叶斯模型:

P(D,F11,F12,)=P(D)i,jP(FijD)P(D, F_{11}, F_{12}, \dots) = P(D) \prod_{i,j} P(F_{ij} \mid D)

要学习的是类别先验 P(D)P(D) 和每个数字下每个像素亮灭的条件概率表。它忽略了相邻像素之间的相关性,但换来了非常简单的学习和推理。

10. 概率分布从哪里来

10.1 三种来源

课件给了三种来源:

  1. 专家给出:例如医生、工程师或领域专家直接估计条件概率。
  2. 简单概率事实加代数推导:用乘法规则、链式法则、独立假设组合出联合分布。
  3. 从数据中学习:机器学习的很大一部分就是学习概率模型的参数或结构。

专家估计并不简单,例如问"冷天时下雨概率是多少"就可能很难稳定回答。

10.2 最大似然估计

估计一个离散随机变量 XX 的分布时,最大似然估计使用经验频率:

P^(X=x)=NxN\hat{P}(X = x) = \frac{N_x}{N}

其中 NxN_x 是观测到 X=xX = x 的次数,NN 是总观测次数。这个估计最大化观测数据出现的似然:L(θ)=P(Dθ)L(\theta) = P(D \mid \theta)

10.3 最大似然的问题和先验

如果只抛一次硬币且结果为正面,最大似然会给 P^(Heads)=1\hat{P}(\text{Heads}) = 1,这显然过于激进。课件强调一个基本思想:

  • 证据很少时,估计应更多受先验影响。
  • 证据很多时,估计应更多听数据。

这也是平滑和贝叶斯参数估计的动机。朴素贝叶斯中文本分类必须加平滑,就是为了避免小样本下把未见事件估为 0。

11. 贝叶斯网络

11.1 图模型是什么

概率图模型把概率分布和图论结合起来:

  • 节点表示随机变量或变量组。
  • 边表示变量之间的概率关系。

图结构帮助人理解模型,也帮助算法设计高效推理。图模型的价值:

  1. 可视化复杂概率模型结构。
  2. 从图中读出条件独立性质。
  3. 把复杂推理和学习变成图上的操作。

有向图模型包括贝叶斯网络;无向图模型包括马尔可夫随机场。贝叶斯网络更常用于表示因果关系,马尔可夫随机场更适合表示软约束。

11.2 贝叶斯网络的语法

贝叶斯网络是一个有向无环图,即 DAG。它包含:

  • 一组节点,每个节点对应一个随机变量。
  • 有向边,ABA \to B 表示 AA 直接影响 BBAABB 的父亲。
  • 如果两个节点之间没有直接的边相连,这意味着它们在给定某些其他变量的条件下是条件独立的。

每个节点有一个条件概率分布:P(XiParents(Xi))P(X_i \mid \text{Parents}(X_i))。注意是 P(XiParents(Xi))P(X_i \mid \text{Parents}(X_i)) 即所有父亲的组合条件概率。离散情形中,这个条件概率分布通常写成 CPT(条件概率表),若没有父亲,就是先验概率。

11.3 贝叶斯网络的全局语义

贝叶斯网络的拓扑结构和所有 CPT 一起定义完整联合分布:

P(X1,,Xn)=iP(XiParents(Xi))P(X_1, \dots, X_n) = \prod_i P(X_i \mid \text{Parents}(X_i))

这是贝叶斯网络最常用公式。题目给图和 CPT,要求写联合概率时,先按每个节点的父节点列出这一乘积。

例:若图为 ACB,  CDA \to C \leftarrow B,\; C \to D,则:

P(A,B,C,D)=P(A)P(B)P(CA,B)P(DC)P(A, B, C, D) = P(A)\,P(B)\,P(C \mid A, B)\,P(D \mid C)

若求某个具体原子事件,如 P(a,¬b,c,d)P(a, \lnot b, c, d),就把对应真假值代入每个 CPT;遇到假值要用补概率:P(¬Xu)=1P(Xu)P(\lnot X \mid u) = 1 - P(X \mid u)

11.4 参数量优势

完整联合分布对 nn 个布尔变量需要 2n12^n - 1 个独立参数。

若每个布尔节点最多有 kk 个布尔父节点,每个 CPT 有 2k2^k 行,每行只需一个参数:O(n2k)O(n \cdot 2^k)。如果 kk 很小,贝叶斯网络随变量数近似线性增长。

课件的报警器网络有五个布尔变量:Burglary、Earthquake、Alarm、JohnCalls、MaryCalls。完整联合分布需要 251=312^5 - 1 = 31 个独立参数。按因果网络:

  • Burglary → Alarm
  • Earthquake → Alarm
  • Alarm → JohnCalls
  • Alarm → MaryCalls

参数数目为:1+1+4+2+2=101 + 1 + 4 + 2 + 2 = 10。这就是结构化表示的威力。

11.5 贝叶斯网络的局部语义

局部语义:给定父节点后,一个节点与它的所有非后代节点条件独立。若节点为 XiX_i,父节点为 Parents(Xi)\text{Parents}(X_i),非后代集合为 NonDescendants(Xi)\text{NonDescendants}(X_i),则:

XiNonDescendants(Xi)Parents(Xi)X_i \perp \text{NonDescendants}(X_i) \mid \text{Parents}(X_i)

课件结论:local semantics ⟺ global semantics。也就是说,局部条件独立断言和全联合分布的乘积分解是等价的。

12. 贝叶斯网络节点独立性判断(d-separation)

12.1 链式结构

结构:XYZX \to Y \to Z

不观测 YY 时,XX 可能影响 ZZ,二者通常相关。给定 YY 后,路径被阻断:XZYX \perp Z \mid Y

直觉:如果已经知道中间状态 YY,更早的原因 XX 对更晚结果 ZZ 不再提供额外信息。

12.2 共同原因结构

结构:XYZX \leftarrow Y \to Z

YYXXZZ 的共同原因。不观测 YY 时,XXZZ 通常相关;给定 YY 后,路径被阻断:XZYX \perp Z \mid Y

直觉:如果已经知道共同原因,两个结果之间的相关性被解释掉。

12.3 共同结果结构

结构:XYZX \to Y \leftarrow Z

YY 是 collider,也叫共同结果或 V-structure。

  • 不观测 YY 及其后代时,路径阻断:XZX \perp Z
  • 但若观测 YYYY 的后代,路径被打开:X⊥̸ZYX \not\perp Z \mid Y

这叫 explaining away。例子:下雨和球赛都会导致交通堵塞;若看到堵车,知道有球赛会降低"下雨导致堵车"的后验概率。

12.4 d-separation 判断步骤

判断 AABB 在给定证据集合 EE 后是否条件独立:

  1. 把有向图当成无向图,列出 AABB 的所有路径。
  2. 对每条路径检查是否被阻断。
  3. 链式节点和共同原因节点若被观测,则阻断路径。
  4. collider 节点若自身及其后代都未被观测,则阻断路径。
  5. 只有所有路径都被阻断,才有条件独立。

考试记忆:

  • 链和 fork:观测中间点会堵住。
  • collider:默认堵住,观测它或它的后代会打开。

12.5 马尔可夫毯

一个节点的马尔可夫毯包括:父节点;子节点;子节点的其他父节点。

给定马尔可夫毯后,该节点与网络中其他所有节点条件独立:

XrestMB(X)X \perp \text{rest} \mid MB(X)

这是贝叶斯网络中局部推理和采样算法的重要概念;若考试只考概念,记清楚"父、子、子之父"。

13. 如何构建贝叶斯网络

13.1 一般构建算法

课件给出构建网络的方法:

  1. 选择变量顺序:X1,,XnX_1, \dots, X_n
  2. i=1i = 1nn,把 XiX_i 加入网络。
  3. 从更早变量 X1,,Xi1X_1, \dots, X_{i-1} 中选择父节点,使:

P(XiParents(Xi))=P(XiX1,,Xi1)P(X_i \mid \text{Parents}(X_i)) = P(X_i \mid X_1, \dots, X_{i-1})

  1. 尽量选择满足这个条件的最小父集。

这样做保证:

P(X1,,Xn)=iP(XiX1,,Xi1)=iP(XiParents(Xi))P(X_1, \dots, X_n) = \prod_i P(X_i \mid X_1, \dots, X_{i-1}) = \prod_i P(X_i \mid \text{Parents}(X_i))

第一步来自链式法则,第二步来自父节点选择。

13.2 为什么因果顺序通常更好

若网络反映真实因果模式,通常:节点父节点更少;人更容易判断条件概率;专家更容易给出 CPT;网络更紧凑,推理可能更高效。

报警器例子用因果方向只需 10 个参数。如果采用非因果顺序(如先加 MaryCalls、再加 JohnCalls、再加 Alarm 等),判断条件独立会更难,参数可能增加到 13 个。

13.3 箭头不一定等于因果

贝叶斯网络的箭头真正编码的是条件独立结构,不一定是世界中的真实因果关系。如果模型里缺少关键变量,或者领域本身没有清晰因果结构,箭头可能只是在表达相关性。正确态度是:

  • 因果方向常常更自然、更紧凑。
  • 但 BN 的数学语义是联合分布分解和条件独立,不是因果干预语义。

13.4 望远镜作业题

变量:

  • NN:真实恒星数。
  • F1,F2F_1, F_2:两个望远镜是否失焦。
  • M1,M2M_1, M_2:两次测量结果。

合理因果结构:NM1,  F1M1,  NM2,  F2M2N \to M_1,\; F_1 \to M_1,\; N \to M_2,\; F_2 \to M_2

真实恒星数影响观测结果,望远镜状态也影响观测结果。不要把观测值画成真实恒星数的原因。给定 N,F1,F2N, F_1, F_2 后:M1M2N,F1,F2M_1 \perp M_2 \mid N, F_1, F_2。若只给定 NN,还要看 F1F_1F2F_2 是否独立以及图中是否有其他路径。

14. 贝叶斯网络中的概率计算

14.1 常见概率计算

  • 简单查询:P(XiE=e)P(X_i \mid E = e),例如 P(NoGasGauge=empty, Lights=on, Starts=false)P(\text{NoGas} \mid \text{Gauge} = \text{empty, Lights} = \text{on, Starts} = \text{false})
  • 联合查询:P(Xi,XjE=e)P(X_i, X_j \mid E = e),可以分解为 P(Xi,XjE=e)=P(XiE=e)P(XjXi,E=e)P(X_i, X_j \mid E = e) = P(X_i \mid E = e)\,P(X_j \mid X_i, E = e)
  • 决策网络还会加入效用信息,但仍需要概率推理来计算 P(OutcomeAction, Evidence)P(\text{Outcome} \mid \text{Action, Evidence})

14.2 用例

为了把概率计算讲清楚,下面都用同一个贝叶斯网络:AC,  BC,  CDA \to C,\; B \to C,\; C \to D,其中 A,BA, B 是根节点,CC 的父节点是 A,BA, BDD 的父节点是 CC。这张图的联合分布分解为:

P(A,B,C,D)=P(A)P(B)P(CA,B)P(DC)P(A, B, C, D) = P(A)\,P(B)\,P(C \mid A, B)\,P(D \mid C)

这一个式子是所有概率计算的起点。考试时不管问什么,第一步都应先写出这个联合分解,再决定哪些变量代入、哪些变量求和、是否需要归一化。

四类变量身份:

  • 查询变量:题目最终要你求分布的变量,例如 AA
  • 证据变量:条件竖线右边已经观测到的变量,例如 dd
  • 隐藏变量:既不是查询,也不是证据,但网络里存在,必须求和消掉,例如求 P(Ad)P(A \mid d) 时的 B,CB, C
  • 被固定变量:在完整联合事件中已经给定取值的变量,例如 P(a,¬b,c,d)P(a, \lnot b, c, d) 中四个变量都被固定。

判断一道 BN 概率题怎么做,其实就是先给每个变量分身份。

14.3 第一类:完整联合概率怎么计算

完整联合概率指所有变量都给了具体取值,例如 P(a,¬b,c,d)P(a, \lnot b, c, d)。这种题不用求和,也不用归一化,只要按图分解并代入 CPT:

P(a,¬b,c,d)=P(a)P(¬b)P(ca,¬b)P(dc)P(a, \lnot b, c, d) = P(a)\,P(\lnot b)\,P(c \mid a, \lnot b)\,P(d \mid c)

如果 CPT 只给 P(b)P(b),没有直接给 P(¬b)P(\lnot b),就用补概率:P(¬b)=1P(b)P(\lnot b) = 1 - P(b)。如果 CPT 只给 P(ca,¬b)P(c \mid a, \lnot b),而题目要 P(¬ca,¬b)P(\lnot c \mid a, \lnot b),也用补概率:P(¬ca,¬b)=1P(ca,¬b)P(\lnot c \mid a, \lnot b) = 1 - P(c \mid a, \lnot b)

考试口诀:完整联合概率就是"每个节点查一次表,根节点查先验,非根节点查父节点条件下的 CPT,然后全部相乘"。

14.4 第二类:边缘概率怎么计算

边缘概率是只问某些变量,不关心其他变量。例如 P(d)P(d)。网络里还有 A,B,CA, B, C,它们没有出现在查询中,也不是证据,所以都是隐藏变量。完整写法是:

P(d)=abcP(a,b,c,d)P(d) = \sum_a \sum_b \sum_c P(a, b, c, d)

再代入 BN 分解:

P(d)=abcP(a)P(b)P(ca,b)P(dc)P(d) = \sum_a \sum_b \sum_c P(a)\,P(b)\,P(c \mid a, b)\,P(d \mid c)

如果 A,B,CA, B, C 都是布尔变量,展开共有八种情况。这就是"边缘化":把没有问、没有观测的变量全部枚举并加起来。

14.5 第三类:部分联合概率怎么计算

部分联合概率给了一部分变量的取值,但没有竖线,例如 P(a,d)P(a, d)。这里 A,DA, D 被固定,B,CB, C 没出现,所以 B,CB, C 是隐藏变量:

P(a,d)=bcP(a,b,c,d)P(a, d) = \sum_b \sum_c P(a, b, c, d)

代入 BN 分解:

P(a,d)=bcP(a)P(b)P(ca,b)P(dc)P(a, d) = \sum_b \sum_c P(a)\,P(b)\,P(c \mid a, b)\,P(d \mid c)

展开 b,cb, c 所有情况。注意:部分联合概率没有条件竖线,因此最后不需要归一化;它本身就是一个普通概率。

14.6 第四类:条件概率怎么计算

条件概率最原始的定义是:

P(Xe)=P(X,e)P(e)P(X \mid e) = \frac{P(X, e)}{P(e)}

在 BN 题里通常不用直接算大分母,而是用归一化:P(Xe)=αP(X,e)P(X \mid e) = \alpha\, P(X, e),其中 α\alphaXX 的所有取值加起来等于 1。

例如求 P(ca,b,d)P(c \mid a, b, d),查询变量是 CC,证据是 a,b,da, b, d。没有隐藏变量,因为四个变量都已经出现在查询或证据中。先算两个未归一化值:

q(c)=P(c,a,b,d)=P(a)P(b)P(ca,b)P(dc)q(c) = P(c, a, b, d) = P(a)\,P(b)\,P(c \mid a, b)\,P(d \mid c)

q(¬c)=P(¬c,a,b,d)=P(a)P(b)P(¬ca,b)P(d¬c)q(\lnot c) = P(\lnot c, a, b, d) = P(a)\,P(b)\,P(\lnot c \mid a, b)\,P(d \mid \lnot c)

归一化:

P(ca,b,d)=q(c)q(c)+q(¬c)=P(ca,b)P(dc)P(ca,b)P(dc)+P(¬ca,b)P(d¬c)P(c \mid a, b, d) = \frac{q(c)}{q(c) + q(\lnot c)} = \frac{P(c \mid a, b)\,P(d \mid c)}{P(c \mid a, b)\,P(d \mid c) + P(\lnot c \mid a, b)\,P(d \mid \lnot c)}

上下都有 P(a)P(b)P(a)P(b),可以约掉。这一步很重要:证据中有些项会在归一化时抵消,但不要一开始凭感觉删,先写联合分解,再看哪些因子在查询变量不同取值下相同。

14.7 第五类:有隐藏变量的后验怎么计算

考试最常见的是这种:问一个变量的后验,但网络里有隐藏变量。例如 P(Ac,d)P(A \mid c, d),查询变量是 AA,证据是 c,dc, d,隐藏变量是 BB

第一步,条件概率转联合概率:

P(Ac,d)=αP(A,c,d)P(A \mid c, d) = \alpha\, P(A, c, d)

第二步,展开隐藏变量求:

P(A,c,d)=bP(A,b,c,d)P(A, c, d) = \sum_b P(A, b, c, d)

第三步,代入 BN 分解:

P(A,c,d)=bP(A)P(b)P(cA,b)P(dc)P(A, c, d) = \sum_b P(A)\,P(b)\,P(c \mid A, b)\,P(d \mid c)

第四步,把与隐藏变量无关的概率提出来,其中由证据变量确定的常数概率可以在归一化时消掉:

P(A,d)=P(A)P(dc)bP(b)cP(cA,b)P(A, d) = P(A)\,P(d \mid c) \sum_b P(b) \sum_c P(c \mid A, b)

第五步,分别计算 A=aA = aA=¬aA = \lnot a 的未归一化值(P(dc)P(d \mid c) 省略):

q(a)=P(a)bP(b)P(ca,b)q(a) = P(a) \sum_b P(b)\,P(c \mid a, b)

q(¬a)=P(¬a)bP(b)P(c¬a,b)q(\lnot a) = P(\lnot a) \sum_b P(b)\,P(c \mid \lnot a, b)

第六步,归一化:

P(ad)=q(a)q(a)+q(¬a),P(¬ad)=q(¬a)q(a)+q(¬a)P(a \mid d) = \frac{q(a)}{q(a) + q(\lnot a)}, \quad P(\lnot a \mid d) = \frac{q(\lnot a)}{q(a) + q(\lnot a)}

如果题目只问 P(ad)P(a \mid d),也必须计算 q(¬a)q(\lnot a),因为它在分母里。除非题目给了 P(d)P(d),否则不能跳过归一化分母。

14.8 第六类:证据概率怎么计算

有时题目会问证据本身概率,例如 P(d)P(d),就是把所有非证据变量求和:

P(d)=abcP(a,b,c,d)P(d) = \sum_a \sum_b \sum_c P(a, b, c, d)

或者利用上一节的未归一化值:P(d)=q(a)+q(¬a)P(d) = q(a) + q(\lnot a),其中 q(a)=P(a,d)q(a) = P(a, d)q(¬a)=P(¬a,d)q(\lnot a) = P(\lnot a, d)。所以后验计算中的归一化分母其实就是证据概率:

P(ad)=P(a,d)P(d),P(d)=P(a,d)+P(¬a,d)P(a \mid d) = \frac{P(a, d)}{P(d)}, \quad P(d) = P(a, d) + P(\lnot a, d)

14.9 第七类:多个查询变量怎么计算

如果问 P(A,Cd)P(A, C \mid d),查询变量是二元组 (A,C)(A, C),证据是 dd,隐藏变量是 BB

先写未归一化:P(A,Cd)=αP(A,C,d)P(A, C \mid d) = \alpha\, P(A, C, d)。对隐藏变量 BB 求和:

P(A,C,d)=bP(A)P(b)P(CA,b)P(dC)P(A, C, d) = \sum_b P(A)\,P(b)\,P(C \mid A, b)\,P(d \mid C)

然后要对查询变量 (A,C)(A, C) 的所有组合归一化。若 A,CA, C 都是布尔变量,则需要四个未归一化值:q(a,c),  q(a,¬c),  q(¬a,c),  q(¬a,¬c)q(a, c),\; q(a, \lnot c),\; q(\lnot a, c),\; q(\lnot a, \lnot c)

归一化分母是四者之和:

P(a,cd)=q(a,c)q(a,c)+q(a,¬c)+q(¬a,c)+q(¬a,¬c)P(a, c \mid d) = \frac{q(a, c)}{q(a, c) + q(a, \lnot c) + q(\lnot a, c) + q(\lnot a, \lnot c)}

多变量查询不是只算一个数,而是算一个联合后验分布。

14.10 什么时候可以消掉某个证据

不是所有证据都会影响查询。是否能消掉,要看条件独立。例如在示例网络中 ACDA \to C \to D 并且 BCB \to C。如果已经给定 CC,那么 DDCC 的子节点,DDAA 的信息会被 CC 阻断:ADCA \perp D \mid C,所以 P(Ac,d)=P(Ac)P(A \mid c, d) = P(A \mid c)

从代数上也能看出来:

P(A,c,d)=bP(A)P(b)P(cA,b)P(dc)P(A, c, d) = \sum_b P(A)\,P(b)\,P(c \mid A, b)\,P(d \mid c)

因为 P(dc)P(d \mid c)AAbb 都无关,对不同 AA 取值只是共同常数,归一化时会抵消:

P(Ac,d)=αP(dc)P(A)bP(b)P(cA,b)P(A \mid c, d) = \alpha\, P(d \mid c)\, P(A) \sum_b P(b)\,P(c \mid A, b)

抵消后:P(Ac,d)=αP(A)bP(b)P(cA,b)=P(Ac)P(A \mid c, d) = \alpha' P(A) \sum_b P(b)\,P(c \mid A, b) = P(A \mid c)

考试中可以用 d-separation 快速判断,也可以用这种"写出联合,看公共因子是否抵消"的方法验证。

14.11 变量消元

枚举推理会重复计算。变量消元把 CPT 看成因子,逐个消去隐藏变量,保存中间结果。步骤:

  1. 把每个 CPT 写成因子。
  2. 代入证据,删除或固定与证据不一致的行。
  3. 选择一个隐藏变量 ZZ
  4. 收集所有包含 ZZ 的因子。
  5. 将这些因子相乘。
  6. ZZ 求和,得到不含 ZZ 的新因子。
  7. 重复直到隐藏变量消完。
  8. 剩余因子相乘并归一化。

核心操作:

g(U)=zjfj(z,Uj)g(U) = \sum_z \prod_j f_j(z, U_j)

其中 fjf_j 是包含 ZZ 的因子,求和后新因子 gg 不再含 ZZ

14.12 变量消元完整推导:计算 P(A|d)

仍用示例网络:P(A,B,C,D)=P(A)P(B)P(CA,B)P(DC)P(A, B, C, D) = P(A)\,P(B)\,P(C \mid A, B)\,P(D \mid C),要求 P(Ad)P(A \mid d)

第一步:写初始因子。

fA(A)=P(A)f_A(A) = P(A)

fB(B)=P(B)f_B(B) = P(B)

fC(C,A,B)=P(CA,B)f_C(C, A, B) = P(C \mid A, B)

fD(D,C)=P(DC)f_D(D, C) = P(D \mid C)

第二步:代入证据 dd DD 已经固定为 dd,所以 fD(D,C)f_D(D, C) 缩成只关于 CC 的因子:fd(C)=P(dC)f_d(C) = P(d \mid C)

现在要计算:

P(Ad)=αfA(A)bcfB(b)fC(c,A,b)fd(c)P(A \mid d) = \alpha\, f_A(A) \sum_b \sum_c f_B(b)\, f_C(c, A, b)\, f_d(c)

第三步:选择消元顺序。 隐藏变量是 B,CB, C。选择先消去 CC,再消去 BB

第四步:消去 CC 包含 CC 的因子是 fC(C,A,B),  fd(C)f_C(C, A, B),\; f_d(C)。先相乘,再对 CC 求和,得到新因子 h(A,B)h(A, B)

h(A,B)=cfC(c,A,B)fd(c)h(A, B) = \sum_c f_C(c, A, B)\, f_d(c)

代回 CPT 记号:

h(A,B)=P(cA,B)P(dc)+P(¬cA,B)P(d¬c)h(A, B) = P(c \mid A, B)\,P(d \mid c) + P(\lnot c \mid A, B)\,P(d \mid \lnot c)

第五步:消去 BB 现在包含 BB 的因子是 fB(B),  h(A,B)f_B(B),\; h(A, B)。相乘并对 BB 求和,得到新因子 r(A)r(A)

r(A)=bfB(b)h(A,b)=P(b)h(A,b)+P(¬b)h(A,¬b)r(A) = \sum_b f_B(b)\, h(A, b) = P(b)\,h(A, b) + P(\lnot b)\,h(A, \lnot b)

第六步:乘上剩余因子。 剩余关于 AA 的因子是 fA(A)f_A(A),所以未归一化结果为:

q(A)=fA(A)r(A)=P(A)r(A)q(A) = f_A(A)\, r(A) = P(A)\, r(A)

分别取 A=aA = aA=¬aA = \lnot aq(a)=P(a)r(a)q(a) = P(a)\,r(a)q(¬a)=P(¬a)r(¬a)q(\lnot a) = P(\lnot a)\,r(\lnot a)

第七步:归一化。

P(ad)=q(a)q(a)+q(¬a),P(¬ad)=q(¬a)q(a)+q(¬a)P(a \mid d) = \frac{q(a)}{q(a) + q(\lnot a)}, \quad P(\lnot a \mid d) = \frac{q(\lnot a)}{q(a) + q(\lnot a)}

这和枚举推理得到的结果完全相同,只是变量消元把公共中间量 h(A,B)h(A, B)r(A)r(A) 存了下来,避免重复展开。

14.13 变量消元为什么更好

枚举推理像从联合分布中反复算同样的子表达式。变量消元把这些子表达式缓存成因子,避免重复。但变量消元并非总是多项式。复杂度主要由消元过程中产生的最大因子决定,而最大因子大小又取决于图结构和消元顺序。

14.14 精确推理复杂度

  • 单连通网络或多树:任意两个节点之间最多只有一条无向路径。若最大取值数为 dd,相关宽度为 kk,变量数为 nn,变量消元在多树上的时间和空间复杂度可写为 O(dkn)O(d^k n)。当 kk 很小时,它随网络规模近似线性。
  • 多连通网络:一般精确推理是 NP-hard。课件还指出它等价于计数 3SAT 模型,因此也涉及 #P-complete。

结论:贝叶斯网络让很多模型可推理,但一般图上的精确推理仍然很难。

15. 按图写联合分布和按图判独立

15.1 联合分布题模板

拿到 BN 图后,先为每个节点写它的父节点,然后套公式:

P(X1,,Xn)=iP(XiParents(Xi))P(X_1, \dots, X_n) = \prod_i P(X_i \mid \text{Parents}(X_i))

例:IP,  HP,  HL,  PE,  LEI \to P,\; H \to P,\; H \to L,\; P \to E,\; L \to E,联合分布:

P(I,H,L,P,E)=P(I)P(H)P(LH)P(PI,H)P(EP,L)P(I, H, L, P, E) = P(I)\,P(H)\,P(L \mid H)\,P(P \mid I, H)\,P(E \mid P, L)

如果题目给具体真假值,如 P(i,h,¬l,p,e)P(i, h, \lnot l, p, e),就写 P(i)P(h)P(¬lh)P(pi,h)P(ep,¬l)P(i)\,P(h)\,P(\lnot l \mid h)\,P(p \mid i, h)\,P(e \mid p, \lnot l),其中 P(¬lh)=1P(lh)P(\lnot l \mid h) = 1 - P(l \mid h)

15.2 条件独立题模板

第一种方法:用局部马尔可夫性。每个节点在给定父节点后,与所有非后代节点条件独立:

XiNonDescendants(Xi)Parents(Xi)X_i \perp \text{NonDescendants}(X_i) \mid \text{Parents}(X_i)

第二种方法:用 d-separation。

  1. 列出两个变量之间的所有无向路径。
  2. 逐条判断路径是否被证据阻断。
  3. 所有路径都阻断才独立。

特别提醒:不要只看两点之间有没有边。条件独立是关于所有路径和给定证据的性质。

15.3 概率计算题型总模板

考试里看到一个概率式,先不要急着代数值,先判断它是哪一类。

  • 类型 1:完整联合概率。 形如 P(x1,x2,,xn)P(x_1, x_2, \dots, x_n),所有变量都有具体取值。做法是按 BN 分解直接相乘:P(x1,,xn)=iP(xiparents(Xi))P(x_1, \dots, x_n) = \prod_i P(x_i \mid \text{parents}(X_i))。不求和,不归一化。
  • 类型 2:部分联合概率。 形如 P(a,d)P(a, d),有些变量没出现。没出现的变量是隐藏变量,要全部求和:P(a,d)=hiddenP(a,d,hidden)P(a, d) = \sum_{\text{hidden}} P(a, d, \text{hidden}),再把联合项按 BN 分解。没有条件竖线,所以最后不归一化。
  • 类型 3:边缘概率。 形如 P(d)P(d),它是部分联合概率的特例:只保留 dd,其余全部求和:P(d)=all otherP(d,others)P(d) = \sum_{\text{all other}} P(d, \text{others})。它经常作为贝叶斯公式的分母,也就是证据概率。
  • 类型 4:普通条件概率。 形如 P(Xe)P(X \mid e),先写 P(Xe)=αP(X,e)P(X \mid e) = \alpha\, P(X, e)。若有隐藏变量 YYP(X,e)=YP(X,e,Y)P(X, e) = \sum_Y P(X, e, Y),最后对 XX 的所有取值归一化:

P(xe)=Q(x)xQ(x),Q(x)=YP(x,e,Y)P(x \mid e) = \frac{Q(x)}{\sum_{x'} Q(x')}, \quad Q(x) = \sum_Y P(x, e, Y)

  • 类型 5:多变量条件概率。 形如 P(X1,X2e)P(X_1, X_2 \mid e),把 (X1,X2)(X_1, X_2) 当成一个联合查询变量:P(X1,X2e)=αP(X1,X2,e)P(X_1, X_2 \mid e) = \alpha\, P(X_1, X_2, e)。若有隐藏变量 YYQ(x1,x2)=YP(x1,x2,e,Y)Q(x_1, x_2) = \sum_Y P(x_1, x_2, e, Y)。归一化时要对查询变量所有组合求和:

P(x1,x2e)=Q(x1,x2)x1x2Q(x1,x2)P(x_1, x_2 \mid e) = \frac{Q(x_1, x_2)}{\sum_{x'_1} \sum_{x'_2} Q(x'_1, x'_2)}

  • 类型 6:已知完整联合分布时的查询。 如果题目直接给完整联合表,而不是 BN 图,则不用按父节点分解,直接从表中把满足条件的原子事件加起来:P(φ)=ω:ωφP(ω)P(\varphi) = \sum_{\omega:\, \omega \models \varphi} P(\omega)。条件概率仍然用 P(φe)=P(φe)P(e)P(\varphi \mid e) = \frac{P(\varphi \land e)}{P(e)},其中分子和分母都从完整联合表中加和得到。

最后检查:

  1. 有没出现但网络里存在的变量?有就求和。
  2. 有没有条件竖线?有就最后归一化。
  3. 是不是完整联合事件?是就直接查 CPT 相乘。
  4. 变量取假值了吗?取假值通常要用 1p1 - p
  5. 查询变量有几个取值?每个取值都要算一个未归一化 QQ

16. 朴素贝叶斯作为贝叶斯网络

16.1 图结构

朴素贝叶斯是一个单父节点模型:CX1,  CX2,  ,  CXnC \to X_1,\; C \to X_2,\; \dots,\; C \to X_n

联合分布:P(C,X1,,Xn)=P(C)iP(XiC)P(C, X_1, \dots, X_n) = P(C) \prod_i P(X_i \mid C)。总参数量随特征数线性增长。

16.2 为什么朴素贝叶斯常常有效

朴素贝叶斯假设很强,因为真实特征往往相关。例如文本中的词并不独立,图像相邻像素也不独立。但它仍常有不错表现,原因包括:

  • 分类只需要比较类别后验大小,不一定需要精确估计完整联合分布。
  • 条件独立假设极大减少参数,降低过拟合风险。
  • 参数估计简单,小数据下也能工作。
  • 对文本分类、垃圾邮件过滤等高维稀疏任务尤其常用。

课件中的 Twenty Newsgroups 例子给每个新闻组 1000 篇训练文档,用朴素贝叶斯学习类别先验和词条件概率,再分类新文档。课件给出的结果是约 89% 的分类准确率,用来说明即使独立性假设明显过强,朴素贝叶斯仍然能在标准文本分类数据上有竞争力。

17. 考试速查

17.1 概率基础

  • 条件概率:P(AB)=P(AB)P(B)P(A \mid B) = \dfrac{P(A \land B)}{P(B)}
  • 乘法规则:P(AB)=P(AB)P(B)P(A \land B) = P(A \mid B)P(B)
  • 链式法则:P(X1,,Xn)=iP(XiX1,,Xi1)P(X_1, \dots, X_n) = \prod_i P(X_i \mid X_1, \dots, X_{i-1})
  • 全概率:P(A)=iP(ABi)P(Bi)P(A) = \sum_i P(A \mid B_i)P(B_i)
  • 贝叶斯:P(He)=P(eH)P(H)P(e)P(H \mid e) = \dfrac{P(e \mid H)P(H)}{P(e)}

17.2 独立性

  • 独立:AB    P(A,B)=P(A)P(B)A \perp B \iff P(A, B) = P(A)P(B)
  • 条件独立:ABC    P(A,BC)=P(AC)P(BC)A \perp B \mid C \iff P(A, B \mid C) = P(A \mid C)P(B \mid C)
  • 条件独立不推出无条件独立,无条件独立也不保证条件独立。

17.3 贝叶斯网络

  • BN 是 DAG 加 CPT。
  • 全局分解:P(X1,,Xn)=iP(XiParents(Xi))P(X_1, \dots, X_n) = \prod_i P(X_i \mid \text{Parents}(X_i))
  • 局部语义:XiNonDescendants(Xi)Parents(Xi)X_i \perp \text{NonDescendants}(X_i) \mid \text{Parents}(X_i)
  • 参数量:2n12^n - 1 vs. O(n2k)O(n \cdot 2^k)

17.4 三种路径结构

  • 链:XYZ,  XZYX \to Y \to Z,\; X \perp Z \mid Y
  • 共同原因:XYZ,  XZYX \leftarrow Y \to Z,\; X \perp Z \mid Y
  • 共同结果:XYZ,  XZX \to Y \leftarrow Z,\; X \perp Z,但 X⊥̸ZYX \not\perp Z \mid Y

记忆:链和 fork 观测中间点会堵住;collider 默认堵住,观测后打开。

17.5 推理

  • 枚举推理:P(Xe)=αYiP(xiparents(Xi))P(X \mid e) = \alpha \sum_Y \prod_i P(x_i \mid \text{parents}(X_i))
  • 变量消元:zjfj(z,Uj)\sum_z \prod_j f_j(z, U_j),即"包含 zz 的因子相乘,再对 zz 求和"。
  • 复杂度:多树上变量消元可多项式;一般图精确推理 NP-hard,且与 #P 完全问题相关。

17.6 朴素贝叶斯

  • 假设:XiXjCX_i \perp X_j \mid C
  • 分类:c^=argmaxcP(c)iP(xic)\hat{c} = \arg\max_c P(c) \prod_i P(x_i \mid c)
  • 对数形式:c^=argmaxc(logP(c)+ilogP(xic))\hat{c} = \arg\max_c \left(\log P(c) + \sum_i \log P(x_i \mid c)\right)

一定记住:朴素贝叶斯是假设"给定类别后特征条件独立",不是假设特征无条件独立。

18. 常见坑

  1. P(AB)P(A \mid B)P(BA)P(B \mid A) 混淆。
  2. 贝叶斯题忘记先验 P(H)P(H),只看似然 P(eH)P(e \mid H)
  3. 分母没有用全概率展开。
  4. 把测试准确率当成阳性后患病概率。
  5. 把条件独立当成无条件独立。
  6. BN 联合分布没有按父节点写,漏掉条件项。
  7. CPT 中变量为假时忘记用 1p1 - p
  8. d-separation 中忽略 collider,尤其忘记"观测 collider 会打开路径"。
  9. 后验算出未归一化值后忘记除以总和。
  10. 有隐藏变量时忘记求和。
  11. 变量消元时把所有因子一起乘,失去消元带来的好处。
  12. 以为 BN 箭头一定是因果;数学上它编码的是条件独立结构。

19. 最后一页压缩版

  • 概率语言:P(αe)P(\alpha \mid e)
  • 完整联合分布能回答所有问题:P(φ)=ω:ωφP(ω)P(\varphi) = \sum_{\omega:\, \omega \models \varphi} P(\omega),但完整联合分布太大:2n12^n - 1
  • 边缘化:P(A)=bP(A,b)P(A) = \sum_b P(A, b)
  • 条件概率:P(AB)=P(A,B)P(B)P(A \mid B) = \dfrac{P(A, B)}{P(B)}
  • 贝叶斯:P(He)=αP(eH)P(H)P(H \mid e) = \alpha\, P(e \mid H)P(H)
  • 独立:P(A,B)=P(A)P(B)P(A, B) = P(A)P(B)
  • 条件独立:P(A,BC)=P(AC)P(BC)P(A, B \mid C) = P(A \mid C)P(B \mid C)
  • 贝叶斯网络:P(X1,,Xn)=iP(XiParents(Xi))P(X_1, \dots, X_n) = \prod_i P(X_i \mid \text{Parents}(X_i))
  • 枚举推理:P(Xe)=αYiP(xiparents(Xi))P(X \mid e) = \alpha \sum_Y \prod_i P(x_i \mid \text{parents}(X_i))
  • 变量消元:收集含隐藏变量的因子 → 相乘 → 对隐藏变量求和 → 归一化
  • 朴素贝叶斯:c^=argmaxcP(c)iP(xic)\hat{c} = \arg\max_c P(c) \prod_i P(x_i \mid c)

整条线记住一句话:概率提供信念程度,联合分布提供完整语义,条件独立提供压缩,贝叶斯网络把这种压缩画成图,推理就是把证据固定、隐藏变量求和、查询变量归一化。


机器学习与深度学习大抄

复习权重:经典机器学习必考,尤其是决策树、kNN、最小二乘、K-Means、SVM;逻辑回归中高概率;深度学习有概率考,重点掌握前馈网络、BP、CNN,RNN/Attention 属于隔壁班补充。

目录:0. 一句话主线 · 1. 任务总览 · 2. 泛化主线 · 3. 决策树 · 4. kNN · 5. 线性预测和最小二乘 · 6. 逻辑回归 · 7. SVM · 8. 核方法 · 9. K-Means · 10. PCA · 11. PAC 学习 · 12. 神经网络 · 13. CNN · 14. RNN 和 Attention · 16. 常考证明和计算模板 · 17. 判断题速查 · 18. 最后一页压缩版 · 19. 线性代数速补

方法总览

方法 输入 输出 核心模型 目标/准则 重点题型
决策树 带标签属性样本 类别 属性测试树 最大信息增益 熵、信息增益、过拟合判断
kNN 训练样本和新样本 类别或数值 最近邻投票/平均 距离最小 k 影响、边界识别
最小二乘 X,yX, y 参数 ww XwXw 最小平方误差 闭式解、加权/正则推导
逻辑回归 x,y{0,1}x, y \in \{0,1\} 概率 σ(wTx+b)\sigma(w^T x + b) 最大似然/交叉熵 sigmoid、log odds、梯度
SVM x,y{1,+1}x, y \in \{-1,+1\} 分类超平面 sign(wTx+b)\text{sign}(w^T x + b) 最大间隔 手算超平面、对偶、核
K-Means 无标签样本 簇和中心 最近中心分配 最小类内平方和 中心更新、收敛证明
PCA 无标签高维样本 低维表示 主成分投影 最大方差/最小重构误差 去噪、步骤
神经网络 向量/图像/序列 按任务而定 多层复合函数 损失最小 BP、激活、CNN 概念

0. 一句话主线:学习就是用数据选择函数

机器学习题目基本都可以按同一条链理解:

数据特征表示模型/假设空间损失函数优化算法泛化评估\text{数据} \to \text{特征表示} \to \text{模型/假设空间} \to \text{损失函数} \to \text{优化算法} \to \text{泛化评估}

也就是课件反复出现的框架:

Learning=Representation+Evaluation+Optimization\text{Learning} = \text{Representation} + \text{Evaluation} + \text{Optimization}

其中:

  • Representation:用什么函数表示规律,例如决策树、线性函数、SVM、神经网络。
  • Evaluation:用什么标准评价函数好坏,例如信息增益、平方误差、交叉熵、hinge loss。
  • Optimization:怎样找到最优函数,例如递归划分、闭式解、梯度下降、二次规划。

1. 任务总览:输入、输出和学习目标

1.1 机器学习定义:用经验改进任务表现

Tom Mitchell 定义:若一个程序在任务 TT 上,随着经验 EE 的积累,其性能度量 PP 提高,则称该程序从经验 EE 中学习。

搜索引擎例子:

  • TT:对用户查询返回有序网页列表。
  • EE:用户点击、停留、跳出等行为记录。
  • PP:排序准确率、用户满意度或点击相关性。

1.2 样本和特征:机器能处理的是向量

一个对象或实例通常表示为特征向量:x=(x1,x2,,xd)Rdx = (x_1, x_2, \dots, x_d) \in \mathbb{R}^d。每个维度称为一个 feature/attribute。特征可以是连续的,也可以是离散的。特征向量是对真实对象的抽象,只保留对任务有用的信息。

常见表示:

  • 文本:词袋向量、词频、词嵌入。
  • 图像:像素、颜色直方图、卷积特征。
  • 用户/账户:年龄、余额、信用评分、交易次数。

1.3 监督学习

有标签地学输入到输出的映射。训练数据 D={(xi,yi)}i=1nD = \{(x_i, y_i)\}_{i=1}^n,其中 xix_i 是输入特征,yiy_i 是期望输出。目标是学习函数 f:XYf: \mathcal{X} \to \mathcal{Y},使得新样本 xnewx_{\text{new}} 的预测 y^=f(xnew)\hat{y} = f(x_{\text{new}}) 尽可能正确。

  • 分类任务:输入样本特征 xXx \in \mathcal{X};输出离散标签 y{1,,K}y \in \{1, \dots, K\}y{1,+1}y \in \{-1, +1\}。含义:判断样本属于哪个类别,例如 spam/not spam、良性/恶性肿瘤。
  • 回归任务:输入样本特征 xXx \in \mathcal{X};输出连续数值 yRy \in \mathbb{R}。含义:预测一个数值,例如房价、温度、股票收益。

1.4 无监督学习

没有标签地发现结构。训练数据 D={xi}i=1nD = \{x_i\}_{i=1}^n,没有给定正确输出。目标不是拟合 xyx \mapsto y,而是发现数据内部结构。典型任务:

  • 聚类:输入样本集合,输出每个样本的簇编号。
  • 降维:输入高维向量,输出低维表示。
  • 密度估计:输入样本,输出数据分布模型。

1.5 半监督和自监督

半监督学习同时使用少量有标签数据和大量无标签数据。自监督学习从无标签数据中自动构造监督任务,例如遮住文本中的词再预测它。

1.6 学习智能体

学习智能体包含:

  • Performance element:直接执行任务的组件。
  • Learning element:根据经验改进 performance element。
  • Critic:根据反馈评价表现。
  • Problem generator:产生探索性行动,帮助智能体获得有价值经验。

设计 learning element 时要问:学习 performance element 的哪个部分?能获得什么反馈?用什么表示形式?

1.7 机器学习应用:概念题识别即可

课件列举的应用包括信息检索、机器翻译、计算机视觉、语音识别、金融预测、医学诊断、电影推荐等。这些例子共同说明:当规则难以手写、数据量很大、人工分析昂贵时,机器学习可以从经验中拟合模型或发现结构。

这些应用通常不考细节,但可能用来问 T,E,PT, E, P。答题时按 Mitchell 定义拆分:任务 TT 是系统要完成的预测或决策,经验 EE 是可获得的数据或反馈,性能 PP 是正确率、误差、排序质量、用户满意度等指标。

1.8 朴素贝叶斯:监督分类器中的概率基线

AI18/SVM 课件的监督学习列表中会把 Naive Bayes 和决策树、kNN、最小二乘分类放在一起。朴素贝叶斯的详细概率推理放在"概率与贝叶斯网络大抄",这里记住它作为分类器的输入输出和核心假设。

  • 输入:样本特征 x=(x1,,xd)x = (x_1, \dots, x_d);类别标签 y{1,,K}y \in \{1, \dots, K\}
  • 输出:y^=argmaxyP(yx)\hat{y} = \arg\max_y P(y \mid x)。用贝叶斯公式 P(yx)P(y)P(xy)P(y \mid x) \propto P(y)P(x \mid y)
  • 朴素条件独立假设:P(xy)=j=1dP(xjy)P(x \mid y) = \prod_{j=1}^{d} P(x_j \mid y)
  • 所以分类规则:y^=argmaxyP(y)j=1dP(xjy)\hat{y} = \arg\max_y P(y) \prod_{j=1}^{d} P(x_j \mid y)

2021 选择题常考:Naive Bayes 假设是在给定类别标签后,各属性条件独立。

2. 泛化主线:模型不是越复杂越好

2.1 三种误差:训练、测试、泛化

训练误差是模型在训练集上的错误:

Etrain=1ni=1n(f(xi),yi)E_{\text{train}} = \frac{1}{n} \sum_{i=1}^{n} \ell(f(x_i), y_i)

测试误差是在独立测试集上的错误。泛化误差是模型在同分布新样本上的期望错误:

Egen=E(x,y)P[(f(x),y)]E_{\text{gen}} = \mathbb{E}_{(x,y) \sim P}[\ell(f(x), y)]

考试中"泛化好"指新样本表现好,不是只在训练集上表现好。

2.2 欠拟合、过拟合和奥卡姆剃刀

模型复杂度从低到高时,常见现象:

  • 太简单:欠拟合,训练误差和测试误差都高。
  • 适中:能抓住主要规律,测试误差最低。
  • 太复杂:过拟合,训练误差很低,测试误差升高。

奥卡姆剃刀原则:在解释数据能力相近时,优先选择更简单的假设。因为复杂模型更容易把噪声当规律。

2021 填空图常考:模型复杂度从低到高依次对应欠拟合、理想复杂度、过拟合。

2.3 训练集、验证集、测试集的分工

  • 训练集:用于学习参数。
  • 验证集:用于选模型结构和超参数,例如 kk、树深度、正则化系数 λ\lambda、SVM 的 CC
  • 测试集:最后一次评估泛化能力,不应参与调参。

2.4 交叉验证:用数据稳定地选模型

交叉验证的直觉:如果模型过拟合,它对训练数据的细微变化会很敏感;拿掉一部分数据后,拟合结果会明显变化。

K 折交叉验证步骤:

  1. 把数据分成 K 份。
  2. 每次拿 K − 1 份训练,剩下 1 份验证。
  3. 重复 K 次,取平均验证误差。
  4. 选择平均验证误差最小的模型或超参数。

3. 决策树

用信息增益递归地问最有用的问题

3.1 任务与输入输出

决策树主要用于分类,也可扩展到回归树。

  • 输入:属性向量 x=(x1,,xd)x = (x_1, \dots, x_d),属性可以是布尔、离散或连续。
  • 输出:类别标签 yy
  • 学到的东西:一棵树。内部节点测试属性,分支对应属性取值,叶子节点给出类别。

餐厅例子中,输入属性包括是否有替代餐厅、是否周五/周六、是否饥饿、顾客数量、价格、是否下雨、是否预约、餐厅类型、等待时间等;输出是是否等待。

3.2 表达能力:能表示任意离散函数,但不一定泛化

决策树可以表达任意输入属性上的离散函数。对布尔函数来说,真值表中的每一行都可以对应树中的一条路径。

但"能表示"不等于"泛化好"。把每个训练样本单独记成一条路径,可以让训练误差为 0,却可能只是记住训练集,不能预测新样本。

3.3 决策树学习算法:每一步选最能降低不确定性的属性

基本递归逻辑:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
DecisionTree(examples, attributes):
if examples all have the same class:
return leaf(that class)
if attributes is empty:
return leaf(majority class)
choose attribute A with largest information gain
create a node testing A
for each value v of A:
let S_v be examples with A = v
if S_v is empty:
add leaf(majority class of examples)
else:
add subtree DecisionTree(S_v, attributes - {A})
return tree

核心问题是如何选择属性 AA

3.4 熵:一个节点有多混乱

二分类中,若节点 SS 中正例数为 pp、负例数为 nn,则熵为:

H(S)=pp+nlog2pp+nnp+nlog2np+nH(S) = -\frac{p}{p+n} \log_2 \frac{p}{p+n} - \frac{n}{p+n} \log_2 \frac{n}{p+n}

约定 0log20=00 \log_2 0 = 0。性质:

  • 全正或全负:H(S)=0H(S) = 0,节点最纯。
  • 正负各半:H(S)=1H(S) = 1,二分类中最混乱。

多分类中:

H(S)=k=1Kpklog2pkH(S) = -\sum_{k=1}^{K} p_k \log_2 p_k

其中 pkp_k 是类别 kk 的比例。

3.5 信息增益:按属性划分后熵下降多少

属性 AA 把样本集 SS 划分成若干子集 SvS_v。划分后的剩余不确定性为:

Remainder(A)=vValues(A)SvSH(Sv)\text{Remainder}(A) = \sum_{v \in \text{Values}(A)} \frac{|S_v|}{|S|} H(S_v)

信息增益为:

Gain(S,A)=H(S)Remainder(A)\text{Gain}(S, A) = H(S) - \text{Remainder}(A)

选择信息增益最大的属性,因为它让类别不确定性下降最多。

餐厅例子中,原始训练集有 6 个正例和 6 个负例:H(S)=1H(S) = 1。课件给出的结果:

Gain(S,Patrons)0.541,Gain(S,Type)=0\text{Gain}(S, \text{Patrons}) \approx 0.541, \quad \text{Gain}(S, \text{Type}) = 0

所以根节点选 Patrons 比 Type 更合理。

3.6 Gini 指数:另一种纯度度量

有些教材用 Gini:

Gini(S)=1k=1Kpk2\text{Gini}(S) = 1 - \sum_{k=1}^{K} p_k^2

Gini 越小,节点越纯。本课程重点是 entropy 和 information gain,Gini 只需知道含义。

3.7 无冲突训练集一定存在零训练误差决策树

题目:证明对于不含冲突数据的训练集,必存在与训练集一致的决策树。不含冲突数据指:xi=xjyi=yjx_i = x_j \Rightarrow y_i = y_j

证明思路是构造法:

  1. 如果当前节点中所有样本类别相同,直接建叶子节点。
  2. 如果当前节点中存在不同类别样本,因为数据无冲突,这些样本的特征向量不可能完全相同。
  3. 因而至少存在某个特征维度,使得不同类别样本在该维度取值不同。
  4. 对离散特征,可按该特征取值继续分支;对连续特征,可选阈值把不同取值分开。
  5. 不断划分,最极端时每个叶子只包含相同特征向量的样本。
  6. 由于无冲突,同一叶子中的样本标签唯一,给叶子标该类别即可。

因此这棵充分生长的树对训练集中每个样本都预测正确,训练误差为 0。

3.8 决策树过拟合和剪枝

决策树容易过拟合,因为深树能记住训练集。处理方法:

  • 预剪枝:生长过程中提前停止,例如限制最大深度、最小叶子样本数、最小信息增益。
  • 后剪枝:先长成较大树,再用验证集删除无益子树。

考试判断:根节点信息增益不一定大于子节点的信息增益。因为根节点和子节点的信息增益是在不同样本子集上算的,不能直接比较。

3.9 决策树边界识别

在二维图上,决策树边界常是轴对齐的分段矩形区域。看到"横平竖直、块状划分",优先想到 decision tree。

4. kNN

不显式训练,靠最近样本投票

4.1 任务与输入输出

kNN 可用于分类和回归。

  • 输入:训练集 D={(xi,yi)}i=1nD = \{(x_i, y_i)\}_{i=1}^n;新样本 xx;邻居数 kk;距离函数 d(,)d(\cdot, \cdot)
  • 分类输出:y^=majority{yi:xiNk(x)}\hat{y} = \text{majority}\{y_i : x_i \in N_k(x)\},其中 Nk(x)N_k(x) 是距离 xx 最近的 kk 个训练样本。
  • 回归输出:y^=1kxiNk(x)yi\hat{y} = \frac{1}{k} \sum_{x_i \in N_k(x)} y_i

4.2 距离决定"相似"

常用距离:

d2(x,z)=j=1d(xjzj)2d_2(x, z) = \sqrt{\sum_{j=1}^{d}(x_j - z_j)^2}

d1(x,z)=j=1dxjzjd_1(x, z) = \sum_{j=1}^{d} |x_j - z_j|

若特征尺度差异很大,应先标准化,否则大尺度特征会支配距离。

4.3 k 的影响:小 k 高方差,大 k 高偏差

  • k=1k = 1:边界复杂,训练误差通常最低,容易过拟合。
  • kk 增大:边界更平滑,抗噪声更强。
  • k=nk = n:所有样本共同投票,分类时总预测训练集多数类,通常欠拟合。

2021 判断题:"k 从 1 增加到 n,训练集分类精度始终增加。"答案是错,通常 k=1k = 1 训练精度最高,增大 k 可能降低训练精度。

4.4 kNN 边界识别

最近邻分类边界常是不规则、折线状、围绕训练点形成 Voronoi 风格区域。看到"破碎弯曲、贴着点"的边界,优先想到 nearest neighbor。

5. 线性预测和最小二乘

5.1 线性分类和线性回归的共同形式

线性模型打分:f(x)=wTx+bf(x) = w^T x + b

  • 二分类预测:y^=sign(wTx+b)\hat{y} = \text{sign}(w^T x + b)
  • 回归预测:y^=wTx+b\hat{y} = w^T x + b
  • 决策边界为:wTx+b=0w^T x + b = 0,其中 ww 是超平面的法向量,bb 控制平移。

5.2 线性分类:理想损失是 0/1 loss,但难优化

二分类的 0/1 损失为:0/1(y^,y)=1[y^y]\ell_{0/1}(\hat{y}, y) = \mathbf{1}[\hat{y} \neq y]。直接最小化 0/1 loss 通常很难,所以课件引入替代损失,例如平方损失、hinge loss、logistic loss。

5.3 最小二乘回归:闭式解必须会推

XRn×dX \in \mathbb{R}^{n \times d} 的第 ii 行是 xiTx_i^TyRny \in \mathbb{R}^n 是标签列向量。忽略偏置或把偏置并入第一列全 1 特征,目标为:

J(w)=Xwy22J(w) = \|Xw - y\|_2^2

展开:J(w)=(Xwy)T(Xwy)J(w) = (Xw - y)^T(Xw - y)。求梯度:wJ(w)=2XT(Xwy)\nabla_w J(w) = 2X^T(Xw - y)。令梯度为 0:2XT(Xwy)=02X^T(Xw - y) = 0,得到正规方程:

XTXw=XTyX^T X w = X^T y

XTXX^T X 可逆:w=(XTX)1XTyw^* = (X^T X)^{-1} X^T y。若不可逆,用 Moore-Penrose 伪逆:w=X+yw^* = X^+ y

5.4 加权最小二乘:2020 大题模板

目标:

minwi=1nri(yiwTxi)2\min_w \sum_{i=1}^{n} r_i (y_i - w^T x_i)^2

R=diag(r1,,rn)R = \text{diag}(r_1, \dots, r_n),矩阵形式:J(w)=(yXw)TR(yXw)J(w) = (y - Xw)^T R (y - Xw)。因为 RR 是对角权重矩阵,且通常 R=RTR = R^T,求梯度:

wJ(w)=2XTR(yXw)=2XTRXw2XTRy\nabla_w J(w) = -2X^T R (y - Xw) = 2X^T R X w - 2X^T R y

令梯度为 0:XTRXw=XTRyX^T R X w = X^T R y

  • XTRXX^T R X 可逆:w=(XTRX)1XTRyw^* = (X^T R X)^{-1} X^T R y
  • 若不可逆:w=(XTRX)+XTRyw^* = (X^T R X)^+ X^T R y

解释:rir_i 越大,第 ii 个样本的误差越重要;ri=0r_i = 0 相当于忽略该样本。

5.5 带 L2 正则的最小二乘

普通 L2 正则:J(w)=Xwy22+λw22J(w) = \|Xw - y\|_2^2 + \lambda \|w\|_2^2。梯度:wJ(w)=2XT(Xwy)+2λw\nabla_w J(w) = 2X^T(Xw - y) + 2\lambda w。令 0:(XTX+λI)w=XTy(X^T X + \lambda I)w = X^T y。闭式解:

w=(XTX+λI)1XTyw^* = (X^T X + \lambda I)^{-1} X^T y

带对角正则:J(w)=Xwy22+λwTDwJ(w) = \|Xw - y\|_2^2 + \lambda w^T D w,其中 DD 为对角矩阵,则 w=(XTX+λD)1XTyw^* = (X^T X + \lambda D)^{-1} X^T yDjjD_{jj} 越大,对第 jj 个特征权重惩罚越强。

5.6 L1 和 L2 正则区别

  • L2 正则Ω2(w)=w22=j=1dwj2\Omega_2(w) = \|w\|_2^2 = \sum_{j=1}^{d} w_j^2。优点是容易优化,常有闭式解或平滑梯度。作用是让权重变小,降低过拟合。
  • L1 正则Ω1(w)=w1=j=1dwj\Omega_1(w) = \|w\|_1 = \sum_{j=1}^{d} |w_j|。作用是产生稀疏解,使一部分权重精确为 0,相当于自动特征选择。

5.7 多分类最小二乘

YRn×kY \in \mathbb{R}^{n \times k} 是 one-hot 标签矩阵,WRd×kW \in \mathbb{R}^{d \times k},目标为 minWXWYF2\min_W \|XW - Y\|_F^2。正规方程:XTXW=XTYX^T X W = X^T Y。若 XTXX^T X 可逆:W=(XTX)1XTYW^* = (X^T X)^{-1} X^T Y。预测时取最大分量:y^=argmaxk(WTx)k\hat{y} = \arg\max_k (W^T x)_k

5.8 多项式回归:线性是对参数线性,不一定对输入线性

引入基函数:ϕ(x)=(1,x,x2,,xm)\phi(x) = (1, x, x^2, \dots, x^m),模型 f(x)=wTϕ(x)f(x) = w^T \phi(x)。它对参数 ww 仍是线性的,因此仍可用最小二乘;但对原始输入 xx 是非线性的。多项式次数越高,越容易过拟合。

6. 逻辑回归

线性打分经过 sigmoid 变成概率

6.1 任务与输入输出

逻辑回归用于分类,名字里有 regression 但通常不是做连续值回归。

  • 二分类输入:样本特征 xRdx \in \mathbb{R}^d;标签 y{0,1}y \in \{0, 1\}
  • 输出:P(y=1x)P(y = 1 \mid x)
  • 含义:模型直接估计条件概率,属于 discriminative model。

6.2 Sigmoid 函数

逻辑函数:

σ(z)=11+ez\sigma(z) = \frac{1}{1 + e^{-z}}

性质:0<σ(z)<10 < \sigma(z) < 1σ(0)=12\sigma(0) = \frac{1}{2}。导数:σ(z)=σ(z)(1σ(z))\sigma'(z) = \sigma(z)(1 - \sigma(z))

6.3 Logistic 模型和决策边界

z=wTx+bz = w^T x + b,模型:

P(y=1x)=σ(wTx+b),P(y=0x)=1σ(wTx+b)P(y = 1 \mid x) = \sigma(w^T x + b), \quad P(y = 0 \mid x) = 1 - \sigma(w^T x + b)

预测规则:

y^={1,P(y=1x)120,P(y=1x)<12\hat{y} = \begin{cases} 1, & P(y=1 \mid x) \geq \frac{1}{2} \\ 0, & P(y=1 \mid x) < \frac{1}{2} \end{cases}

由于 σ(z)12\sigma(z) \geq \frac{1}{2} 等价于 z0z \geq 0,所以决策边界仍是 wTx+b=0w^T x + b = 0

6.4 Log odds:逻辑回归假设对数几率线性

odds 是事件发生概率与不发生概率之比:odds=p1p\text{odds} = \frac{p}{1-p}。log odds 为:

logit(p)=logp1p\text{logit}(p) = \log \frac{p}{1-p}

对逻辑回归:

logP(y=1x)P(y=0x)=wTx+b\log \frac{P(y=1 \mid x)}{P(y=0 \mid x)} = w^T x + b

所以逻辑回归的核心假设是:类别的对数几率是输入特征的线性函数。

6.5 似然函数和交叉熵损失

对单个样本,令 pi=σ(wTxi+b)p_i = \sigma(w^T x_i + b)。由于 yi{0,1}y_i \in \{0,1\},可以统一写:

P(yixi;w,b)=piyi(1pi)1yiP(y_i \mid x_i; w, b) = p_i^{y_i}(1 - p_i)^{1-y_i}

数据集似然:L(w,b)=i=1npiyi(1pi)1yiL(w, b) = \prod_{i=1}^{n} p_i^{y_i}(1-p_i)^{1-y_i}

对数似然:(w,b)=i=1n[yilogpi+(1yi)log(1pi)]\ell(w, b) = \sum_{i=1}^{n} [y_i \log p_i + (1-y_i)\log(1-p_i)]

训练逻辑回归通常最大化对数似然,等价于最小化负对数似然,即交叉熵:J(w,b)=(w,b)J(w, b) = -\ell(w, b)。单样本交叉熵:Li=[yilogpi+(1yi)log(1pi)]L_i = -[y_i \log p_i + (1-y_i)\log(1-p_i)]

6.6 交叉熵梯度:核心结果是 p − y

单样本设 z=wTx+b,  p=σ(z)z = w^T x + b,\; p = \sigma(z),损失 L=[ylogp+(1y)log(1p)]L = -[y \log p + (1-y)\log(1-p)]

先对 pp 求导:

Lp=yp+1y1p\frac{\partial L}{\partial p} = -\frac{y}{p} + \frac{1-y}{1-p}

再用 sigmoid 导数 pz=p(1p)\frac{\partial p}{\partial z} = p(1-p),链式法则:

Lz=(yp+1y1p)p(1p)=y(1p)+(1y)p=py\frac{\partial L}{\partial z} = \left(-\frac{y}{p} + \frac{1-y}{1-p}\right) p(1-p) = -y(1-p) + (1-y)p = p - y

因为 zwj=xj,  zb=1\frac{\partial z}{\partial w_j} = x_j,\; \frac{\partial z}{\partial b} = 1,所以:

Lwj=(py)xj,Lb=py\frac{\partial L}{\partial w_j} = (p - y)x_j, \quad \frac{\partial L}{\partial b} = p - y

向量形式:wL=(py)x\nabla_w L = (p - y)x。数据集梯度:wJ=i=1n(piyi)xi\nabla_w J = \sum_{i=1}^{n}(p_i - y_i)x_iJb=i=1n(piyi)\frac{\partial J}{\partial b} = \sum_{i=1}^{n}(p_i - y_i)

6.7 梯度下降更新

单样本 SGD:wwη(py)xw \leftarrow w - \eta(p - y)xbbη(py)b \leftarrow b - \eta(p - y)

批量梯度下降:wwηi=1n(piyi)xiw \leftarrow w - \eta \sum_{i=1}^{n}(p_i - y_i)x_ibbηi=1n(piyi)b \leftarrow b - \eta \sum_{i=1}^{n}(p_i - y_i)

带 L2 正则:Jreg=J+λw22J_{\text{reg}} = J + \lambda \|w\|_2^2,梯度增加 2λw2\lambda w

6.8 Softmax 回归:多分类扩展

多分类中,每个类别 kk 有参数 wk,bkw_k, b_k

P(y=kx)=exp(wkTx+bk)j=1Kexp(wjTx+bj)P(y = k \mid x) = \frac{\exp(w_k^T x + b_k)}{\sum_{j=1}^{K} \exp(w_j^T x + b_j)}

若真实类别为 tt,交叉熵损失为 L=logP(y=tx)L = -\log P(y = t \mid x)

考试中低概率,记住 softmax 是把多个类别得分归一化成概率分布。

6.9 逻辑回归、线性回归、SVM 对比

线性回归输出任意实数,适合连续值预测;逻辑回归输出概率,适合分类;SVM 输出间隔符号,目标是最大化分类间隔。

关键区别:

  • Logistic regression:概率模型,损失是 cross-entropy/logistic loss,通常所有样本都有梯度贡献。
  • SVM:最大间隔模型,损失是 hinge loss,决策边界主要由支持向量决定。

7. SVM

用最大间隔选择最稳的分离超平面

7.1 任务与输入输出

SVM 主要用于分类。

  • 输入:训练集 D={(xi,yi)}i=1nD = \{(x_i, y_i)\}_{i=1}^n;特征 xiRdx_i \in \mathbb{R}^d;标签 yi{1,+1}y_i \in \{-1, +1\}
  • 输出:g(x)=sign(wTx+b)g(x) = \text{sign}(w^T x + b)
  • 核心含义:在能正确分类训练集的超平面中,选择间隔最大的那个。间隔大通常意味着对小扰动更稳,泛化更好。

7.2 函数间隔和几何间隔

线性分类器 f(x)=wTx+bf(x) = w^T x + b,正确分类条件 yi(wTxi+b)>0y_i(w^T x_i + b) > 0

  • 函数间隔:γ^i=yi(wTxi+b)\hat{\gamma}_i = y_i(w^T x_i + b)
  • 几何间隔(点到超平面的带符号距离):γi=yi(wTxi+b)w\gamma_i = \dfrac{y_i(w^T x_i + b)}{\|w\|}

因为同时缩放 w,bw, b 不改变决策边界,所以 SVM 规定最近点满足函数间隔 1:yi(wTxi+b)1y_i(w^T x_i + b) \geq 1。此时最近点的几何间隔为 γ=1w\gamma = \frac{1}{\|w\|}

两条间隔边界:wTx+b=1,  wTx+b=1w^T x + b = 1,\; w^T x + b = -1,二者之间宽度 2w\frac{2}{\|w\|}

7.3 Hard Margin SVM 原问题

线性可分时:

minw,b12w2s.t.yi(wTxi+b)1,  i=1,,n\min_{w, b} \frac{1}{2}\|w\|^2 \quad \text{s.t.} \quad y_i(w^T x_i + b) \geq 1,\; i = 1, \dots, n

最大化间隔 2w\frac{2}{\|w\|} 等价于最小化 12w2\frac{1}{2}\|w\|^2,也就是使支持向量的函数间隔刚好为 1 或 -1。

7.4 支持向量:真正决定边界的点

支持向量(在 Hard Margin 下)满足 yi(wTxi+b)=1y_i(w^T x_i + b) = 1,它们落在间隔边界上。远离边界且分类正确的点满足严格不等式,通常不影响 hard margin SVM 解。

7.5 对偶问题:考试概念和证明都要会认

原问题:

minw,b12w2s.t.yi(wTxi+b)10\min_{w,b} \frac{1}{2}\|w\|^2 \quad \text{s.t.} \quad y_i(w^T x_i + b) - 1 \geq 0

构造拉格朗日函数,αi0\alpha_i \geq 0

L(w,b,α)=12w2i=1nαi[yi(wTxi+b)1]L(w, b, \alpha) = \frac{1}{2}\|w\|^2 - \sum_{i=1}^{n} \alpha_i [y_i(w^T x_i + b) - 1]

先对 w,bw, b 最小化。对 ww 求导:

Lw=wi=1nαiyixi\frac{\partial L}{\partial w} = w - \sum_{i=1}^{n} \alpha_i y_i x_i

令其为 0:

w=i=1nαiyixiw = \sum_{i=1}^{n} \alpha_i y_i x_i

bb 求导:

Lb=i=1nαiyi\frac{\partial L}{\partial b} = -\sum_{i=1}^{n} \alpha_i y_i

令其为 0:

i=1nαiyi=0\sum_{i=1}^{n} \alpha_i y_i = 0

代回拉格朗日函数得到对偶问题:

maxαi=1nαi12i=1nj=1nαiαjyiyjxiTxj\max_\alpha \sum_{i=1}^{n} \alpha_i - \frac{1}{2} \sum_{i=1}^{n}\sum_{j=1}^{n} \alpha_i \alpha_j y_i y_j x_i^T x_j

约束:αi0,  i=1nαiyi=0\alpha_i \geq 0,\; \sum_{i=1}^{n} \alpha_i y_i = 0

KKT 互补条件:αi[yi(wTxi+b)1]=0\alpha_i [y_i(w^T x_i + b) - 1] = 0。因此:

  • αi>0\alpha_i > 0,则 yi(wTxi+b)=1y_i(w^T x_i + b) = 1,该点是支持向量。
  • yi(wTxi+b)>1y_i(w^T x_i + b) > 1,则 αi=0\alpha_i = 0,该点不是支持向量。

如何求 αi\alpha_i

  1. 利用 i=1nαiyi=0\sum_{i=1}^{n} \alpha_i y_i = 0 表示出 αi\alpha_i 之间的关系,代回 i=1nαi12i=1nj=1nαiαjyiyjxiTxj\sum_{i=1}^{n} \alpha_i - \frac{1}{2}\sum_{i=1}^{n}\sum_{j=1}^{n} \alpha_i \alpha_j y_i y_j x_i^T x_j 得到一个只包含 αi\alpha_i 的式子,我们的目标是使这个式子最大。
  2. (结合支持向量约束求出具体 αi\alpha_iw,bw, b。)

7.6 用对偶解做预测

w=i=1nαiyixiw = \sum_{i=1}^{n} \alpha_i y_i x_i,新样本的打分:

f(x)=wTx+b=i=1nαiyixiTx+bf(x) = w^T x + b = \sum_{i=1}^{n} \alpha_i y_i x_i^T x + b

由于非支持向量 αi=0\alpha_i = 0,实际只需要和支持向量做内积。

7.7 Soft Margin SVM:不可分或有噪声时允许违反间隔

引入松弛变量 ξi0\xi_i \geq 0

minw,b,ξ12w2+Ci=1nξi\min_{w,b,\xi} \frac{1}{2}\|w\|^2 + C \sum_{i=1}^{n} \xi_i

约束:yi(wTxi+b)1ξiy_i(w^T x_i + b) \geq 1 - \xi_iξi0\xi_i \geq 0

含义:

  • ξi=0\xi_i = 0:样本在正确间隔外或间隔边界上。
  • 0<ξi<10 < \xi_i < 1:分类正确,但进入间隔内部。
  • ξi1\xi_i \geq 1:样本可能被错分。

CC 控制对违反间隔的惩罚:

  • CC 大:更不愿犯错,更接近 hard margin,间隔可能更窄。
  • CC 小:允许更多违反,间隔更宽,可能泛化更好。

Soft margin 的对偶和 hard margin 很像,只是多了上界:0αiC0 \leq \alpha_i \leq C

7.8 Hinge loss:SVM 的损失函数视角

单样本 hinge loss:hinge(xi,yi)=max(0,1yi(wTxi+b))\ell_{\text{hinge}}(x_i, y_i) = \max(0, 1 - y_i(w^T x_i + b))

Soft margin SVM 可写成:

minw,b12w2+Ci=1nmax(0,1yi(wTxi+b))\min_{w,b} \frac{1}{2}\|w\|^2 + C \sum_{i=1}^{n} \max(0, 1 - y_i(w^T x_i + b))

yif(xi)1y_i f(x_i) \geq 1,损失为 0;若分类正确但间隔不足,损失为正;若错分,损失更大。

7.9 手算最大间隔超平面模板

适合二维小样本题。

  1. 画点或观察两类凸包。
  2. 找两类之间最近的点或线段,猜支持向量。
  3. 对正支持向量写:wTxi+b=1w^T x_i + b = 1
  4. 对负支持向量写:wTxi+b=1w^T x_i + b = -1
  5. 解线性方程得到 w,bw, b
  6. 检查所有样本是否满足:yi(wTxi+b)1y_i(w^T x_i + b) \geq 1
  7. 写分离超平面、间隔边界、分类函数和支持向量。

若只有一对最近点决定边界,最大间隔超平面是这两个点连线的垂直平分面。

7.10 HW10 手算样例

正例:x1=(1,2)T,  x2=(2,3)T,  x3=(3,3)Tx_1 = (1, 2)^T,\; x_2 = (2, 3)^T,\; x_3 = (3, 3)^T

负例:x4=(2,1)T,  x5=(3,2)Tx_4 = (2, 1)^T,\; x_5 = (3, 2)^T

由几何位置猜支持向量为 x1,x3,x5x_1, x_3, x_5。设 w=(w1,w2)Tw = (w_1, w_2)^T,列方程:

{w1+2w2+b=13w1+3w2+b=13w1+2w2+b=1\begin{cases} w_1 + 2w_2 + b = 1 \\ 3w_1 + 3w_2 + b = 1 \\ 3w_1 + 2w_2 + b = -1 \end{cases}

第二式减第三式:w2=2w_2 = 2。第二式减第一式:2w1+w2=02w_1 + w_2 = 0,所以 w1=1,  w2=2,  b=2w_1 = -1,\; w_2 = 2,\; b = -2

最大间隔超平面:z1+2z22=0-z_1 + 2z_2 - 2 = 0

分类函数:g(z)=sign(z1+2z22)g(z) = \text{sign}(-z_1 + 2z_2 - 2)

支持向量:(1,2)T,  (3,3)T,  (3,2)T(1, 2)^T,\; (3, 3)^T,\; (3, 2)^T

间隔宽度:2w=25\dfrac{2}{\|w\|} = \dfrac{2}{\sqrt{5}}

7.11 2021 SVM 手算样例

正例:x1=(2,3)T,  x2=(3,3)Tx_1 = (2, 3)^T,\; x_2 = (3, 3)^T

负例:x3=(1,1)Tx_3 = (1, 1)^T

正类凸包是线段 y=3,  x[2,3]y = 3,\; x \in [2, 3],离负点最近的正类点是 (2,3)T(2, 3)^T。最大间隔边界由 (2,3)T(2, 3)^T(1,1)T(1, 1)^T 决定。二者中点:

m=(32,2)Tm = \left(\tfrac{3}{2}, 2\right)^T

法向量可取:v=(2,3)T(1,1)T=(1,2)Tv = (2, 3)^T - (1, 1)^T = (1, 2)^T。分离超平面是垂直平分线:vT(zm)=0v^T(z - m) = 0,即:

x+2y112=0x + 2y - \tfrac{11}{2} = 0

规范化到支持向量函数间隔为 1。原打分 f~(x,y)=x+2y112\tilde{f}(x, y) = x + 2y - \tfrac{11}{2},在 (2,3)(2, 3) 上为 f~(2,3)=52\tilde{f}(2, 3) = \tfrac{5}{2},在 (1,1)(1, 1) 上为 f~(1,1)=52\tilde{f}(1, 1) = -\tfrac{5}{2}。所以乘以 25\tfrac{2}{5}

f(x,y)=25x+45y115f(x, y) = \tfrac{2}{5} x + \tfrac{4}{5} y - \tfrac{11}{5}

w=(25,45)T,  b=115w = (\tfrac{2}{5}, \tfrac{4}{5})^T,\; b = -\tfrac{11}{5}

分类函数:g(x,y)=sign(25x+45y115)g(x, y) = \text{sign}(\tfrac{2}{5} x + \tfrac{4}{5} y - \tfrac{11}{5})

等价地也可写:g(x,y)=sign(x+2y112)g(x, y) = \text{sign}(x + 2y - \tfrac{11}{2})

7.12 新点是否影响 SVM 边界

  • 若新点被当前 SVM 正确分类且远离边界,通常不影响 hard margin 边界。原因是它不是活跃约束,不是支持向量,对应 α=0\alpha = 0
  • 若新点被当前边界错分,改用 soft margin 后通常会影响优化目标。原因是它产生正的 hinge loss,可能成为支持向量,优化会重新权衡间隔和误差。严格说是否改变边界还取决于 CC 和数据位置,但考试一般答"会影响,并说明 hinge loss/支持向量原因"。

8. 核方法

不显式升维,也能做非线性分类

8.1 从特征工程到非线性决策边界

线性模型的得分可写为 f(x)=wTϕ(x)+bf(x) = w^T \phi(x) + b,它对参数 ww 和特征 ϕ(x)\phi(x) 是线性的,但对原始输入 xx 可以是非线性的。

例子:ϕ(x)=(1,x,x2)\phi(x) = (1, x, x^2) 可以表示非线性曲线。SVM 课件用体温、身高体重等例子说明:真实关系可能有非单调性、非线性和特征交互,需要构造高维特征。

8.2 Kernel trick

SVM 对偶中样本只以内积形式出现:xiTxjx_i^T x_j。如果先映射到高维空间 ϕ(x)\phi(x),对偶中只需要 ϕ(xi)Tϕ(xj)\phi(x_i)^T \phi(x_j)。定义核函数:

K(xi,xj)=ϕ(xi)Tϕ(xj)K(x_i, x_j) = \phi(x_i)^T \phi(x_j)

这样无需显式计算 ϕ(x)\phi(x),只要能计算 K(xi,xj)K(x_i, x_j)

8.3 常见核函数

  • 线性核:K(x,z)=xTzK(x, z) = x^T z
  • 多项式核:K(x,z)=(1+xTz)pK(x, z) = (1 + x^T z)^p
  • 高斯 RBF 核:K(x,z)=exp(xz22σ2)K(x, z) = \exp\left(-\dfrac{\|x - z\|^2}{2\sigma^2}\right)

RBF 核对应无限维特征映射,能形成非常灵活的非线性边界。

8.4 核矩阵必须对称半正定

给定样本 x1,,xnx_1, \dots, x_n,核矩阵 Kij=K(xi,xj)K_{ij} = K(x_i, x_j)。如果 KK 来自某个特征映射内积,则 Kij=ϕ(xi)Tϕ(xj)K_{ij} = \phi(x_i)^T \phi(x_j)

  • 对称性:Kij=ϕ(xi)Tϕ(xj)=ϕ(xj)Tϕ(xi)=KjiK_{ij} = \phi(x_i)^T \phi(x_j) = \phi(x_j)^T \phi(x_i) = K_{ji}
  • 半正定性:对任意 aRna \in \mathbb{R}^n

aTKa=i=1nj=1naiajϕ(xi)Tϕ(xj)=i=1naiϕ(xi)20a^T K a = \sum_{i=1}^{n}\sum_{j=1}^{n} a_i a_j \phi(x_i)^T \phi(x_j) = \left\| \sum_{i=1}^{n} a_i \phi(x_i) \right\|^2 \geq 0

所以有效核函数对应的核矩阵必须对称半正定。

8.5 核 SVM 的训练和预测

训练时把对偶中的内积替换为核函数:

maxαi=1nαi12i=1nj=1nαiαjyiyjK(xi,xj)\max_\alpha \sum_{i=1}^{n} \alpha_i - \frac{1}{2}\sum_{i=1}^{n}\sum_{j=1}^{n} \alpha_i \alpha_j y_i y_j K(x_i, x_j)

预测新样本:

f(x)=i=1nαiyiK(xi,x)+b,g(x)=sign(f(x))f(x) = \sum_{i=1}^{n} \alpha_i y_i K(x_i, x) + b, \quad g(x) = \text{sign}(f(x))

仍然只有支持向量对应的 αi\alpha_i 非零。

8.6 XOR 和二次核

2021 判断题中 XOR 数据:

(1,1)+1,(1,1)+1,(1,1)1,(1,1)1(1, 1) \mapsto +1, \quad (-1, -1) \mapsto +1, \quad (1, -1) \mapsto -1, \quad (-1, 1) \mapsto -1

原空间线性不可分,但二次特征中包含交互项 x1x2x_1 x_2。因为:

x1x2>0+1,x1x2<01x_1 x_2 > 0 \Rightarrow +1, \quad x_1 x_2 < 0 \Rightarrow -1

所以二次核 K(x,z)=(1+xTz)2K(x, z) = (1 + x^T z)^2 可以把 XOR 分开。

9. K-Means

用交替最小化做聚类

9.1 任务与输入输出

K-Means 是无监督聚类方法。

  • 输入:样本 D={xi}i=1nD = \{x_i\}_{i=1}^n;簇数 KK
  • 输出:每个样本的簇编号 ci{1,,K}c_i \in \{1, \dots, K\};每个簇的中心 μ1,,μK\mu_1, \dots, \mu_K
  • 目标:让同一簇内样本尽量接近自己的中心。

9.2 目标函数

K-Means 最小化类内平方和:

J=i=1nxiμci2J = \sum_{i=1}^{n} \|x_i - \mu_{c_i}\|^2

其中 cic_i 是样本 xix_i 所属簇编号。

9.3 算法步骤

1
2
3
4
5
6
7
initialize K centers mu_1, ..., mu_K
repeat:
assignment step:
assign each x_i to its nearest center
update step:
set each mu_k to the mean of points assigned to cluster k
until assignments or centers stop changing

分配步骤:ci=argmink{1,,K}xiμk2c_i = \arg\min_{k \in \{1,\dots,K\}} \|x_i - \mu_k\|^2

更新步骤:μk=1CkxiCkxi\mu_k = \frac{1}{|C_k|} \sum_{x_i \in C_k} x_i

9.4 为什么簇中心是均值

固定某个簇 CC,要求 minμxiCxiμ2\min_\mu \sum_{x_i \in C} \|x_i - \mu\|^2。记 F(μ)=xiC(xiμ)T(xiμ)F(\mu) = \sum_{x_i \in C} (x_i - \mu)^T(x_i - \mu)

μ\mu 求梯度:μF(μ)=xiC2(μxi)\nabla_\mu F(\mu) = \sum_{x_i \in C} 2(\mu - x_i)。令梯度为 0:2Cμ2xiCxi=02|C|\mu - 2\sum_{x_i \in C} x_i = 0,所以:

μ=1CxiCxi\mu = \frac{1}{|C|} \sum_{x_i \in C} x_i

这说明更新中心为均值是固定分配时的最优解。

9.5 K-Means 收敛证明

要证明 K-Means 收敛,围绕目标函数 J=i=1nxiμci2J = \sum_{i=1}^{n}\|x_i - \mu_{c_i}\|^2,分两步说明。

第一步,固定中心 μ1,,μK\mu_1, \dots, \mu_K,重新分配每个样本到最近中心。对每个样本 xix_i,新中心距离不大于旧中心距离,因此每一项 xiμci2\|x_i - \mu_{c_i}\|^2 不增加,整体 JJ 不增加。

第二步,固定簇分配 C1,,CKC_1, \dots, C_K,把每个中心更新为簇内均值。上一节已证明均值最小化簇内平方误差,因此每个簇的误差不增加,整体 JJ 不增加。

所以每轮迭代后 J(t+1)J(t)J^{(t+1)} \leq J^{(t)}。又因为 J0J \geq 0,目标函数单调不增且有下界。对有限数据,可能的簇分配数量有限;若某轮分配不变,中心也不变,算法终止。因此 K-Means 会收敛到一个局部最优或固定点。

注意:K-Means 不保证全局最优,结果受初始中心影响。

9.6 K-Means 手算题

若题目给出簇,求新中心,就直接取均值。例如 C1={(0,6),(6,0)}C_1 = \{(0, 6), (6, 0)\},则:

μ1=(0,6)+(6,0)2=(3,3)\mu_1 = \frac{(0,6) + (6,0)}{2} = (3, 3)

若题目给候选初始中心,问能否产生某个分配,就对每个点计算到所有中心的距离,看最近中心是否与题目分配一致。

10. PCA

找最大方差方向做降维

10.1 任务与输入输出

PCA 是无监督降维方法。

  • 输入:高维样本 xiRdx_i \in \mathbb{R}^d;目标维数 k<dk < d
  • 输出:kk 个主成分方向;每个样本的低维表示 ziRkz_i \in \mathbb{R}^k
  • 含义:用低维线性子空间保留数据主要变化方向。

10.2 PCA 的两种等价目标

PCA 可以理解为:

  1. 最大化投影后的方差。
  2. 最小化投影再重构的平方误差。

保留大方差方向,丢弃小方差方向。若噪声主要分布在小方差方向,PCA 可起到去噪作用。2020 判断题考过"PCA 可以去噪",通常答对。

10.3 PCA 步骤

  1. 数据中心化x~i=xixˉ\tilde{x}_i = x_i - \bar{x},其中 xˉ=1ni=1nxi\bar{x} = \frac{1}{n}\sum_{i=1}^{n} x_i
  2. 计算协方差矩阵S=1ni=1nx~ix~iTS = \frac{1}{n}\sum_{i=1}^{n} \tilde{x}_i \tilde{x}_i^T
  3. 求特征值和特征向量Suj=λjujS u_j = \lambda_j u_j
  4. 取最大 kk 个特征值对应的特征向量组成矩阵Uk=[u1,,uk]U_k = [u_1, \dots, u_k]
  5. 投影zi=UkT(xixˉ)z_i = U_k^T (x_i - \bar{x})
  6. 重构近似x^i=xˉ+Ukzi\hat{x}_i = \bar{x} + U_k z_i

10.4 PCA 和分类器边界

PCA 本身不是分类器,它没有标签输出。它通常作为预处理,用于降维、可视化、压缩、去噪,再把低维特征送入分类器。

10.5 PAC 学习

PAC 是 Probably Approximately Correct。目标:以至少 1δ1 - \delta 的概率,学到真实误差不超过 ε\varepsilon 的假设。形式上,希望 P(err(h)ε)1δP(\text{err}(h) \leq \varepsilon) \geq 1 - \delta

有限假设空间的一致学习常见样本复杂度:

m1ε(lnH+ln1δ)m \geq \frac{1}{\varepsilon}\left(\ln |H| + \ln \frac{1}{\delta}\right)

含义:

  • ε\varepsilon 越小,要求越精确,需要更多样本。
  • δ\delta 越小,要求越高置信度,需要更多样本。
  • H|H| 越大,假设空间越复杂,需要更多样本。

SVM 课件提到最大间隔符合直觉和 PAC 理论:间隔越大,分类器越稳定,泛化倾向更好。

12. 神经网络

12.1 任务与输入输出

神经网络是一类函数近似器,可用于分类、回归、序列建模、图像识别等。

  • 输入:原始特征、图像、文本向量或其他张量。
  • 输出由任务决定:二分类(一个概率 P(y=1x)P(y=1 \mid x));多分类(类别概率分布 (p1,,pK)(p_1, \dots, p_K));回归(连续值 y^\hat{y})。
  • 学到的东西是所有层的权重和偏置:θ={W(1),b(1),,W(L),b(L)}\theta = \{W^{(1)}, b^{(1)}, \dots, W^{(L)}, b^{(L)}\}

12.2 M-P 神经元和感知机历史

课件历史线:

  • 1943 年 McCulloch 和 Pitts 提出 M-P 神经元模型。
  • 1958 年 Rosenblatt 提出感知机及其学习规则。
  • 1969 年 Minsky 和 Papert 指出单层网络不能解决非线性问题,神经网络进入低谷。
  • 1986 年反向传播算法被系统报告,多层网络训练变得可行。
  • 2006 年后深度学习复兴。
  • 2012 年 CNN 在 ImageNet 上取得重大突破。

考试一般不考年份细节,但可用于概念题。

12.3 单个神经元:加权求和再激活

单个神经元:z=wTx+b,  a=ϕ(z)z = w^T x + b,\; a = \phi(z),其中 xx 是输入,ww 是权重,bb 是偏置,ϕ\phi 是激活函数,aa 是输出激活。

如果没有非线性激活,多层线性网络仍等价于单层线性模型。原因是线性函数复合仍是线性函数:

W2(W1x+b1)+b2=(W2W1)x+(W2b1+b2)W^2(W^1 x + b_1) + b_2 = (W^2 W^1) x + (W^2 b_1 + b_2)

12.4 常见激活函数

  • 阶跃函数接近生物神经元"超过阈值才激活"的直觉,但不连续、不光滑,不适合梯度下降。
  • Sigmoidσ(z)=11+ez\sigma(z) = \dfrac{1}{1+e^{-z}},输出在 (0,1)(0,1),但深层网络容易梯度消失。
  • Tanhtanh(z)=ezezez+ez\tanh(z) = \dfrac{e^z - e^{-z}}{e^z + e^{-z}},输出在 (1,1)(-1,1),零中心。
  • ReLUReLU(z)=max(0,z)\text{ReLU}(z) = \max(0, z),优点是计算简单、缓解梯度消失;缺点是可能出现 dead ReLU,即某些神经元长期输出 0。

12.5 前馈神经网络

前馈网络按层计算:

a(0)=x,z()=W()a(1)+b(),a()=ϕ()(z())a^{(0)} = x,\quad z^{(\ell)} = W^{(\ell)} a^{(\ell-1)} + b^{(\ell)},\quad a^{(\ell)} = \phi^{(\ell)}(z^{(\ell)})

最后输出 y^=a(L)\hat{y} = a^{(L)}。多层前馈网络就是复合函数:

f(x)=ϕ(L)(W(L)ϕ(L1)(ϕ(1)(W(1)x+b(1)))+b(L))f(x) = \phi^{(L)}(W^{(L)} \phi^{(L-1)}(\cdots \phi^{(1)}(W^{(1)} x + b^{(1)}) \cdots) + b^{(L)})

输出层选择:二分类用 sigmoid;多分类用 softmax;回归用线性输出。

12.6 网络参数个数

若某层输入维度为 d1d_{\ell-1},输出神经元数为 dd_\ell,则:权重数 dd1d_\ell d_{\ell-1};偏置数 dd_\ell;参数总数 dd1+dd_\ell d_{\ell-1} + d_\ell

例如课件中的网络若有 [3×4][3 \times 4][4×2][4 \times 2] 两组权重,权重数为 34+42=203 \cdot 4 + 4 \cdot 2 = 20;若偏置数为 4+2=64 + 2 = 6,总可学习参数为 20+6=2620 + 6 = 26

12.7 损失函数:分类用交叉熵,回归用平方误差

  • 回归常用均方误差:L=yy^2L = \|y - \hat{y}\|^2
  • 多分类常用交叉熵。若 yy 是 one-hot 标签,y^\hat{y} 是 softmax 概率:L=k=1Kyklogy^kL = -\sum_{k=1}^{K} y_k \log \hat{y}_k。若真实类别为 ttL=logy^tL = -\log \hat{y}_t
  • 总损失:C(θ)=i=1nLi(θ)C(\theta) = \sum_{i=1}^{n} L_i(\theta)。训练目标:θ=argminθC(θ)\theta^* = \arg\min_\theta C(\theta)

12.8 反向传播:链式法则的动态规划

反向传播用于高效计算每个参数的梯度。训练流程:

  1. 前向传播:从输入逐层计算输出和损失。
  2. 反向传播:从损失开始,逐层计算误差信号。
  3. 参数更新:沿负梯度方向下降。

对第 \ell 层定义误差信号 δ()=Lz()\delta^{(\ell)} = \dfrac{\partial L}{\partial z^{(\ell)}}

  • 输出层误差根据损失函数决定。对于 softmax 加交叉熵,常见简化为 δ(L)=y^y\delta^{(L)} = \hat{y} - y
  • 隐藏层误差:δ()=((W(+1))Tδ(+1))ϕ(z())\delta^{(\ell)} = ((W^{(\ell+1)})^T \delta^{(\ell+1)}) \odot \phi'(z^{(\ell)}),其中 \odot 是逐元素乘法。
  • 参数梯度:LW()=δ()(a(1))T\dfrac{\partial L}{\partial W^{(\ell)}} = \delta^{(\ell)} (a^{(\ell-1)})^TLb()=δ()\dfrac{\partial L}{\partial b^{(\ell)}} = \delta^{(\ell)}
  • 更新:W()W()ηLW()W^{(\ell)} \leftarrow W^{(\ell)} - \eta \dfrac{\partial L}{\partial W^{(\ell)}}b()b()ηLb()b^{(\ell)} \leftarrow b^{(\ell)} - \eta \dfrac{\partial L}{\partial b^{(\ell)}}

考试若不要求矩阵推导,至少要能说清:反向传播本质是链式法则,从输出层往输入层传误差,避免重复计算中间导数。

12.9 梯度下降、学习率和局部最优

参数更新总形式:θθηθC(θ)\theta \leftarrow \theta - \eta \nabla_\theta C(\theta)

  • 学习率太大可能震荡或发散;学习率太小收敛很慢。
  • 深度网络损失通常非凸,梯度下降不保证全局最优,不同初始化可能到不同局部最小值或鞍点。

常见优化方式:

  • Batch Gradient Descent:每次用全训练集。
  • SGD:每次用一个样本,噪声大但便宜。
  • Mini-batch SGD:每次用一小批,实践最常用。
  • Momentum:累积历史方向,减少震荡。
  • Adam:自适应学习率,实践常用。

12.10 表示能力和过拟合

多层前馈网络表示能力很强。通用近似定理指出:一个包含足够多神经元的隐层,可以以任意精度逼近许多连续函数。但强表示能力也导致过拟合。表现为训练误差持续降低,验证或测试误差上升。

缓解方法:

  • Early stopping:训练误差下降但验证误差上升时停止。
  • L2 正则或 weight decay:惩罚过大权重。
  • Dropout:训练时随机丢弃部分神经元,减少共适应。
  • Data augmentation:用数据增强增加训练样本多样性。
  • Batch normalization:稳定中间层分布,常能加速训练。

13. CNN

用局部连接和权重共享处理图像

13.1 任务与输入输出

CNN 主要用于图像,也可用于其他网格结构数据。

  • 输入:XRH×W×CinX \in \mathbb{R}^{H \times W \times C_{\text{in}}},其中 HH 是高度,WW 是宽度,CinC_{\text{in}} 是通道数。
  • 卷积层输出:YRH×W×CoutY \in \mathbb{R}^{H' \times W' \times C_{\text{out}}},每个输出通道对应一个 filter,输出称为 feature map。

13.2 CNN 的三个核心思想

  • 局部连接:每个神经元只看局部感受野,不连接整张图像。
  • 权重共享:同一个卷积核在不同空间位置重复使用,显著减少参数。
  • 层级特征:低层提取边缘、角点等局部特征,高层组合成更全局的语义特征。

13.3 卷积运算

一个卷积核在输入上滑动,对局部窗口做加权求和。多通道卷积可写为:

Yi,j,co=bco+ci=1Cinu=1Fhv=1FwKu,v,ci,coXiS+u,jS+v,ciY_{i,j,c_o} = b_{c_o} + \sum_{c_i=1}^{C_{\text{in}}} \sum_{u=1}^{F_h} \sum_{v=1}^{F_w} K_{u,v,c_i,c_o}\, X_{iS+u, jS+v, c_i}

其中 KK 是卷积核,SS 是 stride,coc_o 是输出通道。若输入大小为 H×WH \times W,卷积核大小为 F×FF \times F,padding 为 PP,stride 为 SS,则输出空间大小:

H=H+2PFS+1,W=W+2PFS+1H' = \left\lfloor \frac{H + 2P - F}{S} \right\rfloor + 1, \quad W' = \left\lfloor \frac{W + 2P - F}{S} \right\rfloor + 1

课件强调:卷积本质上仍是 weighted sum,所以 CNN 的 BP 和全连接网络类似。

13.4 多个 filter 和 channel

一层通常使用多个 filters,因为一个 filter 只能检测一种局部模式。多个 filters 输出多个 feature maps,形成多个通道。若一层有 CoutC_{\text{out}} 个 filter,则输出通道数为 CoutC_{\text{out}}。高层特征是低层特征的组合。

13.5 Pooling:降采样和局部鲁棒

Max pooling 在窗口内取最大值:Yi,j,c=max(u,v)Wi,jXu,v,cY_{i,j,c} = \max_{(u,v) \in \mathcal{W}_{i,j}} X_{u,v,c}

作用:缩小特征图,减少后续参数量;增加对小范围平移的鲁棒性;保留局部最强响应。课件指出最常用 pooling 是 max-pooling。

13.6 Full CNN 结构

典型 CNN:

1
Input → Convolution → ReLU → Pooling → ⋯ → Flatten → Fully Connected → Output

Flatten 是把多通道特征图拉平成向量,再送入全连接前馈网络分类。

13.7 CNN 相比全连接网络为什么参数少

全连接层若输入图像有 HWCHWC 个像素,每个隐藏神经元都连接所有像素,参数很多。CNN 用两种方式压缩:

  • 减少连接:只连接局部窗口。
  • 共享权重:同一个 filter 在所有位置使用同一组参数。

Pooling 进一步降低特征图尺寸和复杂度。

13.8 CNN 考试概念

常见判断:

  • CNN 是层级特征提取器:对。
  • 卷积核是需要学习的参数:对。
  • 卷积是跨输入所有通道的加权求和:对。
  • CNN 常用激活函数是 ReLU:对。
  • CNN 常用 pooling 是 max-pooling:对。
  • CNN 训练策略是 backpropagation:对。

课件提到的经典结构包括 LeNet-5、AlexNet、GoogleNet、VGG、ResNet、BN,通常只需识别为经典 CNN/深度学习架构。

AlphaGo 例子中,棋盘可以表示为 19×1919 \times 19 矩阵,黑子、白子、空位分别编码。全连接前馈网络理论上也能用,但 CNN 更适合利用棋盘局部模式。课件特别提到 AlphaGo 的 policy network 不使用 max pooling,这属于低概率细节。

13.9 特征工程与特征学习:传统机器学习和深度学习的分界

传统机器学习常见流程:

原始输入人工设计特征简单分类器\text{原始输入} \to \text{人工设计特征} \to \text{简单分类器}

例如 SVM 中手工构造多项式特征、交互特征,或手工选择 kernel。其效果很依赖领域知识和特征工程。

深度学习更强调端到端特征学习:

原始输入网络自动学习表示分类/回归输出\text{原始输入} \to \text{网络自动学习表示} \to \text{分类/回归输出}

可以把深度网络理解为学习一个复杂的特征映射 ϕθ(x)\phi_\theta(x),然后在学到的表示上接一个相对简单的分类器。优势是表达能力强、能自动学习特征;代价是数据需求大、训练成本高、可解释性较差。

14. RNN 和 Attention

隔壁班补充,低概率

14.1 RNN:适合序列数据

输入:x1,x2,,xTx_1, x_2, \dots, x_T。隐藏状态递推:ht=ϕ(Wxxt+Whht1+b)h_t = \phi(W_x x_t + W_h h_{t-1} + b)。输出:yt=g(Wyht)y_t = g(W_y h_t)

含义:hth_t 保存到当前时刻为止的历史信息。RNN 适合文本、语音、时间序列。问题:长序列训练中容易梯度消失或爆炸。改进结构包括 LSTM 和 GRU。

14.2 Attention:用 Query、Key、Value 动态加权信息

Scaled dot-product attention:

Attention(Q,K,V)=softmax(QKTdk)V\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right) V

含义:

  • Query:当前位置想查什么。
  • Key:每个位置提供的索引。
  • Value:每个位置携带的信息。

Self-attention 中 Q,K,VQ, K, V 都来自同一序列。Transformer 主要由 self-attention 和前馈层组成。

16. 常考证明和计算模板

16.1 信息增益计算模板

  1. 数出当前集合各类别数量。
  2. 算当前熵:H(S)=kpklog2pkH(S) = -\sum_k p_k \log_2 p_k,其中 pkp_k 是类别 kk 的比例。
  3. 对属性 AA 的每个取值 vv,数出子集 SvS_v 的类别比例并算 H(Sv)H(S_v)
  4. 算加权平均:vSvSH(Sv)\sum_v \dfrac{|S_v|}{|S|} H(S_v)
  5. 信息增益:Gain(S,A)=H(S)vSvSH(Sv)\text{Gain}(S, A) = H(S) - \sum_v \dfrac{|S_v|}{|S|} H(S_v)
  6. 选增益最大的属性。

16.2 最小二乘推导模板

从目标 J(w)=Xwy2J(w) = \|Xw - y\|^2,写成 J(w)=(Xwy)T(Xwy)J(w) = (Xw - y)^T(Xw - y)

求梯度:wJ(w)=2XT(Xwy)\nabla_w J(w) = 2X^T(Xw - y)。令 0:XTXw=XTyX^T X w = X^T y

给答案:w=(XTX)1XTyw^* = (X^T X)^{-1} X^T y

  • 加权时把中间都加上 RRw=(XTRX)1XTRyw^* = (X^T R X)^{-1} X^T R y
  • 正则时把左边矩阵加 λI\lambda IλD\lambda D

16.3 Logistic 梯度模板

p=σ(wTx+b)p = \sigma(w^T x + b),损失 L=[ylogp+(1y)log(1p)]L = -[y \log p + (1-y)\log(1-p)]

先写核心:Lz=py\dfrac{\partial L}{\partial z} = p - y。再写:

Lwj=(py)xj,Lb=py\frac{\partial L}{\partial w_j} = (p - y)x_j, \quad \frac{\partial L}{\partial b} = p - y

16.4 SVM 手算模板

  1. 画图,找支持向量。
  2. 正支持向量列 wTx+b=1w^T x + b = 1
  3. 负支持向量列 wTx+b=1w^T x + b = -1
  4. w,bw, b
  5. 检查全部约束 yi(wTxi+b)1y_i(w^T x_i + b) \geq 1
  6. 写:wTx+b=0w^T x + b = 0wTx+b=1w^T x + b = 1wTx+b=1w^T x + b = -1g(x)=sign(wTx+b)g(x) = \text{sign}(w^T x + b)
  7. 间隔宽度:2w\dfrac{2}{\|w\|}

16.6 核矩阵半正定证明模板

Kij=ϕ(xi)Tϕ(xj)K_{ij} = \phi(x_i)^T \phi(x_j),则对任意 aa

aTKa=ijaiajϕ(xi)Tϕ(xj)=iaiϕ(xi)20a^T K a = \sum_i \sum_j a_i a_j \phi(x_i)^T \phi(x_j) = \left\| \sum_i a_i \phi(x_i) \right\|^2 \geq 0

所以核矩阵半正定。

17. 判断题速查

  • 模型越复杂越好:,可能过拟合。
  • 决策树能表示任意离散函数:,但可能很大且泛化差。
  • 无冲突训练集存在零训练误差决策树:
  • 根节点信息增益一定大于子节点信息增益:,数据子集不同。
  • k 越大,kNN 训练精度越高:
  • 线性分类器决策边界是超平面:
  • 最小二乘分类容易训练、有闭式解,但不是分类最优选择:
  • 逻辑回归输出概率:
  • 逻辑回归决策边界在原始特征空间是线性的:
  • SVM 支持向量决定边界:
  • hard margin 非支持向量通常不影响解:
  • soft margin 允许违反间隔甚至错分:
  • RBF 核只能线性分类:
  • 有效核矩阵应对称半正定:
  • K-Means 会收敛到全局最优:
  • K-Means 会终止或收敛到局部最优:
  • PCA 可用于去噪:
  • 无激活的多层神经网络仍等价于线性模型:
  • CNN 权重共享减少参数量:
  • 深度学习一定比传统机器学习好:

18. 最后一页压缩版

  • 决策树:Gain(S,A)=H(S)vSvSH(Sv)\text{Gain}(S, A) = H(S) - \sum_v \dfrac{|S_v|}{|S|} H(S_v)
  • kNN:y^=majority{yi:xiNk(x)}\hat{y} = \text{majority}\{y_i : x_i \in N_k(x)\}
  • 最小二乘:w=(XTX)1XTyw^* = (X^T X)^{-1} X^T y
  • 加权最小二乘:w=(XTRX)1XTRyw^* = (X^T R X)^{-1} X^T R y
  • 逻辑回归:p=σ(wTx+b)p = \sigma(w^T x + b)L=[ylogp+(1y)log(1p)]L = -[y \log p + (1-y)\log(1-p)]wL=(py)x\nabla_w L = (p - y)x
  • SVM:minw,b12w2\min_{w,b} \tfrac{1}{2}\|w\|^2yi(wTxi+b)1y_i(w^T x_i + b) \geq 1,margin width =2w= \tfrac{2}{\|w\|}hinge=max(0,1yif(xi))\ell_{\text{hinge}} = \max(0, 1 - y_i f(x_i))
  • Kernel:K(x,z)=ϕ(x)Tϕ(z)K(x, z) = \phi(x)^T \phi(z)
  • K-Means:ci=argminkxiμk2c_i = \arg\min_k \|x_i - \mu_k\|^2μk=1CkxiCkxi\mu_k = \tfrac{1}{|C_k|} \sum_{x_i \in C_k} x_i
  • PCA:Suj=λjujS u_j = \lambda_j u_jzi=UkT(xixˉ)z_i = U_k^T (x_i - \bar{x})
  • 神经网络:a()=ϕ(W()a(1)+b())a^{(\ell)} = \phi(W^{(\ell)} a^{(\ell-1)} + b^{(\ell)})
  • BP:δ()=((W(+1))Tδ(+1))ϕ(z())\delta^{(\ell)} = ((W^{(\ell+1)})^T \delta^{(\ell+1)}) \odot \phi'(z^{(\ell)})
  • CNN:局部连接 + 权重共享 + 层级特征

逻辑大抄

目录:0. 一句话地图 · 1. 逻辑智能体 · 2. 语法/语义/模型/蕴涵/推理 · 3. 命题逻辑 · 4. Horn 子句/前后向链 · 5. 命题归结和 CNF · 6. 命题→一阶逻辑 · 7. 一阶逻辑语法语义 · 8. 量词 · 9. 自然语言翻译模板 · 10. 一阶逻辑知识工程 · 11. 一阶逻辑实例化 · 12. 合一与代换 · 13. GMP · 14. 一阶前后向链 · 15. 一阶 CNF/Skolem/归结 · 16. 完整证明例题 · 17. 考试速查 · 18. 最后一页压缩版

0. 一句话地图

逻辑智能体的核心是:把环境知识写进知识库 KB,再用推理算法从 KB 中推出隐藏事实和行动。

这三章实际是一条线:

  1. 命题逻辑:先把"语法、语义、模型、蕴涵、可靠性、完备性、归结"等基本概念讲清楚。
  2. 一阶逻辑:把命题内部拆成对象、关系、函数、量词,让知识表示更紧凑。
  3. 一阶逻辑推理:因为有变量和量词,所以推理要用实例化、合一、GMP、链式推理、Skolem 化和一阶归结。

最终你要会三件事:

  1. 把自然语言写成逻辑公式。
  2. 判断一个结论是否由知识库蕴涵。
  3. 把证明题规整成 KB 加否定目标,再用 CNF 与归结推出空子句。

1. 逻辑智能体

1.1 三类建模范式

课件开头把 AI 里的模型大致分成三类:

  • 状态模型:搜索、博弈。重点是状态、动作、代价。
  • 变量模型:CSP、贝叶斯网络。重点是变量及变量间约束或概率依赖。
  • 逻辑模型:命题逻辑、一阶逻辑。重点是逻辑公式和推理规则。

逻辑模型适合定理证明、验证、知识推理,因为它能把"知道什么"和"怎么推"拆开。

1.2 知识库与 TELL/ASK

知识库 KB 是形式语言中的语句集合。基于知识的智能体通常这样运转:

1
2
3
4
TELL(KB, percept)
action = ASK(KB, query)
TELL(KB, action)
return action
  • TELL:把新感知、新事实、新行动写入知识库。
  • ASK:询问当前知识库是否蕴涵某个结论,或是否存在满足查询的对象。

知识库有两个层次:

  • 知识层:智能体知道什么,不关心内部怎样实现。
  • 实现层:知识库的数据结构和操作算法。

一个逻辑智能体必须能表示状态和动作,加入新感知,更新内部世界模型,推出不可直接观察的隐藏性质,并推出合适行动。

1.3 Wumpus 世界为什么适合讲逻辑

Wumpus 世界是"部分可观察环境中进行知识推理"的经典例子。

PEAS 描述:

  • 性能:拿到金子 +1000,死亡 −1000,每步 −1,射箭 −10。
  • 环境:4 × 4 网格;智能体从 [1,1] 出发;金子和 Wumpus 随机分布;非 [1,1] 的格子有陷阱的概率为 0.2。
  • 执行器:左转、右转、前进、抓取、射箭。
  • 传感器:臭气 Stench、微风 Breeze、闪光 Glitter、撞墙 Bump、Wumpus 死亡时的哀嚎 Scream。

环境性质:部分可观察;确定;序贯;静态;离散;单智能体(Wumpus 更像自然环境的一部分)。

Wumpus 世界需要表达不完整信息、否定信息、析取信息和分类讨论,例如"如果 [1,1] 没有微风,则相邻格子没有陷阱"。

2. 语法、语义、模型、蕴涵、推理

2.1 语法和语义

逻辑是一种形式语言:

  • 语法规定哪些符号串是合法语句。
  • 语义规定语句在某个世界或模型中如何判定真假。

例如算术中,x+2yx + 2 \geq y 是合法语句,而残缺的 x2+y>x^2 + y > 不是合法语句。前者在 x=7,y=1x=7, y=1 的世界中为真,在 x=0,y=6x=0, y=6 的世界中为假。

2.2 模型

模型是可以判定语句真假的形式化世界。若语句 α\alpha 在模型 mm 中为真,记作 mαm \models \alpha。若 M(α)M(\alpha) 表示所有使 α\alpha 为真的模型集合,则 M(α)={mmα}M(\alpha) = \{m \mid m \models \alpha\}

2.3 蕴涵

KB 蕴涵 α\alpha 的含义是:所有使 KB 为真的模型,也都使 α\alpha 为真。

KBαKB \models \alpha

等价地:M(KB)M(α)M(KB) \subseteq M(\alpha)

重点:蕴涵是语义概念,讨论所有模型中的必然真;不是算法有没有算出来。

2.4 推理

若推理过程 ii 可以从 KB 导出 α\alpha,记作 KBiαKB \vdash_i \alpha。推理是算法概念。考试里最常考两条性质:

  • 可靠性 (soundness):算法推出的都真。KBiαKBαKB \vdash_i \alpha \Rightarrow KB \models \alpha
  • 完备性 (completeness):语义上必然真的都能推出。KBαKBiαKB \models \alpha \Rightarrow KB \vdash_i \alpha

可以这样记:sound = 不会乱推出;complete = 该推出的都能推出。

3. 命题逻辑

3.1 命题逻辑能表达什么

命题逻辑把世界看成一组原子事实,每个命题符号只有真或假。常见命题符号:P,Q,R,P1,2,B2,1P, Q, R, P_{1,2}, B_{2,1}

命题逻辑连接词:¬S,  S1S2,  S1S2,  S1S2,  S1S2\lnot S,\; S_1 \land S_2,\; S_1 \lor S_2,\; S_1 \Rightarrow S_2,\; S_1 \Leftrightarrow S_2

一个模型给每个命题符号赋真值。例如三个命题符号 A,B,CA, B, C23=82^3 = 8 个模型。

3.2 命题逻辑语义

在模型 mm 中:

  • ¬S1\lnot S_1 为真 \Leftrightarrow S1S_1 为假
  • S1S2S_1 \land S_2 为真 \Leftrightarrow S1S_1 为真且 S2S_2 为真
  • S1S2S_1 \lor S_2 为真 \Leftrightarrow S1S_1 为真或 S2S_2 为真
  • S1S2S_1 \Rightarrow S_2 为假 \Leftrightarrow S1S_1 为真且 S2S_2 为假
  • S1S2S_1 \Leftrightarrow S_2 为真 \Leftrightarrow (S1S2)(S2S1)(S_1 \Rightarrow S_2) \land (S_2 \Rightarrow S_1) 为真

3.3 Wumpus 的命题逻辑写法

定义:Pi,jP_{i,j}[i,j][i,j] 有陷阱;Bi,jB_{i,j}[i,j][i,j] 有微风。

在局部格子中:

B1,1(P1,2P2,1)B_{1,1} \Leftrightarrow (P_{1,2} \lor P_{2,1})

如果感知到 [1,1][1,1] 没有微风 ¬B1,1\lnot B_{1,1},则可推出 ¬P1,2¬P2,1\lnot P_{1,2} \land \lnot P_{2,1}

再如:B2,1(P1,1P2,2P3,1)B_{2,1} \Leftrightarrow (P_{1,1} \lor P_{2,2} \lor P_{3,1})

这里命题逻辑的缺点也暴露了:每个格子都要手写一条规则,不能自然表达"任意相邻格子"。

3.4 真值表推理

真值表推理枚举所有模型:

  1. 枚举命题符号的所有真值赋值。
  2. 只看使 KB 为真的行。
  3. 检查这些行中 α\alpha 是否都为真。

性质:可靠;完备;时间复杂度 O(2n)O(2^n);空间复杂度可做到 O(n)O(n),其中 nn 是命题符号个数。课件还指出,命题逻辑的蕴涵判定对应的问题是 co-NP-complete。

3.5 逻辑等价

两个语句在完全相同的模型中为真,就逻辑等价:

αβ    (αβ)(βα)\alpha \equiv \beta \iff (\alpha \models \beta) \land (\beta \models \alpha)

常用等价律:

αβ¬αβ\alpha \Rightarrow \beta \equiv \lnot\alpha \lor \beta

αβ(αβ)(βα)\alpha \Leftrightarrow \beta \equiv (\alpha \Rightarrow \beta) \land (\beta \Rightarrow \alpha)

¬¬αα\lnot\lnot\alpha \equiv \alpha

¬(αβ)¬α¬β\lnot(\alpha \land \beta) \equiv \lnot\alpha \lor \lnot\beta

¬(αβ)¬α¬β\lnot(\alpha \lor \beta) \equiv \lnot\alpha \land \lnot\beta

αβ¬β¬α\alpha \Rightarrow \beta \equiv \lnot\beta \Rightarrow \lnot\alpha

α(βγ)(αβ)(αγ)\alpha \lor (\beta \land \gamma) \equiv (\alpha \lor \beta) \land (\alpha \lor \gamma)

α(βγ)(αβ)(αγ)\alpha \land (\beta \lor \gamma) \equiv (\alpha \land \beta) \lor (\alpha \land \gamma)

3.6 合法性、可满足性、不可满足性

合法式(永真式)在所有模型中都为真:α\models \alpha。例:A¬AA \lor \lnot AAAA \Rightarrow A(A(AB))B(A \land (A \Rightarrow B)) \Rightarrow B

  • 可满足:至少存在一个模型使语句为真。
  • 不可满足:没有任何模型使语句为真。例:A¬AA \land \lnot A

最关键的证明转化:

KBα    KB¬α 不可满足KB \models \alpha \iff KB \land \lnot\alpha \text{ 不可满足}

也就是反证法:想证明 α\alpha,就把 ¬α\lnot\alpha 加进知识库,看能否推出矛盾。

3.7 两类证明方法

课件把证明方法分成两类:

  1. 模型检查:枚举模型、DPLL、模型空间启发式搜索等。
  2. 推理规则:从旧句子可靠地产生新句子,证明是推理规则应用序列。

模型检查通常直接但可能指数复杂;推理规则更像搜索证明路径,常常需要先转成范式。

4. Horn 子句、前向链和后向链

4.1 Horn 子句

Horn 子句是最多只有一个正文字的子句,只有两种形式:单个命题符号,符号合取蕴涵单个符号。确定子句(在 KB 中称为规则)是恰好一个正文字的 Horn 子句,常写为:

P1P2PmQP_1 \land P_2 \land \dots \land P_m \Rightarrow Q

对应 CNF 子句:¬P1¬P2¬PmQ\lnot P_1 \lor \lnot P_2 \lor \dots \lor \lnot P_m \lor Q

若没有正文字:P1P2PmP_1 \land P_2 \land \dots \land P_m \Rightarrow \bot,表示约束或矛盾。

Kowalski 形式就是把规则写成"前提合取推出结论":P1PmQP_1 \land \dots \land P_m \Rightarrow Q

4.2 假言推理(Modus Ponens)

命题逻辑的分离规则:

P,PQQ\frac{P,\quad P \Rightarrow Q}{Q}

对 Horn KB,Modus Ponens 是完备的。

4.3 前向链

前向链是数据驱动:从已知事实出发,规则前提满足就触发规则,把结论加入知识库。

典型思路:

1
2
3
4
5
6
7
agenda = 已知事实
while agenda 非空:
取出一个事实 p
若 p 是查询,返回 true
对每条包含 p 的规则,减少未满足前提计数
若某条规则所有前提都已满足,把结论加入 agenda
return false

性质:

  • 对 Horn KB 可靠。
  • 对 Horn KB 完备。
  • 命题 Horn KB 中运行时间线性。
  • 可能推出许多与目标无关的事实。

4.4 后向链

后向链是目标驱动:从查询 qq 出发,找所有能推出 qq 的规则,再递归证明这些规则的前提。证明 qq 时:

  1. qq 已知为真,成功。
  2. 找所有形如 p1,,pkp_1, \dots, p_k 推出 qq 的规则。
  3. 递归证明 p1,,pkp_1, \dots, p_k

需要避免两个问题:

  • 循环:新子目标若已在目标栈中,就不要继续展开。
  • 重复工作:缓存已经成功或失败的子目标。

4.5 前向链与后向链对比

规则形式 主要推理 复杂度倾向 表达能力
Horn 子句 假言推理 线性 较弱
任意子句 归结 指数 较强
  • 前向链:数据驱动;适合事实不断进入、需要自动推出所有后果的系统;可能做很多与查询无关的工作。
  • 后向链:目标驱动;适合查询少且目标明确的问题;复杂度可能远小于知识库大小;深度优先搜索容易因递归规则陷入循环。

5. 命题逻辑归结和 CNF

5.1 CNF 合取范式

CNF 是若干子句的合取,每个子句是若干文字的析取。例:(A¬B)(B¬C¬D)(A \lor \lnot B) \land (B \lor \lnot C \lor \lnot D)。文字是原子命题或其否定。子句是文字析取。

5.2 命题归结规则

若两个子句含有互补文字,可以删去互补文字并合并剩余部分:

PQ,¬QRPR\frac{P \lor Q,\quad \lnot Q \lor R}{P \lor R}

若归结得到空子句 \square,则表示矛盾。命题逻辑中,归结是可靠且完备的。

5.3 命题 CNF 转换

把公式转 CNF:

  1. 消去双向蕴涵AB(AB)(BA)A \Leftrightarrow B \equiv (A \Rightarrow B) \land (B \Rightarrow A)
  2. 消去蕴涵AB¬ABA \Rightarrow B \equiv \lnot A \lor B
  3. 否定内移¬(AB)¬A¬B\lnot(A \land B) \equiv \lnot A \lor \lnot B¬(AB)¬A¬B\lnot(A \lor B) \equiv \lnot A \land \lnot B
  4. 用分配律把析取分配到合取内部A(BC)(AB)(AC)A \lor (B \land C) \equiv (A \lor B) \land (A \lor C)
  5. 拆成子句集合

5.4 归结证明模板(反证法)

要证明 KBαKB \models \alpha,做法:

  1. 把 KB 转为 CNF 子句(ABA \lor B)。
  2. 把目标否定 ¬α\lnot\alpha 加入。
  3. 不断归结:将子句合并。
  4. 若推出空子句 \square,则 KBαKB \models \alpha

这就是:KBα    KB¬αKB \models \alpha \iff KB \land \lnot\alpha 不可满足。

6. 命题逻辑 → 一阶逻辑

6.1 命题逻辑的优点

命题逻辑有几个重要优点:

  • 陈述性:知识和推理分开。
  • 能表示不完整信息、析取信息、否定信息。
  • 合成性:复合句含义由子句含义决定。
  • 上下文无关:不像自然语言那样高度依赖语境。

6.2 命题逻辑的缺点

命题逻辑表达力弱,不能自然表达对象、关系、函数和量词。例如"所有学生都懂算术",命题逻辑只能枚举:

StudentAliceKnowsArithmeticAlice\text{StudentAlice} \Rightarrow \text{KnowsArithmeticAlice}

StudentBobKnowsArithmeticBob\text{StudentBob} \Rightarrow \text{KnowsArithmeticBob}

一阶逻辑可以写成:x(Student(x)Knows(x,Arithmetic))\forall x\, (\text{Student}(x) \Rightarrow \text{Knows}(x, \text{Arithmetic}))

Wumpus 世界中的"相邻格子有陷阱当且仅当当前格子有微风"也不应为每个格子手写,而应抽象成对象和关系。

6.3 一阶逻辑的世界观

命题逻辑假设世界由事实组成。一阶逻辑假设世界包含:

  • 对象:人、数字、课程、格子、门电路。
  • 关系:红色、兄弟关系、大于、相邻、拥有。
  • 函数:父亲、左腿、平方根、加一。
逻辑 世界中存在什么 智能体对事实的态度
命题逻辑 事实 真、假、未知
一阶逻辑 事实、对象、关系 真、假、未知
时序逻辑 事实、对象、关系、时间 真、假、未知
概率逻辑 事实 信度在 [0,1][0,1]

7. 一阶逻辑的语法和语义

7.1 基本符号

一阶逻辑的基本元素:

  • 常量:指代具体对象,如 Robbie、Bob、USTC。
  • 变量:如 x,y,zx, y, z,由量词绑定。
  • 函数:从对象到对象,如 Mother(x)\text{Mother}(x)Father(Bob)\text{Father}(\text{Bob})
  • 谓词:返回真或假,如 Robot(x)\text{Robot}(x)Owns(x,y)\text{Owns}(x, y)
  • 等号:表示两个项指代同一对象。
  • 量词:全称量词 \forall、存在量词 \exists
  • 连接词¬,,,,\lnot, \land, \lor, \Rightarrow, \Leftrightarrow

7.2 项和原子语句

项指代对象:x,  Bob,  Mother(x),  Father(Father(x))x,\; \text{Bob},\; \text{Mother}(x),\; \text{Father}(\text{Father}(x))

原子语句由谓词作用于项,或由两个项用等号连接:Robot(Robbie),  Loves(Bob,Mother(Bob)),  Father(x)=John\text{Robot}(\text{Robbie}),\; \text{Loves}(\text{Bob}, \text{Mother}(\text{Bob})),\; \text{Father}(x) = \text{John}

函数项不能单独为真或假。谓词公式才能为真或假。

7.3 一阶逻辑模型和解释

一阶逻辑中的模型包含域元素以及它们之间的关系。解释负责说明符号指代什么:

  • 常量符号指向域中的对象。
  • 谓词符号指向域上的关系。
  • 函数符号指向域上的函数关系。

原子语句 Predicate(t1,,tn)\text{Predicate}(t_1, \dots, t_n) 为真,当且仅当 t1,,tnt_1, \dots, t_n 指代的对象确实处在该谓词指代的关系中。

FOL 的模型远多于命题逻辑:域大小可以从 1 到无穷;每个谓词都可解释为不同关系;常量也可指向不同对象。因此直接枚举一阶模型通常不可行。

8. 量词

8.1 全称量词

全称量词 xP(x)\forall x\, P(x) 表示域中每个对象都使 P(x)P(x) 成立。它大致相当于所有实例的合取:P(a1)P(a2)P(a_1) \land P(a_2) \land \dots

"所有 A 都是 B"的标准模板:x(A(x)B(x))\forall x\, (A(x) \Rightarrow B(x))

不要写成 x(A(x)B(x))\forall x\, (A(x) \land B(x)),后者表示世界中每个对象都是 A 且都是 B,太强。

8.2 存在量词

存在量词 xP(x)\exists x\, P(x) 表示至少有一个对象使 P(x)P(x) 成立。它大致相当于所有实例的析取:P(a1)P(a2)P(a_1) \lor P(a_2) \lor \dots

"有些 A 是 B"的标准模板:x(A(x)B(x))\exists x\, (A(x) \land B(x))

不要写成 x(A(x)B(x))\exists x\, (A(x) \Rightarrow B(x)),因为只要选到一个不是 A 的对象,蕴涵就可能为真,表达会太弱。

8.3 量词交换和对偶

同类量词可交换:

xyP(x,y)yxP(x,y)\forall x \forall y\, P(x,y) \equiv \forall y \forall x\, P(x,y)

xyP(x,y)yxP(x,y)\exists x \exists y\, P(x,y) \equiv \exists y \exists x\, P(x,y)

不同类量词一般不可交换:

  • xyLoves(x,y)\exists x \forall y\, \text{Loves}(x,y) 表示"存在某个人爱所有人"。
  • yxLoves(x,y)\forall y \exists x\, \text{Loves}(x,y) 表示"每个人都至少被某个人爱"。

量词对偶:

¬xP(x)x¬P(x)\lnot \forall x\, P(x) \equiv \exists x\, \lnot P(x)

¬xP(x)x¬P(x)\lnot \exists x\, P(x) \equiv \forall x\, \lnot P(x)

xP(x)¬x¬P(x)\forall x\, P(x) \equiv \lnot \exists x\, \lnot P(x)

xP(x)¬x¬P(x)\exists x\, P(x) \equiv \lnot \forall x\, \lnot P(x)

变量名本身不重要,但改名必须避免变量捕获。

8.4 等号

等号表示两个项指代同一对象:t1=t2t_1 = t_2。常用于唯一性、计数、不同对象约束:xyx \neq y

Sibling 例子可以写成:

xy(Sibling(x,y)(xymf(mfParent(m,x)Parent(f,x)Parent(m,y)Parent(f,y))))\forall x \forall y\, (\text{Sibling}(x,y) \Leftrightarrow (x \neq y \land \exists m \exists f\, (m \neq f \land \text{Parent}(m,x) \land \text{Parent}(f,x) \land \text{Parent}(m,y) \land \text{Parent}(f,y))))

9. 自然语言翻译模板

  • 9.1 所有 A 都是 Bx(A(x)B(x))\forall x\, (A(x) \Rightarrow B(x))
  • 9.2 有些 A 是 Bx(A(x)B(x))\exists x\, (A(x) \land B(x))
  • 9.3 没有 A 是 Bx(A(x)¬B(x))\forall x\, (A(x) \Rightarrow \lnot B(x)),等价于 ¬x(A(x)B(x))\lnot \exists x\, (A(x) \land B(x))
  • 9.4 每个 A 都有一个 Bx(A(x)y(B(y)R(x,y)))\forall x\, (A(x) \Rightarrow \exists y\, (B(y) \land R(x,y)))
    • 例:“每个哺乳动物都有一个家长”:x(Mammal(x)yParent(y,x))\forall x\, (\text{Mammal}(x) \Rightarrow \exists y\, \text{Parent}(y, x))
  • 9.5 存在一个 B 被所有 A 关联y(B(y)x(A(x)R(x,y)))\exists y\, (B(y) \land \forall x\, (A(x) \Rightarrow R(x,y)))
    • 对比:xyR(x,y)\forall x \exists y\, R(x,y)(每个 xx 可以对应不同 yy);yxR(x,y)\exists y \forall x\, R(x,y)(同一个 yy 对所有 xx 适用)。
  • 9.6 每个 A 都爱自己的母亲或父亲,正确写法:

x(Child(x)(Loves(x,Mother(x))Loves(x,Father(x))))\forall x\, (\text{Child}(x) \Rightarrow (\text{Loves}(x, \text{Mother}(x)) \lor \text{Loves}(x, \text{Father}(x))))

错误直觉是把 Mother(x)\text{Mother}(x)Father(x)\text{Father}(x) 当成能析取的命题。它们是函数项,是对象,不是真假句子。

  • 9.7 只有一个、至多一个、恰好两个
    • “只有一个对象满足 PP”:x(P(x)y(P(y)y=x))\exists x\, (P(x) \land \forall y\, (P(y) \Rightarrow y = x))
    • “至多一个对象满足 PP”:xy((P(x)P(y))x=y)\forall x \forall y\, ((P(x) \land P(y)) \Rightarrow x = y)
    • “恰好两个对象满足 PP”:xy(xyP(x)P(y)z(P(z)(z=xz=y)))\exists x \exists y\, (x \neq y \land P(x) \land P(y) \land \forall z\, (P(z) \Rightarrow (z = x \lor z = y)))

9.8 函数还是谓词

  • 若每个对象唯一对应另一个对象,用函数:Mother(x)\text{Mother}(x)
  • 若关系可能一对多、零个或多个,用谓词:Friend(x,y)\text{Friend}(x, y)

"母亲"通常可作为函数;"朋友"通常不应写成函数。

10. 一阶逻辑知识工程

10.1 七步法

课件给出的一阶逻辑知识工程流程:

  1. 确定任务。
  2. 搜集相关知识。
  3. 决定谓词、函数、常量的词汇表。
  4. 编码领域通用知识。
  5. 编码具体问题实例。
  6. 向推理过程提交查询并获取答案。
  7. 调试知识库。

考试翻译题最关键的是第 3 步:先定义一致的谓词表,后面不要混用关系方向。

10.2 与 FOL KB 交互

在一阶逻辑知识库中,ASK 常返回一个代换。例如 Ask(KB,aBestAction(a,5))\text{Ask}(\text{KB}, \exists a\, \text{BestAction}(a, 5)) 可能返回 {aShoot}\{a \mapsto \text{Shoot}\}

给定语句 SS 和代换 σ\sigmaSσS\sigma 表示把 σ\sigma 代入 SS。例如 S=Smarter(x,y),  σ={xHillary,yBill}S = \text{Smarter}(x,y),\; \sigma = \{x \mapsto \text{Hillary}, y \mapsto \text{Bill}\},则 Sσ=Smarter(Hillary,Bill)S\sigma = \text{Smarter}(\text{Hillary}, \text{Bill})

10.3 Wumpus 的 FOL 写法

  • 感知规则:tsb(Percept([s,b,Glitter],t)Glitter(t))\forall t \forall s \forall b\, (\text{Percept}([s, b, \text{Glitter}], t) \Rightarrow \text{Glitter}(t))
  • 反射规则:t(Glitter(t)BestAction(Grab,t))\forall t\, (\text{Glitter}(t) \Rightarrow \text{BestAction}(\text{Grab}, t))
  • 带内部状态的反射:t(AtGold(t)¬Holding(Gold,t)BestAction(Grab,t))\forall t\, (\text{AtGold}(t) \land \lnot \text{Holding}(\text{Gold}, t) \Rightarrow \text{BestAction}(\text{Grab}, t))
  • 相邻定义:xyab(Adjacent([x,y],[a,b])[a,b]{[x+1,y],[x1,y],[x,y+1],[x,y1]})\forall x \forall y \forall a \forall b\, (\text{Adjacent}([x,y], [a,b]) \Leftrightarrow [a,b] \in \{[x+1,y], [x-1,y], [x,y+1], [x,y-1]\})
  • 从感知得到格子性质:st(At(Agent,s,t)Breeze(t)Breezy(s))\forall s \forall t\, (\text{At}(\text{Agent}, s, t) \land \text{Breeze}(t) \Rightarrow \text{Breezy}(s))
  • 诊断规则(从结果猜原因):s(Breezy(s)r(Adjacent(r,s)Pit(r)))\forall s\, (\text{Breezy}(s) \Rightarrow \exists r\, (\text{Adjacent}(r, s) \land \text{Pit}(r)))
  • 因果规则(从原因推结果):rs(Adjacent(r,s)Pit(r)Breezy(s))\forall r \forall s\, (\text{Adjacent}(r, s) \land \text{Pit}(r) \Rightarrow \text{Breezy}(s))
  • 定义式最完整:s(Breezy(s)r(Adjacent(r,s)Pit(r)))\forall s\, (\text{Breezy}(s) \Leftrightarrow \exists r\, (\text{Adjacent}(r, s) \land \text{Pit}(r)))

注意:只写向右、向上的相邻会漏掉方向;没有边界约束会生成不存在的格子;x+1x+1 需要语言支持算术项。

10.4 亲属关系领域

  • 兄弟是手足:xy(Brother(x,y)Sibling(x,y))\forall x \forall y\, (\text{Brother}(x,y) \Rightarrow \text{Sibling}(x,y))
  • 手足关系对称:xy(Sibling(x,y)Sibling(y,x))\forall x \forall y\, (\text{Sibling}(x,y) \Leftrightarrow \text{Sibling}(y,x))
  • 母亲是女性家长:xy(Mother(x,y)(Female(x)Parent(x,y)))\forall x \forall y\, (\text{Mother}(x,y) \Leftrightarrow (\text{Female}(x) \land \text{Parent}(x,y)))
  • 堂表亲是父母手足的孩子:xy(Cousin(x,y)pps(Parent(p,x)Sibling(ps,p)Parent(ps,y)))\forall x \forall y\, (\text{Cousin}(x,y) \Leftrightarrow \exists p \exists ps\, (\text{Parent}(p,x) \land \text{Sibling}(ps,p) \land \text{Parent}(ps,y)))

10.5 集合领域

  • 集合的递归构造:s(Set(s)(s={}xs2(Set(s2)s={xs2})))\forall s\, (\text{Set}(s) \Leftrightarrow (s = \{\} \lor \exists x \exists s_2\, (\text{Set}(s_2) \land s = \{x \mid s_2\})))
  • 空集不能分解:¬xs({xs}={})\lnot \exists x \exists s\, (\{x \mid s\} = \{\})
  • 元素属于集合的递归定义:xs(xsys2(s={ys2}(x=yxs2)))\forall x \forall s\, (x \in s \Leftrightarrow \exists y \exists s_2\, (s = \{y \mid s_2\} \land (x = y \lor x \in s_2)))
  • 子集:s1s2(s1s2x(xs1xs2))\forall s_1 \forall s_2\, (s_1 \subseteq s_2 \Leftrightarrow \forall x\, (x \in s_1 \Rightarrow x \in s_2))
  • 集合相等:s1s2(s1=s2(s1s2s2s1))\forall s_1 \forall s_2\, (s_1 = s_2 \Leftrightarrow (s_1 \subseteq s_2 \land s_2 \subseteq s_1))
  • 交集:xs1s2(x(s1s2)(xs1xs2))\forall x \forall s_1 \forall s_2\, (x \in (s_1 \cap s_2) \Leftrightarrow (x \in s_1 \land x \in s_2))
  • 并集:xs1s2(x(s1s2)(xs1xs2))\forall x \forall s_1 \forall s_2\, (x \in (s_1 \cup s_2) \Leftrightarrow (x \in s_1 \lor x \in s_2))

10.6 电路领域

课件用一位全加器说明知识工程。

  • 任务:验证电路是否正确相加。
  • 相关知识:电路由导线和门组成;门类型包括 AND、OR、XOR、NOT;门的大小、颜色、成本通常无关。

词汇表有不同选择:Type(X1)=XOR\text{Type}(X_1) = \text{XOR} / Type(X1,XOR)\text{Type}(X_1, \text{XOR}) / XOR(X1)\text{XOR}(X_1)

通用公理:

  • 相连端口信号相同:t1t2(Connected(t1,t2)Signal(t1)=Signal(t2))\forall t_1 \forall t_2\, (\text{Connected}(t_1, t_2) \Rightarrow \text{Signal}(t_1) = \text{Signal}(t_2))
  • 信号只能是 0 或 1:t(Signal(t)=1Signal(t)=0)\forall t\, (\text{Signal}(t) = 1 \lor \text{Signal}(t) = 0),并且 101 \neq 0
  • 连接关系对称:t1t2(Connected(t1,t2)Connected(t2,t1))\forall t_1 \forall t_2\, (\text{Connected}(t_1, t_2) \Rightarrow \text{Connected}(t_2, t_1))
  • 或门:g(Type(g)=OR(Signal(Out(1,g))=1n(Signal(In(n,g))=1)))\forall g\, (\text{Type}(g) = \text{OR} \Rightarrow (\text{Signal}(\text{Out}(1, g)) = 1 \Leftrightarrow \exists n\, (\text{Signal}(\text{In}(n, g)) = 1)))
  • 与门:g(Type(g)=AND(Signal(Out(1,g))=0n(Signal(In(n,g))=0)))\forall g\, (\text{Type}(g) = \text{AND} \Rightarrow (\text{Signal}(\text{Out}(1, g)) = 0 \Leftrightarrow \exists n\, (\text{Signal}(\text{In}(n, g)) = 0)))
  • 异或门:g(Type(g)=XOR(Signal(Out(1,g))=1Signal(In(1,g))Signal(In(2,g))))\forall g\, (\text{Type}(g) = \text{XOR} \Rightarrow (\text{Signal}(\text{Out}(1, g)) = 1 \Leftrightarrow \text{Signal}(\text{In}(1, g)) \neq \text{Signal}(\text{In}(2, g))))
  • 非门:g(Type(g)=NOTSignal(Out(1,g))Signal(In(1,g)))\forall g\, (\text{Type}(g) = \text{NOT} \Rightarrow \text{Signal}(\text{Out}(1, g)) \neq \text{Signal}(\text{In}(1, g)))

调试知识库时要特别注意补上 101 \neq 0,否则 XOR 等规则可能不能按预期工作。

11. 一阶逻辑实例化

11.1 为什么一阶推理比命题推理难

命题逻辑中命题符号固定;一阶逻辑中有变量、量词和函数项。因此推理常要先回答:哪些对象能让两个谓词匹配?这就是合一。

11.2 全称实例化

全称语句蕴涵它的所有实例。若有 vα\forall v\, \alpha 则任意基项 gg 都可实例化。例:

x(King(x)Greedy(x)Evil(x))\forall x\, (\text{King}(x) \land \text{Greedy}(x) \Rightarrow \text{Evil}(x))

可推出 King(John)Greedy(John)Evil(John)\text{King}(\text{John}) \land \text{Greedy}(\text{John}) \Rightarrow \text{Evil}(\text{John}),也可推出 King(Father(John))Greedy(Father(John))Evil(Father(John))\text{King}(\text{Father}(\text{John})) \land \text{Greedy}(\text{Father}(\text{John})) \Rightarrow \text{Evil}(\text{Father}(\text{John}))

全称实例化可以多次应用;加入实例后与原知识库在逻辑上等价。

11.3 存在实例化

若有 vα\exists v\, \alpha,可引入一个全新的 Skolem 常量 kkSubst({vk},α)\text{Subst}(\{v \mapsto k\}, \alpha)。例:

x(Crown(x)OnHead(x,John))\exists x\, (\text{Crown}(x) \land \text{OnHead}(x, \text{John}))

可替换为 Crown(C1)OnHead(C1,John)\text{Crown}(C_1) \land \text{OnHead}(C_1, \text{John}),前提是 C1C_1 是新常量。

重要区别:

  • 全称实例化可以反复添加实例。
  • 存在实例化一般用一次,并用新式子替代原存在语句。
  • 替换后的 KB 不与原 KB 逻辑等价,但与原 KB 可满足性等价。

因此 xAsHighAs(x,Everest)\exists x\, \text{AsHighAs}(x, \text{Everest}) 不能随便实例化为 AsHighAs(Everest,Everest)\text{AsHighAs}(\text{Everest}, \text{Everest}),因为存在量词只保证某个对象存在,不保证就是已有常量 Everest。

11.4 命题化

一阶逻辑可通过实例化变成命题逻辑。例如知识库:

x(King(x)Greedy(x)Evil(x))\forall x\, (\text{King}(x) \land \text{Greedy}(x) \Rightarrow \text{Evil}(x))

King(John)\text{King}(\text{John})

Greedy(John)\text{Greedy}(\text{John})

命题化后有命题符号 King(John),  Greedy(John),  Evil(John)\text{King}(\text{John}),\; \text{Greedy}(\text{John}),\; \text{Evil}(\text{John})

课件结论:每个一阶知识库都可以命题化以保持蕴涵。基础语句被原 KB 蕴涵,当且仅当被命题化 KB 蕴涵。若有函数符号,基项无限多,例如 Father(Father(Father(John)))\text{Father}(\text{Father}(\text{Father}(\text{John})))

Herbrand 定理:若一阶 KB 蕴涵 α\alpha,则存在命题化 KB 的某个有限子集已经蕴涵 α\alpha。推理思路:

  1. 按项深度 0, 1, 2, … 逐步命题化。
  2. 对每个有限命题化 KB 做命题推理。
  3. α\alpha 被蕴涵,最终会找到证明。
  4. 若不被蕴涵,可能永远停不下来。

这就是一阶逻辑蕴涵的半可判定性:被蕴涵的结论存在算法最终回答"是";不被蕴涵的结论不存在通用算法保证有限时间回答"否"。

命题化还会产生大量无关实例。若有 ppkk 元谓词和 nn 个常量,基础原子数量可达 pnkp \cdot n^k;有函数符号时更糟。

12. 合一与代换

12.1 代换

代换是变量到项的映射:θ={xJohn,yFather(John)}\theta = \{x \mapsto \text{John}, y \mapsto \text{Father}(\text{John})\}。应用代换:

Knows(x,y)θ=Knows(John,Father(John))\text{Knows}(x, y)\theta = \text{Knows}(\text{John}, \text{Father}(\text{John}))

12.2 合一

合一寻找一个代换 θ\theta,使两个表达式变得相同:Unify(α,β)=θ\text{Unify}(\alpha, \beta) = \theta 当且仅当 αθ=βθ\alpha\theta = \beta\theta

最一般合一 MGU 是限制最少、最通用的合一;对每对可合一表达式,MGU 在变量改名意义下唯一。例:

Unify(Knows(John,x),Knows(John,Jane))={xJane}\text{Unify}(\text{Knows}(\text{John}, x), \text{Knows}(\text{John}, \text{Jane})) = \{x \mapsto \text{Jane}\}

Unify(Knows(John,x),Knows(y,OJ))={xOJ,yJohn}\text{Unify}(\text{Knows}(\text{John}, x), \text{Knows}(y, \text{OJ})) = \{x \mapsto \text{OJ}, y \mapsto \text{John}\}

Unify(Knows(John,x),Knows(y,Mother(y)))={yJohn,xMother(John)}\text{Unify}(\text{Knows}(\text{John}, x), \text{Knows}(y, \text{Mother}(y))) = \{y \mapsto \text{John}, x \mapsto \text{Mother}(\text{John})\}

Unify(Knows(John,x),Knows(x,OJ))\text{Unify}(\text{Knows}(\text{John}, x), \text{Knows}(x, \text{OJ})) 失败,因为它要求 xx 同时匹配 John 和 OJ。

12.3 合一规则

可合一的情况:

  • 相同常量与相同常量:成功。
  • 变量与不含自身的项:绑定变量。
  • 同名谓词或函数:参数逐一合一。

失败的情况:

  • 不同常量。
  • 不同谓词名。
  • 元数不同。
  • occurs check 失败,即变量要绑定到包含自己的项。

occurs check 例:x=f(x)x = f(x) 失败。

常见不可合一选择题:p(x,x)p(x, x)p(y,f(y))p(y, f(y))。若合一,需要 x=yx=f(y)x = y \land x = f(y),推出 y=f(y)y = f(y),变量出现在自己的函数项中,失败。

12.4 标准化分离

两个子句归结或规则匹配前,若变量名可能冲突,需要标准化分离,把不同句子的变量改成彼此不同。例如把一个句子里的 xx 改名为 z17z_{17}。变量名不重要,作用域才重要。

13. 一般化分离规则 GMP

13.1 GMP 形式

命题 Modus Ponens:

P,PQQ\frac{P,\quad P \Rightarrow Q}{Q}

一阶逻辑的 GMP 加上了合一。若有事实 p1,,pnp'_1, \dots, p'_n 和规则 p1p2pnqp_1 \land p_2 \land \dots \land p_n \Rightarrow q,存在代换 θ\theta 使每个前提匹配 piθ=piθp'_i \theta = p_i \theta,则可推出 qθq\theta

例:

King(x)Greedy(x)Evil(x)\text{King}(x) \land \text{Greedy}(x) \Rightarrow \text{Evil}(x)

King(John)\text{King}(\text{John})

Greedy(John)\text{Greedy}(\text{John})

代换 θ={xJohn}\theta = \{x \mapsto \text{John}\},推出 Evil(John)\text{Evil}(\text{John})

13.2 GMP 的边界

GMP 通常用于确定子句 KB,所有变量默认全称量化。课件结论:

  • GMP 可靠。
  • GMP 对一阶确定子句 KB 完备。
  • GMP 对一般 FOL 不完备,因为并非所有句子都能化成 Horn 形式。
  • 即使限制在 Horn 子句,一阶逻辑仍是半可判定的。

14. 一阶前向链与后向链

14.1 一阶前向链

一阶前向链从事实出发,用 GMP 不断推出新事实。性质:

  • 对一阶确定子句可靠。
  • 对一阶确定子句完备。
  • 若没有函数符号,即 Datalog,可在多项式轮数内终止。Datalog 中最多产生 pnkp \cdot n^k 个基础文字。
  • 一般一阶确定子句若含函数符号,当前查询不被蕴涵时可能不终止。

效率要点:

  • 没必要每轮匹配所有规则,只需检查前一轮新增事实涉及的规则。
  • 数据库索引可让已知事实检索接近 O(1)O(1)
  • 合取前提与事实集匹配本身是 NP-hard。

14.2 一阶后向链

一阶后向链从查询出发,找能推出该查询的规则,再用合一生成子目标。Prolog 风格:

  1. 查询 qq
  2. 找规则结论 qq'
  3. 合一 qqqq'
  4. 在代换下递归证明规则前提。

性质:深度优先递归证明搜索;空间与证明大小线性相关;因无限循环可能不完备;可通过检查目标栈避免直接循环;可用缓存减少重复子目标;广泛用于逻辑程序设计。

14.3 FC/BC 对一般 FOL 的不完备

前向链和后向链对 Horn KB 完备,但对一般 FOL KB 不完备。原因是一般 FOL 可以包含非 Horn 子句、析取结论、复杂否定等结构,不能只靠确定子句上的 GMP 覆盖所有有效推理。要覆盖一般 FOL,使用一阶归结。

15. 一阶 CNF、Skolem 化与归结

15.1 一阶 CNF 标准化流程

要用归结,先把 FOL 公式转成子句集:

  1. 消去双向蕴涵。
  2. 消去蕴涵。
  3. 否定内移。
  4. 标准化变量名,使不同量词使用不同变量。
  5. Skolem 化消去存在量词。
  6. 去掉全称量词。
  7. 用分配律得到 CNF。
  8. 拆成子句。

15.2 Skolem 化

存在量词不在任何全称量词作用域内:xP(x)\exists x\, P(x) 变为 P(A)P(A),其中 AA 是新的 Skolem 常量。

存在量词在全称量词作用域内:xyParent(y,x)\forall x \exists y\, \text{Parent}(y, x),这里 yy 依赖于 xx,变为 xParent(F(x),x)\forall x\, \text{Parent}(F(x), x),其中 FF 是新的 Skolem 函数。

一般规律:Skolem 函数的参数是包住该存在变量的所有全称变量。

15.3 课件 CNF 例题

原句:

x((y(Animal(y)Loves(x,y)))yLoves(y,x))\forall x\, ((\forall y\, (\text{Animal}(y) \Rightarrow \text{Loves}(x, y))) \Rightarrow \exists y\, \text{Loves}(y, x))

意思:每个爱所有动物的人,都被某个人爱。

  • 消去蕴涵:x(¬y(¬Animal(y)Loves(x,y))yLoves(y,x))\forall x\, (\lnot \forall y\, (\lnot \text{Animal}(y) \lor \text{Loves}(x, y)) \lor \exists y\, \text{Loves}(y, x))
  • 否定内移:x(y(Animal(y)¬Loves(x,y))yLoves(y,x))\forall x\, (\exists y\, (\text{Animal}(y) \land \lnot \text{Loves}(x, y)) \lor \exists y\, \text{Loves}(y, x))
  • 标准化变量:x(y(Animal(y)¬Loves(x,y))zLoves(z,x))\forall x\, (\exists y\, (\text{Animal}(y) \land \lnot \text{Loves}(x, y)) \lor \exists z\, \text{Loves}(z, x))
  • Skolem 化:x((Animal(F(x))¬Loves(x,F(x)))Loves(G(x),x))\forall x\, ((\text{Animal}(F(x)) \land \lnot \text{Loves}(x, F(x))) \lor \text{Loves}(G(x), x))
  • 去掉全称量词:(Animal(F(x))¬Loves(x,F(x)))Loves(G(x),x)(\text{Animal}(F(x)) \land \lnot \text{Loves}(x, F(x))) \lor \text{Loves}(G(x), x)
  • 分配:(Animal(F(x))Loves(G(x),x))(¬Loves(x,F(x))Loves(G(x),x))(\text{Animal}(F(x)) \lor \text{Loves}(G(x), x)) \land (\lnot \text{Loves}(x, F(x)) \lor \text{Loves}(G(x), x))

得到两个子句:

Animal(F(x))Loves(G(x),x)\text{Animal}(F(x)) \lor \text{Loves}(G(x), x)

¬Loves(x,F(x))Loves(G(x),x)\lnot \text{Loves}(x, F(x)) \lor \text{Loves}(G(x), x)

15.4 一阶归结规则

若两个子句中有可合一的互补文字:

L1LkM1MnL_1 \lor \dots \lor L_k \quad \text{和} \quad M_1 \lor \dots \lor M_n

Unify(Li,¬Mj)=θ\text{Unify}(L_i, \lnot M_j) = \theta,则推出:

(L1Li1Li+1LkM1Mj1Mj+1Mn)θ(L_1 \lor \dots \lor L_{i-1} \lor L_{i+1} \lor \dots \lor L_k \lor M_1 \lor \dots \lor M_{j-1} \lor M_{j+1} \lor \dots \lor M_n)\theta

归结前两个子句要标准化分离,避免共享变量名造成误绑定。

例:

¬Rich(x)Unhappy(x)\lnot \text{Rich}(x) \lor \text{Unhappy}(x)

Rich(Ken)\text{Rich}(\text{Ken})

合一 θ={xKen}\theta = \{x \mapsto \text{Ken}\},推出 Unhappy(Ken)\text{Unhappy}(\text{Ken})

一阶归结应用于 CNF(KB¬α)\text{CNF}(\text{KB} \land \lnot\alpha),对 FOL 是完备的。

16. 完整证明例题

16.1 Robbie 友好证明

知识库:

Robot(Robbie)\text{Robot}(\text{Robbie})

Owner(Bob,Robbie)\text{Owner}(\text{Bob}, \text{Robbie})

xy((Robot(x)Owner(y,x))FriendlyTo(x,y))\forall x \forall y\, ((\text{Robot}(x) \land \text{Owner}(y, x)) \Rightarrow \text{FriendlyTo}(x, y))

目标:FriendlyTo(Robbie,Bob)\text{FriendlyTo}(\text{Robbie}, \text{Bob})

规则转 CNF:¬Robot(x)¬Owner(y,x)FriendlyTo(x,y)\lnot \text{Robot}(x) \lor \lnot \text{Owner}(y, x) \lor \text{FriendlyTo}(x, y)

加入否定目标:¬FriendlyTo(Robbie,Bob)\lnot \text{FriendlyTo}(\text{Robbie}, \text{Bob})

归结:

  1. 规则与 Robot(Robbie)\text{Robot}(\text{Robbie}) 归结,代换 θ1={xRobbie}\theta_1 = \{x \mapsto \text{Robbie}\},得到 ¬Owner(y,Robbie)FriendlyTo(Robbie,y)\lnot \text{Owner}(y, \text{Robbie}) \lor \text{FriendlyTo}(\text{Robbie}, y)
  2. Owner(Bob,Robbie)\text{Owner}(\text{Bob}, \text{Robbie}) 归结,代换 θ2={yBob}\theta_2 = \{y \mapsto \text{Bob}\},得到 FriendlyTo(Robbie,Bob)\text{FriendlyTo}(\text{Robbie}, \text{Bob})
  3. 与否定目标归结:\square

因此 KBFriendlyTo(Robbie,Bob)KB \models \text{FriendlyTo}(\text{Robbie}, \text{Bob})

16.2 为什么不能证明 Bob 聪明

若知识库只有:

Robot(Robbie)\text{Robot}(\text{Robbie})

Owner(Bob,Robbie)\text{Owner}(\text{Bob}, \text{Robbie})

yx(Owns(y,x)Robot(x)Smart(y))\exists y \exists x\, (\text{Owns}(y, x) \land \text{Robot}(x) \land \text{Smart}(y))

不能推出 Smart(Bob)\text{Smart}(\text{Bob})。原因:

  • 存在句只说"某个拥有机器人的人聪明",不是"所有拥有机器人的人聪明"。
  • Bob 是 Robbie 的主人,不代表 Bob 就是存在句中的那个人。
  • 缺少规则:y((x(Owns(y,x)Robot(x)))Smart(y))\forall y\, ((\exists x\, (\text{Owns}(y, x) \land \text{Robot}(x))) \Rightarrow \text{Smart}(y))

如果题目只给存在句,不要擅自把存在对象绑定到 Bob。

16.3 West 犯罪例题

自然语言:美国人向敌对国家出售武器是犯罪。Nono 是美国的敌人,有一些导弹;它所有导弹都是美国人 West 卖给它的。证明 West 是罪犯。

知识库:

xyz(American(x)Weapon(y)Sells(x,y,z)Hostile(z)Criminal(x))\forall x \forall y \forall z\, (\text{American}(x) \land \text{Weapon}(y) \land \text{Sells}(x, y, z) \land \text{Hostile}(z) \Rightarrow \text{Criminal}(x))

Nono 有某个导弹,Skolem 化为:Owns(Nono,M1)\text{Owns}(\text{Nono}, M_1)Missile(M1)\text{Missile}(M_1)

  • Nono 的导弹由 West 出售:x(Missile(x)Owns(Nono,x)Sells(West,x,Nono))\forall x\, (\text{Missile}(x) \land \text{Owns}(\text{Nono}, x) \Rightarrow \text{Sells}(\text{West}, x, \text{Nono}))
  • 导弹是武器:x(Missile(x)Weapon(x))\forall x\, (\text{Missile}(x) \Rightarrow \text{Weapon}(x))
  • 美国的敌人是敌对国家:x(Enemy(x,America)Hostile(x))\forall x\, (\text{Enemy}(x, \text{America}) \Rightarrow \text{Hostile}(x))
  • 事实:American(West)\text{American}(\text{West})Enemy(Nono,America)\text{Enemy}(\text{Nono}, \text{America})

推理链:

Missile(M1)Weapon(M1)\text{Missile}(M_1) \Rightarrow \text{Weapon}(M_1)

Missile(M1)Owns(Nono,M1)Sells(West,M1,Nono)\text{Missile}(M_1) \land \text{Owns}(\text{Nono}, M_1) \Rightarrow \text{Sells}(\text{West}, M_1, \text{Nono})

Enemy(Nono,America)Hostile(Nono)\text{Enemy}(\text{Nono}, \text{America}) \Rightarrow \text{Hostile}(\text{Nono})

于是犯罪规则四个前提都满足:

American(West)Weapon(M1)Sells(West,M1,Nono)Hostile(Nono)\text{American}(\text{West}) \land \text{Weapon}(M_1) \land \text{Sells}(\text{West}, M_1, \text{Nono}) \land \text{Hostile}(\text{Nono})

推出 Criminal(West)\text{Criminal}(\text{West})

17. 考试速查

17.1 概念判断

  • KBαKB \models \alpha 是语义蕴涵,不是算法运行结果。
  • KBiαKB \vdash_i \alpha 是推理过程 ii 的导出关系。
  • 可靠性:导出的都被蕴涵。
  • 完备性:被蕴涵的都能导出。
  • 命题逻辑归结可靠且完备。
  • 一阶归结对 FOL 完备。
  • GMP 对一阶确定子句完备,对一般 FOL 不完备。
  • 前向链和后向链对 Horn KB 完备,对一般 FOL 不完备。
  • 一阶逻辑蕴涵半可判定。

17.2 翻译题

  • "所有"通常主连接词是 \Rightarrow
  • "存在"通常主连接词是 \land
  • xy\forall x \exists yyx\exists y \forall x 一般不同。
  • 函数返回对象,谓词返回真假。
  • 函数项不能单独放在公式里当命题。
  • 先定义谓词表,注意参数顺序。
  • 用等号表达唯一性、至多一个、恰好几个。

17.3 合一题

检查顺序:

  1. 谓词名是否相同。
  2. 元数是否相同。
  3. 常量是否冲突。
  4. 函数名是否冲突。
  5. 变量绑定是否违反 occurs check。
  6. 是否需要标准化分离。

常见失败:x=f(x)x = f(x)。常见 MGU 不是"越具体越好",而是"限制越少越好"。

17.4 CNF 与 Skolem

CNF 流程:消去 \Leftrightarrow → 消去 \Rightarrow¬\lnot 内移 → 变量标准化 → Skolem 化 → \forall 删除 → \lor 分配到 \land → 拆子句。

Skolem:

  • 不依赖全称变量:新常量。
  • 依赖全称变量:新函数。
  • 存在实例化或 Skolem 化一定要用新符号。

17.5 归结证明

证明 KBαKB \models \alpha,就做 CNF(KB¬α)\text{CNF}(\text{KB} \land \lnot\alpha),然后归结出 \square。每一步写清:选择哪两个子句;哪两个文字互补;MGU 是什么;得到的新子句是什么。检查空子句是否真的来自互补文字全部消去。

18. 最后一页压缩版

  • 逻辑智能体:TELL(KB, percept),  ASK(KB, query)\text{TELL}(\text{KB, percept}),\; \text{ASK}(\text{KB, query})
  • 蕴涵:KBα    M(KB)M(α)KB \models \alpha \iff M(KB) \subseteq M(\alpha)
  • 可靠与完备:KBiαKBαKB \vdash_i \alpha \Rightarrow KB \models \alphaKBαKBiαKB \models \alpha \Rightarrow KB \vdash_i \alpha
  • 反证归结:KBα    KB¬αKB \models \alpha \iff KB \land \lnot\alpha 不可满足
  • 命题 CNF:(A¬B)(¬AC)(A \lor \lnot B) \land (\lnot A \lor C)
  • Horn 子句:P1PmQP_1 \land \dots \land P_m \Rightarrow Q
  • 所有 A 是 B:x(A(x)B(x))\forall x\, (A(x) \Rightarrow B(x))
  • 有些 A 是 B:x(A(x)B(x))\exists x\, (A(x) \land B(x))
  • 每个 A 有一个 B:x(A(x)y(B(y)R(x,y)))\forall x\, (A(x) \Rightarrow \exists y\, (B(y) \land R(x,y)))
  • 合一:Unify(α,β)=θ    αθ=βθ\text{Unify}(\alpha, \beta) = \theta \iff \alpha\theta = \beta\theta
  • GMP:p1,,pn,  p1pnq    qθp'_1, \dots, p'_n,\; p_1 \land \dots \land p_n \Rightarrow q \;\Rightarrow\; q\theta,其中 piθ=piθp'_i \theta = p_i \theta
  • 一阶归结:Unify(Li,¬Mj)=θ\text{Unify}(L_i, \lnot M_j) = \theta,推出删去互补文字后的合并子句,并整体应用 θ\theta

记住:命题逻辑靠枚举模型或归结;FOL 由于变量和量词,要先处理实例化、合一、Skolem 化。前向链和后向链适合 Horn 子句;一般 FOL 证明靠一阶归结。


线性代数速补

目录:1. 标量/向量/矩阵 · 2. 转置 · 3. 内积 · 4. 范数和距离 · 5. 矩阵乘法 · 6. 单位矩阵/逆/伪逆 · 7. 对角矩阵和权重矩阵 · 8. 超平面和法向量 · 9. 投影 · 10. 二次型和半正定 · 11. 特征值和特征向量 · 12. 协方差矩阵 · 13. 矩阵求导 · 14. Hadamard 乘积 · 15. 机器学习中最常见的维度检查 · 16. 看到公式不会时的快速拆解法

1. 标量、向量、矩阵

标量是一个数,常记为 a,b,λa, b, \lambda。向量是一列数,常记为 x,w,yx, w, y。矩阵是二维表,常记为 X,W,AX, W, A。默认把向量看成列向量:

x=[x1x2xd]Rdx = \begin{bmatrix} x_1 \\ x_2 \\ \vdots \\ x_d \end{bmatrix} \in \mathbb{R}^d

若有 nn 个样本、每个样本 dd 个特征,机器学习里常把数据矩阵写成:

X=[x1Tx2TxnT]Rn×dX = \begin{bmatrix} x_1^T \\ x_2^T \\ \vdots \\ x_n^T \end{bmatrix} \in \mathbb{R}^{n \times d}

其中第 iixiTx_i^T 是第 ii 个样本。

维度检查是防止公式写错的最快方法。若 XRn×dX \in \mathbb{R}^{n \times d},则 wRdw \in \mathbb{R}^dXwRnXw \in \mathbb{R}^n,它表示对 nn 个样本分别做线性预测。

2. 转置

向量转置:xT=[x1  x2    xd]x^T = [x_1 \; x_2 \; \cdots \; x_d]

矩阵转置:(AT)ij=Aji(A^T)_{ij} = A_{ji}

常用规则:

(A+B)T=AT+BT(A + B)^T = A^T + B^T

(AB)T=BTAT(AB)^T = B^T A^T

(AT)T=A(A^T)^T = A

注意第二条会反序,这是很多推导里最容易错的地方。

3. 内积

两个同维向量的内积:

wTx=j=1dwjxjw^T x = \sum_{j=1}^{d} w_j x_j

线性模型 f(x)=wTx+bf(x) = w^T x + b 可以理解为"每个特征 xjx_j 乘上重要性 wjw_j,再求和"。若 wj>0w_j > 0,该特征越大,打分越大;若 wj<0w_j < 0,该特征越大,打分越小。

内积还可以衡量方向相似度:wTx=wxcosθw^T x = \|w\| \|x\| \cos\theta,其中 θ\theta 是两个向量夹角。若 wTx=0w^T x = 0,则两个向量正交,也就是方向垂直。

4. 范数和距离

向量的 L2 范数:

x2=xTx=j=1dxj2\|x\|_2 = \sqrt{x^T x} = \sqrt{\sum_{j=1}^{d} x_j^2}

若上下文没有特别说明,x\|x\| 通常指 L2 范数。两个点的欧氏距离:

xz2=j=1d(xjzj)2\|x - z\|_2 = \sqrt{\sum_{j=1}^{d} (x_j - z_j)^2}

kNN 和 K-Means 里经常用平方距离:xz22=(xz)T(xz)\|x - z\|_2^2 = (x - z)^T(x - z)。平方距离省去了开方,最小化时和原距离等价,因为开方函数单调递增。

L1 范数:x1=j=1dxj\|x\|_1 = \sum_{j=1}^{d} |x_j|。机器学习里 L1 正则常产生稀疏权重,L2 正则常让权重整体变小。

5. 矩阵乘法

ARm×nA \in \mathbb{R}^{m \times n}BRn×pB \in \mathbb{R}^{n \times p},则 ABRm×pAB \in \mathbb{R}^{m \times p},元素为:

(AB)ij=k=1nAikBkj(AB)_{ij} = \sum_{k=1}^{n} A_{ik} B_{kj}

也就是说,ABAB 的第 i,ji, j 个元素是 AA 的第 ii 行和 BB 的第 jj 列做内积。最小二乘中:

Xw=[x1Twx2TwxnTw]Xw = \begin{bmatrix} x_1^T w \\ x_2^T w \\ \vdots \\ x_n^T w \end{bmatrix}

它一次性算出所有样本的预测值。

6. 单位矩阵、逆矩阵和伪逆

单位矩阵 II 满足 Ix=x,  AI=A,  IA=AIx = x,\; AI = A,\; IA = A

逆矩阵 A1A^{-1} 满足 A1A=AA1=IA^{-1} A = A A^{-1} = I。不是所有矩阵都有逆。方阵 AA 可逆通常要求列之间没有线性冗余,也就是满秩。

如果 XTXX^T X 不可逆,最小二乘不能直接写 (XTX)1XTy(X^T X)^{-1} X^T y,这时可以用 Moore-Penrose 伪逆:w=X+yw^* = X^+ y。直观上,伪逆是在"没有普通逆矩阵"时给出最小二乘意义下的合理解。

7. 对角矩阵和权重矩阵

对角矩阵只有主对角线可能非零:R=diag(r1,,rn)R = \text{diag}(r_1, \dots, r_n)。加权最小二乘中:

J(w)=(yXw)TR(yXw)J(w) = (y - Xw)^T R (y - Xw)

若记误差向量 e=yXwe = y - Xw,则 eTRe=i=1nriei2e^T R e = \sum_{i=1}^{n} r_i e_i^2。所以 RR 的作用就是给不同样本误差加不同权重。

8. 超平面和法向量

线性分类边界 wTx+b=0w^T x + b = 0 是一个超平面。二维时是直线,三维时是平面,高维时叫超平面。ww 是法向量,表示垂直于边界的方向。若点 xx 满足 wTx+b>0w^T x + b > 0,它在边界的一侧;若 wTx+b<0w^T x + b < 0,它在另一侧。

xx 到超平面 wTx+b=0w^T x + b = 0 的距离为 wTx+bw\dfrac{|w^T x + b|}{\|w\|}。带标签 y{1,+1}y \in \{-1, +1\} 时,SVM 的几何间隔为 y(wTx+b)w\dfrac{y(w^T x + b)}{\|w\|}。这就是 SVM 中间隔公式的来源。

9. 投影

uu 是单位向量,即 u=1\|u\| = 1,则 xx 在方向 uu 上的投影长度为 uTxu^T x,投影向量为 (uTx)u(u^T x) u。若 U=[u1,,uk]U = [u_1, \dots, u_k] 的列向量两两正交且都是单位向量,则 UTU=IU^T U = Ixx 投影到这些方向张成的子空间中,低维坐标为 z=UTxz = U^T x,重构为 x^=Uz\hat{x} = Uz

PCA 中 zi=UkT(xixˉ)z_i = U_k^T (x_i - \bar{x}),就是把中心化后的样本投影到前 kk 个主成分方向上。

10. 二次型和半正定

SVM 核矩阵会用到

形如下面的表达式叫二次型:xTAxx^T A x。如果对任意 xx 都有 xTAx0x^T A x \geq 0,则称 AA 是半正定矩阵,记为 A0A \succeq 0

最简单例子:xTIx=xTx=x20x^T I x = x^T x = \|x\|^2 \geq 0。核矩阵半正定的关键证明就是把二次型写成一个范数平方:

aTKa=i=1naiϕ(xi)20a^T K a = \left\| \sum_{i=1}^{n} a_i \phi(x_i) \right\|^2 \geq 0

所以只要 Kij=ϕ(xi)Tϕ(xj)K_{ij} = \phi(x_i)^T \phi(x_j),核矩阵一定半正定。

11. 特征值和特征向量

PCA 的核心

若非零向量 uu 满足 Au=λuAu = \lambda u,则 uu 是矩阵 AA 的特征向量,λ\lambda 是对应特征值。含义:矩阵 AA 作用到方向 uu 上时,不改变方向,只把长度缩放 λ\lambda 倍。

PCA 中协方差矩阵 SS 的特征值和特征向量满足 Suj=λjujS u_j = \lambda_j u_j,其中:

  • uju_j:第 jj 个主成分方向。
  • λj\lambda_j:数据在该方向上的方差大小。

PCA 取最大 kk 个特征值对应的特征向量,因为这些方向保留最多方差信息。

12. 协方差矩阵

数据中心化后 x~i=xixˉ\tilde{x}_i = x_i - \bar{x},协方差矩阵:

S=1ni=1nx~ix~iTS = \frac{1}{n} \sum_{i=1}^{n} \tilde{x}_i \tilde{x}_i^T

若把中心化样本按行放入矩阵 X~\tilde{X},也可写成 S=1nX~TX~S = \frac{1}{n} \tilde{X}^T \tilde{X}

SjjS_{jj} 表示第 jj 个特征自己的方差,SjkS_{jk} 表示第 jj 和第 kk 个特征一起变化的程度。PCA 对 SS 求特征向量,本质是在找数据变化最大的正交方向。

13. 矩阵求导

机器学习里常见目标函数是标量,但变量是向量。梯度 wJ\nabla_w Jww 形状相同。常用结论:

w(aTw)=a\frac{\partial}{\partial w}(a^T w) = a

w(wTa)=a\frac{\partial}{\partial w}(w^T a) = a

w(wTw)=2w\frac{\partial}{\partial w}(w^T w) = 2w

AA 是对称矩阵:

w(wTAw)=2Aw\frac{\partial}{\partial w}(w^T A w) = 2Aw

最小二乘最常用公式:

wXwy2=2XT(Xwy)\frac{\partial}{\partial w} \|Xw - y\|^2 = 2X^T(Xw - y)

加权最小二乘中,若 R=RTR = R^T

w(yXw)TR(yXw)=2XTR(yXw)\frac{\partial}{\partial w}(y - Xw)^T R (y - Xw) = -2X^T R (y - Xw)

逻辑回归中常用链式法则:

Lwj=Lzzwj\frac{\partial L}{\partial w_j} = \frac{\partial L}{\partial z} \frac{\partial z}{\partial w_j}

因为 z=wTx+bz = w^T x + bzwj=xj\frac{\partial z}{\partial w_j} = x_j,所以只要先求出 Lz=py\frac{\partial L}{\partial z} = p - y,就得到 Lwj=(py)xj\frac{\partial L}{\partial w_j} = (p - y) x_j

14. Hadamard 乘积

神经网络 BP 里的逐元素相乘

神经网络反向传播中出现:

δ()=((W(+1))Tδ(+1))ϕ(z())\delta^{(\ell)} = ((W^{(\ell+1)})^T \delta^{(\ell+1)}) \odot \phi'(z^{(\ell)})

这里的 \odot 不是矩阵乘法,而是逐元素乘法。若 a=[a1a2],  b=[b1b2]a = \begin{bmatrix} a_1 \\ a_2 \end{bmatrix},\; b = \begin{bmatrix} b_1 \\ b_2 \end{bmatrix},则 ab=[a1b1a2b2]a \odot b = \begin{bmatrix} a_1 b_1 \\ a_2 b_2 \end{bmatrix}。它要求两个向量形状相同。

15. 机器学习中最常见的维度检查

  • 线性回归:XRn×dX \in \mathbb{R}^{n \times d}wRdw \in \mathbb{R}^dyRny \in \mathbb{R}^nXwyRnXw - y \in \mathbb{R}^nXT(Xwy)RdX^T(Xw - y) \in \mathbb{R}^d,所以梯度和 ww 同维。
  • 多分类线性模型:XRn×dX \in \mathbb{R}^{n \times d}WRd×kW \in \mathbb{R}^{d \times k}YRn×kY \in \mathbb{R}^{n \times k}XWRn×kXW \in \mathbb{R}^{n \times k}
  • 神经网络单层:a(1)Rd1a^{(\ell-1)} \in \mathbb{R}^{d_{\ell-1}}W()Rd×d1W^{(\ell)} \in \mathbb{R}^{d_\ell \times d_{\ell-1}}b()Rdb^{(\ell)} \in \mathbb{R}^{d_\ell},则 z()=W()a(1)+b()Rdz^{(\ell)} = W^{(\ell)} a^{(\ell-1)} + b^{(\ell)} \in \mathbb{R}^{d_\ell}

16. 看到公式不会时的快速拆解法

  1. 第一步,看形状。 先给每个量标维度,确认乘法是否合法。
  2. 第二步,看含义。 比如 XwXw 是所有样本预测,XwyXw - y 是所有误差,Xwy2\|Xw - y\|^2 是总平方误差。
  3. 第三步,看几何。 wTx+b=0w^T x + b = 0 是边界,ww 是法向量,w\|w\| 控制间隔尺度。
  4. 第四步,看优化。 若目标是平方误差,通常求导令 0;若目标有 sigmoid 或神经网络,通常用梯度下降;若是 SVM hard margin,通常是带约束的二次规划。
  5. 第五步,检查答案形状。 比如求 ww,答案必须是 dd 维向量;求核矩阵,答案必须是 n×nn \times n 矩阵;求 PCA 投影,低维结果必须是 kk 维。