人工智能大抄


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 sequence→actionf: \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. 基于效用的智能体
不只判断是否达成目标,还比较不同结果好坏。最大化期望效用:arg⁡max⁡aE[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:搜索树最大深度,可能无限。
  • C∗C^*:最优解代价。
  • ε\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 若 l≥dl \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),  1≤m+c≤2\text{Cross}(m, c),\; 1 \leq m + c \leq 2。该题检查重复状态非常必要,因为动作可逆,树搜索会反复过河。

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

题意:从三位数 SS 到 GG,每步对某一位加 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

定义:0≤h(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 到达 n′n'),并且 h(goal)=0h(\text{goal}) = 0。

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

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

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

一致性的好处:

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

2.3. 可采纳但不一致例子

构造路径:A→1B→10GA \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。

  • 可采纳:10≤11,  5≤1010 \leq 11,\; 5 \leq 10。
  • 不一致:

h(A)≤c(A,B)+h(B)10≤1+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_1、h2h_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* 最优性证明核心

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

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

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

2.6. 加权启发式路径算法

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

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

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

w2−w≤1  ⇒  w≤1\frac{w}{2-w} \leq 1 \;\Rightarrow\; w \leq 1

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

特殊情况:

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

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

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

证明模板:

  1. A* 终止时选择目标 G′G',所以 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* 选择 G′G',所以 C′=f(G′)≤f(n)C'=f(G') \leq f(n)。
  5. 得 C′≤C∗+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+h,hh 可采纳/一致时保证最优。
  • Admissible:h≤h∗h \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\}。
  • 约束:相邻地区颜色不同,如 WA≠NTWA \neq NT。

1.2. CSP 与普通搜索的区别

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

1.3. 约束类型

  • 一元约束:只涉及一个变量,如 X≠redX \neq red。
  • 二元约束:涉及两个变量,如 WA≠NTWA \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 弧相容

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

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

注意方向性:Xi→XjX_i \to X_j 相容不代表 Xj→XiX_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 个变量;每个变量域大小最多 dd;cc 条二元约束。

  • 每次 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)。
    • 首字母 S≠0,  M≠0S \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 arg⁡max⁡aMinimaxValue(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(OnTime∣Leave25,e)=0.04P(\text{OnTime} \mid \text{Leave25}, e) = 0.04

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

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

1.2 不确定性的来源

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

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

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

1.3 频率主义与贝叶斯观点

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

P(A)=lim⁡N→∞nANP(A) = \lim_{N \to \infty} \frac{n_A}{N}

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

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

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

1.4 概率和效用分工

概率回答"我相信什么":P(ArriveOnTime∣a,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.10⟩P(\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,独立参数数目是:2n−12^n - 1。

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

3.3 边缘分布和边缘化

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

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

若变量更多:

P(A)=∑b∑cP(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(A∣B)=P(A,B)P(B)P(A \mid B) = \frac{P(A, B)}{P(B)}

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

4.2 乘法规则

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

P(A∧B)=P(A∣B)P(B)P(A \land B) = P(A \mid B)P(B)

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

4.3 链式法则

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

P(X1,…,Xn)=∏i=1nP(Xi∣X1,…,Xi−1)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(A∣B,C) P(B∣C) P(C)P(A, B, C) = P(A \mid B, C)\,P(B \mid C)\,P(C)

也可以按其他顺序写:P(A,B,C)=P(C∣A,B) P(B∣A) 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(Y∣E=e)P(Y \mid E = e),设隐藏变量为 H=X−Y−EH = X - Y - E,则:

P(Y∣E=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(Cavity∣t)=α P(Cavity,t)P(\text{Cavity} \mid t) = \alpha\, P(\text{Cavity}, t)

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

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

所以:P(Cavity∣t)=⟨0.6,0.4⟩P(\text{Cavity} \mid t) = \langle 0.6, 0.4 \rangle。

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

P(x∣e)=Q(x)∑x′Q(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 条件独立的定义

AA 和 BB 在给定 CC 后条件独立,记为 A⊥B∣CA \perp B \mid C,等价写法:

P(A∣B,C)=P(A∣C)P(A \mid B, C) = P(A \mid C)

P(B∣A,C)=P(B∣C)P(B \mid A, C) = P(B \mid C)

P(A,B∣C)=P(A∣C)P(B∣C)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(MaryCalls∣JohnCalls)≠P(MaryCalls)P(\text{MaryCalls} \mid \text{JohnCalls}) \neq P(\text{MaryCalls})

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

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

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

8. 贝叶斯公式

8.1 贝叶斯公式

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

P(A∣B)=P(B∣A)P(A)P(B)P(A \mid B) = \frac{P(B \mid A)P(A)}{P(B)}

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

P(H∣e)=P(e∣H)P(H)P(e)P(H \mid e) = \frac{P(e \mid H)P(H)}{P(e)}

其中:

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

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

8.2 为什么贝叶斯公式重要

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

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

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

P(Cause∣Effect)=P(Effect∣Cause)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(A∣Bi)P(Bi)P(A) = \sum_i P(A \mid B_i)P(B_i)

布尔情形:P(A)=P(A∣B)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(C∣E1,…,En)=α P(E1,…,En∣C)P(C)P(C \mid E_1, \dots, E_n) = \alpha\, P(E_1, \dots, E_n \mid C)P(C)

如果给定原因 CC 后,各证据条件独立 Ei⊥Ej∣CE_i \perp E_j \mid C,则:

P(E1,…,En∣C)=∏iP(Ei∣C)P(E_1, \dots, E_n \mid C) = \prod_i P(E_i \mid C)

于是:

P(C∣E1,…,En)=α P(C)∏iP(Ei∣C)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,…,Xn∣Y)=∏iP(Xi∣Y)P(X_1, \dots, X_n \mid Y) = \prod_i P(X_i \mid Y)

分类时:

y^=arg⁡max⁡yP(y∣x1,…,xn)\hat{y} = \arg\max_y P(y \mid x_1, \dots, x_n)

由贝叶斯公式:

y^=arg⁡max⁡yP(y)∏iP(xi∣y)\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=true∣C=c)P(W_i = \text{true} \mid C = c)。

训练时:

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

P(Wi=true∣C=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=wi∣C=c)\text{score}(c) = P(C = c) \prod_i P(W_i = w_i \mid C = c)

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

log⁡score(c)=log⁡P(C=c)+∑ilog⁡P(Wi=wi∣C=c)\log \text{score}(c) = \log P(C = c) + \sum_i \log P(W_i = w_i \mid C = c)

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

P(Wi=true∣C=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(Fij∣D)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。它包含:

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

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

11.3 贝叶斯网络的全局语义

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

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

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

例:若图为 A→C←B,  C→DA \to C \leftarrow B,\; C \to D,则:

P(A,B,C,D)=P(A) P(B) P(C∣A,B) P(D∣C)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(¬X∣u)=1−P(X∣u)P(\lnot X \mid u) = 1 - P(X \mid u)。

11.4 参数量优势

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

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

课件的报警器网络有五个布尔变量:Burglary、Earthquake、Alarm、JohnCalls、MaryCalls。完整联合分布需要 25−1=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),则:

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

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

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

12.1 链式结构

结构:X→Y→ZX \to Y \to Z

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

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

12.2 共同原因结构

结构:X←Y→ZX \leftarrow Y \to Z

YY 是 XX 和 ZZ 的共同原因。不观测 YY 时,XX 和 ZZ 通常相关;给定 YY 后,路径被阻断:X⊥Z∣YX \perp Z \mid Y。

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

12.3 共同结果结构

结构:X→Y←ZX \to Y \leftarrow Z

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

  • 不观测 YY 及其后代时,路径阻断:X⊥ZX \perp Z。
  • 但若观测 YY 或 YY 的后代,路径被打开:X⊥̸Z∣YX \not\perp Z \mid Y。

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

12.4 d-separation 判断步骤

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

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

考试记忆:

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

12.5 马尔可夫毯

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

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

X⊥rest∣MB(X)X \perp \text{rest} \mid MB(X)

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

13. 如何构建贝叶斯网络

13.1 一般构建算法

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

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

P(Xi∣Parents(Xi))=P(Xi∣X1,…,Xi−1)P(X_i \mid \text{Parents}(X_i)) = P(X_i \mid X_1, \dots, X_{i-1})

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

这样做保证:

P(X1,…,Xn)=∏iP(Xi∣X1,…,Xi−1)=∏iP(Xi∣Parents(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:两次测量结果。

合理因果结构:N→M1,  F1→M1,  N→M2,  F2→M2N \to M_1,\; F_1 \to M_1,\; N \to M_2,\; F_2 \to M_2。

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

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

14.1 常见概率计算

  • 简单查询:P(Xi∣E=e)P(X_i \mid E = e),例如 P(NoGas∣Gauge=empty, Lights=on, Starts=false)P(\text{NoGas} \mid \text{Gauge} = \text{empty, Lights} = \text{on, Starts} = \text{false})。
  • 联合查询:P(Xi,Xj∣E=e)P(X_i, X_j \mid E = e),可以分解为 P(Xi,Xj∣E=e)=P(Xi∣E=e) P(Xj∣Xi,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(Outcome∣Action, Evidence)P(\text{Outcome} \mid \text{Action, Evidence})。

14.2 用例

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

P(A,B,C,D)=P(A) P(B) P(C∣A,B) P(D∣C)P(A, B, C, D) = P(A)\,P(B)\,P(C \mid A, B)\,P(D \mid C)

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

四类变量身份:

  • 查询变量:题目最终要你求分布的变量,例如 AA。
  • 证据变量:条件竖线右边已经观测到的变量,例如 dd。
  • 隐藏变量:既不是查询,也不是证据,但网络里存在,必须求和消掉,例如求 P(A∣d)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(c∣a,¬b) P(d∣c)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)=1−P(b)P(\lnot b) = 1 - P(b)。如果 CPT 只给 P(c∣a,¬b)P(c \mid a, \lnot b),而题目要 P(¬c∣a,¬b)P(\lnot c \mid a, \lnot b),也用补概率:P(¬c∣a,¬b)=1−P(c∣a,¬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)=∑a∑b∑cP(a,b,c,d)P(d) = \sum_a \sum_b \sum_c P(a, b, c, d)

再代入 BN 分解:

P(d)=∑a∑b∑cP(a) P(b) P(c∣a,b) P(d∣c)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)=∑b∑cP(a,b,c,d)P(a, d) = \sum_b \sum_c P(a, b, c, d)

代入 BN 分解:

P(a,d)=∑b∑cP(a) P(b) P(c∣a,b) P(d∣c)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(X∣e)=P(X,e)P(e)P(X \mid e) = \frac{P(X, e)}{P(e)}

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

例如求 P(c∣a,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(c∣a,b) P(d∣c)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(¬c∣a,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(c∣a,b,d)=q(c)q(c)+q(¬c)=P(c∣a,b) P(d∣c)P(c∣a,b) P(d∣c)+P(¬c∣a,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(A∣c,d)P(A \mid c, d),查询变量是 AA,证据是 c,dc, d,隐藏变量是 BB。

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

P(A∣c,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(c∣A,b) P(d∣c)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(d∣c)∑bP(b)∑cP(c∣A,b)P(A, d) = P(A)\,P(d \mid c) \sum_b P(b) \sum_c P(c \mid A, b)

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

q(a)=P(a)∑bP(b) P(c∣a,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(a∣d)=q(a)q(a)+q(¬a),P(¬a∣d)=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(a∣d)P(a \mid d),也必须计算 q(¬a)q(\lnot a),因为它在分母里。除非题目给了 P(d)P(d),否则不能跳过归一化分母。

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

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

P(d)=∑a∑b∑cP(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(a∣d)=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,C∣d)P(A, C \mid d),查询变量是二元组 (A,C)(A, C),证据是 dd,隐藏变量是 BB。

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

P(A,C,d)=∑bP(A) P(b) P(C∣A,b) P(d∣C)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,c∣d)=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 什么时候可以消掉某个证据

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

从代数上也能看出来:

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

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

P(A∣c,d)=α P(d∣c) P(A)∑bP(b) P(c∣A,b)P(A \mid c, d) = \alpha\, P(d \mid c)\, P(A) \sum_b P(b)\,P(c \mid A, b)

抵消后:P(A∣c,d)=α′P(A)∑bP(b) P(c∣A,b)=P(A∣c)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)=∑z∏jfj(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(C∣A,B) P(D∣C)P(A, B, C, D) = P(A)\,P(B)\,P(C \mid A, B)\,P(D \mid C),要求 P(A∣d)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(C∣A,B)f_C(C, A, B) = P(C \mid A, B)

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

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

现在要计算:

P(A∣d)=α fA(A)∑b∑cfB(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(c∣A,B) P(d∣c)+P(¬c∣A,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 = a 和 A=¬aA = \lnot a:q(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(a∣d)=q(a)q(a)+q(¬a),P(¬a∣d)=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(Xi∣Parents(Xi))P(X_1, \dots, X_n) = \prod_i P(X_i \mid \text{Parents}(X_i))

例:I→P,  H→P,  H→L,  P→E,  L→EI \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(L∣H) P(P∣I,H) P(E∣P,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(¬l∣h) P(p∣i,h) P(e∣p,¬l)P(i)\,P(h)\,P(\lnot l \mid h)\,P(p \mid i, h)\,P(e \mid p, \lnot l),其中 P(¬l∣h)=1−P(l∣h)P(\lnot l \mid h) = 1 - P(l \mid h)。

15.2 条件独立题模板

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

Xi⊥NonDescendants(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(xi∣parents(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(X∣e)P(X \mid e),先写 P(X∣e)=α P(X,e)P(X \mid e) = \alpha\, P(X, e)。若有隐藏变量 YY:P(X,e)=∑YP(X,e,Y)P(X, e) = \sum_Y P(X, e, Y),最后对 XX 的所有取值归一化:

P(x∣e)=Q(x)∑x′Q(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,X2∣e)P(X_1, X_2 \mid e),把 (X1,X2)(X_1, X_2) 当成一个联合查询变量:P(X1,X2∣e)=α P(X1,X2,e)P(X_1, X_2 \mid e) = \alpha\, P(X_1, X_2, e)。若有隐藏变量 YY:Q(x1,x2)=∑YP(x1,x2,e,Y)Q(x_1, x_2) = \sum_Y P(x_1, x_2, e, Y)。归一化时要对查询变量所有组合求和:

P(x1,x2∣e)=Q(x1,x2)∑x1′∑x2′Q(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. 变量取假值了吗?取假值通常要用 1−p1 - p。
  5. 查询变量有几个取值?每个取值都要算一个未归一化 QQ。

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

16.1 图结构

朴素贝叶斯是一个单父节点模型:C→X1,  C→X2,  …,  C→XnC \to X_1,\; C \to X_2,\; \dots,\; C \to X_n。

联合分布:P(C,X1,…,Xn)=P(C)∏iP(Xi∣C)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(A∣B)=P(A∧B)P(B)P(A \mid B) = \dfrac{P(A \land B)}{P(B)}
  • 乘法规则:P(A∧B)=P(A∣B)P(B)P(A \land B) = P(A \mid B)P(B)
  • 链式法则:P(X1,…,Xn)=∏iP(Xi∣X1,…,Xi−1)P(X_1, \dots, X_n) = \prod_i P(X_i \mid X_1, \dots, X_{i-1})
  • 全概率:P(A)=∑iP(A∣Bi)P(Bi)P(A) = \sum_i P(A \mid B_i)P(B_i)
  • 贝叶斯:P(H∣e)=P(e∣H)P(H)P(e)P(H \mid e) = \dfrac{P(e \mid H)P(H)}{P(e)}

17.2 独立性

  • 独立:A⊥B  ⟺  P(A,B)=P(A)P(B)A \perp B \iff P(A, B) = P(A)P(B)
  • 条件独立:A⊥B∣C  ⟺  P(A,B∣C)=P(A∣C)P(B∣C)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(Xi∣Parents(Xi))P(X_1, \dots, X_n) = \prod_i P(X_i \mid \text{Parents}(X_i))
  • 局部语义:Xi⊥NonDescendants(Xi)∣Parents(Xi)X_i \perp \text{NonDescendants}(X_i) \mid \text{Parents}(X_i)
  • 参数量:2n−12^n - 1 vs. O(n⋅2k)O(n \cdot 2^k)

17.4 三种路径结构

  • 链:X→Y→Z,  X⊥Z∣YX \to Y \to Z,\; X \perp Z \mid Y
  • 共同原因:X←Y→Z,  X⊥Z∣YX \leftarrow Y \to Z,\; X \perp Z \mid Y
  • 共同结果:X→Y←Z,  X⊥ZX \to Y \leftarrow Z,\; X \perp Z,但 X⊥̸Z∣YX \not\perp Z \mid Y

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

17.5 推理

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

17.6 朴素贝叶斯

  • 假设:Xi⊥Xj∣CX_i \perp X_j \mid C
  • 分类:c^=arg⁡max⁡cP(c)∏iP(xi∣c)\hat{c} = \arg\max_c P(c) \prod_i P(x_i \mid c)
  • 对数形式:c^=arg⁡max⁡c(log⁡P(c)+∑ilog⁡P(xi∣c))\hat{c} = \arg\max_c \left(\log P(c) + \sum_i \log P(x_i \mid c)\right)

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

18. 常见坑

  1. 把 P(A∣B)P(A \mid B) 和 P(B∣A)P(B \mid A) 混淆。
  2. 贝叶斯题忘记先验 P(H)P(H),只看似然 P(e∣H)P(e \mid H)。
  3. 分母没有用全概率展开。
  4. 把测试准确率当成阳性后患病概率。
  5. 把条件独立当成无条件独立。
  6. BN 联合分布没有按父节点写,漏掉条件项。
  7. CPT 中变量为假时忘记用 1−p1 - 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),但完整联合分布太大:2n−12^n - 1
  • 边缘化:P(A)=∑bP(A,b)P(A) = \sum_b P(A, b)
  • 条件概率:P(A∣B)=P(A,B)P(B)P(A \mid B) = \dfrac{P(A, B)}{P(B)}
  • 贝叶斯:P(H∣e)=α P(e∣H)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,B∣C)=P(A∣C)P(B∣C)P(A, B \mid C) = P(A \mid C)P(B \mid C)
  • 贝叶斯网络:P(X1,…,Xn)=∏iP(Xi∣Parents(Xi))P(X_1, \dots, X_n) = \prod_i P(X_i \mid \text{Parents}(X_i))
  • 枚举推理:P(X∣e)=α∑Y∏iP(xi∣parents(Xi))P(X \mid e) = \alpha \sum_Y \prod_i P(x_i \mid \text{parents}(X_i))
  • 变量消元:收集含隐藏变量的因子 → 相乘 → 对隐藏变量求和 → 归一化
  • 朴素贝叶斯:c^=arg⁡max⁡cP(c)∏iP(xi∣c)\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:X→Yf: \mathcal{X} \to \mathcal{Y},使得新样本 xnewx_{\text{new}} 的预测 y^=f(xnew)\hat{y} = f(x_{\text{new}}) 尽可能正确。

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

1.4 无监督学习

没有标签地发现结构。训练数据 D={xi}i=1nD = \{x_i\}_{i=1}^n,没有给定正确输出。目标不是拟合 x↦yx \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^=arg⁡max⁡yP(y∣x)\hat{y} = \arg\max_y P(y \mid x)。用贝叶斯公式 P(y∣x)∝P(y)P(x∣y)P(y \mid x) \propto P(y)P(x \mid y)。
  • 朴素条件独立假设:P(x∣y)=∏j=1dP(xj∣y)P(x \mid y) = \prod_{j=1}^{d} P(x_j \mid y)
  • 所以分类规则:y^=arg⁡max⁡yP(y)∏j=1dP(xj∣y)\hat{y} = \arg\max_y P(y) \prod_{j=1}^{d} P(x_j \mid y)

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

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

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

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

Etrain=1n∑i=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+nlog⁡2pp+n−np+nlog⁡2np+nH(S) = -\frac{p}{p+n} \log_2 \frac{p}{p+n} - \frac{n}{p+n} \log_2 \frac{n}{p+n}

约定 0log⁡20=00 \log_2 0 = 0。性质:

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

多分类中:

H(S)=−∑k=1Kpklog⁡2pkH(S) = -\sum_{k=1}^{K} p_k \log_2 p_k

其中 pkp_k 是类别 kk 的比例。

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

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

Remainder(A)=∑v∈Values(A)∣Sv∣∣S∣H(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)=1−∑k=1Kpk2\text{Gini}(S) = 1 - \sum_{k=1}^{K} p_k^2

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

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

题目:证明对于不含冲突数据的训练集,必存在与训练集一致的决策树。不含冲突数据指:xi=xj⇒yi=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:xi∈Nk(x)}\hat{y} = \text{majority}\{y_i : x_i \in N_k(x)\},其中 Nk(x)N_k(x) 是距离 xx 最近的 kk 个训练样本。
  • 回归输出:y^=1k∑xi∈Nk(x)yi\hat{y} = \frac{1}{k} \sum_{x_i \in N_k(x)} y_i。

4.2 距离决定"相似"

常用距离:

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

d1(x,z)=∑j=1d∣xj−zj∣d_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 最小二乘回归:闭式解必须会推

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

J(w)=∥Xw−y∥22J(w) = \|Xw - y\|_2^2

展开:J(w)=(Xw−y)T(Xw−y)J(w) = (Xw - y)^T(Xw - y)。求梯度:∇wJ(w)=2XT(Xw−y)\nabla_w J(w) = 2X^T(Xw - y)。令梯度为 0:2XT(Xw−y)=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 大题模板

目标:

min⁡w∑i=1nri(yi−wTxi)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)=(y−Xw)TR(y−Xw)J(w) = (y - Xw)^T R (y - Xw)。因为 RR 是对角权重矩阵,且通常 R=RTR = R^T,求梯度:

∇wJ(w)=−2XTR(y−Xw)=2XTRXw−2XTRy\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)=∥Xw−y∥22+λ∥w∥22J(w) = \|Xw - y\|_2^2 + \lambda \|w\|_2^2。梯度:∇wJ(w)=2XT(Xw−y)+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)=∥Xw−y∥22+λwTDwJ(w) = \|Xw - y\|_2^2 + \lambda w^T D w,其中 DD 为对角矩阵,则 w∗=(XTX+λD)−1XTyw^* = (X^T X + \lambda D)^{-1} X^T y。DjjD_{jj} 越大,对第 jj 个特征权重惩罚越强。

5.6 L1 和 L2 正则区别

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

5.7 多分类最小二乘

若 Y∈Rn×kY \in \mathbb{R}^{n \times k} 是 one-hot 标签矩阵,W∈Rd×kW \in \mathbb{R}^{d \times k},目标为 min⁡W∥XW−Y∥F2\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^=arg⁡max⁡k(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 但通常不是做连续值回归。

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

6.2 Sigmoid 函数

逻辑函数:

σ(z)=11+e−z\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=1∣x)=σ(wTx+b),P(y=0∣x)=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=1∣x)≥120,P(y=1∣x)<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} 等价于 z≥0z \geq 0,所以决策边界仍是 wTx+b=0w^T x + b = 0。

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

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

logit(p)=log⁡p1−p\text{logit}(p) = \log \frac{p}{1-p}

对逻辑回归:

log⁡P(y=1∣x)P(y=0∣x)=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(yi∣xi;w,b)=piyi(1−pi)1−yiP(y_i \mid x_i; w, b) = p_i^{y_i}(1 - p_i)^{1-y_i}

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

对数似然:ℓ(w,b)=∑i=1n[yilog⁡pi+(1−yi)log⁡(1−pi)]\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=−[yilog⁡pi+(1−yi)log⁡(1−pi)]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=−[ylog⁡p+(1−y)log⁡(1−p)]L = -[y \log p + (1-y)\log(1-p)]。

先对 pp 求导:

∂L∂p=−yp+1−y1−p\frac{\partial L}{\partial p} = -\frac{y}{p} + \frac{1-y}{1-p}

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

∂L∂z=(−yp+1−y1−p)p(1−p)=−y(1−p)+(1−y)p=p−y\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

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

∂L∂wj=(p−y)xj,∂L∂b=p−y\frac{\partial L}{\partial w_j} = (p - y)x_j, \quad \frac{\partial L}{\partial b} = p - y

向量形式:∇wL=(p−y)x\nabla_w L = (p - y)x。数据集梯度:∇wJ=∑i=1n(pi−yi)xi\nabla_w J = \sum_{i=1}^{n}(p_i - y_i)x_i,∂J∂b=∑i=1n(pi−yi)\frac{\partial J}{\partial b} = \sum_{i=1}^{n}(p_i - y_i)。

6.7 梯度下降更新

单样本 SGD:w←w−η(p−y)xw \leftarrow w - \eta(p - y)x,b←b−η(p−y)b \leftarrow b - \eta(p - y)。

批量梯度下降:w←w−η∑i=1n(pi−yi)xiw \leftarrow w - \eta \sum_{i=1}^{n}(p_i - y_i)x_i,b←b−η∑i=1n(pi−yi)b \leftarrow b - \eta \sum_{i=1}^{n}(p_i - y_i)。

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

6.8 Softmax 回归:多分类扩展

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

P(y=k∣x)=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=−log⁡P(y=t∣x)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;特征 xi∈Rdx_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。此时最近点的几何间隔为 γ=1∥w∥\gamma = \frac{1}{\|w\|}。

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

7.3 Hard Margin SVM 原问题

线性可分时:

min⁡w,b12∥w∥2s.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

最大化间隔 2∥w∥\frac{2}{\|w\|} 等价于最小化 12∥w∥2\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 对偶问题:考试概念和证明都要会认

原问题:

min⁡w,b12∥w∥2s.t.yi(wTxi+b)−1≥0\min_{w,b} \frac{1}{2}\|w\|^2 \quad \text{s.t.} \quad y_i(w^T x_i + b) - 1 \geq 0

构造拉格朗日函数,αi≥0\alpha_i \geq 0:

L(w,b,α)=12∥w∥2−∑i=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 求导:

∂L∂w=w−∑i=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 求导:

∂L∂b=−∑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αi−12∑i=1n∑j=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

约束:αi≥0,  ∑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αi−12∑i=1n∑j=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_i 与 w,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:不可分或有噪声时允许违反间隔

引入松弛变量 ξi≥0\xi_i \geq 0:

min⁡w,b,ξ12∥w∥2+C∑i=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,ξi≥0\xi_i \geq 0。

含义:

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

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

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

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

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

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

Soft margin SVM 可写成:

min⁡w,b12∥w∥2+C∑i=1nmax⁡(0,1−yi(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+2z2−2=0-z_1 + 2z_2 - 2 = 0

分类函数:g(z)=sign(−z1+2z2−2)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

间隔宽度:2∥w∥=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(z−m)=0v^T(z - m) = 0,即:

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

规范化到支持向量函数间隔为 1。原打分 f~(x,y)=x+2y−112\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+45y−115f(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+45y−115)g(x, y) = \text{sign}(\tfrac{2}{5} x + \tfrac{4}{5} y - \tfrac{11}{5})

等价地也可写:g(x,y)=sign(x+2y−112)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⁡(−∥x−z∥22σ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}
  • 半正定性:对任意 a∈Rna \in \mathbb{R}^n,

aTKa=∑i=1n∑j=1naiajϕ(xi)Tϕ(xj)=∥∑i=1naiϕ(xi)∥2≥0a^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αi−12∑i=1n∑j=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<0⇒−1x_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=1n∥xi−μci∥2J = \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=arg⁡min⁡k∈{1,…,K}∥xi−μk∥2c_i = \arg\min_{k \in \{1,\dots,K\}} \|x_i - \mu_k\|^2

更新步骤:μk=1∣Ck∣∑xi∈Ckxi\mu_k = \frac{1}{|C_k|} \sum_{x_i \in C_k} x_i

9.4 为什么簇中心是均值

固定某个簇 CC,要求 min⁡μ∑xi∈C∥xi−μ∥2\min_\mu \sum_{x_i \in C} \|x_i - \mu\|^2。记 F(μ)=∑xi∈C(xi−μ)T(xi−μ)F(\mu) = \sum_{x_i \in C} (x_i - \mu)^T(x_i - \mu)。

对 μ\mu 求梯度:∇μF(μ)=∑xi∈C2(μ−xi)\nabla_\mu F(\mu) = \sum_{x_i \in C} 2(\mu - x_i)。令梯度为 0:2∣C∣μ−2∑xi∈Cxi=02|C|\mu - 2\sum_{x_i \in C} x_i = 0,所以:

μ=1∣C∣∑xi∈Cxi\mu = \frac{1}{|C|} \sum_{x_i \in C} x_i

这说明更新中心为均值是固定分配时的最优解。

9.5 K-Means 收敛证明

要证明 K-Means 收敛,围绕目标函数 J=∑i=1n∥xi−μci∥2J = \sum_{i=1}^{n}\|x_i - \mu_{c_i}\|^2,分两步说明。

第一步,固定中心 μ1,…,μK\mu_1, \dots, \mu_K,重新分配每个样本到最近中心。对每个样本 xix_i,新中心距离不大于旧中心距离,因此每一项 ∥xi−μci∥2\|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)}。又因为 J≥0J \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 是无监督降维方法。

  • 输入:高维样本 xi∈Rdx_i \in \mathbb{R}^d;目标维数 k<dk < d。
  • 输出:kk 个主成分方向;每个样本的低维表示 zi∈Rkz_i \in \mathbb{R}^k。
  • 含义:用低维线性子空间保留数据主要变化方向。

10.2 PCA 的两种等价目标

PCA 可以理解为:

  1. 最大化投影后的方差。
  2. 最小化投影再重构的平方误差。

保留大方差方向,丢弃小方差方向。若噪声主要分布在小方差方向,PCA 可起到去噪作用。2020 判断题考过"PCA 可以去噪",通常答对。

10.3 PCA 步骤

  1. 数据中心化:x~i=xi−xˉ\tilde{x}_i = x_i - \bar{x},其中 xˉ=1n∑i=1nxi\bar{x} = \frac{1}{n}\sum_{i=1}^{n} x_i。
  2. 计算协方差矩阵:S=1n∑i=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(xi−xˉ)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。

有限假设空间的一致学习常见样本复杂度:

m≥1ε(ln⁡∣H∣+ln⁡1δ)m \geq \frac{1}{\varepsilon}\left(\ln |H| + \ln \frac{1}{\delta}\right)

含义:

  • ε\varepsilon 越小,要求越精确,需要更多样本。
  • δ\delta 越小,要求越高置信度,需要更多样本。
  • ∣H∣|H| 越大,假设空间越复杂,需要更多样本。

SVM 课件提到最大间隔符合直觉和 PAC 理论:间隔越大,分类器越稳定,泛化倾向更好。

12. 神经网络

12.1 任务与输入输出

神经网络是一类函数近似器,可用于分类、回归、序列建模、图像识别等。

  • 输入:原始特征、图像、文本向量或其他张量。
  • 输出由任务决定:二分类(一个概率 P(y=1∣x)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+e−z\sigma(z) = \dfrac{1}{1+e^{-z}},输出在 (0,1)(0,1),但深层网络容易梯度消失。
  • Tanh:tanh⁡(z)=ez−e−zez+e−z\tanh(z) = \dfrac{e^z - e^{-z}}{e^z + e^{-z}},输出在 (−1,1)(-1,1),零中心。
  • ReLU:ReLU(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)ϕ(L−1)(⋯ϕ(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 网络参数个数

若某层输入维度为 dℓ−1d_{\ell-1},输出神经元数为 dℓd_\ell,则:权重数 dℓdℓ−1d_\ell d_{\ell-1};偏置数 dℓd_\ell;参数总数 dℓdℓ−1+dℓd_\ell d_{\ell-1} + d_\ell。

例如课件中的网络若有 [3×4][3 \times 4] 和 [4×2][4 \times 2] 两组权重,权重数为 3⋅4+4⋅2=203 \cdot 4 + 4 \cdot 2 = 20;若偏置数为 4+2=64 + 2 = 6,总可学习参数为 20+6=2620 + 6 = 26。

12.7 损失函数:分类用交叉熵,回归用平方误差

  • 回归常用均方误差:L=∥y−y^∥2L = \|y - \hat{y}\|^2。
  • 多分类常用交叉熵。若 yy 是 one-hot 标签,y^\hat{y} 是 softmax 概率:L=−∑k=1Kyklog⁡y^kL = -\sum_{k=1}^{K} y_k \log \hat{y}_k。若真实类别为 tt:L=−log⁡y^tL = -\log \hat{y}_t。
  • 总损失:C(θ)=∑i=1nLi(θ)C(\theta) = \sum_{i=1}^{n} L_i(\theta)。训练目标:θ∗=arg⁡min⁡θC(θ)\theta^* = \arg\min_\theta C(\theta)。

12.8 反向传播:链式法则的动态规划

反向传播用于高效计算每个参数的梯度。训练流程:

  1. 前向传播:从输入逐层计算输出和损失。
  2. 反向传播:从损失开始,逐层计算误差信号。
  3. 参数更新:沿负梯度方向下降。

对第 ℓ\ell 层定义误差信号 δ(ℓ)=∂L∂z(ℓ)\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 是逐元素乘法。
  • 参数梯度:∂L∂W(ℓ)=δ(ℓ)(a(ℓ−1))T\dfrac{\partial L}{\partial W^{(\ell)}} = \delta^{(\ell)} (a^{(\ell-1)})^T,∂L∂b(ℓ)=δ(ℓ)\dfrac{\partial L}{\partial b^{(\ell)}} = \delta^{(\ell)}。
  • 更新:W(ℓ)←W(ℓ)−η∂L∂W(ℓ)W^{(\ell)} \leftarrow W^{(\ell)} - \eta \dfrac{\partial L}{\partial W^{(\ell)}},b(ℓ)←b(ℓ)−η∂L∂b(ℓ)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 主要用于图像,也可用于其他网格结构数据。

  • 输入:X∈RH×W×CinX \in \mathbb{R}^{H \times W \times C_{\text{in}}},其中 HH 是高度,WW 是宽度,CinC_{\text{in}} 是通道数。
  • 卷积层输出:Y∈RH′×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=1Cin∑u=1Fh∑v=1FwKu,v,ci,co XiS+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+2P−FS⌋+1,W′=⌊W+2P−FS⌋+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+Whht−1+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)=−∑kpklog⁡2pkH(S) = -\sum_k p_k \log_2 p_k,其中 pkp_k 是类别 kk 的比例。
  3. 对属性 AA 的每个取值 vv,数出子集 SvS_v 的类别比例并算 H(Sv)H(S_v)。
  4. 算加权平均:∑v∣Sv∣∣S∣H(Sv)\sum_v \dfrac{|S_v|}{|S|} H(S_v)。
  5. 信息增益:Gain(S,A)=H(S)−∑v∣Sv∣∣S∣H(Sv)\text{Gain}(S, A) = H(S) - \sum_v \dfrac{|S_v|}{|S|} H(S_v)。
  6. 选增益最大的属性。

16.2 最小二乘推导模板

从目标 J(w)=∥Xw−y∥2J(w) = \|Xw - y\|^2,写成 J(w)=(Xw−y)T(Xw−y)J(w) = (Xw - y)^T(Xw - y)。

求梯度:∇wJ(w)=2XT(Xw−y)\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。

  • 加权时把中间都加上 RR:w∗=(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=−[ylog⁡p+(1−y)log⁡(1−p)]L = -[y \log p + (1-y)\log(1-p)]。

先写核心:∂L∂z=p−y\dfrac{\partial L}{\partial z} = p - y。再写:

∂L∂wj=(p−y)xj,∂L∂b=p−y\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 = 0,wTx+b=1w^T x + b = 1,wTx+b=−1w^T x + b = -1,g(x)=sign(wTx+b)g(x) = \text{sign}(w^T x + b)。
  7. 间隔宽度:2∥w∥\dfrac{2}{\|w\|}。

16.6 核矩阵半正定证明模板

若 Kij=ϕ(xi)Tϕ(xj)K_{ij} = \phi(x_i)^T \phi(x_j),则对任意 aa:

aTKa=∑i∑jaiajϕ(xi)Tϕ(xj)=∥∑iaiϕ(xi)∥2≥0a^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)−∑v∣Sv∣∣S∣H(Sv)\text{Gain}(S, A) = H(S) - \sum_v \dfrac{|S_v|}{|S|} H(S_v)
  • kNN:y^=majority{yi:xi∈Nk(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=−[ylog⁡p+(1−y)log⁡(1−p)]L = -[y \log p + (1-y)\log(1-p)],∇wL=(p−y)x\nabla_w L = (p - y)x
  • SVM:min⁡w,b12∥w∥2\min_{w,b} \tfrac{1}{2}\|w\|^2,yi(wTxi+b)≥1y_i(w^T x_i + b) \geq 1,margin width =2∥w∥= \tfrac{2}{\|w\|},ℓhinge=max⁡(0,1−yif(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=arg⁡min⁡k∥xi−μk∥2c_i = \arg\min_k \|x_i - \mu_k\|^2,μk=1∣Ck∣∑xi∈Ckxi\mu_k = \tfrac{1}{|C_k|} \sum_{x_i \in C_k} x_i
  • PCA:Suj=λjujS u_j = \lambda_j u_j,zi=UkT(xi−xˉ)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+2≥yx + 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(α)={m∣m⊨α}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,记作 KB⊢iαKB \vdash_i \alpha。推理是算法概念。考试里最常考两条性质:

  • 可靠性 (soundness):算法推出的都真。KB⊢iα⇒KB⊨αKB \vdash_i \alpha \Rightarrow KB \models \alpha
  • 完备性 (completeness):语义上必然真的都能推出。KB⊨α⇒KB⊢iα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,  S1∧S2,  S1∨S2,  S1⇒S2,  S1⇔S2\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, C 有 23=82^3 = 8 个模型。

3.2 命题逻辑语义

在模型 mm 中:

  • ¬S1\lnot S_1 为真 ⇔\Leftrightarrow S1S_1 为假
  • S1∧S2S_1 \land S_2 为真 ⇔\Leftrightarrow S1S_1 为真且 S2S_2 为真
  • S1∨S2S_1 \lor S_2 为真 ⇔\Leftrightarrow S1S_1 为真或 S2S_2 为真
  • S1⇒S2S_1 \Rightarrow S_2 为假 ⇔\Leftrightarrow S1S_1 为真且 S2S_2 为假
  • S1⇔S2S_1 \Leftrightarrow S_2 为真 ⇔\Leftrightarrow (S1⇒S2)∧(S2⇒S1)(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,2∨P2,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,1∨P2,2∨P3,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 A,A⇒AA \Rightarrow A,(A∧(A⇒B))⇒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 子句,常写为:

P1∧P2∧⋯∧Pm⇒QP_1 \land P_2 \land \dots \land P_m \Rightarrow Q

对应 CNF 子句:¬P1∨¬P2∨⋯∨¬Pm∨Q\lnot P_1 \lor \lnot P_2 \lor \dots \lor \lnot P_m \lor Q。

若没有正文字:P1∧P2∧⋯∧Pm⇒⊥P_1 \land P_2 \land \dots \land P_m \Rightarrow \bot,表示约束或矛盾。

Kowalski 形式就是把规则写成"前提合取推出结论":P1∧⋯∧Pm⇒QP_1 \land \dots \land P_m \Rightarrow Q。

4.2 假言推理(Modus Ponens)

命题逻辑的分离规则:

P,P⇒QQ\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 命题归结规则

若两个子句含有互补文字,可以删去互补文字并合并剩余部分:

P∨Q,¬Q∨RP∨R\frac{P \lor Q,\quad \lnot Q \lor R}{P \lor R}

若归结得到空子句 □\square,则表示矛盾。命题逻辑中,归结是可靠且完备的。

5.3 命题 CNF 转换

把公式转 CNF:

  1. 消去双向蕴涵:A⇔B≡(A⇒B)∧(B⇒A)A \Leftrightarrow B \equiv (A \Rightarrow B) \land (B \Rightarrow A)
  2. 消去蕴涵:A⇒B≡¬A∨BA \Rightarrow B \equiv \lnot A \lor B
  3. 否定内移:¬(A∧B)≡¬A∨¬B\lnot(A \land B) \equiv \lnot A \lor \lnot B,¬(A∨B)≡¬A∧¬B\lnot(A \lor B) \equiv \lnot A \land \lnot B
  4. 用分配律把析取分配到合取内部:A∨(B∧C)≡(A∨B)∧(A∨C)A \lor (B \land C) \equiv (A \lor B) \land (A \lor C)
  5. 拆成子句集合。

5.4 归结证明模板(反证法)

要证明 KB⊨αKB \models \alpha,做法:

  1. 把 KB 转为 CNF 子句(A∨BA \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 命题逻辑的缺点

命题逻辑表达力弱,不能自然表达对象、关系、函数和量词。例如"所有学生都懂算术",命题逻辑只能枚举:

StudentAlice⇒KnowsArithmeticAlice\text{StudentAlice} \Rightarrow \text{KnowsArithmeticAlice}

StudentBob⇒KnowsArithmeticBob\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 全称量词

全称量词 ∀x P(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 存在量词

存在量词 ∃x P(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 量词交换和对偶

同类量词可交换:

∀x∀y P(x,y)≡∀y∀x P(x,y)\forall x \forall y\, P(x,y) \equiv \forall y \forall x\, P(x,y)

∃x∃y P(x,y)≡∃y∃x P(x,y)\exists x \exists y\, P(x,y) \equiv \exists y \exists x\, P(x,y)

不同类量词一般不可交换:

  • ∃x∀y Loves(x,y)\exists x \forall y\, \text{Loves}(x,y) 表示"存在某个人爱所有人"。
  • ∀y∃x Loves(x,y)\forall y \exists x\, \text{Loves}(x,y) 表示"每个人都至少被某个人爱"。

量词对偶:

¬∀x P(x)≡∃x ¬P(x)\lnot \forall x\, P(x) \equiv \exists x\, \lnot P(x)

¬∃x P(x)≡∀x ¬P(x)\lnot \exists x\, P(x) \equiv \forall x\, \lnot P(x)

∀x P(x)≡¬∃x ¬P(x)\forall x\, P(x) \equiv \lnot \exists x\, \lnot P(x)

∃x P(x)≡¬∀x ¬P(x)\exists x\, P(x) \equiv \lnot \forall x\, \lnot P(x)

变量名本身不重要,但改名必须避免变量捕获。

8.4 等号

等号表示两个项指代同一对象:t1=t2t_1 = t_2。常用于唯一性、计数、不同对象约束:x≠yx \neq y。

Sibling 例子可以写成:

∀x∀y (Sibling(x,y)⇔(x≠y∧∃m∃f (m≠f∧Parent(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 都是 B:∀x (A(x)⇒B(x))\forall x\, (A(x) \Rightarrow B(x))
  • 9.2 有些 A 是 B:∃x (A(x)∧B(x))\exists x\, (A(x) \land B(x))
  • 9.3 没有 A 是 B:∀x (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 都有一个 B:∀x (A(x)⇒∃y (B(y)∧R(x,y)))\forall x\, (A(x) \Rightarrow \exists y\, (B(y) \land R(x,y)))
    • 例:“每个哺乳动物都有一个家长”:∀x (Mammal(x)⇒∃y Parent(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)))
    • 对比:∀x∃y R(x,y)\forall x \exists y\, R(x,y)(每个 xx 可以对应不同 yy);∃y∀x R(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”:∀x∀y ((P(x)∧P(y))⇒x=y)\forall x \forall y\, ((P(x) \land P(y)) \Rightarrow x = y)
    • “恰好两个对象满足 PP”:∃x∃y (x≠y∧P(x)∧P(y)∧∀z (P(z)⇒(z=x∨z=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,∃a BestAction(a,5))\text{Ask}(\text{KB}, \exists a\, \text{BestAction}(a, 5)) 可能返回 {a↦Shoot}\{a \mapsto \text{Shoot}\}。

给定语句 SS 和代换 σ\sigma,SσS\sigma 表示把 σ\sigma 代入 SS。例如 S=Smarter(x,y),  σ={x↦Hillary,y↦Bill}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 写法

  • 感知规则:∀t∀s∀b (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))
  • 相邻定义:∀x∀y∀a∀b (Adjacent([x,y],[a,b])⇔[a,b]∈{[x+1,y],[x−1,y],[x,y+1],[x,y−1]})\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]\})
  • 从感知得到格子性质:∀s∀t (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)))
  • 因果规则(从原因推结果):∀r∀s (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 亲属关系领域

  • 兄弟是手足:∀x∀y (Brother(x,y)⇒Sibling(x,y))\forall x \forall y\, (\text{Brother}(x,y) \Rightarrow \text{Sibling}(x,y))
  • 手足关系对称:∀x∀y (Sibling(x,y)⇔Sibling(y,x))\forall x \forall y\, (\text{Sibling}(x,y) \Leftrightarrow \text{Sibling}(y,x))
  • 母亲是女性家长:∀x∀y (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)))
  • 堂表亲是父母手足的孩子:∀x∀y (Cousin(x,y)⇔∃p∃ps (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={}∨∃x∃s2 (Set(s2)∧s={x∣s2})))\forall s\, (\text{Set}(s) \Leftrightarrow (s = \{\} \lor \exists x \exists s_2\, (\text{Set}(s_2) \land s = \{x \mid s_2\})))
  • 空集不能分解:¬∃x∃s ({x∣s}={})\lnot \exists x \exists s\, (\{x \mid s\} = \{\})
  • 元素属于集合的递归定义:∀x∀s (x∈s⇔∃y∃s2 (s={y∣s2}∧(x=y∨x∈s2)))\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)))
  • 子集:∀s1∀s2 (s1⊆s2⇔∀x (x∈s1⇒x∈s2))\forall s_1 \forall s_2\, (s_1 \subseteq s_2 \Leftrightarrow \forall x\, (x \in s_1 \Rightarrow x \in s_2))
  • 集合相等:∀s1∀s2 (s1=s2⇔(s1⊆s2∧s2⊆s1))\forall s_1 \forall s_2\, (s_1 = s_2 \Leftrightarrow (s_1 \subseteq s_2 \land s_2 \subseteq s_1))
  • 交集:∀x∀s1∀s2 (x∈(s1∩s2)⇔(x∈s1∧x∈s2))\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))
  • 并集:∀x∀s1∀s2 (x∈(s1∪s2)⇔(x∈s1∨x∈s2))\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)。

通用公理:

  • 相连端口信号相同:∀t1∀t2 (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)=1∨Signal(t)=0)\forall t\, (\text{Signal}(t) = 1 \lor \text{Signal}(t) = 0),并且 1≠01 \neq 0。
  • 连接关系对称:∀t1∀t2 (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))=1⇔∃n (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))=0⇔∃n (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))=1⇔Signal(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)=NOT⇒Signal(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)))

调试知识库时要特别注意补上 1≠01 \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 常量 kk:Subst({v↦k},α)\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 可满足性等价。

因此 ∃x AsHighAs(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. 若不被蕴涵,可能永远停不下来。

这就是一阶逻辑蕴涵的半可判定性:被蕴涵的结论存在算法最终回答"是";不被蕴涵的结论不存在通用算法保证有限时间回答"否"。

命题化还会产生大量无关实例。若有 pp 个 kk 元谓词和 nn 个常量,基础原子数量可达 p⋅nkp \cdot n^k;有函数符号时更糟。

12. 合一与代换

12.1 代换

代换是变量到项的映射:θ={x↦John,y↦Father(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))={x↦Jane}\text{Unify}(\text{Knows}(\text{John}, x), \text{Knows}(\text{John}, \text{Jane})) = \{x \mapsto \text{Jane}\}

Unify(Knows(John,x),Knows(y,OJ))={x↦OJ,y↦John}\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)))={y↦John,x↦Mother(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=y∧x=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,P⇒QQ\frac{P,\quad P \Rightarrow Q}{Q}

一阶逻辑的 GMP 加上了合一。若有事实 p1′,…,pn′p'_1, \dots, p'_n 和规则 p1∧p2∧⋯∧pn⇒qp_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})

代换 θ={x↦John}\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 中最多产生 p⋅nkp \cdot n^k 个基础文字。
  • 一般一阶确定子句若含函数符号,当前查询不被蕴涵时可能不终止。

效率要点:

  • 没必要每轮匹配所有规则,只需检查前一轮新增事实涉及的规则。
  • 数据库索引可让已知事实检索接近 O(1)O(1)。
  • 合取前提与事实集匹配本身是 NP-hard。

14.2 一阶后向链

一阶后向链从查询出发,找能推出该查询的规则,再用合一生成子目标。Prolog 风格:

  1. 查询 qq。
  2. 找规则结论 q′q'。
  3. 合一 qq 与 q′q'。
  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 化

存在量词不在任何全称量词作用域内:∃x P(x)\exists x\, P(x) 变为 P(A)P(A),其中 AA 是新的 Skolem 常量。

存在量词在全称量词作用域内:∀x∃y Parent(y,x)\forall x \exists y\, \text{Parent}(y, x),这里 yy 依赖于 xx,变为 ∀x Parent(F(x),x)\forall x\, \text{Parent}(F(x), x),其中 FF 是新的 Skolem 函数。

一般规律:Skolem 函数的参数是包住该存在变量的所有全称变量。

15.3 课件 CNF 例题

原句:

∀x ((∀y (Animal(y)⇒Loves(x,y)))⇒∃y Loves(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))∨∃y Loves(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))∨∃y Loves(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))∨∃z Loves(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 一阶归结规则

若两个子句中有可合一的互补文字:

L1∨⋯∨Lk和M1∨⋯∨MnL_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,则推出:

(L1∨⋯∨Li−1∨Li+1∨⋯∨Lk∨M1∨⋯∨Mj−1∨Mj+1∨⋯∨Mn)θ(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})

合一 θ={x↦Ken}\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})

∀x∀y ((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={x↦Robbie}\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={y↦Bob}\theta_2 = \{y \mapsto \text{Bob}\},得到 FriendlyTo(Robbie,Bob)\text{FriendlyTo}(\text{Robbie}, \text{Bob})。
  3. 与否定目标归结:□\square

因此 KB⊨FriendlyTo(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})

∃y∃x (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 是罪犯。

知识库:

∀x∀y∀z (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 是语义蕴涵,不是算法运行结果。
  • KB⊢iαKB \vdash_i \alpha 是推理过程 ii 的导出关系。
  • 可靠性:导出的都被蕴涵。
  • 完备性:被蕴涵的都能导出。
  • 命题逻辑归结可靠且完备。
  • 一阶归结对 FOL 完备。
  • GMP 对一阶确定子句完备,对一般 FOL 不完备。
  • 前向链和后向链对 Horn KB 完备,对一般 FOL 不完备。
  • 一阶逻辑蕴涵半可判定。

17.2 翻译题

  • "所有"通常主连接词是 ⇒\Rightarrow。
  • "存在"通常主连接词是 ∧\land。
  • ∀x∃y\forall x \exists y 与 ∃y∀x\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)
  • 可靠与完备:KB⊢iα⇒KB⊨αKB \vdash_i \alpha \Rightarrow KB \models \alpha;KB⊨α⇒KB⊢iαKB \models \alpha \Rightarrow KB \vdash_i \alpha
  • 反证归结:KB⊨α  ⟺  KB∧¬αKB \models \alpha \iff KB \land \lnot\alpha 不可满足
  • 命题 CNF:(A∨¬B)∧(¬A∨C)(A \lor \lnot B) \land (\lnot A \lor C)
  • Horn 子句:P1∧⋯∧Pm⇒QP_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′,  p1∧⋯∧pn⇒q  ⇒  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=[x1x2⋮xd]∈Rdx = \begin{bmatrix} x_1 \\ x_2 \\ \vdots \\ x_d \end{bmatrix} \in \mathbb{R}^d

若有 nn 个样本、每个样本 dd 个特征,机器学习里常把数据矩阵写成:

X=[x1Tx2T⋮xnT]∈Rn×dX = \begin{bmatrix} x_1^T \\ x_2^T \\ \vdots \\ x_n^T \end{bmatrix} \in \mathbb{R}^{n \times d}

其中第 ii 行 xiTx_i^T 是第 ii 个样本。

维度检查是防止公式写错的最快方法。若 X∈Rn×dX \in \mathbb{R}^{n \times d},则 w∈Rdw \in \mathbb{R}^d,Xw∈RnXw \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=∥w∥∥x∥cos⁡θw^T x = \|w\| \|x\| \cos\theta,其中 θ\theta 是两个向量夹角。若 wTx=0w^T x = 0,则两个向量正交,也就是方向垂直。

4. 范数和距离

向量的 L2 范数:

∥x∥2=xTx=∑j=1dxj2\|x\|_2 = \sqrt{x^T x} = \sqrt{\sum_{j=1}^{d} x_j^2}

若上下文没有特别说明,∥x∥\|x\| 通常指 L2 范数。两个点的欧氏距离:

∥x−z∥2=∑j=1d(xj−zj)2\|x - z\|_2 = \sqrt{\sum_{j=1}^{d} (x_j - z_j)^2}

kNN 和 K-Means 里经常用平方距离:∥x−z∥22=(x−z)T(x−z)\|x - z\|_2^2 = (x - z)^T(x - z)。平方距离省去了开方,最小化时和原距离等价,因为开方函数单调递增。

L1 范数:∥x∥1=∑j=1d∣xj∣\|x\|_1 = \sum_{j=1}^{d} |x_j|。机器学习里 L1 正则常产生稀疏权重,L2 正则常让权重整体变小。

5. 矩阵乘法

若 A∈Rm×nA \in \mathbb{R}^{m \times n},B∈Rn×pB \in \mathbb{R}^{n \times p},则 AB∈Rm×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=[x1Twx2Tw⋮xnTw]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。

逆矩阵 A−1A^{-1} 满足 A−1A=AA−1=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)=(y−Xw)TR(y−Xw)J(w) = (y - Xw)^T R (y - Xw)

若记误差向量 e=y−Xwe = 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+b∣∥w∥\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 = I。xx 投影到这些方向张成的子空间中,低维坐标为 z=UTxz = U^T x,重构为 x^=Uz\hat{x} = Uz。

PCA 中 zi=UkT(xi−xˉ)z_i = U_k^T (x_i - \bar{x}),就是把中心化后的样本投影到前 kk 个主成分方向上。

10. 二次型和半正定

SVM 核矩阵会用到

形如下面的表达式叫二次型:xTAxx^T A x。如果对任意 xx 都有 xTAx≥0x^T A x \geq 0,则称 AA 是半正定矩阵,记为 A⪰0A \succeq 0。

最简单例子:xTIx=xTx=∥x∥2≥0x^T I x = x^T x = \|x\|^2 \geq 0。核矩阵半正定的关键证明就是把二次型写成一个范数平方:

aTKa=∥∑i=1naiϕ(xi)∥2≥0a^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=xi−xˉ\tilde{x}_i = x_i - \bar{x},协方差矩阵:

S=1n∑i=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 J 和 ww 形状相同。常用结论:

∂∂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

最小二乘最常用公式:

∂∂w∥Xw−y∥2=2XT(Xw−y)\frac{\partial}{\partial w} \|Xw - y\|^2 = 2X^T(Xw - y)

加权最小二乘中,若 R=RTR = R^T:

∂∂w(y−Xw)TR(y−Xw)=−2XTR(y−Xw)\frac{\partial}{\partial w}(y - Xw)^T R (y - Xw) = -2X^T R (y - Xw)

逻辑回归中常用链式法则:

∂L∂wj=∂L∂z∂z∂wj\frac{\partial L}{\partial w_j} = \frac{\partial L}{\partial z} \frac{\partial z}{\partial w_j}

因为 z=wTx+bz = w^T x + b,∂z∂wj=xj\frac{\partial z}{\partial w_j} = x_j,所以只要先求出 ∂L∂z=p−y\frac{\partial L}{\partial z} = p - y,就得到 ∂L∂wj=(p−y)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},则 a⊙b=[a1b1a2b2]a \odot b = \begin{bmatrix} a_1 b_1 \\ a_2 b_2 \end{bmatrix}。它要求两个向量形状相同。

15. 机器学习中最常见的维度检查

  • 线性回归:X∈Rn×dX \in \mathbb{R}^{n \times d},w∈Rdw \in \mathbb{R}^d,y∈Rny \in \mathbb{R}^n,Xw−y∈RnXw - y \in \mathbb{R}^n,XT(Xw−y)∈RdX^T(Xw - y) \in \mathbb{R}^d,所以梯度和 ww 同维。
  • 多分类线性模型:X∈Rn×dX \in \mathbb{R}^{n \times d},W∈Rd×kW \in \mathbb{R}^{d \times k},Y∈Rn×kY \in \mathbb{R}^{n \times k},XW∈Rn×kXW \in \mathbb{R}^{n \times k}。
  • 神经网络单层:a(ℓ−1)∈Rdℓ−1a^{(\ell-1)} \in \mathbb{R}^{d_{\ell-1}},W(ℓ)∈Rdℓ×dℓ−1W^{(\ell)} \in \mathbb{R}^{d_\ell \times d_{\ell-1}},b(ℓ)∈Rdℓb^{(\ell)} \in \mathbb{R}^{d_\ell},则 z(ℓ)=W(ℓ)a(ℓ−1)+b(ℓ)∈Rdℓz^{(\ell)} = W^{(\ell)} a^{(\ell-1)} + b^{(\ell)} \in \mathbb{R}^{d_\ell}。

16. 看到公式不会时的快速拆解法

  1. 第一步,看形状。 先给每个量标维度,确认乘法是否合法。
  2. 第二步,看含义。 比如 XwXw 是所有样本预测,Xw−yXw - y 是所有误差,∥Xw−y∥2\|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 维。