人工智能大抄
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 → action f: \text{percept sequence} \to \text{action} f : percept sequence → 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 a E [ U ( Result ( a ) ) ] \arg\max_a E[U(\text{Result}(a))] arg max a E [ U ( 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. 问题形式化五要素
一个良定义问题通常包含:
状态空间 (state space):所有可能状态的集合。
初始状态 (initial state):搜索起点。
行动/后继函数 (actions/successor function):在某状态能做什么,做完到哪里。
目标测试 (goal test):判断状态是否满足目标。
路径代价 (path cost):路径总代价,通常是单步代价累加。
标准写法:Problem = ( States, InitialState, Actions, TransitionModel, GoalTest, PathCost ) \text{Problem} = (\text{States, InitialState, Actions, TransitionModel, GoalTest, PathCost}) Problem = ( States, InitialState, Actions, TransitionModel, GoalTest, PathCost ) 。课件有时把后继函数写成:S ( x ) = ⟨ action, successor state ⟩ , … S(x) = \langle \text{action, successor state} \rangle, \dots S ( x ) = ⟨ action, successor state ⟩ , … ,其中单步代价写作 c ( x , a , y ) ≥ 0 c(x, a, y) \geq 0 c ( x , a , y ) ≥ 0 。
1.2.1. 状态与节点不要混淆
状态 (state):世界的一种配置,例如"人在 Arad",“水壶水量为 ( 0 , 8 , 3 ) (0,8,3) ( 0 , 8 , 3 ) ”。
节点 (node):搜索树中的数据结构,通常包含:state、parent、action、path-cost g ( n ) 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) :是否保证找到最低路径代价的解。
时间复杂度 :通常用分支因子 b b b 、最浅目标深度 d d d 、最大深度 m m m 表示。
空间复杂度 :搜索过程中最多存多少节点。
符号:
b b b :branching factor,每个节点最多后继数。
d d d :最浅目标深度。
m m m :搜索树最大深度,可能无限。
C ∗ C^* C ∗ :最优解代价。
ε \varepsilon ε :最小正单步代价。
2. 无信息搜索算法
2.1. 无信息搜索算法对比表
无信息搜索仅使用从问题定义中获取到的信息(初始状态,状态转移规则,目标状态测试条件),没有任何其他启发式信息。
算法
选择规则
完备
最优
时间
空间
适用
BFS
最浅节点,FIFO
是,若 b b b 有限
是,若单步代价相同
O ( b d + 1 ) O(b^{d+1}) O ( b d + 1 )
O ( b d + 1 ) O(b^{d+1}) O ( b d + 1 )
单位代价最短步数
UCS
最小 g ( n ) g(n) g ( n )
是,若代价 ≥ ε \geq \varepsilon ≥ ε
是
O ( b 1 + ⌊ C ∗ / ε ⌋ ) O(b^{1+\lfloor C^*/\varepsilon \rfloor}) O ( b 1 + ⌊ C ∗ / ε ⌋ )
同时间量级
非单位代价最优路径
DFS
最深节点,LIFO
否,可能进入无限分支
否
O ( b m ) O(b^m) O ( b m )
O ( b m ) O(bm) O ( b m )
空间很紧、只想找任意解
DLS
深度限制 l l l 的 DFS
若 l ≥ d l \geq d l ≥ d 是
否
O ( b l ) O(b^l) O ( b l )
O ( b l ) O(bl) O ( b l )
已知深度上界
IDS
逐步加深 DLS
是
是,若单步代价相同
O ( b d ) O(b^d) O ( b d )
O ( b d ) O(bd) O ( b d )
单位代价且想省空间
2021 选择题 :所有边代价为 1,没有启发式,又要求省空间并保证最优,选迭代加深 DFS 。
2020 判断题 :BFS 是 UCS 的特例。若每条边单步代价相同,UCS 按 g g g 递增扩展,等价于按深度扩展,因此正确。
2.2. 广度优先搜索(BFS)
BFS 用队列:
1 2 1. pop from front 2. push children to back
性质:
按深度逐层扩展。
当所有边代价相同,第一次找到目标就是最浅目标,也是最优解。
空间爆炸严重,因为要保存整层 frontier。
考试手算规则:
从左到右生成子节点。
同层先生成者先扩展。
若题目规定并列按字母序,按题目来。
2.3. 代价一致搜索(UCS)
BFS 的升级版,应对每步代价不同的情况。UCS 每次扩展 g ( n ) g(n) 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)
g ( n ) ≜ 从初始节点到 n 的已知路径代价 = 父节点 g + cost ( p , n )
操作步骤:
初始化 :将起点放入优先队列,累计代价设为 0。准备一个空的"已探索集合"(记录去过的地方,防止绕圈)。
循环检查队列 :
如果优先队列空了,说明找不到路,宣告失败。
弹出队列中代价最小的节点。
目标测试:如果这个节点是终点,宣告成功!直接输出到达这里的路径。
扩展节点 :
将刚弹出的节点加入"已探索集合"。
观察它的所有邻居节点,计算到达每个邻居的新累计代价(当前节点累计代价 + 走到邻居的单步代价)。
状态更新(UCS 最关键的一步) :
如果邻居既不在队列里,也不在已探索集合里 → 直接作为新发现加入优先队列。
如果邻居已经在优先队列里,但你刚算出的新代价比队列里记录的代价更低 → 发现了一条抄近道的路!立即更新队列里该节点的代价和父节点信息。
返回第 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 加深度限制 l l l :
深度超过 l l l 不再展开。
可以返回三种结果:success、failure、cutoff。
若 l < d l < d l < d ,找不到解;若 l l l 太大,又退化为 DFS。
2.6. 迭代加深搜索(IDS)
IDS 依次运行:
1 2 3 4 DLS(limit=0) DLS(limit=1) DLS(limit=2) ...
为什么重复搜索仍然不亏?因为树中绝大多数节点在最深层,浅层重复展开的代价相对小。
性质:
BFS 的完备性和单位代价最优性。
DFS 的低空间复杂度。
单位代价搜索中非常常考。
2.7. 双向搜索
思路:同时从初始状态和目标状态搜索,直到两个 frontier 相遇。
复杂度:理想情况下从 O ( b d ) O(b^d) O ( b d ) 降为 O ( b d / 2 ) O(b^{d/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)} Result ( In(Arad) , Go(Sibiu) ) = 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 Cross ( m , c ) , 1 ≤ m + c ≤ 2 。该题检查重复状态非常必要,因为动作可逆,树搜索会反复过河。
3.2. 2020 三位数 A* 题的状态设计
题意:从三位数 S S S 到 G G G ,每步对某一位加 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{目标个位}| h ( n ) = ∣ 当前百位 − 目标百位 ∣ + ∣ 当前十位 − 目标十位 ∣ + ∣ 当前个位 − 目标个位 ∣ 。
理由:每一步只能改变一位且只能改变 1,因此至少需要各位数字差值之和这么多步。bad 集合和"不可连续改同一位"只会增加所需步数,不会让它更少。
若想更紧但仍简单,可考虑由于"不能连续改同一位"造成的额外等待,但考试一般写曼哈顿数字差即可。
3.3. 搜索题手算答题框架
对任何搜索树题:
写 frontier 的排序依据。
写已扩展节点。
对每个 frontier 节点标关键值:
BFS/DFS:深度和生成顺序。
UCS:g ( n ) g(n) g ( n ) 。
Greedy:h ( n ) h(n) h ( n ) 。
A*:f ( n ) = g ( n ) + h ( n ) f(n)=g(n)+h(n) f ( n ) = g ( n ) + h ( n ) 。
选最优先节点。
并列时按题目规则:左到右、字母序、深度优先等。
3.4. 搜索树绘制
按照题目给定的扩展顺序。扩展一个结点时,给出所有合法的后继结点;节点按照扩展顺序进行标号,只有被扩展的节点标号,目标节点被扩展时停止。
4. 考试速查
4.1. 常见判断题
BFS 在单位代价下最优:对 。
DFS 不一定完备:对 ,可能无限深。
DFS 扩展节点一定不少于 A*:错 ,具体取决于图和启发式。
UCS 可以处理非单位代价并保证最优:对 ,要求非负代价。
图搜索比树搜索一定更快:不绝对,但避免重复状态通常更稳。
4.2. 最后一分钟版
问题形式化:状态、初始、行动/转移、目标测试、路径代价。
节点比状态多:父节点、动作、路径代价、深度。
BFS:单位代价最优,空间爆炸。
UCS:按 g g g ,非负代价最优。
DFS:省空间,不完备不最优。
IDS:单位代价最优且省空间,考试很爱。
有历史限制的题,历史变量要放入状态。
4 有信息搜索
A*,启发式函数,局部搜索
目录 :0. 快速定位 · 1. 最佳优先与 A* 基础 · 2. 启发式性质与证明 · 3. 局部搜索 · 4. 考试速查
0. 快速定位
手算 A*:看"A* 搜索流程"和"罗马尼亚例题模板"。
判断启发式是否 admissible/consistent:看"两个定义"。
多个启发式比较:看"启发式支配关系"。
局部搜索:看"爬山/模拟退火/束搜索/遗传算法"。
1. 最佳优先与 A* 基础
1.1. Best-First Search
最佳优先搜索维护一个优先队列 frontier,每次扩展评价函数 f ( n ) 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 ) 得到不同算法:
贪心最佳优先搜索:f ( n ) = h ( n ) f(n)=h(n) f ( n ) = h ( n ) 。
A* 搜索:f ( n ) = g ( n ) + h ( n ) f(n)=g(n)+h(n) f ( n ) = g ( n ) + h ( n ) 。
UCS:f ( n ) = g ( n ) f(n)=g(n) f ( n ) = g ( n ) 。
1.2. 启发函数 h(n)
h ( n ) h(n) h ( n ) 估计从节点 n n n 到目标的最小剩余代价,如果 n n n 是目标,则 h ( n ) = 0 h(n)=0 h ( n ) = 0 。
例:罗马尼亚地图中,h ( n ) h(n) h ( n ) 可取城市到 Bucharest 的直线距离。启发式越接近真实剩余代价 h ∗ ( n ) h^*(n) h ∗ ( n ) ,搜索越少;但如果高估,A* 最优性可能丢失。
1.3. Greedy Best-First Search
评价函数:f ( n ) = h ( n ) f(n) = h(n) f ( n ) = h ( n ) 。
特点:
只看"离目标看起来多近"。
通常很快。
不保证最优。
在图搜索中若避免重复,有限状态空间下完备;树搜索遇到环或无限空间不一定完备。
常见错误:贪心不看已经走过多远,所以可能为了小 h h h 绕远路。
1.4. A* Search
评价函数:f ( n ) = g ( n ) + h ( n ) f(n) = g(n) + h(n) f ( n ) = g ( n ) + h ( n ) ,其中:
g ( n ) g(n) g ( n ) :从初始状态到 n n n 的已知实际路径代价。
h ( n ) h(n) h ( n ) :从 n n n 到目标的估计最小剩余代价。
f ( n ) f(n) f ( n ) :经过 n n n 到目标的总路径代价估计。
A* 每次扩展 f f f 最小的节点。
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) 0 ≤ h ( n ) ≤ 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') h ( n ) ≤ c ( n , a , n ′ ) + h ( n ′ ) (通过 a a a 到达 n ′ n' n ′ ),并且 h ( goal ) = 0 h(\text{goal}) = 0 h ( goal ) = 0 。
直观:估计距离满足三角不等式。
重要结论:一致性 ⇒ 可采纳 。
证明套路:沿着从 n n n 到目标的最优路径反复套用三角不等式,中间的 h h h 抵消,得到 h ( n ) ≤ h ∗ ( n ) h(n) \leq h^*(n) h ( n ) ≤ h ∗ ( n ) 。
一致性的好处:
A* 图搜索第一次从 frontier 弹出某状态时,该状态的最优 g g g 已确定。
不需要重新打开 closed 节点。
2.3. 可采纳但不一致例子
构造路径:A → 1 B → 10 G A \xrightarrow{1} B \xrightarrow{10} G A 1 B 1 0 G
真实代价:h ∗ ( A ) = 11 , h ∗ ( B ) = 10 , h ∗ ( G ) = 0 h^*(A) = 11,\; h^*(B) = 10,\; h^*(G) = 0 h ∗ ( A ) = 1 1 , h ∗ ( B ) = 1 0 , h ∗ ( G ) = 0 。
定义:h ( A ) = 10 , h ( B ) = 5 , h ( G ) = 0 h(A) = 10,\; h(B) = 5,\; h(G) = 0 h ( A ) = 1 0 , h ( B ) = 5 , h ( G ) = 0 。
可采纳:10 ≤ 11 , 5 ≤ 10 10 \leq 11,\; 5 \leq 10 1 0 ≤ 1 1 , 5 ≤ 1 0 。
不一致:
h ( A ) ≤ c ( A , B ) + h ( B ) 10 ≤ 1 + 5 (错) h(A) \leq c(A,B) + h(B) \\
10 \leq 1 + 5 \quad \text{(错)}
h ( A ) ≤ c ( A , B ) + h ( B ) 1 0 ≤ 1 + 5 (错)
2.4. 启发式支配关系(占优)
若两个启发式都可采纳,且对所有节点:h 2 ( n ) ≥ h 1 ( n ) h_2(n) \geq h_1(n) h 2 ( n ) ≥ h 1 ( n ) ,则 h 2 h_2 h 2 支配 h 1 h_1 h 1 ,通常扩展节点不多于 h 1 h_1 h 1 ,因为它更接近真实代价。
2021 判断题 :若 h 1 h_1 h 1 、h 2 h_2 h 2 都可采纳:
h 3 ( n ) = max ( h 1 ( n ) , h 2 ( n ) ) h 4 ( n ) = min ( h 1 ( n ) , h 2 ( n ) ) h_3(n) = \max(h_1(n), h_2(n)) \\
h_4(n) = \min(h_1(n), h_2(n))
h 3 ( n ) = max ( h 1 ( n ) , h 2 ( n ) ) h 4 ( n ) = min ( h 1 ( n ) , h 2 ( n ) )
h 3 h_3 h 3 仍可采纳,而且支配 h 4 h_4 h 4 。所以在 A* 中通常更好。但"更好"若被严格理解为所有情况下扩展节点严格更少,则不一定严格;考试一般判断"max 不差于 min"。
2.5. A* 最优性证明核心
设最优解代价为 C ∗ C^* C ∗ 。若 h h h 可采纳,则最优路径上任意 frontier 节点 n n n 有:
f ( n ) = g ( n ) + h ( n ) ≤ g ( n ) + h ∗ ( n ) = C ∗ f(n) = g(n) + h(n) \leq g(n) + h^*(n) = C^*
f ( n ) = g ( n ) + h ( n ) ≤ g ( n ) + h ∗ ( n ) = C ∗
任何次优目标 G ′ G' G ′ 的:f ( G ′ ) = g ( G ′ ) = C ′ > C ∗ f(G') = g(G') = C' > C^* f ( G ′ ) = g ( G ′ ) = C ′ > C ∗ ,所以 A* 不会在所有最优路径节点被处理前选中次优目标。
2.6. 加权启发式路径算法
作业题给:f ( n ) = ( 2 − w ) g ( n ) + w h ( n ) f(n) = (2-w)g(n) + wh(n) f ( n ) = ( 2 − w ) g ( n ) + w h ( n ) 。
若 0 ≤ w < 2 0 \leq w < 2 0 ≤ w < 2 ,除以正数 ( 2 − w ) (2-w) ( 2 − w ) :f ′ ( n ) = g ( n ) + [ w / ( 2 − w ) ] h ( n ) f'(n) = g(n) + [w/(2-w)]h(n) f ′ ( n ) = g ( n ) + [ w / ( 2 − w ) ] h ( n ) 。
为了保证最优,启发项系数不能超过 1:
w 2 − w ≤ 1 ⇒ w ≤ 1 \frac{w}{2-w} \leq 1 \;\Rightarrow\; w \leq 1
2 − w w ≤ 1 ⇒ w ≤ 1
所以 0 ≤ w ≤ 1 0 \leq w \leq 1 0 ≤ w ≤ 1 保证最优。
特殊情况:
w = 0 w=0 w = 0 :f = 2 g f=2g f = 2 g ,等价 UCS。
w = 1 w=1 w = 1 :f = g + h f=g+h f = g + h ,标准 A*。
w = 2 w=2 w = 2 :f = 2 h f=2h f = 2 h ,等价贪心搜索。
2.7. 高估不超过 c 的启发式
若:h ( n ) ≤ h ∗ ( n ) + c h(n) \leq h^*(n) + c h ( n ) ≤ h ∗ ( n ) + c ,则 A* 返回解代价 C ′ C' C ′ 满足:C ′ ≤ C ∗ + c C' \leq C^* + c C ′ ≤ C ∗ + c 。
证明模板:
A* 终止时选择目标 G ′ G' G ′ ,所以 C ′ = f ( G ′ ) C'=f(G') C ′ = f ( G ′ ) 。
最优路径上存在 frontier 节点 n n n 。
f ( n ) = g ( n ) + h ( n ) ≤ g ( n ) + h ∗ ( n ) + c = C ∗ + c f(n)=g(n)+h(n) \leq g(n)+h^*(n)+c = C^*+c f ( n ) = g ( n ) + h ( n ) ≤ g ( n ) + h ∗ ( n ) + c = C ∗ + c 。
A* 选择 G ′ G' G ′ ,所以 C ′ = f ( G ′ ) ≤ f ( n ) C'=f(G') \leq f(n) C ′ = f ( G ′ ) ≤ f ( n ) 。
得 C ′ ≤ C ∗ + c C' \leq C^*+c C ′ ≤ 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) g ( n ) ,选最小。
Greedy:看 h ( n ) h(n) h ( n ) ,选最小。
A*:算 f ( n ) = g ( n ) + h ( n ) 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) P = exp ( Δ E / T ) 。若是最大化问题,Δ E = value(new) − value(current) \Delta E = \text{value(new)} - \text{value(current)} Δ E = value(new) − value(current) ,更差时为负。温度 T T T 越高越容易接受坏动作,越低越像爬山。
流程:
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 局部束搜索
同时保留 k k k 个状态:
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 ( h 1 , h 2 ) \max(h_1, h_2) max ( h 1 , h 2 ) 若二者可采纳,仍可采纳:对 。
贪心最佳优先搜索一定最优:错 。
A* 中 g g g 是已经走过的代价,h h h 是估计剩余代价:对 。
4.2. 最后一分钟版
Greedy:f = h f=h f = h ,快但不最优。
A*:f = g + h f=g+h f = g + h ,h h h 可采纳/一致时保证最优。
Admissible:h ≤ h ∗ h \leq h^* h ≤ h ∗ 。
Consistent:h ( n ) ≤ c ( n , n ′ ) + h ( n ′ ) h(n) \leq c(n, n') + h(n') h ( n ) ≤ 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) CSP = ( X , D , C )
X = { X 1 , … , X n } X = \{X_1, \dots, X_n\} X = { X 1 , … , X n } :变量集合。
D = { D 1 , … , D n } D = \{D_1, \dots, D_n\} D = { D 1 , … , D n } :每个变量的取值域。
C C C :约束集合,限制变量之间可同时取哪些值。
目标:给每个变量赋值,使所有约束同时满足。
例:地图染色
变量:每个地区,如 WA, NT, SA, Q, NSW, V, T。
域:{ r e d , g r e e n , b l u e } \{red, green, blue\} { r e d , g r e e n , b l u e } 。
约束:相邻地区颜色不同,如 W A ≠ N T WA \neq NT W A = N T 。
1.2. CSP 与普通搜索的区别
普通搜索状态可能是世界任意配置;CSP 状态通常是部分赋值 :W A = r e d , N T = g r e e n WA = red,\; NT = green W A = r e d , N T = g r e e n 。
行动是给一个尚未赋值变量赋值。
目标测试是所有变量都有值且所有约束满足。
CSP 的优势:约束结构明确,可以用通用推理减少搜索。
1.3. 约束类型
一元约束:只涉及一个变量,如 X ≠ r e d X \neq red X = r e d 。
二元约束:涉及两个变量,如 W A ≠ N T WA \neq NT W A = N T 。
高阶约束:涉及多个变量,如 Alldiff ( A , B , C , D ) \text{Alldiff}(A,B,C,D) 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
每赋值一个变量,就删除邻居变量域中不再合法的值。若某个未赋值变量域变空,立刻回溯。
例:地图染色,赋 W A = r e d WA=red W A = r e d 后,从 NT 和 SA 的域中删掉 red。
优点:简单有效。缺点:只看一步邻居,不能发现更深层的隐含冲突。
2.6. Arc Consistency 弧相容
对二元约束 X i → X j X_i \to X_j X i → X j ,若对 X i X_i X i 域中每个值 x x x ,都存在 X j X_j X j 域中某个值 y y y 使约束满足,则称弧 X i → X j X_i \to X_j X i → X j 相容。
若某个 x x x 找不到支持值,就从 D i D_i D i 中删除 x x x 。
注意方向性:X i → X j X_i \to X_j X i → X j 相容不代表 X j → X i X_j \to X_i X j → 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 复杂度
若:n n n 个变量;每个变量域大小最多 d d d ;c c c 条二元约束。
每次 REVISE 最多 O ( d 2 ) O(d^2) O ( d 2 ) ,每条弧最多被重新检查 O ( d ) O(d) O ( d ) 次,常见结论:O ( c d 3 ) O(cd^3) O ( c d 3 ) 。
树结构 CSP 可在线性量级求解,常见教材结论:O ( n d 2 ) O(nd^2) O ( n d 2 ) 。作业题若问"树结构 CSP 上 AC-3 最坏复杂度",通常写 O ( n d 2 ) O(nd^2) O ( n d 2 ) ,因为树中边数 O ( n ) O(n) O ( n ) ,每条边处理受限。
3. 结构与典型题
3.1. 树结构 CSP
若约束图是树,可以不回溯地求解:
任选根,给变量排序,使父节点在子节点之前。
从叶子到根,对每条边执行 RemoveInconsistent(Parent, Child)。
从根到叶依次赋值:父节点定值后,给子节点选任一与父值相容的值。
复杂度:O ( n d 2 ) O(nd^2) O ( n d 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. 密码算术题思路
例如:
变量: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) Alldiff ( S , E , N , D , M , O , R , Y ) 。
首字母 S ≠ 0 , M ≠ 0 S \neq 0,\; M \neq 0 S = 0 , M = 0 。
每列加法和进位约束。
求解技巧:先写进位变量;使用 MRV(例如最高位常能推 M = 1 M=1 M = 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 ( n d 2 ) O(nd^2) O ( n d 2 ) 求解。
6 博弈
Minimax,alpha-beta 剪枝
目录 :0. 快速定位 · 1. 博弈建模与 Minimax · 2. Alpha-Beta 剪枝 · 3. 资源限制与扩展 · 4. 考试速查
0. 快速定位
给博弈树求值:看"Minimax 手算规则"。
问剪枝叶子:看"Alpha-Beta 手算规则"。
深度限制和评估函数:看"资源限制搜索"。
MCTS:考试重点写不考,只保留概念。
1. 博弈建模与 Minimax
1.1. 博弈问题定义
问题定义:
两人轮流行动:玩家(MAX)试图最大化游戏结果,玩家(MIN)则试图最小化游戏结果。
零和:输、赢、平。
完全信息:两人都可以看到整个游戏的全部状态。
确定性:行动的结果是确定的。
例如井字棋、国际象棋、围棋。
形式化包含:
初始状态。
当前状态 s s s ,游戏中棋盘或环境的当前配置。
当前行动方 Player ( s ) \text{Player}(s) Player ( s ) 。
合法行动 Actions ( s ) \text{Actions}(s) Actions ( s ) 。
转移模型 Result ( s , a ) \text{Result}(s,a) Result ( s , a ) ,表示 s s s 经过 a a a 的后继状态。
终止测试 Terminal-Test ( s ) \text{Terminal-Test}(s) Terminal-Test ( s ) ,用于判断游戏是否已经到达终局。
效用函数 Utility ( s , player ) \text{Utility}(s, \text{player}) Utility ( s , player ) ,当游戏结束时,用于评估当前终止状态的 player 最终得分或收益。
零和意味着:Utility ( s , MAX ) + Utility ( s , MIN ) = 0 \text{Utility}(s, \text{MAX}) + \text{Utility}(s, \text{MIN}) = 0 Utility ( s , MAX ) + Utility ( s , MIN ) = 0 。
1.2. Minimax 原理
Minimax 算法是一个悲观算法,其假设对手非常强大,招招致命,为了让自己死得不太难看,选择能够最优化最坏结果的策略。
输入:当前状态 s s s ,游戏规则 rule。
输出:下一步的行动 a a a ,该行动能够让我的最低收益最大化,选择其他行动的最坏结果不可能比这个好。
操作:
从 s s s ,根据 rule 推导出全部的对局可能(博弈树)。
从叶子节点往上,算出所有节点的 Minimax 值。
return arg max a MinimaxValue ( Result ( s , a ) ) \arg\max_a \text{MinimaxValue}(\text{Result}(s, a)) arg max a MinimaxValue ( Result ( s , a ) ) 。
MinimaxValue 计算方式:
叶子节点:其效用值就是 Minimax 值。
Max 节点:取子节点中的最大值作为 Minimax 值。
Min 节点:取子节点中的最小值作为 Minimax 值。
1.3. Minimax 特性
完备性 :如果博弈树是有限的,该算法是完备的。
最优性 :当对手采用最优策略时,该算法保证能找到最优解。
时间复杂度 :O ( b m ) O(b^m) O ( b m ) ,其中 b b b 是分支因子,m m m 是树的最大深度。
空间复杂度 :因为该算法基于深度优先探索,空间复杂度为 O ( b m ) O(bm) O ( b m ) 。
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 返回值}) α = max ( α , Min 返回值 ) ,比 α \alpha α 大就更新。
Min:β = min ( β , Max 返回值 ) \beta = \min(\beta, \text{Max 返回值}) β = min ( β , Max 返回值 ) ,比 β \beta β 小就更新。
剪枝:
一句话:当在一个节点得到子节点返回值 v v v 并更新后,若 α ≥ β \alpha \geq \beta α ≥ β ,该节点不再探索后续子节点,也不向父节点返回值。
两句话:
MAX 节点:若当前值 v ≥ β v \geq \beta v ≥ β ,剪掉剩余子节点。
MIN 节点:若当前值 v ≤ α v \leq \alpha v ≤ α ,剪掉剩余子节点。
2.2. Alpha-Beta 手算规则
从左到右搜索时:
根节点:α = − ∞ , β = + ∞ \alpha = -\infty,\; \beta = +\infty α = − ∞ , β = + ∞ 。
下传当前 ( α , β ) (\alpha, \beta) ( α , β ) 窗口。
从左到右依次看子节点的值 v v v 。
MAX 节点不断更新 α = max ( α , v ) \alpha = \max(\alpha, v) α = max ( α , v ) 。
MIN 节点不断更新 β = min ( β , v ) \beta = \min(\beta, v) β = min ( β , v ) 。
一旦 α ≥ β \alpha \geq \beta α ≥ β ,当前节点后面没看的兄弟分支全部剪掉,该节点不用返回值,返回也不会导致父节点更新。
若没有发生剪枝,照常返回 Minimax 值,更新父节点的 α \alpha α 或 β \beta β 。
答题时要注意:
看清当前节点是 Max 还是 Min,不要更新错了,尤其是回传的时候对父节点的更新。
哪个节点处剪枝。
被剪掉的是哪些叶子或子树。
已经访问过的节点不能算剪枝。
2.3. 正确性分析
若在 MIN 节点发现 v ≤ α v \leq \alpha v ≤ α :
MAX 的祖先已经有一个选择能保证至少 α \alpha α 。
当前 MIN 节点最终值只会更小或相等。
MAX 永远不会选择这条路,所以剩余子节点无关。
若在 MAX 节点发现 v ≥ β v \geq \beta v ≥ β :
MIN 的祖先已经有一个选择能把结果压到至多 β \beta β 。
当前 MAX 节点最终值只会更大或相等。
MIN 永远不会允许这条路,所以剩余子节点无关。
2.4. 剪枝效率
最坏排序:几乎不剪,O ( b m ) O(b^m) O ( b m ) 。
最优排序:约 O ( b m / 2 ) O(b^{m/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 ) = 3 X 2 ( s ) + X 1 ( s ) − ( 3 O 2 ( s ) + O 1 ( s ) ) \text{Eval}(s) = 3X_2(s) + X_1(s) - (3O_2(s) + O_1(s)) Eval ( s ) = 3 X 2 ( s ) + X 1 ( s ) − ( 3 O 2 ( s ) + O 1 ( s ) )
其中:
X n X_n X n :恰好有 n n n 个 X 且无 O 的行/列/对角线数。
O n O_n O n :恰好有 n n n 个 O 且无 X 的行/列/对角线数。
3.3. Horizon Effect 水平线效应
深度限制可能把必然发生的坏事推到搜索边界之外,导致评估函数看不见。
缓解:
quiescence search:在局面剧烈变化时继续搜到稳定局面。
iterative deepening:逐步加深并保留当前最好结果。
3.4. 随机博弈 Expectiminimax
若有随机事件,如掷骰子,加入 chance 节点。递归:
MAX 节点取最大。
MIN 节点取最小。
Chance 节点取期望:∑ i P ( i ) ∗ value ( child i ) \sum_i P(i) * \text{value}(\text{child}_i) ∑ i P ( i ) ∗ value ( child i ) 。
低概率考,记住 chance 节点不是 max/min,而是加权平均。
3.5. 不完全信息博弈
如牌类游戏,玩家不知道完整状态。核心概念:
belief state:对可能真实状态的概率分布。
information set:玩家无法区分的一组状态。
本课只需概念了解。
3.6. MCTS 蒙特卡洛树搜索(不考)
来源:隔壁班 MCTS.pdf。考试重点写"蒙特卡洛不考",这里只保留概念。
MCTS 四步:
Selection :从根按策略选择到叶子。
Expansion :扩展一个新节点。
Simulation/Rollout :随机模拟到终局。
Backpropagation :把结果回传更新访问次数和价值。
常用 UCB/UCT 平衡探索与利用:UCT = exploitation + exploration \text{UCT} = \text{exploitation} + \text{exploration} UCT = exploitation + 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 v ≥ β 可剪;MIN 节点 v ≤ α v \leq \alpha v ≤ α 可剪。
Alpha-beta 不改变答案,只减少展开。
深度限制时叶子值是评估值,不一定是真实终局值。
概率与贝叶斯网络大抄
主线 :现实中的智能体不能只靠"真/假/未知"行动;概率给出信念程度,完整联合分布原则上能回答所有概率查询,但规模太大;独立性和条件独立性压缩联合分布;贝叶斯网络把条件独立结构画成图,并用枚举、变量消元、朴素贝叶斯等方法做推理和分类。
目录 :0. 一句话总图 · 1. 为什么 AI 需要概率 · 3. 概率分布 · 4. 条件概率/乘法/链式 · 5. 用完整联合分布做推理 · 7. 条件独立 · 8. 贝叶斯公式 · 9. 多证据贝叶斯和朴素贝叶斯 · 10. 概率分布从哪里来 · 11. 贝叶斯网络 · 12. d-separation · 13. 如何构建贝叶斯网络 · 14. 精确推理 · 15. 按图写联合分布和按图判独立 · 16. 朴素贝叶斯作为贝叶斯网络 · 17. 考试速查 · 18. 常见坑 · 19. 最后一页压缩版
0. 一句话总图
逻辑推理问的是:K B ⊨ α KB \models \alpha K B ⊨ α
概率推理问的是:P ( α ∣ e ) P(\alpha \mid e) P ( α ∣ e )
也就是"已经看到证据 e e e 后,结论 α \alpha α 有多可信"。第 13 章先给概率语言本身,第 14 章再给一种紧凑表示概率分布的图模型:贝叶斯网络。
这两章的知识可以串成一条链:
不确定性来自部分可观察、传感器噪声、行动结果不确定、模型太复杂、惰性和无知。
概率把"不确定的命题"变成 [ 0 , 1 ] [0, 1] [ 0 , 1 ] 中的信念程度。
完整联合分布能回答一切查询,但对 n n n 个布尔变量需要指数规模。
边缘化、条件化、乘法规则、链式法则是概率推理的代数工具。
独立和条件独立能把巨大联合分布分解成小块。
贝叶斯网络用有向无环图表达条件独立,用每个节点的 CPT 定义完整联合分布。
查询时用枚举或变量消元把隐藏变量求和消去,最后归一化。
朴素贝叶斯是最简单的贝叶斯网络之一,用强条件独立假设换取高效分类。
1. 为什么 AI 需要概率
1.1 逻辑不够用的地方
现实智能体很少能完全确定世界状态。例如出发去机场时,智能体要考虑路况、其他司机、天气、轮胎、交通报告和许多无法完整建模的因素。
如果只用逻辑规则,容易出现两个极端:
规则太强,会推出错误结论,例如"提前 25 分钟出发一定能赶上飞机"。
规则太弱,必须列出所有例外,最后得到难以行动的条件句,例如"如果桥上没事故、不下雨、轮胎没坏、路上不堵……那么可以赶上"。
概率推理把这种问题改写成:
P ( OnTime ∣ Leave25 , e ) = 0.04 P(\text{OnTime} \mid \text{Leave25}, e) = 0.04
P ( OnTime ∣ Leave25 , e ) = 0 . 0 4
这句话不保证一定到达,也不说完全不知道,而是给出在当前证据 e e e 下的信念程度。
课件开头用三个任务提醒你:手写数字识别、文本分类、图像分割本质上都不是"确定地套规则",而是在证据不完整、特征有噪声、类别边界不绝对清楚时做判断。概率模型就是给这些分类判断提供统一语言。
1.2 不确定性的来源
课件把不确定性来源分成几类:
真实随机性:有些过程本身就是概率性的,例如掷骰子、抛硬币。
惰性:严格列举所有例外太费劲,规则太大也难以使用。
理论无知:领域没有完整一致的理论,例如医学诊断。
实践无知:理论上相关因素存在,但当前个案没有收集到所有信息。
传感器噪声:观测结果不一定等于真实状态。
行动结果不确定:同一行动在不同隐藏状态下可能产生不同结果。
所以概率不是"世界必然随机"的同义词,它也可以表示智能体因为信息不足而产生的主观信念。
1.3 频率主义与贝叶斯观点
频率主义把概率看作长期重复试验中的极限频率:
P ( A ) = lim N → ∞ n A N P(A) = \lim_{N \to \infty} \frac{n_A}{N}
P ( A ) = N → ∞ lim N n A
其中 n A n_A n A 是事件 A A A 在 N N N 次机会中发生的次数。这个解释适合抛硬币、抽样检测等可重复实验。
贝叶斯观点把概率看作在不完整知识下对事件可信度的度量。例如"第三次世界大战发生的概率"无法靠大量重复试验定义,但仍可以讨论给定证据下的主观可信度。
AI 中常用贝叶斯观点,因为智能体面对的往往是单次决策、单个病人、单封邮件或单张图片。
1.4 概率和效用分工
概率回答"我相信什么":P ( ArriveOnTime ∣ a , e ) P(\text{ArriveOnTime} \mid a, e) P ( ArriveOnTime ∣ a , e )
效用回答"我偏好什么":U ( arrive, wait, miss ) U(\text{arrive, wait, miss}) U ( arrive, wait, miss )
决策论把二者合起来:
Decision theory = Probability theory + Utility theory \text{Decision theory} = \text{Probability theory} + \text{Utility theory}
Decision theory = Probability theory + Utility theory
如果提前 1440 分钟出发几乎一定赶上飞机,但要在机场过夜,是否值得取决于效用,而不只取决于概率。
3. 概率分布
3.1 先验概率和概率分布
先验概率是在没有新证据时对命题的信念:P ( Cavity = true ) = 0.1 P(\text{Cavity} = \text{true}) = 0.1 P ( Cavity = 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
P ( Weather ) = ⟨ 0 . 7 2 , 0 . 1 0 , 0 . 0 8 , 0 . 1 0 ⟩
它是归一化的:∑ w P ( Weather = w ) = 1 \sum_w P(\text{Weather} = w) = 1 ∑ w P ( Weather = w ) = 1 。
3.2 完整联合分布
完整联合分布给出一组随机变量每种完整赋值的概率。若变量为 X 1 , … , X n X_1, \dots, X_n X 1 , … , X n ,完整联合分布就是:
P ( X 1 , … , X n ) P(X_1, \dots, X_n)
P ( X 1 , … , X n )
对 n n n 个布尔变量,需要 2 n 2^n 2 n 个原子事件概率;因为总和必须为 1,独立参数数目是:2 n − 1 2^n - 1 2 n − 1 。
完整联合分布的优点是原则上能回答所有查询。缺点也非常致命:变量稍多就无法存储、无法人工填写、无法高效求和。
3.3 边缘分布和边缘化
边缘化就是把不关心的变量求和消掉。若有联合分布 P ( A , B ) P(A, B) P ( A , B ) ,则:
P ( A ) = ∑ b P ( A , b ) P(A) = \sum_b P(A, b)
P ( A ) = b ∑ P ( A , b )
若变量更多:
P ( A ) = ∑ b ∑ c P ( A , b , c ) P(A) = \sum_b \sum_c P(A, b, c)
P ( A ) = b ∑ c ∑ P ( A , b , c )
更一般地,对命题 φ \varphi φ :
P ( φ ) = ∑ ω : ω ⊨ φ P ( ω ) P(\varphi) = \sum_{\omega:\, \omega \models \varphi} P(\omega)
P ( φ ) = ω : ω ⊨ φ ∑ P ( ω )
其中 ω \omega ω 是原子事件。
4. 条件概率、乘法规则和链式法则
4.1 条件概率
条件概率表示在证据 B B B 已知为真后,对 A A A 的信念:
P ( A ∣ B ) = P ( A , B ) P ( B ) P(A \mid B) = \frac{P(A, B)}{P(B)}
P ( A ∣ B ) = P ( B ) P ( A , B )
前提是:P ( B ) > 0 P(B) > 0 P ( B ) > 0 。条件概率也满足概率公理。例如 0 ≤ P ( A ∣ e ) ≤ 1 0 \leq P(A \mid e) \leq 1 0 ≤ P ( A ∣ e ) ≤ 1 。对变量 A A A 的所有取值 a 1 , … , a k a_1, \dots, a_k a 1 , … , a k :∑ i = 1 k P ( A = a i ∣ e ) = 1 \sum_{i=1}^{k} P(A = a_i \mid e) = 1 ∑ i = 1 k P ( A = a i ∣ e ) = 1 。布尔变量有:P ( ¬ a ∣ e ) = 1 − P ( a ∣ e ) P(\lnot a \mid e) = 1 - P(a \mid e) P ( ¬ a ∣ e ) = 1 − P ( a ∣ 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 ( A ∣ 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 ∣ 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) P ( A ∣ B ) P ( B ) = P ( B ∣ A ) P ( A ) 。
4.3 链式法则
链式法则由乘法规则反复使用得到:
P ( X 1 , … , X n ) = ∏ i = 1 n P ( X i ∣ X 1 , … , X i − 1 ) P(X_1, \dots, X_n) = \prod_{i=1}^{n} P(X_i \mid X_1, \dots, X_{i-1})
P ( X 1 , … , X n ) = i = 1 ∏ n P ( X i ∣ X 1 , … , 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 ( A ∣ B , C ) P ( B ∣ 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 , B , C ) = P ( C ∣ A , B ) P ( B ∣ A ) P ( A ) 。
没有独立性假设时,不能随便把联合概率拆成 P ( A ) P ( B ) P ( C ) P(A)P(B)P(C) P ( A ) P ( B ) P ( C ) 。但链式法则永远成立,只是条件项可能很复杂。
5. 用完整联合分布做推理
5.1 枚举推理思想
如果手里有完整联合分布,任何查询都可以通过枚举原子事件来做。查询 P ( Y ∣ E = e ) P(Y \mid E = e) P ( Y ∣ E = e ) ,设隐藏变量为 H = X − Y − E H = X - Y - E H = 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 ) = α P ( Y , E = e )
其中:
P ( Y , E = e ) = ∑ h P ( Y , E = e , H = h ) P(Y, E = e) = \sum_h P(Y, E = e, H = h)
P ( Y , E = e ) = 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 ) = α P ( Cavity , t )
若求和得到 P ( Cavity , t ) = ⟨ 0.12 , 0.08 ⟩ P(\text{Cavity}, t) = \langle 0.12, 0.08 \rangle P ( Cavity , t ) = ⟨ 0 . 1 2 , 0 . 0 8 ⟩ ,则归一化:
α = 1 0.12 + 0.08 = 5 \alpha = \frac{1}{0.12 + 0.08} = 5
α = 0 . 1 2 + 0 . 0 8 1 = 5
所以:P ( Cavity ∣ t ) = ⟨ 0.6 , 0.4 ⟩ P(\text{Cavity} \mid t) = \langle 0.6, 0.4 \rangle P ( Cavity ∣ t ) = ⟨ 0 . 6 , 0 . 4 ⟩ 。
考试中常写成 Q ( x ) = P ( x , e ) 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')}
P ( x ∣ e ) = ∑ x ′ Q ( x ′ ) Q ( x )
5.3 完整联合分布推理的问题
若最大变量取值数为 d d d ,变量数为 n n n ,枚举完整联合分布最坏时间复杂度为 O ( d n ) O(d^n) O ( d n ) ,存储完整联合分布也需要 O ( d n ) O(d^n) O ( d n ) 。
此外还要问:这些 O ( d n ) O(d^n) O ( d n ) 个概率从哪里来?这直接引出独立性、条件独立性和贝叶斯网络。
7. 条件独立
7.1 条件独立的定义
A A A 和 B B B 在给定 C C C 后条件独立,记为 A ⊥ B ∣ C A \perp B \mid C A ⊥ B ∣ C ,等价写法:
P ( A ∣ B , C ) = P ( A ∣ C ) P(A \mid B, C) = P(A \mid C)
P ( A ∣ B , C ) = P ( A ∣ C )
P ( B ∣ A , C ) = P ( B ∣ C ) P(B \mid A, C) = P(B \mid C)
P ( B ∣ A , C ) = P ( B ∣ C )
P ( A , B ∣ C ) = P ( A ∣ C ) P ( B ∣ C ) P(A, B \mid C) = P(A \mid C)P(B \mid C)
P ( A , B ∣ C ) = P ( A ∣ C ) P ( B ∣ C )
含义:在已经知道 C C C 后,B B B 不再给 A A A 提供额外信息。
7.2 条件独立不等于独立
报警器例子:
JohnCalls:John 打电话。
MaryCalls:Mary 打电话。
Alarm:警报响。
不观测警报时,John 打电话会提高 Mary 打电话的概率,因为它暗示警报可能响了:
P ( MaryCalls ∣ JohnCalls ) ≠ P ( MaryCalls ) P(\text{MaryCalls} \mid \text{JohnCalls}) \neq P(\text{MaryCalls})
P ( MaryCalls ∣ JohnCalls ) = P ( MaryCalls )
但若已经知道警报状态,John 是否打电话不再影响 Mary 是否打电话:
P ( MaryCalls ∣ Alarm, JohnCalls ) = P ( MaryCalls ∣ Alarm ) P(\text{MaryCalls} \mid \text{Alarm, JohnCalls}) = P(\text{MaryCalls} \mid \text{Alarm})
P ( MaryCalls ∣ Alarm, JohnCalls ) = P ( MaryCalls ∣ 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 ( A ∣ B ) P ( B ) = P ( B ∣ 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)}
P ( A ∣ B ) = P ( B ) P ( B ∣ A ) P ( A )
若把假设写成 H H H ,证据写成 e e e :
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 ∣ e ) = P ( e ) P ( e ∣ H ) P ( H )
其中:
P ( H ) P(H) P ( H ) 是先验。
P ( e ∣ H ) P(e \mid H) P ( e ∣ H ) 是似然。
P ( H ∣ e ) P(H \mid e) P ( H ∣ e ) 是后验。
P ( e ) P(e) P ( e ) 是证据概率,也是归一化分母。
常用归一化写法:P ( H ∣ e ) = α P ( e ∣ H ) P ( H ) P(H \mid e) = \alpha\, P(e \mid H)P(H) P ( H ∣ e ) = α P ( e ∣ H ) P ( H ) 。
8.2 为什么贝叶斯公式重要
很多领域中,因果概率容易给出,诊断概率才是我们想问的。
因果方向:P ( Effect ∣ Cause ) P(\text{Effect} \mid \text{Cause}) P ( Effect ∣ Cause )
诊断方向:P ( Cause ∣ Effect ) P(\text{Cause} \mid \text{Effect}) P ( Cause ∣ 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})}
P ( Cause ∣ Effect ) = P ( Effect ) P ( Effect ∣ Cause ) P ( Cause )
这也是为什么很多 AI 系统(如语音识别和机器翻译)会把难求的后验转为更容易估计的似然和先验。
8.3 全概率公式展开分母
若 B 1 , … , B k B_1, \dots, B_k B 1 , … , B k 构成互斥完备划分,则:
P ( A ) = ∑ i P ( A ∣ B i ) P ( B i ) P(A) = \sum_i P(A \mid B_i)P(B_i)
P ( A ) = i ∑ P ( A ∣ 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) P ( A ) = P ( A ∣ B ) P ( B ) + P ( A ∣ ¬ B ) P ( ¬ B ) 。
贝叶斯题里分母通常就是用全概率公式展开。
9. 多证据贝叶斯和朴素贝叶斯
9.1 多证据贝叶斯
若一个原因 C C C 产生多个证据 E 1 , … , E n E_1, \dots, E_n E 1 , … , E n ,贝叶斯公式给出:
P ( C ∣ E 1 , … , E n ) = α P ( E 1 , … , E n ∣ C ) P ( C ) P(C \mid E_1, \dots, E_n) = \alpha\, P(E_1, \dots, E_n \mid C)P(C)
P ( C ∣ E 1 , … , E n ) = α P ( E 1 , … , E n ∣ C ) P ( C )
如果给定原因 C C C 后,各证据条件独立 E i ⊥ E j ∣ C E_i \perp E_j \mid C E i ⊥ E j ∣ C ,则:
P ( E 1 , … , E n ∣ C ) = ∏ i P ( E i ∣ C ) P(E_1, \dots, E_n \mid C) = \prod_i P(E_i \mid C)
P ( E 1 , … , E n ∣ C ) = i ∏ P ( E i ∣ C )
于是:
P ( C ∣ E 1 , … , E n ) = α P ( C ) ∏ i P ( E i ∣ C ) P(C \mid E_1, \dots, E_n) = \alpha\, P(C) \prod_i P(E_i \mid C)
P ( C ∣ E 1 , … , E n ) = α P ( C ) i ∏ P ( E i ∣ C )
这就是朴素贝叶斯的核心。
9.2 朴素贝叶斯假设
朴素贝叶斯假设是:给定类别 Y Y Y 后,所有属性 X 1 , … , X n X_1, \dots, X_n X 1 , … , X n 条件独立。
P ( X 1 , … , X n ∣ Y ) = ∏ i P ( X i ∣ Y ) P(X_1, \dots, X_n \mid Y) = \prod_i P(X_i \mid Y)
P ( X 1 , … , X n ∣ Y ) = i ∏ P ( X i ∣ Y )
分类时:
y ^ = arg max y P ( y ∣ x 1 , … , x n ) \hat{y} = \arg\max_y P(y \mid x_1, \dots, x_n)
y ^ = arg y max P ( y ∣ x 1 , … , x n )
由贝叶斯公式:
y ^ = arg max y P ( y ) ∏ i P ( x i ∣ y ) \hat{y} = \arg\max_y P(y) \prod_i P(x_i \mid y)
y ^ = arg y max P ( y ) i ∏ P ( x i ∣ y )
注意:朴素贝叶斯不是说特征无条件独立,而是说它们在给定类别后条件独立。
9.3 文本分类
文本分类中:
C C C :文档类别。
W i W_i W i :第 i i i 个词是否出现。
模型参数:P ( C = c ) P(C = c) P ( C = c ) 、P ( W i = true ∣ C = c ) P(W_i = \text{true} \mid C = c) P ( W i = true ∣ C = c ) 。
训练时:
P ( C = c ) = # { 类别为 c 的文档 } # { 全部文档 } P(C = c) = \frac{\#\{\text{类别为 } c \text{ 的文档}\}}{\#\{\text{全部文档}\}}
P ( C = c ) = # { 全部文档 } # { 类别为 c 的文档 }
P ( W i = true ∣ C = c ) = # { 类别 c 中包含词 i 的文档 } # { 类别为 c 的文档 } P(W_i = \text{true} \mid C = c) = \frac{\#\{\text{类别 } c \text{ 中包含词 } i \text{ 的文档}\}}{\#\{\text{类别为 } c \text{ 的文档}\}}
P ( W i = true ∣ C = c ) = # { 类别为 c 的文档 } # { 类别 c 中包含词 i 的文档 }
分类新文档:
score ( c ) = P ( C = c ) ∏ i P ( W i = w i ∣ C = c ) \text{score}(c) = P(C = c) \prod_i P(W_i = w_i \mid C = c)
score ( c ) = P ( C = c ) i ∏ P ( W i = w i ∣ C = c )
为避免连乘下溢,实际常取对数:
log score ( c ) = log P ( C = c ) + ∑ i log P ( W i = w i ∣ C = c ) \log \text{score}(c) = \log P(C = c) + \sum_i \log P(W_i = w_i \mid C = c)
log score ( c ) = log P ( C = c ) + i ∑ log P ( W i = w i ∣ C = c )
需要平滑,否则某个词从未出现会让整个乘积变成 0。最常见是拉普拉斯平滑:
P ( W i = true ∣ C = c ) = N i c + 1 N c + 2 P(W_i = \text{true} \mid C = c) = \frac{N_{ic} + 1}{N_c + 2}
P ( W i = true ∣ C = c ) = N c + 2 N i c + 1
其中 N i c N_{ic} N i c 是类别 c c c 中包含词 i i i 的文档数,N c N_c N c 是类别 c c c 的文档数,布尔词特征有两个取值。
9.4 数字识别例子
手写数字识别可以把每个像素位置作为一个特征:F i j ∈ { on, off } F_{ij} \in \{\text{on, off}\} F i j ∈ { on, off } ,类别是数字 D ∈ { 0 , 1 , … , 9 } D \in \{0, 1, \dots, 9\} D ∈ { 0 , 1 , … , 9 } 。
朴素贝叶斯模型:
P ( D , F 11 , F 12 , … ) = P ( D ) ∏ i , j P ( F i j ∣ D ) P(D, F_{11}, F_{12}, \dots) = P(D) \prod_{i,j} P(F_{ij} \mid D)
P ( D , F 1 1 , F 1 2 , … ) = P ( D ) i , j ∏ P ( F i j ∣ D )
要学习的是类别先验 P ( D ) P(D) P ( D ) 和每个数字下每个像素亮灭的条件概率表。它忽略了相邻像素之间的相关性,但换来了非常简单的学习和推理。
10. 概率分布从哪里来
10.1 三种来源
课件给了三种来源:
专家给出 :例如医生、工程师或领域专家直接估计条件概率。
简单概率事实加代数推导 :用乘法规则、链式法则、独立假设组合出联合分布。
从数据中学习 :机器学习的很大一部分就是学习概率模型的参数或结构。
专家估计并不简单,例如问"冷天时下雨概率是多少"就可能很难稳定回答。
10.2 最大似然估计
估计一个离散随机变量 X X X 的分布时,最大似然估计使用经验频率:
P ^ ( X = x ) = N x N \hat{P}(X = x) = \frac{N_x}{N}
P ^ ( X = x ) = N N x
其中 N x N_x N x 是观测到 X = x X = x X = x 的次数,N N N 是总观测次数。这个估计最大化观测数据出现的似然:L ( θ ) = P ( D ∣ θ ) L(\theta) = P(D \mid \theta) L ( θ ) = P ( D ∣ θ ) 。
10.3 最大似然的问题和先验
如果只抛一次硬币且结果为正面,最大似然会给 P ^ ( Heads ) = 1 \hat{P}(\text{Heads}) = 1 P ^ ( Heads ) = 1 ,这显然过于激进。课件强调一个基本思想:
证据很少时,估计应更多受先验影响。
证据很多时,估计应更多听数据。
这也是平滑和贝叶斯参数估计的动机。朴素贝叶斯中文本分类必须加平滑,就是为了避免小样本下把未见事件估为 0。
11. 贝叶斯网络
11.1 图模型是什么
概率图模型把概率分布和图论结合起来:
节点表示随机变量或变量组。
边表示变量之间的概率关系。
图结构帮助人理解模型,也帮助算法设计高效推理。图模型的价值:
可视化复杂概率模型结构。
从图中读出条件独立性质。
把复杂推理和学习变成图上的操作。
有向图模型包括贝叶斯网络;无向图模型包括马尔可夫随机场。贝叶斯网络更常用于表示因果关系,马尔可夫随机场更适合表示软约束。
11.2 贝叶斯网络的语法
贝叶斯网络是一个有向无环图,即 DAG。它包含:
一组节点,每个节点对应一个随机变量。
有向边,A → B A \to B A → B 表示 A A A 直接影响 B B B ,A A A 是 B B B 的父亲。
如果两个节点之间没有直接的边相连,这意味着它们在给定某些其他变量的条件下是条件独立的。
每个节点有一个条件概率分布:P ( X i ∣ Parents ( X i ) ) P(X_i \mid \text{Parents}(X_i)) P ( X i ∣ Parents ( X i ) ) 。注意是 P ( X i ∣ Parents ( X i ) ) P(X_i \mid \text{Parents}(X_i)) P ( X i ∣ Parents ( X i ) ) 即所有父亲的组合条件概率。离散情形中,这个条件概率分布通常写成 CPT(条件概率表),若没有父亲,就是先验概率。
11.3 贝叶斯网络的全局语义
贝叶斯网络的拓扑结构和所有 CPT 一起定义完整联合分布:
P ( X 1 , … , X n ) = ∏ i P ( X i ∣ Parents ( X i ) ) P(X_1, \dots, X_n) = \prod_i P(X_i \mid \text{Parents}(X_i))
P ( X 1 , … , X n ) = i ∏ P ( X i ∣ Parents ( X i ) )
这是贝叶斯网络最常用公式。题目给图和 CPT,要求写联合概率时,先按每个节点的父节点列出这一乘积。
例:若图为 A → C ← B , C → D A \to C \leftarrow B,\; C \to D A → C ← B , C → 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 ) P ( B ) P ( C ∣ A , B ) P ( D ∣ C )
若求某个具体原子事件,如 P ( a , ¬ b , c , d ) P(a, \lnot b, c, d) P ( a , ¬ b , c , d ) ,就把对应真假值代入每个 CPT;遇到假值要用补概率:P ( ¬ X ∣ u ) = 1 − P ( X ∣ u ) P(\lnot X \mid u) = 1 - P(X \mid u) P ( ¬ X ∣ u ) = 1 − P ( X ∣ u ) 。
11.4 参数量优势
完整联合分布对 n n n 个布尔变量需要 2 n − 1 2^n - 1 2 n − 1 个独立参数。
若每个布尔节点最多有 k k k 个布尔父节点,每个 CPT 有 2 k 2^k 2 k 行,每行只需一个参数:O ( n ⋅ 2 k ) O(n \cdot 2^k) O ( n ⋅ 2 k ) 。如果 k k k 很小,贝叶斯网络随变量数近似线性增长。
课件的报警器网络有五个布尔变量:Burglary、Earthquake、Alarm、JohnCalls、MaryCalls。完整联合分布需要 2 5 − 1 = 31 2^5 - 1 = 31 2 5 − 1 = 3 1 个独立参数。按因果网络:
Burglary → Alarm
Earthquake → Alarm
Alarm → JohnCalls
Alarm → MaryCalls
参数数目为:1 + 1 + 4 + 2 + 2 = 10 1 + 1 + 4 + 2 + 2 = 10 1 + 1 + 4 + 2 + 2 = 1 0 。这就是结构化表示的威力。
11.5 贝叶斯网络的局部语义
局部语义:给定父节点后,一个节点与它的所有非后代节点条件独立。若节点为 X i X_i X i ,父节点为 Parents ( X i ) \text{Parents}(X_i) Parents ( X i ) ,非后代集合为 NonDescendants ( X i ) \text{NonDescendants}(X_i) NonDescendants ( X i ) ,则:
X i ⊥ NonDescendants ( X i ) ∣ Parents ( X i ) X_i \perp \text{NonDescendants}(X_i) \mid \text{Parents}(X_i)
X i ⊥ NonDescendants ( X i ) ∣ Parents ( X i )
课件结论:local semantics ⟺ global semantics。也就是说,局部条件独立断言和全联合分布的乘积分解是等价的。
12. 贝叶斯网络节点独立性判断(d-separation)
12.1 链式结构
结构:X → Y → Z X \to Y \to Z X → Y → Z
不观测 Y Y Y 时,X X X 可能影响 Z Z Z ,二者通常相关。给定 Y Y Y 后,路径被阻断:X ⊥ Z ∣ Y X \perp Z \mid Y X ⊥ Z ∣ Y 。
直觉:如果已经知道中间状态 Y Y Y ,更早的原因 X X X 对更晚结果 Z Z Z 不再提供额外信息。
12.2 共同原因结构
结构:X ← Y → Z X \leftarrow Y \to Z X ← Y → Z
Y Y Y 是 X X X 和 Z Z Z 的共同原因。不观测 Y Y Y 时,X X X 和 Z Z Z 通常相关;给定 Y Y Y 后,路径被阻断:X ⊥ Z ∣ Y X \perp Z \mid Y X ⊥ Z ∣ Y 。
直觉:如果已经知道共同原因,两个结果之间的相关性被解释掉。
12.3 共同结果结构
结构:X → Y ← Z X \to Y \leftarrow Z X → Y ← Z
Y Y Y 是 collider,也叫共同结果或 V-structure。
不观测 Y Y Y 及其后代时,路径阻断:X ⊥ Z X \perp Z X ⊥ Z 。
但若观测 Y Y Y 或 Y Y Y 的后代,路径被打开:X ⊥̸ Z ∣ Y X \not\perp Z \mid Y X ⊥ Z ∣ Y 。
这叫 explaining away。例子:下雨和球赛都会导致交通堵塞;若看到堵车,知道有球赛会降低"下雨导致堵车"的后验概率。
12.4 d-separation 判断步骤
判断 A A A 与 B B B 在给定证据集合 E E E 后是否条件独立:
把有向图当成无向图,列出 A A A 到 B B B 的所有路径。
对每条路径检查是否被阻断。
链式节点和共同原因节点若被观测,则阻断路径。
collider 节点若自身及其后代都未被观测,则阻断路径。
只有所有路径都被阻断,才有条件独立。
考试记忆:
链和 fork:观测中间点会堵住。
collider:默认堵住,观测它或它的后代会打开。
12.5 马尔可夫毯
一个节点的马尔可夫毯包括:父节点;子节点;子节点的其他父节点。
给定马尔可夫毯后,该节点与网络中其他所有节点条件独立:
X ⊥ rest ∣ M B ( X ) X \perp \text{rest} \mid MB(X)
X ⊥ rest ∣ M B ( X )
这是贝叶斯网络中局部推理和采样算法的重要概念;若考试只考概念,记清楚"父、子、子之父"。
13. 如何构建贝叶斯网络
13.1 一般构建算法
课件给出构建网络的方法:
选择变量顺序:X 1 , … , X n X_1, \dots, X_n X 1 , … , X n 。
对 i = 1 i = 1 i = 1 到 n n n ,把 X i X_i X i 加入网络。
从更早变量 X 1 , … , X i − 1 X_1, \dots, X_{i-1} X 1 , … , X i − 1 中选择父节点,使:
P ( X i ∣ Parents ( X i ) ) = P ( X i ∣ X 1 , … , X i − 1 ) P(X_i \mid \text{Parents}(X_i)) = P(X_i \mid X_1, \dots, X_{i-1})
P ( X i ∣ Parents ( X i ) ) = P ( X i ∣ X 1 , … , X i − 1 )
尽量选择满足这个条件的最小父集。
这样做保证:
P ( X 1 , … , X n ) = ∏ i P ( X i ∣ X 1 , … , X i − 1 ) = ∏ i P ( X i ∣ Parents ( X i ) ) 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))
P ( X 1 , … , X n ) = i ∏ P ( X i ∣ X 1 , … , X i − 1 ) = i ∏ P ( X i ∣ Parents ( X i ) )
第一步来自链式法则,第二步来自父节点选择。
13.2 为什么因果顺序通常更好
若网络反映真实因果模式,通常:节点父节点更少;人更容易判断条件概率;专家更容易给出 CPT;网络更紧凑,推理可能更高效。
报警器例子用因果方向只需 10 个参数。如果采用非因果顺序(如先加 MaryCalls、再加 JohnCalls、再加 Alarm 等),判断条件独立会更难,参数可能增加到 13 个。
13.3 箭头不一定等于因果
贝叶斯网络的箭头真正编码的是条件独立结构,不一定是世界中的真实因果关系。如果模型里缺少关键变量,或者领域本身没有清晰因果结构,箭头可能只是在表达相关性。正确态度是:
因果方向常常更自然、更紧凑。
但 BN 的数学语义是联合分布分解和条件独立,不是因果干预语义。
13.4 望远镜作业题
变量:
N N N :真实恒星数。
F 1 , F 2 F_1, F_2 F 1 , F 2 :两个望远镜是否失焦。
M 1 , M 2 M_1, M_2 M 1 , M 2 :两次测量结果。
合理因果结构:N → M 1 , F 1 → M 1 , N → M 2 , F 2 → M 2 N \to M_1,\; F_1 \to M_1,\; N \to M_2,\; F_2 \to M_2 N → M 1 , F 1 → M 1 , N → M 2 , F 2 → M 2 。
真实恒星数影响观测结果,望远镜状态也影响观测结果。不要把观测值画成真实恒星数的原因。给定 N , F 1 , F 2 N, F_1, F_2 N , F 1 , F 2 后:M 1 ⊥ M 2 ∣ N , F 1 , F 2 M_1 \perp M_2 \mid N, F_1, F_2 M 1 ⊥ M 2 ∣ N , F 1 , F 2 。若只给定 N N N ,还要看 F 1 F_1 F 1 和 F 2 F_2 F 2 是否独立以及图中是否有其他路径。
14. 贝叶斯网络中的概率计算
14.1 常见概率计算
简单查询:P ( X i ∣ E = e ) P(X_i \mid E = e) P ( X i ∣ 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 ( NoGas ∣ Gauge = empty, Lights = on, Starts = false ) 。
联合查询:P ( X i , X j ∣ E = e ) P(X_i, X_j \mid E = e) P ( X i , X j ∣ E = e ) ,可以分解为 P ( X i , X j ∣ E = e ) = P ( X i ∣ E = e ) P ( X j ∣ X i , 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 ( X i , X j ∣ E = e ) = P ( X i ∣ E = e ) P ( X j ∣ X i , E = e ) 。
决策网络还会加入效用信息,但仍需要概率推理来计算 P ( Outcome ∣ Action, Evidence ) P(\text{Outcome} \mid \text{Action, Evidence}) P ( Outcome ∣ Action, Evidence ) 。
14.2 用例
为了把概率计算讲清楚,下面都用同一个贝叶斯网络:A → C , B → C , C → D A \to C,\; B \to C,\; C \to D A → C , B → C , C → D ,其中 A , B A, B A , B 是根节点,C C C 的父节点是 A , B A, B A , B ,D D D 的父节点是 C C C 。这张图的联合分布分解为:
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 ) P ( B ) P ( C ∣ A , B ) P ( D ∣ C )
这一个式子是所有概率计算的起点。考试时不管问什么,第一步都应先写出这个联合分解,再决定哪些变量代入、哪些变量求和、是否需要归一化。
四类变量身份:
查询变量:题目最终要你求分布的变量,例如 A A A 。
证据变量:条件竖线右边已经观测到的变量,例如 d d d 。
隐藏变量:既不是查询,也不是证据,但网络里存在,必须求和消掉,例如求 P ( A ∣ d ) P(A \mid d) P ( A ∣ d ) 时的 B , C B, C B , C 。
被固定变量:在完整联合事件中已经给定取值的变量,例如 P ( a , ¬ b , c , d ) P(a, \lnot b, c, d) P ( a , ¬ b , c , d ) 中四个变量都被固定。
判断一道 BN 概率题怎么做,其实就是先给每个变量分身份。
14.3 第一类:完整联合概率怎么计算
完整联合概率指所有变量都给了具体取值,例如 P ( a , ¬ b , c , d ) P(a, \lnot b, c, d) P ( a , ¬ 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)
P ( a , ¬ b , c , d ) = P ( a ) P ( ¬ b ) P ( c ∣ a , ¬ b ) P ( d ∣ c )
如果 CPT 只给 P ( b ) P(b) P ( b ) ,没有直接给 P ( ¬ b ) P(\lnot b) P ( ¬ b ) ,就用补概率:P ( ¬ b ) = 1 − P ( b ) P(\lnot b) = 1 - P(b) P ( ¬ b ) = 1 − P ( b ) 。如果 CPT 只给 P ( c ∣ a , ¬ b ) P(c \mid a, \lnot b) P ( c ∣ a , ¬ b ) ,而题目要 P ( ¬ c ∣ a , ¬ b ) P(\lnot c \mid a, \lnot b) P ( ¬ c ∣ a , ¬ b ) ,也用补概率:P ( ¬ c ∣ a , ¬ b ) = 1 − P ( c ∣ a , ¬ b ) P(\lnot c \mid a, \lnot b) = 1 - P(c \mid a, \lnot b) P ( ¬ c ∣ a , ¬ b ) = 1 − P ( c ∣ a , ¬ b ) 。
考试口诀:完整联合概率就是"每个节点查一次表,根节点查先验,非根节点查父节点条件下的 CPT,然后全部相乘"。
14.4 第二类:边缘概率怎么计算
边缘概率是只问某些变量,不关心其他变量。例如 P ( d ) P(d) P ( d ) 。网络里还有 A , B , C A, B, C A , B , C ,它们没有出现在查询中,也不是证据,所以都是隐藏变量。完整写法是:
P ( d ) = ∑ a ∑ b ∑ c P ( a , b , c , d ) P(d) = \sum_a \sum_b \sum_c P(a, b, c, d)
P ( d ) = a ∑ b ∑ c ∑ P ( a , b , c , d )
再代入 BN 分解:
P ( d ) = ∑ a ∑ b ∑ c P ( 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)
P ( d ) = a ∑ b ∑ c ∑ P ( a ) P ( b ) P ( c ∣ a , b ) P ( d ∣ c )
如果 A , B , C A, B, C A , B , C 都是布尔变量,展开共有八种情况。这就是"边缘化":把没有问、没有观测的变量全部枚举并加起来。
14.5 第三类:部分联合概率怎么计算
部分联合概率给了一部分变量的取值,但没有竖线,例如 P ( a , d ) P(a, d) P ( a , d ) 。这里 A , D A, D A , D 被固定,B , C B, C B , C 没出现,所以 B , C B, C B , C 是隐藏变量:
P ( a , d ) = ∑ b ∑ c P ( a , b , c , d ) P(a, d) = \sum_b \sum_c P(a, b, c, d)
P ( a , d ) = b ∑ c ∑ P ( a , b , c , d )
代入 BN 分解:
P ( a , d ) = ∑ b ∑ c P ( 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)
P ( a , d ) = b ∑ c ∑ P ( a ) P ( b ) P ( c ∣ a , b ) P ( d ∣ c )
展开 b , c b, c b , c 所有情况。注意:部分联合概率没有条件竖线,因此最后不需要归一化;它本身就是一个普通概率。
14.6 第四类:条件概率怎么计算
条件概率最原始的定义是:
P ( X ∣ e ) = P ( X , e ) P ( e ) P(X \mid e) = \frac{P(X, e)}{P(e)}
P ( X ∣ e ) = P ( e ) P ( X , e )
在 BN 题里通常不用直接算大分母,而是用归一化:P ( X ∣ e ) = α P ( X , e ) P(X \mid e) = \alpha\, P(X, e) P ( X ∣ e ) = α P ( X , e ) ,其中 α \alpha α 让 X X X 的所有取值加起来等于 1。
例如求 P ( c ∣ a , b , d ) P(c \mid a, b, d) P ( c ∣ a , b , d ) ,查询变量是 C C C ,证据是 a , b , d a, b, d a , 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 ( ¬ 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)
q ( ¬ c ) = P ( ¬ c , a , b , d ) = P ( a ) P ( b ) P ( ¬ c ∣ a , b ) P ( d ∣ ¬ 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 ( 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 ( a ) P ( b ) P(a)P(b) P ( a ) P ( b ) ,可以约掉。这一步很重要:证据中有些项会在归一化时抵消,但不要一开始凭感觉删,先写联合分解,再看哪些因子在查询变量不同取值下相同。
14.7 第五类:有隐藏变量的后验怎么计算
考试最常见的是这种:问一个变量的后验,但网络里有隐藏变量。例如 P ( A ∣ c , d ) P(A \mid c, d) P ( A ∣ c , d ) ,查询变量是 A A A ,证据是 c , d c, d c , d ,隐藏变量是 B B B 。
第一步,条件概率转联合概率:
P ( A ∣ c , d ) = α P ( A , c , d ) P(A \mid c, d) = \alpha\, P(A, c, d)
P ( A ∣ c , d ) = α P ( A , c , d )
第二步,展开隐藏变量求:
P ( A , c , d ) = ∑ b P ( A , b , c , d ) P(A, c, d) = \sum_b P(A, b, c, d)
P ( A , c , d ) = b ∑ P ( A , b , c , d )
第三步,代入 BN 分解:
P ( A , c , d ) = ∑ b P ( 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 , c , d ) = b ∑ P ( A ) P ( b ) P ( c ∣ A , b ) P ( d ∣ c )
第四步,把与隐藏变量无关的概率提出来,其中由证据变量确定的常数概率可以在归一化时消掉:
P ( A , d ) = P ( A ) P ( d ∣ c ) ∑ b P ( b ) ∑ c P ( c ∣ A , b ) P(A, d) = P(A)\,P(d \mid c) \sum_b P(b) \sum_c P(c \mid A, b)
P ( A , d ) = P ( A ) P ( d ∣ c ) b ∑ P ( b ) c ∑ P ( c ∣ A , b )
第五步,分别计算 A = a A = a A = a 和 A = ¬ a A = \lnot a A = ¬ a 的未归一化值(P ( d ∣ c ) P(d \mid c) P ( d ∣ c ) 省略):
q ( a ) = P ( a ) ∑ b P ( b ) P ( c ∣ a , b ) q(a) = P(a) \sum_b P(b)\,P(c \mid a, b)
q ( a ) = P ( a ) b ∑ P ( b ) P ( c ∣ a , b )
q ( ¬ a ) = P ( ¬ a ) ∑ b P ( b ) P ( c ∣ ¬ a , b ) q(\lnot a) = P(\lnot a) \sum_b P(b)\,P(c \mid \lnot a, b)
q ( ¬ a ) = P ( ¬ a ) b ∑ P ( b ) P ( c ∣ ¬ 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 ) = q ( a ) + q ( ¬ a ) q ( a ) , P ( ¬ a ∣ d ) = q ( a ) + q ( ¬ a ) q ( ¬ a )
如果题目只问 P ( a ∣ d ) P(a \mid d) P ( a ∣ d ) ,也必须计算 q ( ¬ a ) q(\lnot a) q ( ¬ a ) ,因为它在分母里。除非题目给了 P ( d ) P(d) P ( d ) ,否则不能跳过归一化分母。
14.8 第六类:证据概率怎么计算
有时题目会问证据本身概率,例如 P ( d ) P(d) P ( d ) ,就是把所有非证据变量求和:
P ( d ) = ∑ a ∑ b ∑ c P ( a , b , c , d ) P(d) = \sum_a \sum_b \sum_c P(a, b, c, d)
P ( d ) = a ∑ b ∑ c ∑ P ( a , b , c , d )
或者利用上一节的未归一化值:P ( d ) = q ( a ) + q ( ¬ a ) P(d) = q(a) + q(\lnot a) P ( d ) = q ( a ) + q ( ¬ a ) ,其中 q ( a ) = P ( a , d ) q(a) = P(a, d) q ( a ) = P ( a , d ) ,q ( ¬ a ) = P ( ¬ a , d ) q(\lnot a) = P(\lnot a, d) q ( ¬ a ) = P ( ¬ 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)
P ( a ∣ d ) = P ( d ) P ( a , d ) , P ( d ) = P ( a , d ) + P ( ¬ a , d )
14.9 第七类:多个查询变量怎么计算
如果问 P ( A , C ∣ d ) P(A, C \mid d) P ( A , C ∣ d ) ,查询变量是二元组 ( A , C ) (A, C) ( A , C ) ,证据是 d d d ,隐藏变量是 B B B 。
先写未归一化:P ( A , C ∣ d ) = α P ( A , C , d ) P(A, C \mid d) = \alpha\, P(A, C, d) P ( A , C ∣ d ) = α P ( A , C , d ) 。对隐藏变量 B B B 求和:
P ( A , C , d ) = ∑ b P ( 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 , C , d ) = b ∑ P ( A ) P ( b ) P ( C ∣ A , b ) P ( d ∣ C )
然后要对查询变量 ( A , C ) (A, C) ( A , C ) 的所有组合归一化。若 A , C A, C A , 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) q ( a , c ) , q ( a , ¬ c ) , q ( ¬ a , c ) , q ( ¬ a , ¬ 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)}
P ( a , c ∣ d ) = q ( a , c ) + q ( a , ¬ c ) + q ( ¬ a , c ) + q ( ¬ a , ¬ c ) q ( a , c )
多变量查询不是只算一个数,而是算一个联合后验分布。
14.10 什么时候可以消掉某个证据
不是所有证据都会影响查询。是否能消掉,要看条件独立。例如在示例网络中 A → C → D A \to C \to D A → C → D 并且 B → C B \to C B → C 。如果已经给定 C C C ,那么 D D D 是 C C C 的子节点,D D D 对 A A A 的信息会被 C C C 阻断:A ⊥ D ∣ C A \perp D \mid C A ⊥ D ∣ C ,所以 P ( A ∣ c , d ) = P ( A ∣ c ) P(A \mid c, d) = P(A \mid c) P ( A ∣ c , d ) = P ( A ∣ c ) 。
从代数上也能看出来:
P ( A , c , d ) = ∑ b P ( 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 , c , d ) = b ∑ P ( A ) P ( b ) P ( c ∣ A , b ) P ( d ∣ c )
因为 P ( d ∣ c ) P(d \mid c) P ( d ∣ c ) 与 A A A 和 b b b 都无关,对不同 A A A 取值只是共同常数,归一化时会抵消:
P ( A ∣ c , d ) = α P ( d ∣ c ) P ( A ) ∑ b P ( 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 ( d ∣ c ) P ( A ) b ∑ P ( b ) P ( c ∣ A , b )
抵消后:P ( A ∣ c , d ) = α ′ P ( A ) ∑ b P ( 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) P ( A ∣ c , d ) = α ′ P ( A ) ∑ b P ( b ) P ( c ∣ A , b ) = P ( A ∣ c ) 。
考试中可以用 d-separation 快速判断,也可以用这种"写出联合,看公共因子是否抵消"的方法验证。
14.11 变量消元
枚举推理会重复计算。变量消元把 CPT 看成因子,逐个消去隐藏变量,保存中间结果。步骤:
把每个 CPT 写成因子。
代入证据,删除或固定与证据不一致的行。
选择一个隐藏变量 Z Z Z 。
收集所有包含 Z Z Z 的因子。
将这些因子相乘。
对 Z Z Z 求和,得到不含 Z Z Z 的新因子。
重复直到隐藏变量消完。
剩余因子相乘并归一化。
核心操作:
g ( U ) = ∑ z ∏ j f j ( z , U j ) g(U) = \sum_z \prod_j f_j(z, U_j)
g ( U ) = z ∑ j ∏ f j ( z , U j )
其中 f j f_j f j 是包含 Z Z Z 的因子,求和后新因子 g g g 不再含 Z Z Z 。
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 , B , C , D ) = P ( A ) P ( B ) P ( C ∣ A , B ) P ( D ∣ C ) ,要求 P ( A ∣ d ) P(A \mid d) P ( A ∣ d ) 。
第一步:写初始因子。
f A ( A ) = P ( A ) f_A(A) = P(A)
f A ( A ) = P ( A )
f B ( B ) = P ( B ) f_B(B) = P(B)
f B ( B ) = P ( B )
f C ( C , A , B ) = P ( C ∣ A , B ) f_C(C, A, B) = P(C \mid A, B)
f C ( C , A , B ) = P ( C ∣ A , B )
f D ( D , C ) = P ( D ∣ C ) f_D(D, C) = P(D \mid C)
f D ( D , C ) = P ( D ∣ C )
第二步:代入证据 d d d 。 D D D 已经固定为 d d d ,所以 f D ( D , C ) f_D(D, C) f D ( D , C ) 缩成只关于 C C C 的因子:f d ( C ) = P ( d ∣ C ) f_d(C) = P(d \mid C) f d ( C ) = P ( d ∣ C ) 。
现在要计算:
P ( A ∣ d ) = α f A ( A ) ∑ b ∑ c f B ( b ) f C ( c , A , b ) f d ( c ) P(A \mid d) = \alpha\, f_A(A) \sum_b \sum_c f_B(b)\, f_C(c, A, b)\, f_d(c)
P ( A ∣ d ) = α f A ( A ) b ∑ c ∑ f B ( b ) f C ( c , A , b ) f d ( c )
第三步:选择消元顺序。 隐藏变量是 B , C B, C B , C 。选择先消去 C C C ,再消去 B B B 。
第四步:消去 C C C 。 包含 C C C 的因子是 f C ( C , A , B ) , f d ( C ) f_C(C, A, B),\; f_d(C) f C ( C , A , B ) , f d ( C ) 。先相乘,再对 C C C 求和,得到新因子 h ( A , B ) h(A, B) h ( A , B ) :
h ( A , B ) = ∑ c f C ( c , A , B ) f d ( c ) h(A, B) = \sum_c f_C(c, A, B)\, f_d(c)
h ( A , B ) = 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)
h ( A , B ) = P ( c ∣ A , B ) P ( d ∣ c ) + P ( ¬ c ∣ A , B ) P ( d ∣ ¬ c )
第五步:消去 B B B 。 现在包含 B B B 的因子是 f B ( B ) , h ( A , B ) f_B(B),\; h(A, B) f B ( B ) , h ( A , B ) 。相乘并对 B B B 求和,得到新因子 r ( A ) r(A) r ( A ) :
r ( A ) = ∑ b f B ( 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)
r ( A ) = b ∑ f B ( b ) h ( A , b ) = P ( b ) h ( A , b ) + P ( ¬ b ) h ( A , ¬ b )
第六步:乘上剩余因子。 剩余关于 A A A 的因子是 f A ( A ) f_A(A) f A ( A ) ,所以未归一化结果为:
q ( A ) = f A ( A ) r ( A ) = P ( A ) r ( A ) q(A) = f_A(A)\, r(A) = P(A)\, r(A)
q ( A ) = f A ( A ) r ( A ) = P ( A ) r ( A )
分别取 A = a A = a A = a 和 A = ¬ a A = \lnot a A = ¬ a :q ( a ) = P ( a ) r ( 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) q ( ¬ a ) = P ( ¬ a ) r ( ¬ 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)}
P ( a ∣ d ) = q ( a ) + q ( ¬ a ) q ( a ) , P ( ¬ a ∣ d ) = q ( a ) + q ( ¬ a ) q ( ¬ a )
这和枚举推理得到的结果完全相同,只是变量消元把公共中间量 h ( A , B ) h(A, B) h ( A , B ) 和 r ( A ) r(A) r ( A ) 存了下来,避免重复展开。
14.13 变量消元为什么更好
枚举推理像从联合分布中反复算同样的子表达式。变量消元把这些子表达式缓存成因子,避免重复。但变量消元并非总是多项式。复杂度主要由消元过程中产生的最大因子决定,而最大因子大小又取决于图结构和消元顺序。
14.14 精确推理复杂度
单连通网络或多树 :任意两个节点之间最多只有一条无向路径。若最大取值数为 d d d ,相关宽度为 k k k ,变量数为 n n n ,变量消元在多树上的时间和空间复杂度可写为 O ( d k n ) O(d^k n) O ( d k n ) 。当 k k k 很小时,它随网络规模近似线性。
多连通网络 :一般精确推理是 NP-hard。课件还指出它等价于计数 3SAT 模型,因此也涉及 #P-complete。
结论:贝叶斯网络让很多模型可推理,但一般图上的精确推理仍然很难。
15. 按图写联合分布和按图判独立
15.1 联合分布题模板
拿到 BN 图后,先为每个节点写它的父节点,然后套公式:
P ( X 1 , … , X n ) = ∏ i P ( X i ∣ Parents ( X i ) ) P(X_1, \dots, X_n) = \prod_i P(X_i \mid \text{Parents}(X_i))
P ( X 1 , … , X n ) = i ∏ P ( X i ∣ Parents ( X i ) )
例:I → P , H → P , H → L , P → E , L → E I \to P,\; H \to P,\; H \to L,\; P \to E,\; L \to E I → P , H → P , H → L , P → E , L → 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 ) P ( H ) P ( L ∣ H ) P ( P ∣ I , H ) P ( E ∣ P , L )
如果题目给具体真假值,如 P ( i , h , ¬ l , p , e ) P(i, h, \lnot l, p, e) P ( i , h , ¬ 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 ( i ) P ( h ) P ( ¬ l ∣ h ) P ( p ∣ i , h ) P ( e ∣ p , ¬ l ) ,其中 P ( ¬ l ∣ h ) = 1 − P ( l ∣ h ) P(\lnot l \mid h) = 1 - P(l \mid h) P ( ¬ l ∣ h ) = 1 − P ( l ∣ h ) 。
15.2 条件独立题模板
第一种方法:用局部马尔可夫性。每个节点在给定父节点后,与所有非后代节点条件独立:
X i ⊥ NonDescendants ( X i ) ∣ Parents ( X i ) X_i \perp \text{NonDescendants}(X_i) \mid \text{Parents}(X_i)
X i ⊥ NonDescendants ( X i ) ∣ Parents ( X i )
第二种方法:用 d-separation。
列出两个变量之间的所有无向路径。
逐条判断路径是否被证据阻断。
所有路径都阻断才独立。
特别提醒:不要只看两点之间有没有边。条件独立是关于所有路径和给定证据的性质。
15.3 概率计算题型总模板
考试里看到一个概率式,先不要急着代数值,先判断它是哪一类。
类型 1:完整联合概率。 形如 P ( x 1 , x 2 , … , x n ) P(x_1, x_2, \dots, x_n) P ( x 1 , x 2 , … , x n ) ,所有变量都有具体取值。做法是按 BN 分解直接相乘:P ( x 1 , … , x n ) = ∏ i P ( x i ∣ parents ( X i ) ) P(x_1, \dots, x_n) = \prod_i P(x_i \mid \text{parents}(X_i)) P ( x 1 , … , x n ) = ∏ i P ( x i ∣ parents ( X i ) ) 。不求和,不归一化。
类型 2:部分联合概率。 形如 P ( a , d ) P(a, d) P ( a , d ) ,有些变量没出现。没出现的变量是隐藏变量,要全部求和:P ( a , d ) = ∑ hidden P ( a , d , hidden ) P(a, d) = \sum_{\text{hidden}} P(a, d, \text{hidden}) P ( a , d ) = ∑ hidden P ( a , d , hidden ) ,再把联合项按 BN 分解。没有条件竖线,所以最后不归一化。
类型 3:边缘概率。 形如 P ( d ) P(d) P ( d ) ,它是部分联合概率的特例:只保留 d d d ,其余全部求和:P ( d ) = ∑ all other P ( d , others ) P(d) = \sum_{\text{all other}} P(d, \text{others}) P ( d ) = ∑ all other P ( d , others ) 。它经常作为贝叶斯公式的分母,也就是证据概率。
类型 4:普通条件概率。 形如 P ( X ∣ e ) P(X \mid e) P ( X ∣ e ) ,先写 P ( X ∣ e ) = α P ( X , e ) P(X \mid e) = \alpha\, P(X, e) P ( X ∣ e ) = α P ( X , e ) 。若有隐藏变量 Y Y Y :P ( X , e ) = ∑ Y P ( X , e , Y ) P(X, e) = \sum_Y P(X, e, Y) P ( X , e ) = ∑ Y P ( X , e , Y ) ,最后对 X X X 的所有取值归一化:
P ( x ∣ e ) = Q ( x ) ∑ x ′ Q ( x ′ ) , Q ( x ) = ∑ Y P ( x , e , Y ) P(x \mid e) = \frac{Q(x)}{\sum_{x'} Q(x')}, \quad Q(x) = \sum_Y P(x, e, Y)
P ( x ∣ e ) = ∑ x ′ Q ( x ′ ) Q ( x ) , Q ( x ) = Y ∑ P ( x , e , Y )
类型 5:多变量条件概率。 形如 P ( X 1 , X 2 ∣ e ) P(X_1, X_2 \mid e) P ( X 1 , X 2 ∣ e ) ,把 ( X 1 , X 2 ) (X_1, X_2) ( X 1 , X 2 ) 当成一个联合查询变量:P ( X 1 , X 2 ∣ e ) = α P ( X 1 , X 2 , e ) P(X_1, X_2 \mid e) = \alpha\, P(X_1, X_2, e) P ( X 1 , X 2 ∣ e ) = α P ( X 1 , X 2 , e ) 。若有隐藏变量 Y Y Y :Q ( x 1 , x 2 ) = ∑ Y P ( x 1 , x 2 , e , Y ) Q(x_1, x_2) = \sum_Y P(x_1, x_2, e, Y) Q ( x 1 , x 2 ) = ∑ Y P ( x 1 , x 2 , e , Y ) 。归一化时要对查询变量所有组合求和:
P ( x 1 , x 2 ∣ e ) = Q ( x 1 , x 2 ) ∑ x 1 ′ ∑ x 2 ′ Q ( x 1 ′ , x 2 ′ ) P(x_1, x_2 \mid e) = \frac{Q(x_1, x_2)}{\sum_{x'_1} \sum_{x'_2} Q(x'_1, x'_2)}
P ( x 1 , x 2 ∣ e ) = ∑ x 1 ′ ∑ x 2 ′ Q ( x 1 ′ , x 2 ′ ) Q ( x 1 , x 2 )
类型 6:已知完整联合分布时的查询。 如果题目直接给完整联合表,而不是 BN 图,则不用按父节点分解,直接从表中把满足条件的原子事件加起来:P ( φ ) = ∑ ω : ω ⊨ φ P ( ω ) P(\varphi) = \sum_{\omega:\, \omega \models \varphi} P(\omega) P ( φ ) = ∑ ω : ω ⊨ φ P ( ω ) 。条件概率仍然用 P ( φ ∣ e ) = P ( φ ∧ e ) P ( e ) P(\varphi \mid e) = \frac{P(\varphi \land e)}{P(e)} P ( φ ∣ e ) = P ( e ) P ( φ ∧ e ) ,其中分子和分母都从完整联合表中加和得到。
最后检查:
有没出现但网络里存在的变量?有就求和。
有没有条件竖线?有就最后归一化。
是不是完整联合事件?是就直接查 CPT 相乘。
变量取假值了吗?取假值通常要用 1 − p 1 - p 1 − p 。
查询变量有几个取值?每个取值都要算一个未归一化 Q Q Q 。
16. 朴素贝叶斯作为贝叶斯网络
16.1 图结构
朴素贝叶斯是一个单父节点模型:C → X 1 , C → X 2 , … , C → X n C \to X_1,\; C \to X_2,\; \dots,\; C \to X_n C → X 1 , C → X 2 , … , C → X n 。
联合分布:P ( C , X 1 , … , X n ) = P ( C ) ∏ i P ( X i ∣ C ) P(C, X_1, \dots, X_n) = P(C) \prod_i P(X_i \mid C) P ( C , X 1 , … , X n ) = P ( C ) ∏ i P ( X i ∣ 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 ( B ) P ( A ∧ B )
乘法规则:P ( A ∧ B ) = P ( A ∣ B ) P ( B ) P(A \land B) = P(A \mid B)P(B) P ( A ∧ B ) = P ( A ∣ B ) P ( B )
链式法则:P ( X 1 , … , X n ) = ∏ i P ( X i ∣ X 1 , … , X i − 1 ) P(X_1, \dots, X_n) = \prod_i P(X_i \mid X_1, \dots, X_{i-1}) P ( X 1 , … , X n ) = ∏ i P ( X i ∣ X 1 , … , X i − 1 )
全概率:P ( A ) = ∑ i P ( A ∣ B i ) P ( B i ) P(A) = \sum_i P(A \mid B_i)P(B_i) P ( A ) = ∑ i P ( A ∣ 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)} P ( H ∣ e ) = P ( e ) P ( e ∣ H ) P ( H )
17.2 独立性
独立:A ⊥ B ⟺ P ( A , B ) = P ( A ) P ( B ) A \perp B \iff P(A, B) = P(A)P(B) A ⊥ B ⟺ 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) A ⊥ B ∣ C ⟺ P ( A , B ∣ C ) = P ( A ∣ C ) P ( B ∣ C )
条件独立不推出无条件独立,无条件独立也不保证条件独立。
17.3 贝叶斯网络
BN 是 DAG 加 CPT。
全局分解:P ( X 1 , … , X n ) = ∏ i P ( X i ∣ Parents ( X i ) ) P(X_1, \dots, X_n) = \prod_i P(X_i \mid \text{Parents}(X_i)) P ( X 1 , … , X n ) = ∏ i P ( X i ∣ Parents ( X i ) )
局部语义:X i ⊥ NonDescendants ( X i ) ∣ Parents ( X i ) X_i \perp \text{NonDescendants}(X_i) \mid \text{Parents}(X_i) X i ⊥ NonDescendants ( X i ) ∣ Parents ( X i )
参数量:2 n − 1 2^n - 1 2 n − 1 vs. O ( n ⋅ 2 k ) O(n \cdot 2^k) O ( n ⋅ 2 k )
17.4 三种路径结构
链:X → Y → Z , X ⊥ Z ∣ Y X \to Y \to Z,\; X \perp Z \mid Y X → Y → Z , X ⊥ Z ∣ Y
共同原因:X ← Y → Z , X ⊥ Z ∣ Y X \leftarrow Y \to Z,\; X \perp Z \mid Y X ← Y → Z , X ⊥ Z ∣ Y
共同结果:X → Y ← Z , X ⊥ Z X \to Y \leftarrow Z,\; X \perp Z X → Y ← Z , X ⊥ Z ,但 X ⊥̸ Z ∣ Y X \not\perp Z \mid Y X ⊥ Z ∣ Y
记忆:链和 fork 观测中间点会堵住;collider 默认堵住,观测后打开。
17.5 推理
枚举推理:P ( X ∣ e ) = α ∑ Y ∏ i P ( x i ∣ parents ( X i ) ) P(X \mid e) = \alpha \sum_Y \prod_i P(x_i \mid \text{parents}(X_i)) P ( X ∣ e ) = α ∑ Y ∏ i P ( x i ∣ parents ( X i ) )
变量消元:∑ z ∏ j f j ( z , U j ) \sum_z \prod_j f_j(z, U_j) ∑ z ∏ j f j ( z , U j ) ,即"包含 z z z 的因子相乘,再对 z z z 求和"。
复杂度:多树上变量消元可多项式;一般图精确推理 NP-hard,且与 #P 完全问题相关。
17.6 朴素贝叶斯
假设:X i ⊥ X j ∣ C X_i \perp X_j \mid C X i ⊥ X j ∣ C
分类:c ^ = arg max c P ( c ) ∏ i P ( x i ∣ c ) \hat{c} = \arg\max_c P(c) \prod_i P(x_i \mid c) c ^ = arg max c P ( c ) ∏ i P ( x i ∣ c )
对数形式:c ^ = arg max c ( log P ( c ) + ∑ i log P ( x i ∣ c ) ) \hat{c} = \arg\max_c \left(\log P(c) + \sum_i \log P(x_i \mid c)\right) c ^ = arg max c ( log P ( c ) + ∑ i log P ( x i ∣ c ) )
一定记住:朴素贝叶斯是假设"给定类别后特征条件独立",不是假设特征无条件独立。
18. 常见坑
把 P ( A ∣ B ) P(A \mid B) P ( A ∣ B ) 和 P ( B ∣ A ) P(B \mid A) P ( B ∣ A ) 混淆。
贝叶斯题忘记先验 P ( H ) P(H) P ( H ) ,只看似然 P ( e ∣ H ) P(e \mid H) P ( e ∣ H ) 。
分母没有用全概率展开。
把测试准确率当成阳性后患病概率。
把条件独立当成无条件独立。
BN 联合分布没有按父节点写,漏掉条件项。
CPT 中变量为假时忘记用 1 − p 1 - p 1 − p 。
d-separation 中忽略 collider,尤其忘记"观测 collider 会打开路径"。
后验算出未归一化值后忘记除以总和。
有隐藏变量时忘记求和。
变量消元时把所有因子一起乘,失去消元带来的好处。
以为 BN 箭头一定是因果;数学上它编码的是条件独立结构。
19. 最后一页压缩版
概率语言:P ( α ∣ e ) P(\alpha \mid e) P ( α ∣ e )
完整联合分布能回答所有问题:P ( φ ) = ∑ ω : ω ⊨ φ P ( ω ) P(\varphi) = \sum_{\omega:\, \omega \models \varphi} P(\omega) P ( φ ) = ∑ ω : ω ⊨ φ P ( ω ) ,但完整联合分布太大:2 n − 1 2^n - 1 2 n − 1
边缘化:P ( A ) = ∑ b P ( A , b ) P(A) = \sum_b P(A, b) P ( A ) = ∑ b P ( A , b )
条件概率:P ( A ∣ B ) = P ( A , B ) P ( B ) P(A \mid B) = \dfrac{P(A, B)}{P(B)} P ( A ∣ B ) = P ( B ) P ( A , B )
贝叶斯:P ( H ∣ e ) = α P ( e ∣ H ) P ( H ) P(H \mid e) = \alpha\, P(e \mid H)P(H) P ( H ∣ e ) = α P ( e ∣ H ) P ( H )
独立:P ( A , B ) = P ( A ) P ( B ) 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 ( A , B ∣ C ) = P ( A ∣ C ) P ( B ∣ C )
贝叶斯网络:P ( X 1 , … , X n ) = ∏ i P ( X i ∣ Parents ( X i ) ) P(X_1, \dots, X_n) = \prod_i P(X_i \mid \text{Parents}(X_i)) P ( X 1 , … , X n ) = ∏ i P ( X i ∣ Parents ( X i ) )
枚举推理:P ( X ∣ e ) = α ∑ Y ∏ i P ( x i ∣ parents ( X i ) ) P(X \mid e) = \alpha \sum_Y \prod_i P(x_i \mid \text{parents}(X_i)) P ( X ∣ e ) = α ∑ Y ∏ i P ( x i ∣ parents ( X i ) )
变量消元:收集含隐藏变量的因子 → 相乘 → 对隐藏变量求和 → 归一化
朴素贝叶斯:c ^ = arg max c P ( c ) ∏ i P ( x i ∣ c ) \hat{c} = \arg\max_c P(c) \prod_i P(x_i \mid c) c ^ = arg max c P ( c ) ∏ i P ( x i ∣ 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 , y X, y X , y
参数 w w w
X w Xw X w
最小平方误差
闭式解、加权/正则推导
逻辑回归
x , y ∈ { 0 , 1 } x, y \in \{0,1\} x , y ∈ { 0 , 1 }
概率
σ ( w T x + b ) \sigma(w^T x + b) σ ( w T x + b )
最大似然/交叉熵
sigmoid、log odds、梯度
SVM
x , y ∈ { − 1 , + 1 } x, y \in \{-1,+1\} x , y ∈ { − 1 , + 1 }
分类超平面
sign ( w T x + b ) \text{sign}(w^T x + b) 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}
Learning = Representation + Evaluation + Optimization
其中:
Representation :用什么函数表示规律,例如决策树、线性函数、SVM、神经网络。
Evaluation :用什么标准评价函数好坏,例如信息增益、平方误差、交叉熵、hinge loss。
Optimization :怎样找到最优函数,例如递归划分、闭式解、梯度下降、二次规划。
1. 任务总览:输入、输出和学习目标
1.1 机器学习定义:用经验改进任务表现
Tom Mitchell 定义:若一个程序在任务 T T T 上,随着经验 E E E 的积累,其性能度量 P P P 提高,则称该程序从经验 E E E 中学习。
搜索引擎例子:
T T T :对用户查询返回有序网页列表。
E E E :用户点击、停留、跳出等行为记录。
P P P :排序准确率、用户满意度或点击相关性。
1.2 样本和特征:机器能处理的是向量
一个对象或实例通常表示为特征向量:x = ( x 1 , x 2 , … , x d ) ∈ R d x = (x_1, x_2, \dots, x_d) \in \mathbb{R}^d x = ( x 1 , x 2 , … , x d ) ∈ R d 。每个维度称为一个 feature/attribute。特征可以是连续的,也可以是离散的。特征向量是对真实对象的抽象,只保留对任务有用的信息。
常见表示:
文本:词袋向量、词频、词嵌入。
图像:像素、颜色直方图、卷积特征。
用户/账户:年龄、余额、信用评分、交易次数。
1.3 监督学习
有标签地学输入到输出的映射。训练数据 D = { ( x i , y i ) } i = 1 n D = \{(x_i, y_i)\}_{i=1}^n D = { ( x i , y i ) } i = 1 n ,其中 x i x_i x i 是输入特征,y i y_i y i 是期望输出。目标是学习函数 f : X → Y f: \mathcal{X} \to \mathcal{Y} f : X → Y ,使得新样本 x new x_{\text{new}} x new 的预测 y ^ = f ( x new ) \hat{y} = f(x_{\text{new}}) y ^ = f ( x new ) 尽可能正确。
分类任务 :输入样本特征 x ∈ X x \in \mathcal{X} x ∈ X ;输出离散标签 y ∈ { 1 , … , K } y \in \{1, \dots, K\} y ∈ { 1 , … , K } 或 y ∈ { − 1 , + 1 } y \in \{-1, +1\} y ∈ { − 1 , + 1 } 。含义:判断样本属于哪个类别,例如 spam/not spam、良性/恶性肿瘤。
回归任务 :输入样本特征 x ∈ X x \in \mathcal{X} x ∈ X ;输出连续数值 y ∈ R y \in \mathbb{R} y ∈ R 。含义:预测一个数值,例如房价、温度、股票收益。
1.4 无监督学习
没有标签地发现结构。训练数据 D = { x i } i = 1 n D = \{x_i\}_{i=1}^n D = { x i } i = 1 n ,没有给定正确输出。目标不是拟合 x ↦ y x \mapsto y x ↦ y ,而是发现数据内部结构。典型任务:
聚类:输入样本集合,输出每个样本的簇编号。
降维:输入高维向量,输出低维表示。
密度估计:输入样本,输出数据分布模型。
1.5 半监督和自监督
半监督学习同时使用少量有标签数据和大量无标签数据。自监督学习从无标签数据中自动构造监督任务,例如遮住文本中的词再预测它。
1.6 学习智能体
学习智能体包含:
Performance element:直接执行任务的组件。
Learning element:根据经验改进 performance element。
Critic:根据反馈评价表现。
Problem generator:产生探索性行动,帮助智能体获得有价值经验。
设计 learning element 时要问:学习 performance element 的哪个部分?能获得什么反馈?用什么表示形式?
1.7 机器学习应用:概念题识别即可
课件列举的应用包括信息检索、机器翻译、计算机视觉、语音识别、金融预测、医学诊断、电影推荐等。这些例子共同说明:当规则难以手写、数据量很大、人工分析昂贵时,机器学习可以从经验中拟合模型或发现结构。
这些应用通常不考细节,但可能用来问 T , E , P T, E, P T , E , P 。答题时按 Mitchell 定义拆分:任务 T T T 是系统要完成的预测或决策,经验 E E E 是可获得的数据或反馈,性能 P P P 是正确率、误差、排序质量、用户满意度等指标。
1.8 朴素贝叶斯:监督分类器中的概率基线
AI18/SVM 课件的监督学习列表中会把 Naive Bayes 和决策树、kNN、最小二乘分类放在一起。朴素贝叶斯的详细概率推理放在"概率与贝叶斯网络大抄",这里记住它作为分类器的输入输出和核心假设。
输入:样本特征 x = ( x 1 , … , x d ) x = (x_1, \dots, x_d) x = ( x 1 , … , x d ) ;类别标签 y ∈ { 1 , … , K } y \in \{1, \dots, K\} y ∈ { 1 , … , K } 。
输出:y ^ = arg max y P ( y ∣ x ) \hat{y} = \arg\max_y P(y \mid x) y ^ = arg max y P ( y ∣ x ) 。用贝叶斯公式 P ( y ∣ x ) ∝ P ( y ) P ( x ∣ y ) P(y \mid x) \propto P(y)P(x \mid y) P ( y ∣ x ) ∝ P ( y ) P ( x ∣ y ) 。
朴素条件独立假设:P ( x ∣ y ) = ∏ j = 1 d P ( x j ∣ y ) P(x \mid y) = \prod_{j=1}^{d} P(x_j \mid y) P ( x ∣ y ) = ∏ j = 1 d P ( x j ∣ y )
所以分类规则:y ^ = arg max y P ( y ) ∏ j = 1 d P ( x j ∣ y ) \hat{y} = \arg\max_y P(y) \prod_{j=1}^{d} P(x_j \mid y) y ^ = arg max y P ( y ) ∏ j = 1 d P ( x j ∣ y )
2021 选择题常考 :Naive Bayes 假设是在给定类别标签后,各属性条件独立。
2. 泛化主线:模型不是越复杂越好
2.1 三种误差:训练、测试、泛化
训练误差是模型在训练集上的错误:
E train = 1 n ∑ i = 1 n ℓ ( f ( x i ) , y i ) E_{\text{train}} = \frac{1}{n} \sum_{i=1}^{n} \ell(f(x_i), y_i)
E train = n 1 i = 1 ∑ n ℓ ( f ( x i ) , y i )
测试误差是在独立测试集上的错误。泛化误差是模型在同分布新样本上的期望错误:
E gen = E ( x , y ) ∼ P [ ℓ ( f ( x ) , y ) ] E_{\text{gen}} = \mathbb{E}_{(x,y) \sim P}[\ell(f(x), y)]
E gen = E ( x , y ) ∼ P [ ℓ ( f ( x ) , y ) ]
考试中"泛化好"指新样本表现好,不是只在训练集上表现好。
2.2 欠拟合、过拟合和奥卡姆剃刀
模型复杂度从低到高时,常见现象:
太简单:欠拟合,训练误差和测试误差都高。
适中:能抓住主要规律,测试误差最低。
太复杂:过拟合,训练误差很低,测试误差升高。
奥卡姆剃刀原则:在解释数据能力相近时,优先选择更简单的假设。因为复杂模型更容易把噪声当规律。
2021 填空图常考 :模型复杂度从低到高依次对应欠拟合、理想复杂度、过拟合。
2.3 训练集、验证集、测试集的分工
训练集:用于学习参数。
验证集:用于选模型结构和超参数,例如 k k k 、树深度、正则化系数 λ \lambda λ 、SVM 的 C C C 。
测试集:最后一次评估泛化能力,不应参与调参。
2.4 交叉验证:用数据稳定地选模型
交叉验证的直觉:如果模型过拟合,它对训练数据的细微变化会很敏感;拿掉一部分数据后,拟合结果会明显变化。
K 折交叉验证步骤:
把数据分成 K 份。
每次拿 K − 1 份训练,剩下 1 份验证。
重复 K 次,取平均验证误差。
选择平均验证误差最小的模型或超参数。
3. 决策树
用信息增益递归地问最有用的问题
3.1 任务与输入输出
决策树主要用于分类,也可扩展到回归树。
输入:属性向量 x = ( x 1 , … , x d ) x = (x_1, \dots, x_d) x = ( x 1 , … , x d ) ,属性可以是布尔、离散或连续。
输出:类别标签 y y y 。
学到的东西:一棵树。内部节点测试属性,分支对应属性取值,叶子节点给出类别。
餐厅例子中,输入属性包括是否有替代餐厅、是否周五/周六、是否饥饿、顾客数量、价格、是否下雨、是否预约、餐厅类型、等待时间等;输出是是否等待。
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
核心问题是如何选择属性 A A A 。
3.4 熵:一个节点有多混乱
二分类中,若节点 S S S 中正例数为 p p p 、负例数为 n n n ,则熵为:
H ( S ) = − p p + n log 2 p p + n − n p + n log 2 n p + n H(S) = -\frac{p}{p+n} \log_2 \frac{p}{p+n} - \frac{n}{p+n} \log_2 \frac{n}{p+n}
H ( S ) = − p + n p log 2 p + n p − p + n n log 2 p + n n
约定 0 log 2 0 = 0 0 \log_2 0 = 0 0 log 2 0 = 0 。性质:
全正或全负:H ( S ) = 0 H(S) = 0 H ( S ) = 0 ,节点最纯。
正负各半:H ( S ) = 1 H(S) = 1 H ( S ) = 1 ,二分类中最混乱。
多分类中:
H ( S ) = − ∑ k = 1 K p k log 2 p k H(S) = -\sum_{k=1}^{K} p_k \log_2 p_k
H ( S ) = − k = 1 ∑ K p k log 2 p k
其中 p k p_k p k 是类别 k k k 的比例。
3.5 信息增益:按属性划分后熵下降多少
属性 A A A 把样本集 S S S 划分成若干子集 S v S_v S v 。划分后的剩余不确定性为:
Remainder ( A ) = ∑ v ∈ Values ( A ) ∣ S v ∣ ∣ S ∣ H ( S v ) \text{Remainder}(A) = \sum_{v \in \text{Values}(A)} \frac{|S_v|}{|S|} H(S_v)
Remainder ( A ) = v ∈ Values ( A ) ∑ ∣ S ∣ ∣ S v ∣ H ( S v )
信息增益为:
Gain ( S , A ) = H ( S ) − Remainder ( A ) \text{Gain}(S, A) = H(S) - \text{Remainder}(A)
Gain ( S , A ) = H ( S ) − Remainder ( A )
选择信息增益最大的属性,因为它让类别不确定性下降最多。
餐厅例子中,原始训练集有 6 个正例和 6 个负例:H ( S ) = 1 H(S) = 1 H ( 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
Gain ( S , Patrons ) ≈ 0 . 5 4 1 , Gain ( S , Type ) = 0
所以根节点选 Patrons 比 Type 更合理。
3.6 Gini 指数:另一种纯度度量
有些教材用 Gini:
Gini ( S ) = 1 − ∑ k = 1 K p k 2 \text{Gini}(S) = 1 - \sum_{k=1}^{K} p_k^2
Gini ( S ) = 1 − k = 1 ∑ K p k 2
Gini 越小,节点越纯。本课程重点是 entropy 和 information gain,Gini 只需知道含义。
3.7 无冲突训练集一定存在零训练误差决策树
题目:证明对于不含冲突数据的训练集,必存在与训练集一致的决策树。不含冲突数据指:x i = x j ⇒ y i = y j x_i = x_j \Rightarrow y_i = y_j x i = x j ⇒ y i = y j 。
证明思路是构造法:
如果当前节点中所有样本类别相同,直接建叶子节点。
如果当前节点中存在不同类别样本,因为数据无冲突,这些样本的特征向量不可能完全相同。
因而至少存在某个特征维度,使得不同类别样本在该维度取值不同。
对离散特征,可按该特征取值继续分支;对连续特征,可选阈值把不同取值分开。
不断划分,最极端时每个叶子只包含相同特征向量的样本。
由于无冲突,同一叶子中的样本标签唯一,给叶子标该类别即可。
因此这棵充分生长的树对训练集中每个样本都预测正确,训练误差为 0。
3.8 决策树过拟合和剪枝
决策树容易过拟合,因为深树能记住训练集。处理方法:
预剪枝:生长过程中提前停止,例如限制最大深度、最小叶子样本数、最小信息增益。
后剪枝:先长成较大树,再用验证集删除无益子树。
考试判断:根节点信息增益不一定大于子节点的信息增益。因为根节点和子节点的信息增益是在不同样本子集上算的,不能直接比较。
3.9 决策树边界识别
在二维图上,决策树边界常是轴对齐的分段矩形区域。看到"横平竖直、块状划分",优先想到 decision tree。
4. kNN
不显式训练,靠最近样本投票
4.1 任务与输入输出
kNN 可用于分类和回归。
输入:训练集 D = { ( x i , y i ) } i = 1 n D = \{(x_i, y_i)\}_{i=1}^n D = { ( x i , y i ) } i = 1 n ;新样本 x x x ;邻居数 k k k ;距离函数 d ( ⋅ , ⋅ ) d(\cdot, \cdot) d ( ⋅ , ⋅ ) 。
分类输出:y ^ = majority { y i : x i ∈ N k ( x ) } \hat{y} = \text{majority}\{y_i : x_i \in N_k(x)\} y ^ = majority { y i : x i ∈ N k ( x ) } ,其中 N k ( x ) N_k(x) N k ( x ) 是距离 x x x 最近的 k k k 个训练样本。
回归输出:y ^ = 1 k ∑ x i ∈ N k ( x ) y i \hat{y} = \frac{1}{k} \sum_{x_i \in N_k(x)} y_i y ^ = k 1 ∑ x i ∈ N k ( x ) y i 。
4.2 距离决定"相似"
常用距离:
d 2 ( x , z ) = ∑ j = 1 d ( x j − z j ) 2 d_2(x, z) = \sqrt{\sum_{j=1}^{d}(x_j - z_j)^2}
d 2 ( x , z ) = j = 1 ∑ d ( x j − z j ) 2
d 1 ( x , z ) = ∑ j = 1 d ∣ x j − z j ∣ d_1(x, z) = \sum_{j=1}^{d} |x_j - z_j|
d 1 ( x , z ) = j = 1 ∑ d ∣ x j − z j ∣
若特征尺度差异很大,应先标准化,否则大尺度特征会支配距离。
4.3 k 的影响:小 k 高方差,大 k 高偏差
k = 1 k = 1 k = 1 :边界复杂,训练误差通常最低,容易过拟合。
k k k 增大:边界更平滑,抗噪声更强。
k = n k = n k = n :所有样本共同投票,分类时总预测训练集多数类,通常欠拟合。
2021 判断题 :"k 从 1 增加到 n,训练集分类精度始终增加。"答案是错,通常 k = 1 k = 1 k = 1 训练精度最高,增大 k 可能降低训练精度。
4.4 kNN 边界识别
最近邻分类边界常是不规则、折线状、围绕训练点形成 Voronoi 风格区域。看到"破碎弯曲、贴着点"的边界,优先想到 nearest neighbor。
5. 线性预测和最小二乘
5.1 线性分类和线性回归的共同形式
线性模型打分:f ( x ) = w T x + b f(x) = w^T x + b f ( x ) = w T x + b
二分类预测:y ^ = sign ( w T x + b ) \hat{y} = \text{sign}(w^T x + b) y ^ = sign ( w T x + b )
回归预测:y ^ = w T x + b \hat{y} = w^T x + b y ^ = w T x + b
决策边界为:w T x + b = 0 w^T x + b = 0 w T x + b = 0 ,其中 w w w 是超平面的法向量,b b b 控制平移。
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 ( y ^ , y ) = 1 [ y ^ = y ] 。直接最小化 0/1 loss 通常很难,所以课件引入替代损失,例如平方损失、hinge loss、logistic loss。
5.3 最小二乘回归:闭式解必须会推
设 X ∈ R n × d X \in \mathbb{R}^{n \times d} X ∈ R n × d 的第 i i i 行是 x i T x_i^T x i T ,y ∈ R n y \in \mathbb{R}^n y ∈ R n 是标签列向量。忽略偏置或把偏置并入第一列全 1 特征,目标为:
J ( w ) = ∥ X w − y ∥ 2 2 J(w) = \|Xw - y\|_2^2
J ( w ) = ∥ X w − y ∥ 2 2
展开:J ( w ) = ( X w − y ) T ( X w − y ) J(w) = (Xw - y)^T(Xw - y) J ( w ) = ( X w − y ) T ( X w − y ) 。求梯度:∇ w J ( w ) = 2 X T ( X w − y ) \nabla_w J(w) = 2X^T(Xw - y) ∇ w J ( w ) = 2 X T ( X w − y ) 。令梯度为 0:2 X T ( X w − y ) = 0 2X^T(Xw - y) = 0 2 X T ( X w − y ) = 0 ,得到正规方程:
X T X w = X T y X^T X w = X^T y
X T X w = X T y
若 X T X X^T X X T X 可逆:w ∗ = ( X T X ) − 1 X T y w^* = (X^T X)^{-1} X^T y w ∗ = ( X T X ) − 1 X T y 。若不可逆,用 Moore-Penrose 伪逆:w ∗ = X + y w^* = X^+ y w ∗ = X + y 。
5.4 加权最小二乘:2020 大题模板
目标:
min w ∑ i = 1 n r i ( y i − w T x i ) 2 \min_w \sum_{i=1}^{n} r_i (y_i - w^T x_i)^2
w min i = 1 ∑ n r i ( y i − w T x i ) 2
令 R = diag ( r 1 , … , r n ) R = \text{diag}(r_1, \dots, r_n) R = diag ( r 1 , … , r n ) ,矩阵形式:J ( w ) = ( y − X w ) T R ( y − X w ) J(w) = (y - Xw)^T R (y - Xw) J ( w ) = ( y − X w ) T R ( y − X w ) 。因为 R R R 是对角权重矩阵,且通常 R = R T R = R^T R = R T ,求梯度:
∇ w J ( w ) = − 2 X T R ( y − X w ) = 2 X T R X w − 2 X T R y \nabla_w J(w) = -2X^T R (y - Xw) = 2X^T R X w - 2X^T R y
∇ w J ( w ) = − 2 X T R ( y − X w ) = 2 X T R X w − 2 X T R y
令梯度为 0:X T R X w = X T R y X^T R X w = X^T R y X T R X w = X T R y 。
若 X T R X X^T R X X T R X 可逆:w ∗ = ( X T R X ) − 1 X T R y w^* = (X^T R X)^{-1} X^T R y w ∗ = ( X T R X ) − 1 X T R y 。
若不可逆:w ∗ = ( X T R X ) + X T R y w^* = (X^T R X)^+ X^T R y w ∗ = ( X T R X ) + X T R y 。
解释:r i r_i r i 越大,第 i i i 个样本的误差越重要;r i = 0 r_i = 0 r i = 0 相当于忽略该样本。
5.5 带 L2 正则的最小二乘
普通 L2 正则:J ( w ) = ∥ X w − y ∥ 2 2 + λ ∥ w ∥ 2 2 J(w) = \|Xw - y\|_2^2 + \lambda \|w\|_2^2 J ( w ) = ∥ X w − y ∥ 2 2 + λ ∥ w ∥ 2 2 。梯度:∇ w J ( w ) = 2 X T ( X w − y ) + 2 λ w \nabla_w J(w) = 2X^T(Xw - y) + 2\lambda w ∇ w J ( w ) = 2 X T ( X w − y ) + 2 λ w 。令 0:( X T X + λ I ) w = X T y (X^T X + \lambda I)w = X^T y ( X T X + λ I ) w = X T y 。闭式解:
w ∗ = ( X T X + λ I ) − 1 X T y w^* = (X^T X + \lambda I)^{-1} X^T y
w ∗ = ( X T X + λ I ) − 1 X T y
带对角正则:J ( w ) = ∥ X w − y ∥ 2 2 + λ w T D w J(w) = \|Xw - y\|_2^2 + \lambda w^T D w J ( w ) = ∥ X w − y ∥ 2 2 + λ w T D w ,其中 D D D 为对角矩阵,则 w ∗ = ( X T X + λ D ) − 1 X T y w^* = (X^T X + \lambda D)^{-1} X^T y w ∗ = ( X T X + λ D ) − 1 X T y 。D j j D_{jj} D j j 越大,对第 j j j 个特征权重惩罚越强。
5.6 L1 和 L2 正则区别
L2 正则 :Ω 2 ( w ) = ∥ w ∥ 2 2 = ∑ j = 1 d w j 2 \Omega_2(w) = \|w\|_2^2 = \sum_{j=1}^{d} w_j^2 Ω 2 ( w ) = ∥ w ∥ 2 2 = ∑ j = 1 d w j 2 。优点是容易优化,常有闭式解或平滑梯度。作用是让权重变小,降低过拟合。
L1 正则 :Ω 1 ( w ) = ∥ w ∥ 1 = ∑ j = 1 d ∣ w j ∣ \Omega_1(w) = \|w\|_1 = \sum_{j=1}^{d} |w_j| Ω 1 ( w ) = ∥ w ∥ 1 = ∑ j = 1 d ∣ w j ∣ 。作用是产生稀疏解,使一部分权重精确为 0,相当于自动特征选择。
5.7 多分类最小二乘
若 Y ∈ R n × k Y \in \mathbb{R}^{n \times k} Y ∈ R n × k 是 one-hot 标签矩阵,W ∈ R d × k W \in \mathbb{R}^{d \times k} W ∈ R d × k ,目标为 min W ∥ X W − Y ∥ F 2 \min_W \|XW - Y\|_F^2 min W ∥ X W − Y ∥ F 2 。正规方程:X T X W = X T Y X^T X W = X^T Y X T X W = X T Y 。若 X T X X^T X X T X 可逆:W ∗ = ( X T X ) − 1 X T Y W^* = (X^T X)^{-1} X^T Y W ∗ = ( X T X ) − 1 X T Y 。预测时取最大分量:y ^ = arg max k ( W T x ) k \hat{y} = \arg\max_k (W^T x)_k y ^ = arg max k ( W T x ) k 。
5.8 多项式回归:线性是对参数线性,不一定对输入线性
引入基函数:ϕ ( x ) = ( 1 , x , x 2 , … , x m ) \phi(x) = (1, x, x^2, \dots, x^m) ϕ ( x ) = ( 1 , x , x 2 , … , x m ) ,模型 f ( x ) = w T ϕ ( x ) f(x) = w^T \phi(x) f ( x ) = w T ϕ ( x ) 。它对参数 w w w 仍是线性的,因此仍可用最小二乘;但对原始输入 x x x 是非线性的。多项式次数越高,越容易过拟合。
6. 逻辑回归
线性打分经过 sigmoid 变成概率
6.1 任务与输入输出
逻辑回归用于分类,名字里有 regression 但通常不是做连续值回归。
二分类输入:样本特征 x ∈ R d x \in \mathbb{R}^d x ∈ R d ;标签 y ∈ { 0 , 1 } y \in \{0, 1\} y ∈ { 0 , 1 } 。
输出:P ( y = 1 ∣ x ) P(y = 1 \mid x) P ( y = 1 ∣ x ) 。
含义:模型直接估计条件概率,属于 discriminative model。
6.2 Sigmoid 函数
逻辑函数:
σ ( z ) = 1 1 + e − z \sigma(z) = \frac{1}{1 + e^{-z}}
σ ( z ) = 1 + e − z 1
性质:0 < σ ( z ) < 1 0 < \sigma(z) < 1 0 < σ ( z ) < 1 ,σ ( 0 ) = 1 2 \sigma(0) = \frac{1}{2} σ ( 0 ) = 2 1 。导数:σ ′ ( z ) = σ ( z ) ( 1 − σ ( z ) ) \sigma'(z) = \sigma(z)(1 - \sigma(z)) σ ′ ( z ) = σ ( z ) ( 1 − σ ( z ) ) 。
6.3 Logistic 模型和决策边界
令 z = w T x + b z = w^T x + b z = w T x + b ,模型:
P ( y = 1 ∣ x ) = σ ( w T x + b ) , P ( y = 0 ∣ x ) = 1 − σ ( w T x + b ) P(y = 1 \mid x) = \sigma(w^T x + b), \quad P(y = 0 \mid x) = 1 - \sigma(w^T x + b)
P ( y = 1 ∣ x ) = σ ( w T x + b ) , P ( y = 0 ∣ x ) = 1 − σ ( w T x + b )
预测规则:
y ^ = { 1 , P ( y = 1 ∣ x ) ≥ 1 2 0 , P ( y = 1 ∣ x ) < 1 2 \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}
y ^ = { 1 , 0 , P ( y = 1 ∣ x ) ≥ 2 1 P ( y = 1 ∣ x ) < 2 1
由于 σ ( z ) ≥ 1 2 \sigma(z) \geq \frac{1}{2} σ ( z ) ≥ 2 1 等价于 z ≥ 0 z \geq 0 z ≥ 0 ,所以决策边界仍是 w T x + b = 0 w^T x + b = 0 w T x + b = 0 。
6.4 Log odds:逻辑回归假设对数几率线性
odds 是事件发生概率与不发生概率之比:odds = p 1 − p \text{odds} = \frac{p}{1-p} odds = 1 − p p 。log odds 为:
logit ( p ) = log p 1 − p \text{logit}(p) = \log \frac{p}{1-p}
logit ( p ) = log 1 − p p
对逻辑回归:
log P ( y = 1 ∣ x ) P ( y = 0 ∣ x ) = w T x + b \log \frac{P(y=1 \mid x)}{P(y=0 \mid x)} = w^T x + b
log P ( y = 0 ∣ x ) P ( y = 1 ∣ x ) = w T x + b
所以逻辑回归的核心假设是:类别的对数几率是输入特征的线性函数。
6.5 似然函数和交叉熵损失
对单个样本,令 p i = σ ( w T x i + b ) p_i = \sigma(w^T x_i + b) p i = σ ( w T x i + b ) 。由于 y i ∈ { 0 , 1 } y_i \in \{0,1\} y i ∈ { 0 , 1 } ,可以统一写:
P ( y i ∣ x i ; w , b ) = p i y i ( 1 − p i ) 1 − y i P(y_i \mid x_i; w, b) = p_i^{y_i}(1 - p_i)^{1-y_i}
P ( y i ∣ x i ; w , b ) = p i y i ( 1 − p i ) 1 − y i
数据集似然:L ( w , b ) = ∏ i = 1 n p i y i ( 1 − p i ) 1 − y i L(w, b) = \prod_{i=1}^{n} p_i^{y_i}(1-p_i)^{1-y_i} L ( w , b ) = ∏ i = 1 n p i y i ( 1 − p i ) 1 − y i 。
对数似然:ℓ ( w , b ) = ∑ i = 1 n [ y i log p i + ( 1 − y i ) log ( 1 − p i ) ] \ell(w, b) = \sum_{i=1}^{n} [y_i \log p_i + (1-y_i)\log(1-p_i)] ℓ ( w , b ) = ∑ 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) J ( w , b ) = − ℓ ( w , b ) 。单样本交叉熵:L i = − [ y i log p i + ( 1 − y i ) log ( 1 − p i ) ] L_i = -[y_i \log p_i + (1-y_i)\log(1-p_i)] L i = − [ y i log p i + ( 1 − y i ) log ( 1 − p i ) ] 。
6.6 交叉熵梯度:核心结果是 p − y
单样本设 z = w T x + b , p = σ ( z ) z = w^T x + b,\; p = \sigma(z) z = w T x + b , p = σ ( z ) ,损失 L = − [ y log p + ( 1 − y ) log ( 1 − p ) ] L = -[y \log p + (1-y)\log(1-p)] L = − [ y log p + ( 1 − y ) log ( 1 − p ) ] 。
先对 p p p 求导:
∂ L ∂ p = − y p + 1 − y 1 − p \frac{\partial L}{\partial p} = -\frac{y}{p} + \frac{1-y}{1-p}
∂ p ∂ L = − p y + 1 − p 1 − y
再用 sigmoid 导数 ∂ p ∂ z = p ( 1 − p ) \frac{\partial p}{\partial z} = p(1-p) ∂ z ∂ p = p ( 1 − p ) ,链式法则:
∂ L ∂ z = ( − y p + 1 − y 1 − 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 ∂ L = ( − p y + 1 − p 1 − y ) p ( 1 − p ) = − y ( 1 − p ) + ( 1 − y ) p = p − y
因为 ∂ z ∂ w j = x j , ∂ z ∂ b = 1 \frac{\partial z}{\partial w_j} = x_j,\; \frac{\partial z}{\partial b} = 1 ∂ w j ∂ z = x j , ∂ b ∂ z = 1 ,所以:
∂ L ∂ w j = ( p − y ) x j , ∂ L ∂ b = p − y \frac{\partial L}{\partial w_j} = (p - y)x_j, \quad \frac{\partial L}{\partial b} = p - y
∂ w j ∂ L = ( p − y ) x j , ∂ b ∂ L = p − y
向量形式:∇ w L = ( p − y ) x \nabla_w L = (p - y)x ∇ w L = ( p − y ) x 。数据集梯度:∇ w J = ∑ i = 1 n ( p i − y i ) x i \nabla_w J = \sum_{i=1}^{n}(p_i - y_i)x_i ∇ w J = ∑ i = 1 n ( p i − y i ) x i ,∂ J ∂ b = ∑ i = 1 n ( p i − y i ) \frac{\partial J}{\partial b} = \sum_{i=1}^{n}(p_i - y_i) ∂ b ∂ J = ∑ i = 1 n ( p i − y i ) 。
6.7 梯度下降更新
单样本 SGD:w ← w − η ( p − y ) x w \leftarrow w - \eta(p - y)x w ← w − η ( p − y ) x ,b ← b − η ( p − y ) b \leftarrow b - \eta(p - y) b ← b − η ( p − y ) 。
批量梯度下降:w ← w − η ∑ i = 1 n ( p i − y i ) x i w \leftarrow w - \eta \sum_{i=1}^{n}(p_i - y_i)x_i w ← w − η ∑ i = 1 n ( p i − y i ) x i ,b ← b − η ∑ i = 1 n ( p i − y i ) b \leftarrow b - \eta \sum_{i=1}^{n}(p_i - y_i) b ← b − η ∑ i = 1 n ( p i − y i ) 。
带 L2 正则:J reg = J + λ ∥ w ∥ 2 2 J_{\text{reg}} = J + \lambda \|w\|_2^2 J reg = J + λ ∥ w ∥ 2 2 ,梯度增加 2 λ w 2\lambda w 2 λ w 。
6.8 Softmax 回归:多分类扩展
多分类中,每个类别 k k k 有参数 w k , b k w_k, b_k w k , b k :
P ( y = k ∣ x ) = exp ( w k T x + b k ) ∑ j = 1 K exp ( w j T x + b j ) P(y = k \mid x) = \frac{\exp(w_k^T x + b_k)}{\sum_{j=1}^{K} \exp(w_j^T x + b_j)}
P ( y = k ∣ x ) = ∑ j = 1 K exp ( w j T x + b j ) exp ( w k T x + b k )
若真实类别为 t t t ,交叉熵损失为 L = − log P ( y = t ∣ x ) L = -\log P(y = t \mid x) L = − log P ( y = t ∣ x ) 。
考试中低概率,记住 softmax 是把多个类别得分归一化成概率分布。
6.9 逻辑回归、线性回归、SVM 对比
线性回归输出任意实数,适合连续值预测;逻辑回归输出概率,适合分类;SVM 输出间隔符号,目标是最大化分类间隔。
关键区别:
Logistic regression:概率模型,损失是 cross-entropy/logistic loss,通常所有样本都有梯度贡献。
SVM:最大间隔模型,损失是 hinge loss,决策边界主要由支持向量决定。
7. SVM
用最大间隔选择最稳的分离超平面
7.1 任务与输入输出
SVM 主要用于分类。
输入:训练集 D = { ( x i , y i ) } i = 1 n D = \{(x_i, y_i)\}_{i=1}^n D = { ( x i , y i ) } i = 1 n ;特征 x i ∈ R d x_i \in \mathbb{R}^d x i ∈ R d ;标签 y i ∈ { − 1 , + 1 } y_i \in \{-1, +1\} y i ∈ { − 1 , + 1 } 。
输出:g ( x ) = sign ( w T x + b ) g(x) = \text{sign}(w^T x + b) g ( x ) = sign ( w T x + b ) 。
核心含义:在能正确分类训练集的超平面中,选择间隔最大的那个。间隔大通常意味着对小扰动更稳,泛化更好。
7.2 函数间隔和几何间隔
线性分类器 f ( x ) = w T x + b f(x) = w^T x + b f ( x ) = w T x + b ,正确分类条件 y i ( w T x i + b ) > 0 y_i(w^T x_i + b) > 0 y i ( w T x i + b ) > 0 。
函数间隔:γ ^ i = y i ( w T x i + b ) \hat{\gamma}_i = y_i(w^T x_i + b) γ ^ i = y i ( w T x i + b )
几何间隔(点到超平面的带符号距离):γ i = y i ( w T x i + b ) ∥ w ∥ \gamma_i = \dfrac{y_i(w^T x_i + b)}{\|w\|} γ i = ∥ w ∥ y i ( w T x i + b )
因为同时缩放 w , b w, b w , b 不改变决策边界,所以 SVM 规定最近点满足函数间隔 1:y i ( w T x i + b ) ≥ 1 y_i(w^T x_i + b) \geq 1 y i ( w T x i + b ) ≥ 1 。此时最近点的几何间隔为 γ = 1 ∥ w ∥ \gamma = \frac{1}{\|w\|} γ = ∥ w ∥ 1 。
两条间隔边界:w T x + b = 1 , w T x + b = − 1 w^T x + b = 1,\; w^T x + b = -1 w T x + b = 1 , w T x + b = − 1 ,二者之间宽度 2 ∥ w ∥ \frac{2}{\|w\|} ∥ w ∥ 2 。
7.3 Hard Margin SVM 原问题
线性可分时:
min w , b 1 2 ∥ w ∥ 2 s.t. y i ( w T x i + 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
w , b min 2 1 ∥ w ∥ 2 s.t. y i ( w T x i + b ) ≥ 1 , i = 1 , … , n
最大化间隔 2 ∥ w ∥ \frac{2}{\|w\|} ∥ w ∥ 2 等价于最小化 1 2 ∥ w ∥ 2 \frac{1}{2}\|w\|^2 2 1 ∥ w ∥ 2 ,也就是使支持向量的函数间隔刚好为 1 或 -1。
7.4 支持向量:真正决定边界的点
支持向量(在 Hard Margin 下)满足 y i ( w T x i + b ) = 1 y_i(w^T x_i + b) = 1 y i ( w T x i + b ) = 1 ,它们落在间隔边界上。远离边界且分类正确的点满足严格不等式,通常不影响 hard margin SVM 解。
7.5 对偶问题:考试概念和证明都要会认
原问题:
min w , b 1 2 ∥ w ∥ 2 s.t. y i ( w T x i + 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
w , b min 2 1 ∥ w ∥ 2 s.t. y i ( w T x i + b ) − 1 ≥ 0
构造拉格朗日函数,α i ≥ 0 \alpha_i \geq 0 α i ≥ 0 :
L ( w , b , α ) = 1 2 ∥ w ∥ 2 − ∑ i = 1 n α i [ y i ( w T x i + 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]
L ( w , b , α ) = 2 1 ∥ w ∥ 2 − i = 1 ∑ n α i [ y i ( w T x i + b ) − 1 ]
先对 w , b w, b w , b 最小化。对 w w w 求导:
∂ L ∂ w = w − ∑ i = 1 n α i y i x i \frac{\partial L}{\partial w} = w - \sum_{i=1}^{n} \alpha_i y_i x_i
∂ w ∂ L = w − i = 1 ∑ n α i y i x i
令其为 0:
w = ∑ i = 1 n α i y i x i w = \sum_{i=1}^{n} \alpha_i y_i x_i
w = i = 1 ∑ n α i y i x i
对 b b b 求导:
∂ L ∂ b = − ∑ i = 1 n α i y i \frac{\partial L}{\partial b} = -\sum_{i=1}^{n} \alpha_i y_i
∂ b ∂ L = − i = 1 ∑ n α i y i
令其为 0:
∑ i = 1 n α i y i = 0 \sum_{i=1}^{n} \alpha_i y_i = 0
i = 1 ∑ n α i y i = 0
代回拉格朗日函数得到对偶问题:
max α ∑ i = 1 n α i − 1 2 ∑ i = 1 n ∑ j = 1 n α i α j y i y j x i T x j \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
α max i = 1 ∑ n α i − 2 1 i = 1 ∑ n j = 1 ∑ n α i α j y i y j x i T x j
约束:α i ≥ 0 , ∑ i = 1 n α i y i = 0 \alpha_i \geq 0,\; \sum_{i=1}^{n} \alpha_i y_i = 0 α i ≥ 0 , ∑ i = 1 n α i y i = 0 。
KKT 互补条件:α i [ y i ( w T x i + b ) − 1 ] = 0 \alpha_i [y_i(w^T x_i + b) - 1] = 0 α i [ y i ( w T x i + b ) − 1 ] = 0 。因此:
若 α i > 0 \alpha_i > 0 α i > 0 ,则 y i ( w T x i + b ) = 1 y_i(w^T x_i + b) = 1 y i ( w T x i + b ) = 1 ,该点是支持向量。
若 y i ( w T x i + b ) > 1 y_i(w^T x_i + b) > 1 y i ( w T x i + b ) > 1 ,则 α i = 0 \alpha_i = 0 α i = 0 ,该点不是支持向量。
如何求 α i \alpha_i α i :
利用 ∑ i = 1 n α i y i = 0 \sum_{i=1}^{n} \alpha_i y_i = 0 ∑ i = 1 n α i y i = 0 表示出 α i \alpha_i α i 之间的关系,代回 ∑ i = 1 n α i − 1 2 ∑ i = 1 n ∑ j = 1 n α i α j y i y j x i T x j \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 = 1 n α i − 2 1 ∑ i = 1 n ∑ j = 1 n α i α j y i y j x i T x j 得到一个只包含 α i \alpha_i α i 的式子,我们的目标是使这个式子最大。
(结合支持向量约束求出具体 α i \alpha_i α i 与 w , b w, b w , b 。)
7.6 用对偶解做预测
由 w = ∑ i = 1 n α i y i x i w = \sum_{i=1}^{n} \alpha_i y_i x_i w = ∑ i = 1 n α i y i x i ,新样本的打分:
f ( x ) = w T x + b = ∑ i = 1 n α i y i x i T x + b f(x) = w^T x + b = \sum_{i=1}^{n} \alpha_i y_i x_i^T x + b
f ( x ) = w T x + b = i = 1 ∑ n α i y i x i T x + b
由于非支持向量 α i = 0 \alpha_i = 0 α i = 0 ,实际只需要和支持向量做内积。
7.7 Soft Margin SVM:不可分或有噪声时允许违反间隔
引入松弛变量 ξ i ≥ 0 \xi_i \geq 0 ξ i ≥ 0 :
min w , b , ξ 1 2 ∥ w ∥ 2 + C ∑ i = 1 n ξ i \min_{w,b,\xi} \frac{1}{2}\|w\|^2 + C \sum_{i=1}^{n} \xi_i
w , b , ξ min 2 1 ∥ w ∥ 2 + C i = 1 ∑ n ξ i
约束:y i ( w T x i + b ) ≥ 1 − ξ i y_i(w^T x_i + b) \geq 1 - \xi_i y i ( w T x i + b ) ≥ 1 − ξ i ,ξ i ≥ 0 \xi_i \geq 0 ξ i ≥ 0 。
含义:
ξ i = 0 \xi_i = 0 ξ i = 0 :样本在正确间隔外或间隔边界上。
0 < ξ i < 1 0 < \xi_i < 1 0 < ξ i < 1 :分类正确,但进入间隔内部。
ξ i ≥ 1 \xi_i \geq 1 ξ i ≥ 1 :样本可能被错分。
C C C 控制对违反间隔的惩罚:
C C C 大:更不愿犯错,更接近 hard margin,间隔可能更窄。
C C C 小:允许更多违反,间隔更宽,可能泛化更好。
Soft margin 的对偶和 hard margin 很像,只是多了上界:0 ≤ α i ≤ C 0 \leq \alpha_i \leq C 0 ≤ α i ≤ C 。
7.8 Hinge loss:SVM 的损失函数视角
单样本 hinge loss:ℓ hinge ( x i , y i ) = max ( 0 , 1 − y i ( w T x i + b ) ) \ell_{\text{hinge}}(x_i, y_i) = \max(0, 1 - y_i(w^T x_i + b)) ℓ hinge ( x i , y i ) = max ( 0 , 1 − y i ( w T x i + b ) ) 。
Soft margin SVM 可写成:
min w , b 1 2 ∥ w ∥ 2 + C ∑ i = 1 n max ( 0 , 1 − y i ( w T x i + b ) ) \min_{w,b} \frac{1}{2}\|w\|^2 + C \sum_{i=1}^{n} \max(0, 1 - y_i(w^T x_i + b))
w , b min 2 1 ∥ w ∥ 2 + C i = 1 ∑ n max ( 0 , 1 − y i ( w T x i + b ) )
若 y i f ( x i ) ≥ 1 y_i f(x_i) \geq 1 y i f ( x i ) ≥ 1 ,损失为 0;若分类正确但间隔不足,损失为正;若错分,损失更大。
7.9 手算最大间隔超平面模板
适合二维小样本题。
画点或观察两类凸包。
找两类之间最近的点或线段,猜支持向量。
对正支持向量写:w T x i + b = 1 w^T x_i + b = 1 w T x i + b = 1 。
对负支持向量写:w T x i + b = − 1 w^T x_i + b = -1 w T x i + b = − 1 。
解线性方程得到 w , b w, b w , b 。
检查所有样本是否满足:y i ( w T x i + b ) ≥ 1 y_i(w^T x_i + b) \geq 1 y i ( w T x i + b ) ≥ 1 。
写分离超平面、间隔边界、分类函数和支持向量。
若只有一对最近点决定边界,最大间隔超平面是这两个点连线的垂直平分面。
7.10 HW10 手算样例
正例:x 1 = ( 1 , 2 ) T , x 2 = ( 2 , 3 ) T , x 3 = ( 3 , 3 ) T x_1 = (1, 2)^T,\; x_2 = (2, 3)^T,\; x_3 = (3, 3)^T x 1 = ( 1 , 2 ) T , x 2 = ( 2 , 3 ) T , x 3 = ( 3 , 3 ) T
负例:x 4 = ( 2 , 1 ) T , x 5 = ( 3 , 2 ) T x_4 = (2, 1)^T,\; x_5 = (3, 2)^T x 4 = ( 2 , 1 ) T , x 5 = ( 3 , 2 ) T
由几何位置猜支持向量为 x 1 , x 3 , x 5 x_1, x_3, x_5 x 1 , x 3 , x 5 。设 w = ( w 1 , w 2 ) T w = (w_1, w_2)^T w = ( w 1 , w 2 ) T ,列方程:
{ w 1 + 2 w 2 + b = 1 3 w 1 + 3 w 2 + b = 1 3 w 1 + 2 w 2 + b = − 1 \begin{cases} w_1 + 2w_2 + b = 1 \\ 3w_1 + 3w_2 + b = 1 \\ 3w_1 + 2w_2 + b = -1 \end{cases}
⎩ ⎪ ⎪ ⎨ ⎪ ⎪ ⎧ w 1 + 2 w 2 + b = 1 3 w 1 + 3 w 2 + b = 1 3 w 1 + 2 w 2 + b = − 1
第二式减第三式:w 2 = 2 w_2 = 2 w 2 = 2 。第二式减第一式:2 w 1 + w 2 = 0 2w_1 + w_2 = 0 2 w 1 + w 2 = 0 ,所以 w 1 = − 1 , w 2 = 2 , b = − 2 w_1 = -1,\; w_2 = 2,\; b = -2 w 1 = − 1 , w 2 = 2 , b = − 2 。
最大间隔超平面:− z 1 + 2 z 2 − 2 = 0 -z_1 + 2z_2 - 2 = 0 − z 1 + 2 z 2 − 2 = 0
分类函数:g ( z ) = sign ( − z 1 + 2 z 2 − 2 ) g(z) = \text{sign}(-z_1 + 2z_2 - 2) g ( z ) = sign ( − z 1 + 2 z 2 − 2 )
支持向量:( 1 , 2 ) T , ( 3 , 3 ) T , ( 3 , 2 ) T (1, 2)^T,\; (3, 3)^T,\; (3, 2)^T ( 1 , 2 ) T , ( 3 , 3 ) T , ( 3 , 2 ) T
间隔宽度:2 ∥ w ∥ = 2 5 \dfrac{2}{\|w\|} = \dfrac{2}{\sqrt{5}} ∥ w ∥ 2 = 5 2
7.11 2021 SVM 手算样例
正例:x 1 = ( 2 , 3 ) T , x 2 = ( 3 , 3 ) T x_1 = (2, 3)^T,\; x_2 = (3, 3)^T x 1 = ( 2 , 3 ) T , x 2 = ( 3 , 3 ) T
负例:x 3 = ( 1 , 1 ) T x_3 = (1, 1)^T x 3 = ( 1 , 1 ) T
正类凸包是线段 y = 3 , x ∈ [ 2 , 3 ] y = 3,\; x \in [2, 3] y = 3 , x ∈ [ 2 , 3 ] ,离负点最近的正类点是 ( 2 , 3 ) T (2, 3)^T ( 2 , 3 ) T 。最大间隔边界由 ( 2 , 3 ) T (2, 3)^T ( 2 , 3 ) T 和 ( 1 , 1 ) T (1, 1)^T ( 1 , 1 ) T 决定。二者中点:
m = ( 3 2 , 2 ) T m = \left(\tfrac{3}{2}, 2\right)^T
m = ( 2 3 , 2 ) T
法向量可取:v = ( 2 , 3 ) T − ( 1 , 1 ) T = ( 1 , 2 ) T v = (2, 3)^T - (1, 1)^T = (1, 2)^T v = ( 2 , 3 ) T − ( 1 , 1 ) T = ( 1 , 2 ) T 。分离超平面是垂直平分线:v T ( z − m ) = 0 v^T(z - m) = 0 v T ( z − m ) = 0 ,即:
x + 2 y − 11 2 = 0 x + 2y - \tfrac{11}{2} = 0
x + 2 y − 2 1 1 = 0
规范化到支持向量函数间隔为 1。原打分 f ~ ( x , y ) = x + 2 y − 11 2 \tilde{f}(x, y) = x + 2y - \tfrac{11}{2} f ~ ( x , y ) = x + 2 y − 2 1 1 ,在 ( 2 , 3 ) (2, 3) ( 2 , 3 ) 上为 f ~ ( 2 , 3 ) = 5 2 \tilde{f}(2, 3) = \tfrac{5}{2} f ~ ( 2 , 3 ) = 2 5 ,在 ( 1 , 1 ) (1, 1) ( 1 , 1 ) 上为 f ~ ( 1 , 1 ) = − 5 2 \tilde{f}(1, 1) = -\tfrac{5}{2} f ~ ( 1 , 1 ) = − 2 5 。所以乘以 2 5 \tfrac{2}{5} 5 2 :
f ( x , y ) = 2 5 x + 4 5 y − 11 5 f(x, y) = \tfrac{2}{5} x + \tfrac{4}{5} y - \tfrac{11}{5}
f ( x , y ) = 5 2 x + 5 4 y − 5 1 1
即 w = ( 2 5 , 4 5 ) T , b = − 11 5 w = (\tfrac{2}{5}, \tfrac{4}{5})^T,\; b = -\tfrac{11}{5} w = ( 5 2 , 5 4 ) T , b = − 5 1 1 。
分类函数:g ( x , y ) = sign ( 2 5 x + 4 5 y − 11 5 ) g(x, y) = \text{sign}(\tfrac{2}{5} x + \tfrac{4}{5} y - \tfrac{11}{5}) g ( x , y ) = sign ( 5 2 x + 5 4 y − 5 1 1 )
等价地也可写:g ( x , y ) = sign ( x + 2 y − 11 2 ) g(x, y) = \text{sign}(x + 2y - \tfrac{11}{2}) g ( x , y ) = sign ( x + 2 y − 2 1 1 ) 。
7.12 新点是否影响 SVM 边界
若新点被当前 SVM 正确分类且远离边界,通常不影响 hard margin 边界。原因是它不是活跃约束,不是支持向量,对应 α = 0 \alpha = 0 α = 0 。
若新点被当前边界错分,改用 soft margin 后通常会影响优化目标。原因是它产生正的 hinge loss,可能成为支持向量,优化会重新权衡间隔和误差。严格说是否改变边界还取决于 C C C 和数据位置,但考试一般答"会影响,并说明 hinge loss/支持向量原因"。
8. 核方法
不显式升维,也能做非线性分类
8.1 从特征工程到非线性决策边界
线性模型的得分可写为 f ( x ) = w T ϕ ( x ) + b f(x) = w^T \phi(x) + b f ( x ) = w T ϕ ( x ) + b ,它对参数 w w w 和特征 ϕ ( x ) \phi(x) ϕ ( x ) 是线性的,但对原始输入 x x x 可以是非线性的。
例子:ϕ ( x ) = ( 1 , x , x 2 ) \phi(x) = (1, x, x^2) ϕ ( x ) = ( 1 , x , x 2 ) 可以表示非线性曲线。SVM 课件用体温、身高体重等例子说明:真实关系可能有非单调性、非线性和特征交互,需要构造高维特征。
8.2 Kernel trick
SVM 对偶中样本只以内积形式出现:x i T x j x_i^T x_j x i T x j 。如果先映射到高维空间 ϕ ( x ) \phi(x) ϕ ( x ) ,对偶中只需要 ϕ ( x i ) T ϕ ( x j ) \phi(x_i)^T \phi(x_j) ϕ ( x i ) T ϕ ( x j ) 。定义核函数:
K ( x i , x j ) = ϕ ( x i ) T ϕ ( x j ) K(x_i, x_j) = \phi(x_i)^T \phi(x_j)
K ( x i , x j ) = ϕ ( x i ) T ϕ ( x j )
这样无需显式计算 ϕ ( x ) \phi(x) ϕ ( x ) ,只要能计算 K ( x i , x j ) K(x_i, x_j) K ( x i , x j ) 。
8.3 常见核函数
线性核:K ( x , z ) = x T z K(x, z) = x^T z K ( x , z ) = x T z
多项式核:K ( x , z ) = ( 1 + x T z ) p K(x, z) = (1 + x^T z)^p K ( x , z ) = ( 1 + x T z ) p
高斯 RBF 核:K ( x , z ) = exp ( − ∥ x − z ∥ 2 2 σ 2 ) K(x, z) = \exp\left(-\dfrac{\|x - z\|^2}{2\sigma^2}\right) K ( x , z ) = exp ( − 2 σ 2 ∥ x − z ∥ 2 )
RBF 核对应无限维特征映射,能形成非常灵活的非线性边界。
8.4 核矩阵必须对称半正定
给定样本 x 1 , … , x n x_1, \dots, x_n x 1 , … , x n ,核矩阵 K i j = K ( x i , x j ) K_{ij} = K(x_i, x_j) K i j = K ( x i , x j ) 。如果 K K K 来自某个特征映射内积,则 K i j = ϕ ( x i ) T ϕ ( x j ) K_{ij} = \phi(x_i)^T \phi(x_j) K i j = ϕ ( x i ) T ϕ ( x j ) 。
对称性:K i j = ϕ ( x i ) T ϕ ( x j ) = ϕ ( x j ) T ϕ ( x i ) = K j i K_{ij} = \phi(x_i)^T \phi(x_j) = \phi(x_j)^T \phi(x_i) = K_{ji} K i j = ϕ ( x i ) T ϕ ( x j ) = ϕ ( x j ) T ϕ ( x i ) = K j i
半正定性:对任意 a ∈ R n a \in \mathbb{R}^n a ∈ R n ,
a T K a = ∑ i = 1 n ∑ j = 1 n a i a j ϕ ( x i ) T ϕ ( x j ) = ∥ ∑ i = 1 n a i ϕ ( x i ) ∥ 2 ≥ 0 a^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
a T K a = i = 1 ∑ n j = 1 ∑ n a i a j ϕ ( x i ) T ϕ ( x j ) = ∥ ∥ ∥ ∥ ∥ ∥ i = 1 ∑ n a i ϕ ( x i ) ∥ ∥ ∥ ∥ ∥ ∥ 2 ≥ 0
所以有效核函数对应的核矩阵必须对称半正定。
8.5 核 SVM 的训练和预测
训练时把对偶中的内积替换为核函数:
max α ∑ i = 1 n α i − 1 2 ∑ i = 1 n ∑ j = 1 n α i α j y i y j K ( x i , x j ) \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)
α max i = 1 ∑ n α i − 2 1 i = 1 ∑ n j = 1 ∑ n α i α j y i y j K ( x i , x j )
预测新样本:
f ( x ) = ∑ i = 1 n α i y i K ( x i , 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))
f ( x ) = i = 1 ∑ n α i y i K ( x i , x ) + b , g ( x ) = sign ( f ( x ) )
仍然只有支持向量对应的 α i \alpha_i α 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
( 1 , 1 ) ↦ + 1 , ( − 1 , − 1 ) ↦ + 1 , ( 1 , − 1 ) ↦ − 1 , ( − 1 , 1 ) ↦ − 1
原空间线性不可分,但二次特征中包含交互项 x 1 x 2 x_1 x_2 x 1 x 2 。因为:
x 1 x 2 > 0 ⇒ + 1 , x 1 x 2 < 0 ⇒ − 1 x_1 x_2 > 0 \Rightarrow +1, \quad x_1 x_2 < 0 \Rightarrow -1
x 1 x 2 > 0 ⇒ + 1 , x 1 x 2 < 0 ⇒ − 1
所以二次核 K ( x , z ) = ( 1 + x T z ) 2 K(x, z) = (1 + x^T z)^2 K ( x , z ) = ( 1 + x T z ) 2 可以把 XOR 分开。
9. K-Means
用交替最小化做聚类
9.1 任务与输入输出
K-Means 是无监督聚类方法。
输入:样本 D = { x i } i = 1 n D = \{x_i\}_{i=1}^n D = { x i } i = 1 n ;簇数 K K K 。
输出:每个样本的簇编号 c i ∈ { 1 , … , K } c_i \in \{1, \dots, K\} c i ∈ { 1 , … , K } ;每个簇的中心 μ 1 , … , μ K \mu_1, \dots, \mu_K μ 1 , … , μ K 。
目标:让同一簇内样本尽量接近自己的中心。
9.2 目标函数
K-Means 最小化类内平方和:
J = ∑ i = 1 n ∥ x i − μ c i ∥ 2 J = \sum_{i=1}^{n} \|x_i - \mu_{c_i}\|^2
J = i = 1 ∑ n ∥ x i − μ c i ∥ 2
其中 c i c_i c i 是样本 x i x_i x 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
分配步骤:c i = arg min k ∈ { 1 , … , K } ∥ x i − μ k ∥ 2 c_i = \arg\min_{k \in \{1,\dots,K\}} \|x_i - \mu_k\|^2 c i = arg min k ∈ { 1 , … , K } ∥ x i − μ k ∥ 2
更新步骤:μ k = 1 ∣ C k ∣ ∑ x i ∈ C k x i \mu_k = \frac{1}{|C_k|} \sum_{x_i \in C_k} x_i μ k = ∣ C k ∣ 1 ∑ x i ∈ C k x i
9.4 为什么簇中心是均值
固定某个簇 C C C ,要求 min μ ∑ x i ∈ C ∥ x i − μ ∥ 2 \min_\mu \sum_{x_i \in C} \|x_i - \mu\|^2 min μ ∑ x i ∈ C ∥ x i − μ ∥ 2 。记 F ( μ ) = ∑ x i ∈ C ( x i − μ ) T ( x i − μ ) F(\mu) = \sum_{x_i \in C} (x_i - \mu)^T(x_i - \mu) F ( μ ) = ∑ x i ∈ C ( x i − μ ) T ( x i − μ ) 。
对 μ \mu μ 求梯度:∇ μ F ( μ ) = ∑ x i ∈ C 2 ( μ − x i ) \nabla_\mu F(\mu) = \sum_{x_i \in C} 2(\mu - x_i) ∇ μ F ( μ ) = ∑ x i ∈ C 2 ( μ − x i ) 。令梯度为 0:2 ∣ C ∣ μ − 2 ∑ x i ∈ C x i = 0 2|C|\mu - 2\sum_{x_i \in C} x_i = 0 2 ∣ C ∣ μ − 2 ∑ x i ∈ C x i = 0 ,所以:
μ = 1 ∣ C ∣ ∑ x i ∈ C x i \mu = \frac{1}{|C|} \sum_{x_i \in C} x_i
μ = ∣ C ∣ 1 x i ∈ C ∑ x i
这说明更新中心为均值是固定分配时的最优解。
9.5 K-Means 收敛证明
要证明 K-Means 收敛,围绕目标函数 J = ∑ i = 1 n ∥ x i − μ c i ∥ 2 J = \sum_{i=1}^{n}\|x_i - \mu_{c_i}\|^2 J = ∑ i = 1 n ∥ x i − μ c i ∥ 2 ,分两步说明。
第一步 ,固定中心 μ 1 , … , μ K \mu_1, \dots, \mu_K μ 1 , … , μ K ,重新分配每个样本到最近中心。对每个样本 x i x_i x i ,新中心距离不大于旧中心距离,因此每一项 ∥ x i − μ c i ∥ 2 \|x_i - \mu_{c_i}\|^2 ∥ x i − μ c i ∥ 2 不增加,整体 J J J 不增加。
第二步 ,固定簇分配 C 1 , … , C K C_1, \dots, C_K C 1 , … , C K ,把每个中心更新为簇内均值。上一节已证明均值最小化簇内平方误差,因此每个簇的误差不增加,整体 J J J 不增加。
所以每轮迭代后 J ( t + 1 ) ≤ J ( t ) J^{(t+1)} \leq J^{(t)} J ( t + 1 ) ≤ J ( t ) 。又因为 J ≥ 0 J \geq 0 J ≥ 0 ,目标函数单调不增且有下界。对有限数据,可能的簇分配数量有限;若某轮分配不变,中心也不变,算法终止。因此 K-Means 会收敛到一个局部最优或固定点。
注意:K-Means 不保证全局最优,结果受初始中心影响。
9.6 K-Means 手算题
若题目给出簇,求新中心,就直接取均值。例如 C 1 = { ( 0 , 6 ) , ( 6 , 0 ) } C_1 = \{(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)
μ 1 = 2 ( 0 , 6 ) + ( 6 , 0 ) = ( 3 , 3 )
若题目给候选初始中心,问能否产生某个分配,就对每个点计算到所有中心的距离,看最近中心是否与题目分配一致。
10. PCA
找最大方差方向做降维
10.1 任务与输入输出
PCA 是无监督降维方法。
输入:高维样本 x i ∈ R d x_i \in \mathbb{R}^d x i ∈ R d ;目标维数 k < d k < d k < d 。
输出:k k k 个主成分方向;每个样本的低维表示 z i ∈ R k z_i \in \mathbb{R}^k z i ∈ R k 。
含义:用低维线性子空间保留数据主要变化方向。
10.2 PCA 的两种等价目标
PCA 可以理解为:
最大化投影后的方差。
最小化投影再重构的平方误差。
保留大方差方向,丢弃小方差方向。若噪声主要分布在小方差方向,PCA 可起到去噪作用。2020 判断题 考过"PCA 可以去噪",通常答对。
10.3 PCA 步骤
数据中心化 :x ~ i = x i − x ˉ \tilde{x}_i = x_i - \bar{x} x ~ i = x i − x ˉ ,其中 x ˉ = 1 n ∑ i = 1 n x i \bar{x} = \frac{1}{n}\sum_{i=1}^{n} x_i x ˉ = n 1 ∑ i = 1 n x i 。
计算协方差矩阵 :S = 1 n ∑ i = 1 n x ~ i x ~ i T S = \frac{1}{n}\sum_{i=1}^{n} \tilde{x}_i \tilde{x}_i^T S = n 1 ∑ i = 1 n x ~ i x ~ i T
求特征值和特征向量 :S u j = λ j u j S u_j = \lambda_j u_j S u j = λ j u j
取最大 k k k 个特征值对应的特征向量组成矩阵 :U k = [ u 1 , … , u k ] U_k = [u_1, \dots, u_k] U k = [ u 1 , … , u k ]
投影 :z i = U k T ( x i − x ˉ ) z_i = U_k^T (x_i - \bar{x}) z i = U k T ( x i − x ˉ )
重构近似 :x ^ i = x ˉ + U k z i \hat{x}_i = \bar{x} + U_k z_i x ^ i = x ˉ + U k z i
10.4 PCA 和分类器边界
PCA 本身不是分类器,它没有标签输出。它通常作为预处理,用于降维、可视化、压缩、去噪,再把低维特征送入分类器。
10.5 PAC 学习
PAC 是 Probably Approximately Correct。目标:以至少 1 − δ 1 - \delta 1 − δ 的概率,学到真实误差不超过 ε \varepsilon ε 的假设。形式上,希望 P ( err ( h ) ≤ ε ) ≥ 1 − δ P(\text{err}(h) \leq \varepsilon) \geq 1 - \delta P ( err ( h ) ≤ ε ) ≥ 1 − δ 。
有限假设空间的一致学习常见样本复杂度:
m ≥ 1 ε ( ln ∣ H ∣ + ln 1 δ ) m \geq \frac{1}{\varepsilon}\left(\ln |H| + \ln \frac{1}{\delta}\right)
m ≥ ε 1 ( ln ∣ H ∣ + ln δ 1 )
含义:
ε \varepsilon ε 越小,要求越精确,需要更多样本。
δ \delta δ 越小,要求越高置信度,需要更多样本。
∣ H ∣ |H| ∣ H ∣ 越大,假设空间越复杂,需要更多样本。
SVM 课件提到最大间隔符合直觉和 PAC 理论:间隔越大,分类器越稳定,泛化倾向更好。
12. 神经网络
12.1 任务与输入输出
神经网络是一类函数近似器,可用于分类、回归、序列建模、图像识别等。
输入:原始特征、图像、文本向量或其他张量。
输出由任务决定:二分类(一个概率 P ( y = 1 ∣ x ) P(y=1 \mid x) P ( y = 1 ∣ x ) );多分类(类别概率分布 ( p 1 , … , p K ) (p_1, \dots, p_K) ( p 1 , … , p K ) );回归(连续值 y ^ \hat{y} y ^ )。
学到的东西是所有层的权重和偏置:θ = { W ( 1 ) , b ( 1 ) , … , W ( L ) , b ( L ) } \theta = \{W^{(1)}, b^{(1)}, \dots, W^{(L)}, b^{(L)}\} θ = { W ( 1 ) , b ( 1 ) , … , 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 = w T x + b , a = ϕ ( z ) z = w^T x + b,\; a = \phi(z) z = w T x + b , a = ϕ ( z ) ,其中 x x x 是输入,w w w 是权重,b b b 是偏置,ϕ \phi ϕ 是激活函数,a a a 是输出激活。
如果没有非线性激活,多层线性网络仍等价于单层线性模型。原因是线性函数复合仍是线性函数:
W 2 ( W 1 x + b 1 ) + b 2 = ( W 2 W 1 ) x + ( W 2 b 1 + b 2 ) W^2(W^1 x + b_1) + b_2 = (W^2 W^1) x + (W^2 b_1 + b_2)
W 2 ( W 1 x + b 1 ) + b 2 = ( W 2 W 1 ) x + ( W 2 b 1 + b 2 )
12.4 常见激活函数
阶跃函数 接近生物神经元"超过阈值才激活"的直觉,但不连续、不光滑,不适合梯度下降。
Sigmoid :σ ( z ) = 1 1 + e − z \sigma(z) = \dfrac{1}{1+e^{-z}} σ ( z ) = 1 + e − z 1 ,输出在 ( 0 , 1 ) (0,1) ( 0 , 1 ) ,但深层网络容易梯度消失。
Tanh :tanh ( z ) = e z − e − z e z + e − z \tanh(z) = \dfrac{e^z - e^{-z}}{e^z + e^{-z}} tanh ( z ) = e z + e − z e z − e − z ,输出在 ( − 1 , 1 ) (-1,1) ( − 1 , 1 ) ,零中心。
ReLU :ReLU ( z ) = max ( 0 , z ) \text{ReLU}(z) = \max(0, z) 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)})
a ( 0 ) = x , z ( ℓ ) = W ( ℓ ) a ( ℓ − 1 ) + b ( ℓ ) , a ( ℓ ) = ϕ ( ℓ ) ( z ( ℓ ) )
最后输出 y ^ = a ( L ) \hat{y} = a^{(L)} 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)})
f ( x ) = ϕ ( L ) ( W ( L ) ϕ ( L − 1 ) ( ⋯ ϕ ( 1 ) ( W ( 1 ) x + b ( 1 ) ) ⋯ ) + b ( L ) )
输出层选择:二分类用 sigmoid;多分类用 softmax;回归用线性输出。
12.6 网络参数个数
若某层输入维度为 d ℓ − 1 d_{\ell-1} d ℓ − 1 ,输出神经元数为 d ℓ d_\ell d ℓ ,则:权重数 d ℓ d ℓ − 1 d_\ell d_{\ell-1} d ℓ d ℓ − 1 ;偏置数 d ℓ d_\ell d ℓ ;参数总数 d ℓ d ℓ − 1 + d ℓ d_\ell d_{\ell-1} + d_\ell d ℓ d ℓ − 1 + d ℓ 。
例如课件中的网络若有 [ 3 × 4 ] [3 \times 4] [ 3 × 4 ] 和 [ 4 × 2 ] [4 \times 2] [ 4 × 2 ] 两组权重,权重数为 3 ⋅ 4 + 4 ⋅ 2 = 20 3 \cdot 4 + 4 \cdot 2 = 20 3 ⋅ 4 + 4 ⋅ 2 = 2 0 ;若偏置数为 4 + 2 = 6 4 + 2 = 6 4 + 2 = 6 ,总可学习参数为 20 + 6 = 26 20 + 6 = 26 2 0 + 6 = 2 6 。
12.7 损失函数:分类用交叉熵,回归用平方误差
回归常用均方误差:L = ∥ y − y ^ ∥ 2 L = \|y - \hat{y}\|^2 L = ∥ y − y ^ ∥ 2 。
多分类常用交叉熵。若 y y y 是 one-hot 标签,y ^ \hat{y} y ^ 是 softmax 概率:L = − ∑ k = 1 K y k log y ^ k L = -\sum_{k=1}^{K} y_k \log \hat{y}_k L = − ∑ k = 1 K y k log y ^ k 。若真实类别为 t t t :L = − log y ^ t L = -\log \hat{y}_t L = − log y ^ t 。
总损失:C ( θ ) = ∑ i = 1 n L i ( θ ) C(\theta) = \sum_{i=1}^{n} L_i(\theta) C ( θ ) = ∑ i = 1 n L i ( θ ) 。训练目标:θ ∗ = arg min θ C ( θ ) \theta^* = \arg\min_\theta C(\theta) θ ∗ = arg min θ C ( θ ) 。
12.8 反向传播:链式法则的动态规划
反向传播用于高效计算每个参数的梯度。训练流程:
前向传播:从输入逐层计算输出和损失。
反向传播:从损失开始,逐层计算误差信号。
参数更新:沿负梯度方向下降。
对第 ℓ \ell ℓ 层定义误差信号 δ ( ℓ ) = ∂ L ∂ z ( ℓ ) \delta^{(\ell)} = \dfrac{\partial L}{\partial z^{(\ell)}} δ ( ℓ ) = ∂ z ( ℓ ) ∂ L 。
输出层误差根据损失函数决定。对于 softmax 加交叉熵,常见简化为 δ ( L ) = y ^ − y \delta^{(L)} = \hat{y} - y δ ( L ) = y ^ − y 。
隐藏层误差:δ ( ℓ ) = ( ( W ( ℓ + 1 ) ) T δ ( ℓ + 1 ) ) ⊙ ϕ ′ ( z ( ℓ ) ) \delta^{(\ell)} = ((W^{(\ell+1)})^T \delta^{(\ell+1)}) \odot \phi'(z^{(\ell)}) δ ( ℓ ) = ( ( W ( ℓ + 1 ) ) T δ ( ℓ + 1 ) ) ⊙ ϕ ′ ( z ( ℓ ) ) ,其中 ⊙ \odot ⊙ 是逐元素乘法。
参数梯度:∂ L ∂ W ( ℓ ) = δ ( ℓ ) ( a ( ℓ − 1 ) ) T \dfrac{\partial L}{\partial W^{(\ell)}} = \delta^{(\ell)} (a^{(\ell-1)})^T ∂ W ( ℓ ) ∂ L = δ ( ℓ ) ( a ( ℓ − 1 ) ) T ,∂ L ∂ b ( ℓ ) = δ ( ℓ ) \dfrac{\partial L}{\partial b^{(\ell)}} = \delta^{(\ell)} ∂ b ( ℓ ) ∂ L = δ ( ℓ ) 。
更新:W ( ℓ ) ← W ( ℓ ) − η ∂ L ∂ W ( ℓ ) W^{(\ell)} \leftarrow W^{(\ell)} - \eta \dfrac{\partial L}{\partial W^{(\ell)}} W ( ℓ ) ← W ( ℓ ) − η ∂ W ( ℓ ) ∂ L ,b ( ℓ ) ← b ( ℓ ) − η ∂ L ∂ b ( ℓ ) b^{(\ell)} \leftarrow b^{(\ell)} - \eta \dfrac{\partial L}{\partial b^{(\ell)}} b ( ℓ ) ← b ( ℓ ) − η ∂ b ( ℓ ) ∂ L 。
考试若不要求矩阵推导,至少要能说清:反向传播本质是链式法则,从输出层往输入层传误差,避免重复计算中间导数。
12.9 梯度下降、学习率和局部最优
参数更新总形式:θ ← θ − η ∇ θ C ( θ ) \theta \leftarrow \theta - \eta \nabla_\theta C(\theta) θ ← θ − η ∇ θ C ( θ ) 。
学习率太大可能震荡或发散;学习率太小收敛很慢。
深度网络损失通常非凸,梯度下降不保证全局最优,不同初始化可能到不同局部最小值或鞍点。
常见优化方式:
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 ∈ R H × W × C in X \in \mathbb{R}^{H \times W \times C_{\text{in}}} X ∈ R H × W × C in ,其中 H H H 是高度,W W W 是宽度,C in C_{\text{in}} C in 是通道数。
卷积层输出:Y ∈ R H ′ × W ′ × C out Y \in \mathbb{R}^{H' \times W' \times C_{\text{out}}} Y ∈ R H ′ × W ′ × C out ,每个输出通道对应一个 filter,输出称为 feature map。
13.2 CNN 的三个核心思想
局部连接 :每个神经元只看局部感受野,不连接整张图像。
权重共享 :同一个卷积核在不同空间位置重复使用,显著减少参数。
层级特征 :低层提取边缘、角点等局部特征,高层组合成更全局的语义特征。
13.3 卷积运算
一个卷积核在输入上滑动,对局部窗口做加权求和。多通道卷积可写为:
Y i , j , c o = b c o + ∑ c i = 1 C in ∑ u = 1 F h ∑ v = 1 F w K u , v , c i , c o X i S + u , j S + v , c i Y_{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}
Y i , j , c o = b c o + c i = 1 ∑ C in u = 1 ∑ F h v = 1 ∑ F w K u , v , c i , c o X i S + u , j S + v , c i
其中 K K K 是卷积核,S S S 是 stride,c o c_o c o 是输出通道。若输入大小为 H × W H \times W H × W ,卷积核大小为 F × F F \times F F × F ,padding 为 P P P ,stride 为 S S S ,则输出空间大小:
H ′ = ⌊ H + 2 P − F S ⌋ + 1 , W ′ = ⌊ W + 2 P − F S ⌋ + 1 H' = \left\lfloor \frac{H + 2P - F}{S} \right\rfloor + 1, \quad W' = \left\lfloor \frac{W + 2P - F}{S} \right\rfloor + 1
H ′ = ⌊ S H + 2 P − F ⌋ + 1 , W ′ = ⌊ S W + 2 P − F ⌋ + 1
课件强调:卷积本质上仍是 weighted sum,所以 CNN 的 BP 和全连接网络类似。
13.4 多个 filter 和 channel
一层通常使用多个 filters,因为一个 filter 只能检测一种局部模式。多个 filters 输出多个 feature maps,形成多个通道。若一层有 C out C_{\text{out}} C out 个 filter,则输出通道数为 C out C_{\text{out}} C out 。高层特征是低层特征的组合。
13.5 Pooling:降采样和局部鲁棒
Max pooling 在窗口内取最大值:Y i , j , c = max ( u , v ) ∈ W i , j X u , v , c Y_{i,j,c} = \max_{(u,v) \in \mathcal{W}_{i,j}} X_{u,v,c} Y i , j , c = max ( u , v ) ∈ 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 相比全连接网络为什么参数少
全连接层若输入图像有 H W C HWC H W C 个像素,每个隐藏神经元都连接所有像素,参数很多。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 × 19 19 \times 19 1 9 × 1 9 矩阵,黑子、白子、空位分别编码。全连接前馈网络理论上也能用,但 CNN 更适合利用棋盘局部模式。课件特别提到 AlphaGo 的 policy network 不使用 max pooling,这属于低概率细节。
13.9 特征工程与特征学习:传统机器学习和深度学习的分界
传统机器学习常见流程:
原始输入 → 人工设计特征 → 简单分类器 \text{原始输入} \to \text{人工设计特征} \to \text{简单分类器}
原始输入 → 人工设计特征 → 简单分类器
例如 SVM 中手工构造多项式特征、交互特征,或手工选择 kernel。其效果很依赖领域知识和特征工程。
深度学习更强调端到端特征学习:
原始输入 → 网络自动学习表示 → 分类/回归输出 \text{原始输入} \to \text{网络自动学习表示} \to \text{分类/回归输出}
原始输入 → 网络自动学习表示 → 分类 / 回归输出
可以把深度网络理解为学习一个复杂的特征映射 ϕ θ ( x ) \phi_\theta(x) ϕ θ ( x ) ,然后在学到的表示上接一个相对简单的分类器。优势是表达能力强、能自动学习特征;代价是数据需求大、训练成本高、可解释性较差。
14. RNN 和 Attention
隔壁班补充,低概率
14.1 RNN:适合序列数据
输入:x 1 , x 2 , … , x T x_1, x_2, \dots, x_T x 1 , x 2 , … , x T 。隐藏状态递推:h t = ϕ ( W x x t + W h h t − 1 + b ) h_t = \phi(W_x x_t + W_h h_{t-1} + b) h t = ϕ ( W x x t + W h h t − 1 + b ) 。输出:y t = g ( W y h t ) y_t = g(W_y h_t) y t = g ( W y h t ) 。
含义:h t h_t h t 保存到当前时刻为止的历史信息。RNN 适合文本、语音、时间序列。问题:长序列训练中容易梯度消失或爆炸。改进结构包括 LSTM 和 GRU。
14.2 Attention:用 Query、Key、Value 动态加权信息
Scaled dot-product attention:
Attention ( Q , K , V ) = softmax ( Q K T d k ) V \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right) V
Attention ( Q , K , V ) = softmax ( d k Q K T ) V
含义:
Query:当前位置想查什么。
Key:每个位置提供的索引。
Value:每个位置携带的信息。
Self-attention 中 Q , K , V Q, K, V Q , K , V 都来自同一序列。Transformer 主要由 self-attention 和前馈层组成。
16. 常考证明和计算模板
16.1 信息增益计算模板
数出当前集合各类别数量。
算当前熵:H ( S ) = − ∑ k p k log 2 p k H(S) = -\sum_k p_k \log_2 p_k H ( S ) = − ∑ k p k log 2 p k ,其中 p k p_k p k 是类别 k k k 的比例。
对属性 A A A 的每个取值 v v v ,数出子集 S v S_v S v 的类别比例并算 H ( S v ) H(S_v) H ( S v ) 。
算加权平均:∑ v ∣ S v ∣ ∣ S ∣ H ( S v ) \sum_v \dfrac{|S_v|}{|S|} H(S_v) ∑ v ∣ S ∣ ∣ S v ∣ H ( S v ) 。
信息增益:Gain ( S , A ) = H ( S ) − ∑ v ∣ S v ∣ ∣ S ∣ H ( S v ) \text{Gain}(S, A) = H(S) - \sum_v \dfrac{|S_v|}{|S|} H(S_v) Gain ( S , A ) = H ( S ) − ∑ v ∣ S ∣ ∣ S v ∣ H ( S v ) 。
选增益最大的属性。
16.2 最小二乘推导模板
从目标 J ( w ) = ∥ X w − y ∥ 2 J(w) = \|Xw - y\|^2 J ( w ) = ∥ X w − y ∥ 2 ,写成 J ( w ) = ( X w − y ) T ( X w − y ) J(w) = (Xw - y)^T(Xw - y) J ( w ) = ( X w − y ) T ( X w − y ) 。
求梯度:∇ w J ( w ) = 2 X T ( X w − y ) \nabla_w J(w) = 2X^T(Xw - y) ∇ w J ( w ) = 2 X T ( X w − y ) 。令 0:X T X w = X T y X^T X w = X^T y X T X w = X T y 。
给答案:w ∗ = ( X T X ) − 1 X T y w^* = (X^T X)^{-1} X^T y w ∗ = ( X T X ) − 1 X T y 。
加权时把中间都加上 R R R :w ∗ = ( X T R X ) − 1 X T R y w^* = (X^T R X)^{-1} X^T R y w ∗ = ( X T R X ) − 1 X T R y 。
正则时把左边矩阵加 λ I \lambda I λ I 或 λ D \lambda D λ D 。
16.3 Logistic 梯度模板
记 p = σ ( w T x + b ) p = \sigma(w^T x + b) p = σ ( w T x + b ) ,损失 L = − [ y log p + ( 1 − y ) log ( 1 − p ) ] L = -[y \log 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 ∂ z ∂ L = p − y 。再写:
∂ L ∂ w j = ( p − y ) x j , ∂ L ∂ b = p − y \frac{\partial L}{\partial w_j} = (p - y)x_j, \quad \frac{\partial L}{\partial b} = p - y
∂ w j ∂ L = ( p − y ) x j , ∂ b ∂ L = p − y
16.4 SVM 手算模板
画图,找支持向量。
正支持向量列 w T x + b = 1 w^T x + b = 1 w T x + b = 1 。
负支持向量列 w T x + b = − 1 w^T x + b = -1 w T x + b = − 1 。
解 w , b w, b w , b 。
检查全部约束 y i ( w T x i + b ) ≥ 1 y_i(w^T x_i + b) \geq 1 y i ( w T x i + b ) ≥ 1 。
写:w T x + b = 0 w^T x + b = 0 w T x + b = 0 ,w T x + b = 1 w^T x + b = 1 w T x + b = 1 ,w T x + b = − 1 w^T x + b = -1 w T x + b = − 1 ,g ( x ) = sign ( w T x + b ) g(x) = \text{sign}(w^T x + b) g ( x ) = sign ( w T x + b ) 。
间隔宽度:2 ∥ w ∥ \dfrac{2}{\|w\|} ∥ w ∥ 2 。
16.6 核矩阵半正定证明模板
若 K i j = ϕ ( x i ) T ϕ ( x j ) K_{ij} = \phi(x_i)^T \phi(x_j) K i j = ϕ ( x i ) T ϕ ( x j ) ,则对任意 a a a :
a T K a = ∑ i ∑ j a i a j ϕ ( x i ) T ϕ ( x j ) = ∥ ∑ i a i ϕ ( x i ) ∥ 2 ≥ 0 a^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
a T K a = i ∑ j ∑ a i a j ϕ ( x i ) T ϕ ( x j ) = ∥ ∥ ∥ ∥ ∥ ∥ i ∑ a i ϕ ( x i ) ∥ ∥ ∥ ∥ ∥ ∥ 2 ≥ 0
所以核矩阵半正定。
17. 判断题速查
模型越复杂越好:错 ,可能过拟合。
决策树能表示任意离散函数:对 ,但可能很大且泛化差。
无冲突训练集存在零训练误差决策树:对 。
根节点信息增益一定大于子节点信息增益:错 ,数据子集不同。
k 越大,kNN 训练精度越高:错 。
线性分类器决策边界是超平面:对 。
最小二乘分类容易训练、有闭式解,但不是分类最优选择:对 。
逻辑回归输出概率:对 。
逻辑回归决策边界在原始特征空间是线性的:对 。
SVM 支持向量决定边界:对 。
hard margin 非支持向量通常不影响解:对 。
soft margin 允许违反间隔甚至错分:对 。
RBF 核只能线性分类:错 。
有效核矩阵应对称半正定:对 。
K-Means 会收敛到全局最优:错 。
K-Means 会终止或收敛到局部最优:对 。
PCA 可用于去噪:对 。
无激活的多层神经网络仍等价于线性模型:对 。
CNN 权重共享减少参数量:对 。
深度学习一定比传统机器学习好:错 。
18. 最后一页压缩版
决策树:Gain ( S , A ) = H ( S ) − ∑ v ∣ S v ∣ ∣ S ∣ H ( S v ) \text{Gain}(S, A) = H(S) - \sum_v \dfrac{|S_v|}{|S|} H(S_v) Gain ( S , A ) = H ( S ) − ∑ v ∣ S ∣ ∣ S v ∣ H ( S v )
kNN:y ^ = majority { y i : x i ∈ N k ( x ) } \hat{y} = \text{majority}\{y_i : x_i \in N_k(x)\} y ^ = majority { y i : x i ∈ N k ( x ) }
最小二乘:w ∗ = ( X T X ) − 1 X T y w^* = (X^T X)^{-1} X^T y w ∗ = ( X T X ) − 1 X T y
加权最小二乘:w ∗ = ( X T R X ) − 1 X T R y w^* = (X^T R X)^{-1} X^T R y w ∗ = ( X T R X ) − 1 X T R y
逻辑回归:p = σ ( w T x + b ) p = \sigma(w^T x + b) p = σ ( w T x + b ) ,L = − [ y log p + ( 1 − y ) log ( 1 − p ) ] L = -[y \log p + (1-y)\log(1-p)] L = − [ y log p + ( 1 − y ) log ( 1 − p ) ] ,∇ w L = ( p − y ) x \nabla_w L = (p - y)x ∇ w L = ( p − y ) x
SVM:min w , b 1 2 ∥ w ∥ 2 \min_{w,b} \tfrac{1}{2}\|w\|^2 min w , b 2 1 ∥ w ∥ 2 ,y i ( w T x i + b ) ≥ 1 y_i(w^T x_i + b) \geq 1 y i ( w T x i + b ) ≥ 1 ,margin width = 2 ∥ w ∥ = \tfrac{2}{\|w\|} = ∥ w ∥ 2 ,ℓ hinge = max ( 0 , 1 − y i f ( x i ) ) \ell_{\text{hinge}} = \max(0, 1 - y_i f(x_i)) ℓ 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 ( x , z ) = ϕ ( x ) T ϕ ( z )
K-Means:c i = arg min k ∥ x i − μ k ∥ 2 c_i = \arg\min_k \|x_i - \mu_k\|^2 c i = arg min k ∥ x i − μ k ∥ 2 ,μ k = 1 ∣ C k ∣ ∑ x i ∈ C k x i \mu_k = \tfrac{1}{|C_k|} \sum_{x_i \in C_k} x_i μ k = ∣ C k ∣ 1 ∑ x i ∈ C k x i
PCA:S u j = λ j u j S u_j = \lambda_j u_j S u j = λ j u j ,z i = U k T ( x i − x ˉ ) z_i = U_k^T (x_i - \bar{x}) z i = U k T ( x i − x ˉ )
神经网络:a ( ℓ ) = ϕ ( W ( ℓ ) a ( ℓ − 1 ) + b ( ℓ ) ) a^{(\ell)} = \phi(W^{(\ell)} a^{(\ell-1)} + b^{(\ell)}) a ( ℓ ) = ϕ ( W ( ℓ ) a ( ℓ − 1 ) + b ( ℓ ) )
BP:δ ( ℓ ) = ( ( W ( ℓ + 1 ) ) T δ ( ℓ + 1 ) ) ⊙ ϕ ′ ( z ( ℓ ) ) \delta^{(\ell)} = ((W^{(\ell+1)})^T \delta^{(\ell+1)}) \odot \phi'(z^{(\ell)}) δ ( ℓ ) = ( ( W ( ℓ + 1 ) ) T δ ( ℓ + 1 ) ) ⊙ ϕ ′ ( z ( ℓ ) )
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 中推出隐藏事实和行动。
这三章实际是一条线:
命题逻辑 :先把"语法、语义、模型、蕴涵、可靠性、完备性、归结"等基本概念讲清楚。
一阶逻辑 :把命题内部拆成对象、关系、函数、量词,让知识表示更紧凑。
一阶逻辑推理 :因为有变量和量词,所以推理要用实例化、合一、GMP、链式推理、Skolem 化和一阶归结。
最终你要会三件事:
把自然语言写成逻辑公式。
判断一个结论是否由知识库蕴涵。
把证明题规整成 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 ≥ y x + 2 \geq y x + 2 ≥ y 是合法语句,而残缺的 x 2 + y > x^2 + y > x 2 + y > 不是合法语句。前者在 x = 7 , y = 1 x=7, y=1 x = 7 , y = 1 的世界中为真,在 x = 0 , y = 6 x=0, y=6 x = 0 , y = 6 的世界中为假。
2.2 模型
模型是可以判定语句真假的形式化世界。若语句 α \alpha α 在模型 m m m 中为真,记作 m ⊨ α m \models \alpha m ⊨ α 。若 M ( α ) M(\alpha) M ( α ) 表示所有使 α \alpha α 为真的模型集合,则 M ( α ) = { m ∣ m ⊨ α } M(\alpha) = \{m \mid m \models \alpha\} M ( α ) = { m ∣ m ⊨ α } 。
2.3 蕴涵
KB 蕴涵 α \alpha α 的含义是:所有使 KB 为真的模型,也都使 α \alpha α 为真。
K B ⊨ α KB \models \alpha
K B ⊨ α
等价地:M ( K B ) ⊆ M ( α ) M(KB) \subseteq M(\alpha) M ( K B ) ⊆ M ( α ) 。
重点:蕴涵是语义概念,讨论所有模型中的必然真;不是算法有没有算出来。
2.4 推理
若推理过程 i i i 可以从 KB 导出 α \alpha α ,记作 K B ⊢ i α KB \vdash_i \alpha K B ⊢ i α 。推理是算法概念。考试里最常考两条性质:
可靠性 (soundness) :算法推出的都真。K B ⊢ i α ⇒ K B ⊨ α KB \vdash_i \alpha \Rightarrow KB \models \alpha K B ⊢ i α ⇒ K B ⊨ α
完备性 (completeness) :语义上必然真的都能推出。K B ⊨ α ⇒ K B ⊢ i α KB \models \alpha \Rightarrow KB \vdash_i \alpha K B ⊨ α ⇒ K B ⊢ i α
可以这样记:sound = 不会乱推出;complete = 该推出的都能推出。
3. 命题逻辑
3.1 命题逻辑能表达什么
命题逻辑把世界看成一组原子事实,每个命题符号只有真或假。常见命题符号:P , Q , R , P 1 , 2 , B 2 , 1 P, Q, R, P_{1,2}, B_{2,1} P , Q , R , P 1 , 2 , B 2 , 1 。
命题逻辑连接词:¬ S , S 1 ∧ S 2 , S 1 ∨ S 2 , S 1 ⇒ S 2 , S 1 ⇔ S 2 \lnot S,\; S_1 \land S_2,\; S_1 \lor S_2,\; S_1 \Rightarrow S_2,\; S_1 \Leftrightarrow S_2 ¬ S , S 1 ∧ S 2 , S 1 ∨ S 2 , S 1 ⇒ S 2 , S 1 ⇔ S 2 。
一个模型给每个命题符号赋真值。例如三个命题符号 A , B , C A, B, C A , B , C 有 2 3 = 8 2^3 = 8 2 3 = 8 个模型。
3.2 命题逻辑语义
在模型 m m m 中:
¬ S 1 \lnot S_1 ¬ S 1 为真 ⇔ \Leftrightarrow ⇔ S 1 S_1 S 1 为假
S 1 ∧ S 2 S_1 \land S_2 S 1 ∧ S 2 为真 ⇔ \Leftrightarrow ⇔ S 1 S_1 S 1 为真且 S 2 S_2 S 2 为真
S 1 ∨ S 2 S_1 \lor S_2 S 1 ∨ S 2 为真 ⇔ \Leftrightarrow ⇔ S 1 S_1 S 1 为真或 S 2 S_2 S 2 为真
S 1 ⇒ S 2 S_1 \Rightarrow S_2 S 1 ⇒ S 2 为假 ⇔ \Leftrightarrow ⇔ S 1 S_1 S 1 为真且 S 2 S_2 S 2 为假
S 1 ⇔ S 2 S_1 \Leftrightarrow S_2 S 1 ⇔ S 2 为真 ⇔ \Leftrightarrow ⇔ ( S 1 ⇒ S 2 ) ∧ ( S 2 ⇒ S 1 ) (S_1 \Rightarrow S_2) \land (S_2 \Rightarrow S_1) ( S 1 ⇒ S 2 ) ∧ ( S 2 ⇒ S 1 ) 为真
3.3 Wumpus 的命题逻辑写法
定义:P i , j P_{i,j} P i , j :[ i , j ] [i,j] [ i , j ] 有陷阱;B i , j B_{i,j} B i , j :[ i , j ] [i,j] [ i , j ] 有微风。
在局部格子中:
B 1 , 1 ⇔ ( P 1 , 2 ∨ P 2 , 1 ) B_{1,1} \Leftrightarrow (P_{1,2} \lor P_{2,1})
B 1 , 1 ⇔ ( P 1 , 2 ∨ P 2 , 1 )
如果感知到 [ 1 , 1 ] [1,1] [ 1 , 1 ] 没有微风 ¬ B 1 , 1 \lnot B_{1,1} ¬ B 1 , 1 ,则可推出 ¬ P 1 , 2 ∧ ¬ P 2 , 1 \lnot P_{1,2} \land \lnot P_{2,1} ¬ P 1 , 2 ∧ ¬ P 2 , 1 。
再如:B 2 , 1 ⇔ ( P 1 , 1 ∨ P 2 , 2 ∨ P 3 , 1 ) B_{2,1} \Leftrightarrow (P_{1,1} \lor P_{2,2} \lor P_{3,1}) B 2 , 1 ⇔ ( P 1 , 1 ∨ P 2 , 2 ∨ P 3 , 1 ) 。
这里命题逻辑的缺点也暴露了:每个格子都要手写一条规则,不能自然表达"任意相邻格子"。
3.4 真值表推理
真值表推理枚举所有模型:
枚举命题符号的所有真值赋值。
只看使 KB 为真的行。
检查这些行中 α \alpha α 是否都为真。
性质:可靠;完备;时间复杂度 O ( 2 n ) O(2^n) O ( 2 n ) ;空间复杂度可做到 O ( n ) O(n) O ( n ) ,其中 n n n 是命题符号个数。课件还指出,命题逻辑的蕴涵判定对应的问题是 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 ∨ ¬ A A \lor \lnot A A ∨ ¬ A ,A ⇒ A A \Rightarrow A A ⇒ A ,( A ∧ ( A ⇒ B ) ) ⇒ B (A \land (A \Rightarrow B)) \Rightarrow B ( A ∧ ( A ⇒ B ) ) ⇒ B 。
可满足 :至少存在一个模型使语句为真。
不可满足 :没有任何模型使语句为真。例:A ∧ ¬ A A \land \lnot A A ∧ ¬ A 。
最关键的证明转化:
K B ⊨ α ⟺ K B ∧ ¬ α 不可满足 KB \models \alpha \iff KB \land \lnot\alpha \text{ 不可满足}
K B ⊨ α ⟺ K B ∧ ¬ α 不可满足
也就是反证法:想证明 α \alpha α ,就把 ¬ α \lnot\alpha ¬ α 加进知识库,看能否推出矛盾。
3.7 两类证明方法
课件把证明方法分成两类:
模型检查 :枚举模型、DPLL、模型空间启发式搜索等。
推理规则 :从旧句子可靠地产生新句子,证明是推理规则应用序列。
模型检查通常直接但可能指数复杂;推理规则更像搜索证明路径,常常需要先转成范式。
4. Horn 子句、前向链和后向链
4.1 Horn 子句
Horn 子句是最多只有一个正文字的子句,只有两种形式:单个命题符号,符号合取蕴涵单个符号。确定子句(在 KB 中称为规则)是恰好一个正文字的 Horn 子句,常写为:
P 1 ∧ P 2 ∧ ⋯ ∧ P m ⇒ Q P_1 \land P_2 \land \dots \land P_m \Rightarrow Q
P 1 ∧ P 2 ∧ ⋯ ∧ P m ⇒ Q
对应 CNF 子句:¬ P 1 ∨ ¬ P 2 ∨ ⋯ ∨ ¬ P m ∨ Q \lnot P_1 \lor \lnot P_2 \lor \dots \lor \lnot P_m \lor Q ¬ P 1 ∨ ¬ P 2 ∨ ⋯ ∨ ¬ P m ∨ Q 。
若没有正文字:P 1 ∧ P 2 ∧ ⋯ ∧ P m ⇒ ⊥ P_1 \land P_2 \land \dots \land P_m \Rightarrow \bot P 1 ∧ P 2 ∧ ⋯ ∧ P m ⇒ ⊥ ,表示约束或矛盾。
Kowalski 形式就是把规则写成"前提合取推出结论":P 1 ∧ ⋯ ∧ P m ⇒ Q P_1 \land \dots \land P_m \Rightarrow Q P 1 ∧ ⋯ ∧ P m ⇒ Q 。
4.2 假言推理(Modus Ponens)
命题逻辑的分离规则:
P , P ⇒ Q Q \frac{P,\quad P \Rightarrow Q}{Q}
Q P , P ⇒ 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 后向链
后向链是目标驱动:从查询 q q q 出发,找所有能推出 q q q 的规则,再递归证明这些规则的前提。证明 q q q 时:
若 q q q 已知为真,成功。
找所有形如 p 1 , … , p k p_1, \dots, p_k p 1 , … , p k 推出 q q q 的规则。
递归证明 p 1 , … , p k p_1, \dots, p_k p 1 , … , 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) ( A ∨ ¬ B ) ∧ ( B ∨ ¬ C ∨ ¬ D ) 。文字是原子命题或其否定。子句是文字析取。
5.2 命题归结规则
若两个子句含有互补文字,可以删去互补文字并合并剩余部分:
P ∨ Q , ¬ Q ∨ R P ∨ R \frac{P \lor Q,\quad \lnot Q \lor R}{P \lor R}
P ∨ R P ∨ Q , ¬ Q ∨ R
若归结得到空子句 □ \square □ ,则表示矛盾。命题逻辑中,归结是可靠且完备的。
5.3 命题 CNF 转换
把公式转 CNF:
消去双向蕴涵 :A ⇔ B ≡ ( A ⇒ B ) ∧ ( B ⇒ A ) A \Leftrightarrow B \equiv (A \Rightarrow B) \land (B \Rightarrow A) A ⇔ B ≡ ( A ⇒ B ) ∧ ( B ⇒ A )
消去蕴涵 :A ⇒ B ≡ ¬ A ∨ B A \Rightarrow B \equiv \lnot A \lor B A ⇒ B ≡ ¬ A ∨ B
否定内移 :¬ ( A ∧ B ) ≡ ¬ A ∨ ¬ B \lnot(A \land B) \equiv \lnot A \lor \lnot B ¬ ( A ∧ B ) ≡ ¬ A ∨ ¬ B ,¬ ( A ∨ B ) ≡ ¬ A ∧ ¬ B \lnot(A \lor B) \equiv \lnot A \land \lnot B ¬ ( A ∨ B ) ≡ ¬ A ∧ ¬ B
用分配律把析取分配到合取内部 :A ∨ ( B ∧ C ) ≡ ( A ∨ B ) ∧ ( A ∨ C ) A \lor (B \land C) \equiv (A \lor B) \land (A \lor C) A ∨ ( B ∧ C ) ≡ ( A ∨ B ) ∧ ( A ∨ C )
拆成子句集合 。
5.4 归结证明模板(反证法)
要证明 K B ⊨ α KB \models \alpha K B ⊨ α ,做法:
把 KB 转为 CNF 子句(A ∨ B A \lor B A ∨ B )。
把目标否定 ¬ α \lnot\alpha ¬ α 加入。
不断归结:将子句合并。
若推出空子句 □ \square □ ,则 K B ⊨ α KB \models \alpha K B ⊨ α 。
这就是:K B ⊨ α ⟺ K B ∧ ¬ α KB \models \alpha \iff KB \land \lnot\alpha K B ⊨ α ⟺ K B ∧ ¬ α 不可满足。
6. 命题逻辑 → 一阶逻辑
6.1 命题逻辑的优点
命题逻辑有几个重要优点:
陈述性:知识和推理分开。
能表示不完整信息、析取信息、否定信息。
合成性:复合句含义由子句含义决定。
上下文无关:不像自然语言那样高度依赖语境。
6.2 命题逻辑的缺点
命题逻辑表达力弱,不能自然表达对象、关系、函数和量词。例如"所有学生都懂算术",命题逻辑只能枚举:
StudentAlice ⇒ KnowsArithmeticAlice \text{StudentAlice} \Rightarrow \text{KnowsArithmeticAlice}
StudentAlice ⇒ KnowsArithmeticAlice
StudentBob ⇒ KnowsArithmeticBob \text{StudentBob} \Rightarrow \text{KnowsArithmeticBob}
StudentBob ⇒ KnowsArithmeticBob
一阶逻辑可以写成:∀ x ( Student ( x ) ⇒ Knows ( x , Arithmetic ) ) \forall x\, (\text{Student}(x) \Rightarrow \text{Knows}(x, \text{Arithmetic})) ∀ x ( Student ( x ) ⇒ Knows ( x , Arithmetic ) ) 。
Wumpus 世界中的"相邻格子有陷阱当且仅当当前格子有微风"也不应为每个格子手写,而应抽象成对象和关系。
6.3 一阶逻辑的世界观
命题逻辑假设世界由事实组成。一阶逻辑假设世界包含:
对象 :人、数字、课程、格子、门电路。
关系 :红色、兄弟关系、大于、相邻、拥有。
函数 :父亲、左腿、平方根、加一。
逻辑
世界中存在什么
智能体对事实的态度
命题逻辑
事实
真、假、未知
一阶逻辑
事实、对象、关系
真、假、未知
时序逻辑
事实、对象、关系、时间
真、假、未知
概率逻辑
事实
信度在 [ 0 , 1 ] [0,1] [ 0 , 1 ]
7. 一阶逻辑的语法和语义
7.1 基本符号
一阶逻辑的基本元素:
常量 :指代具体对象,如 Robbie、Bob、USTC。
变量 :如 x , y , z x, y, z x , y , z ,由量词绑定。
函数 :从对象到对象,如 Mother ( x ) \text{Mother}(x) Mother ( x ) 、Father ( Bob ) \text{Father}(\text{Bob}) Father ( Bob ) 。
谓词 :返回真或假,如 Robot ( x ) \text{Robot}(x) Robot ( x ) 、Owns ( x , y ) \text{Owns}(x, y) 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)) x , Bob , Mother ( x ) , Father ( 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} Robot ( Robbie ) , Loves ( Bob , Mother ( Bob ) ) , Father ( x ) = John 。
函数项不能单独为真或假。谓词公式才能为真或假。
7.3 一阶逻辑模型和解释
一阶逻辑中的模型包含域元素以及它们之间的关系。解释负责说明符号指代什么:
常量符号指向域中的对象。
谓词符号指向域上的关系。
函数符号指向域上的函数关系。
原子语句 Predicate ( t 1 , … , t n ) \text{Predicate}(t_1, \dots, t_n) Predicate ( t 1 , … , t n ) 为真,当且仅当 t 1 , … , t n t_1, \dots, t_n t 1 , … , t n 指代的对象确实处在该谓词指代的关系中。
FOL 的模型远多于命题逻辑:域大小可以从 1 到无穷;每个谓词都可解释为不同关系;常量也可指向不同对象。因此直接枚举一阶模型通常不可行。
8. 量词
8.1 全称量词
全称量词 ∀ x P ( x ) \forall x\, P(x) ∀ x P ( x ) 表示域中每个对象都使 P ( x ) P(x) P ( x ) 成立。它大致相当于所有实例的合取:P ( a 1 ) ∧ P ( a 2 ) ∧ … P(a_1) \land P(a_2) \land \dots P ( a 1 ) ∧ P ( a 2 ) ∧ … 。
"所有 A 都是 B"的标准模板:∀ x ( A ( x ) ⇒ B ( x ) ) \forall x\, (A(x) \Rightarrow B(x)) ∀ x ( A ( x ) ⇒ B ( x ) ) 。
不要写成 ∀ x ( A ( x ) ∧ B ( x ) ) \forall x\, (A(x) \land B(x)) ∀ x ( A ( x ) ∧ B ( x ) ) ,后者表示世界中每个对象都是 A 且都是 B,太强。
8.2 存在量词
存在量词 ∃ x P ( x ) \exists x\, P(x) ∃ x P ( x ) 表示至少有一个对象使 P ( x ) P(x) P ( x ) 成立。它大致相当于所有实例的析取:P ( a 1 ) ∨ P ( a 2 ) ∨ … P(a_1) \lor P(a_2) \lor \dots P ( a 1 ) ∨ P ( a 2 ) ∨ … 。
"有些 A 是 B"的标准模板:∃ x ( A ( x ) ∧ B ( x ) ) \exists x\, (A(x) \land B(x)) ∃ x ( A ( x ) ∧ B ( x ) ) 。
不要写成 ∃ x ( A ( x ) ⇒ B ( x ) ) \exists x\, (A(x) \Rightarrow B(x)) ∃ x ( A ( x ) ⇒ 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 )
∃ 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 P ( x , y ) ≡ ∃ y ∃ x P ( x , y )
不同类量词一般不可交换:
∃ x ∀ y Loves ( x , y ) \exists x \forall y\, \text{Loves}(x,y) ∃ x ∀ y Loves ( x , y ) 表示"存在某个人爱所有人"。
∀ y ∃ x Loves ( x , y ) \forall y \exists x\, \text{Loves}(x,y) ∀ y ∃ x 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 )
¬ ∃ x P ( x ) ≡ ∀ x ¬ P ( x ) \lnot \exists x\, P(x) \equiv \forall x\, \lnot P(x)
¬ ∃ x P ( x ) ≡ ∀ x ¬ 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 )
∃ x P ( x ) ≡ ¬ ∀ x ¬ P ( x ) \exists x\, P(x) \equiv \lnot \forall x\, \lnot P(x)
∃ x P ( x ) ≡ ¬ ∀ x ¬ P ( x )
变量名本身不重要,但改名必须避免变量捕获。
8.4 等号
等号表示两个项指代同一对象:t 1 = t 2 t_1 = t_2 t 1 = t 2 。常用于唯一性、计数、不同对象约束:x ≠ y x \neq y x = 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))))
∀ x ∀ y ( Sibling ( x , y ) ⇔ ( x = y ∧ ∃ m ∃ f ( m = f ∧ Parent ( m , x ) ∧ Parent ( f , x ) ∧ Parent ( m , y ) ∧ Parent ( f , y ) ) ) )
9. 自然语言翻译模板
9.1 所有 A 都是 B :∀ x ( A ( x ) ⇒ B ( x ) ) \forall x\, (A(x) \Rightarrow B(x)) ∀ x ( A ( x ) ⇒ B ( x ) )
9.2 有些 A 是 B :∃ x ( A ( x ) ∧ B ( x ) ) \exists x\, (A(x) \land B(x)) ∃ x ( A ( x ) ∧ B ( x ) )
9.3 没有 A 是 B :∀ x ( A ( x ) ⇒ ¬ B ( x ) ) \forall x\, (A(x) \Rightarrow \lnot B(x)) ∀ x ( A ( x ) ⇒ ¬ B ( x ) ) ,等价于 ¬ ∃ x ( A ( x ) ∧ B ( x ) ) \lnot \exists x\, (A(x) \land B(x)) ¬ ∃ x ( A ( x ) ∧ 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 ( A ( x ) ⇒ ∃ y ( B ( y ) ∧ R ( x , y ) ) )
例:“每个哺乳动物都有一个家长”:∀ x ( Mammal ( x ) ⇒ ∃ y Parent ( y , x ) ) \forall x\, (\text{Mammal}(x) \Rightarrow \exists y\, \text{Parent}(y, x)) ∀ x ( Mammal ( x ) ⇒ ∃ y 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))) ∃ y ( B ( y ) ∧ ∀ x ( A ( x ) ⇒ R ( x , y ) ) )
对比:∀ x ∃ y R ( x , y ) \forall x \exists y\, R(x,y) ∀ x ∃ y R ( x , y ) (每个 x x x 可以对应不同 y y y );∃ y ∀ x R ( x , y ) \exists y \forall x\, R(x,y) ∃ y ∀ x R ( x , y ) (同一个 y y y 对所有 x x x 适用)。
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))))
∀ x ( Child ( x ) ⇒ ( Loves ( x , Mother ( x ) ) ∨ Loves ( x , Father ( x ) ) ) )
错误直觉是把 Mother ( x ) \text{Mother}(x) Mother ( x ) 和 Father ( x ) \text{Father}(x) Father ( x ) 当成能析取的命题。它们是函数项,是对象,不是真假句子。
9.7 只有一个、至多一个、恰好两个 :
“只有一个对象满足 P P P ”:∃ x ( P ( x ) ∧ ∀ y ( P ( y ) ⇒ y = x ) ) \exists x\, (P(x) \land \forall y\, (P(y) \Rightarrow y = x)) ∃ x ( P ( x ) ∧ ∀ y ( P ( y ) ⇒ y = x ) )
“至多一个对象满足 P P P ”:∀ x ∀ y ( ( P ( x ) ∧ P ( y ) ) ⇒ x = y ) \forall x \forall y\, ((P(x) \land P(y)) \Rightarrow x = y) ∀ x ∀ y ( ( P ( x ) ∧ P ( y ) ) ⇒ x = y )
“恰好两个对象满足 P P P ”:∃ 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))) ∃ x ∃ y ( x = y ∧ P ( x ) ∧ P ( y ) ∧ ∀ z ( P ( z ) ⇒ ( z = x ∨ z = y ) ) )
9.8 函数还是谓词
若每个对象唯一对应另一个对象,用函数:Mother ( x ) \text{Mother}(x) Mother ( x ) 。
若关系可能一对多、零个或多个,用谓词:Friend ( x , y ) \text{Friend}(x, y) Friend ( x , y ) 。
"母亲"通常可作为函数;"朋友"通常不应写成函数。
10. 一阶逻辑知识工程
10.1 七步法
课件给出的一阶逻辑知识工程流程:
确定任务。
搜集相关知识。
决定谓词、函数、常量的词汇表。
编码领域通用知识。
编码具体问题实例。
向推理过程提交查询并获取答案。
调试知识库。
考试翻译题最关键的是第 3 步:先定义一致的谓词表,后面不要混用关系方向。
10.2 与 FOL KB 交互
在一阶逻辑知识库中,ASK 常返回一个代换。例如 Ask ( KB , ∃ a BestAction ( a , 5 ) ) \text{Ask}(\text{KB}, \exists a\, \text{BestAction}(a, 5)) Ask ( KB , ∃ a BestAction ( a , 5 ) ) 可能返回 { a ↦ Shoot } \{a \mapsto \text{Shoot}\} { a ↦ Shoot } 。
给定语句 S S S 和代换 σ \sigma σ ,S σ S\sigma S σ 表示把 σ \sigma σ 代入 S S S 。例如 S = Smarter ( x , y ) , σ = { x ↦ Hillary , y ↦ Bill } S = \text{Smarter}(x,y),\; \sigma = \{x \mapsto \text{Hillary}, y \mapsto \text{Bill}\} S = Smarter ( x , y ) , σ = { x ↦ Hillary , y ↦ Bill } ,则 S σ = Smarter ( Hillary , Bill ) S\sigma = \text{Smarter}(\text{Hillary}, \text{Bill}) S σ = Smarter ( Hillary , 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 ∀ s ∀ b ( Percept ( [ s , b , Glitter ] , t ) ⇒ Glitter ( t ) )
反射规则:∀ t ( Glitter ( t ) ⇒ BestAction ( Grab , t ) ) \forall t\, (\text{Glitter}(t) \Rightarrow \text{BestAction}(\text{Grab}, t)) ∀ t ( Glitter ( t ) ⇒ BestAction ( 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)) ∀ t ( AtGold ( t ) ∧ ¬ Holding ( Gold , t ) ⇒ BestAction ( 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]\}) ∀ x ∀ y ∀ a ∀ b ( Adjacent ( [ x , y ] , [ a , b ] ) ⇔ [ a , b ] ∈ { [ 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 ∀ t ( At ( Agent , s , t ) ∧ Breeze ( t ) ⇒ 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))) ∀ s ( Breezy ( s ) ⇒ ∃ r ( Adjacent ( r , s ) ∧ 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)) ∀ r ∀ s ( Adjacent ( r , s ) ∧ Pit ( r ) ⇒ 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))) ∀ s ( Breezy ( s ) ⇔ ∃ r ( Adjacent ( r , s ) ∧ Pit ( r ) ) )
注意:只写向右、向上的相邻会漏掉方向;没有边界约束会生成不存在的格子;x + 1 x+1 x + 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 ( Brother ( x , y ) ⇒ 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 ( Sibling ( x , y ) ⇔ 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 ( Mother ( x , y ) ⇔ ( Female ( x ) ∧ Parent ( x , y ) ) )
堂表亲是父母手足的孩子:∀ x ∀ y ( Cousin ( x , y ) ⇔ ∃ p ∃ p s ( Parent ( p , x ) ∧ Sibling ( p s , p ) ∧ Parent ( p s , 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))) ∀ x ∀ y ( Cousin ( x , y ) ⇔ ∃ p ∃ p s ( Parent ( p , x ) ∧ Sibling ( p s , p ) ∧ Parent ( p s , y ) ) )
10.5 集合领域
集合的递归构造:∀ s ( Set ( s ) ⇔ ( s = { } ∨ ∃ x ∃ s 2 ( Set ( s 2 ) ∧ s = { x ∣ s 2 } ) ) ) \forall s\, (\text{Set}(s) \Leftrightarrow (s = \{\} \lor \exists x \exists s_2\, (\text{Set}(s_2) \land s = \{x \mid s_2\}))) ∀ s ( Set ( s ) ⇔ ( s = { } ∨ ∃ x ∃ s 2 ( Set ( s 2 ) ∧ s = { x ∣ s 2 } ) ) )
空集不能分解:¬ ∃ x ∃ s ( { x ∣ s } = { } ) \lnot \exists x \exists s\, (\{x \mid s\} = \{\}) ¬ ∃ x ∃ s ( { x ∣ s } = { } )
元素属于集合的递归定义:∀ x ∀ s ( x ∈ s ⇔ ∃ y ∃ s 2 ( s = { y ∣ s 2 } ∧ ( x = y ∨ x ∈ s 2 ) ) ) \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))) ∀ x ∀ s ( x ∈ s ⇔ ∃ y ∃ s 2 ( s = { y ∣ s 2 } ∧ ( x = y ∨ x ∈ s 2 ) ) )
子集:∀ s 1 ∀ s 2 ( s 1 ⊆ s 2 ⇔ ∀ x ( x ∈ s 1 ⇒ x ∈ s 2 ) ) \forall s_1 \forall s_2\, (s_1 \subseteq s_2 \Leftrightarrow \forall x\, (x \in s_1 \Rightarrow x \in s_2)) ∀ s 1 ∀ s 2 ( s 1 ⊆ s 2 ⇔ ∀ x ( x ∈ s 1 ⇒ x ∈ s 2 ) )
集合相等:∀ s 1 ∀ s 2 ( s 1 = s 2 ⇔ ( s 1 ⊆ s 2 ∧ s 2 ⊆ s 1 ) ) \forall s_1 \forall s_2\, (s_1 = s_2 \Leftrightarrow (s_1 \subseteq s_2 \land s_2 \subseteq s_1)) ∀ s 1 ∀ s 2 ( s 1 = s 2 ⇔ ( s 1 ⊆ s 2 ∧ s 2 ⊆ s 1 ) )
交集:∀ x ∀ s 1 ∀ s 2 ( x ∈ ( s 1 ∩ s 2 ) ⇔ ( x ∈ s 1 ∧ x ∈ s 2 ) ) \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 ∀ s 1 ∀ s 2 ( x ∈ ( s 1 ∩ s 2 ) ⇔ ( x ∈ s 1 ∧ x ∈ s 2 ) )
并集:∀ x ∀ s 1 ∀ s 2 ( x ∈ ( s 1 ∪ s 2 ) ⇔ ( x ∈ s 1 ∨ x ∈ s 2 ) ) \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)) ∀ x ∀ s 1 ∀ s 2 ( x ∈ ( s 1 ∪ s 2 ) ⇔ ( x ∈ s 1 ∨ x ∈ s 2 ) )
10.6 电路领域
课件用一位全加器说明知识工程。
任务:验证电路是否正确相加。
相关知识:电路由导线和门组成;门类型包括 AND、OR、XOR、NOT;门的大小、颜色、成本通常无关。
词汇表有不同选择:Type ( X 1 ) = XOR \text{Type}(X_1) = \text{XOR} Type ( X 1 ) = XOR / Type ( X 1 , XOR ) \text{Type}(X_1, \text{XOR}) Type ( X 1 , XOR ) / XOR ( X 1 ) \text{XOR}(X_1) XOR ( X 1 ) 。
通用公理:
相连端口信号相同:∀ t 1 ∀ t 2 ( Connected ( t 1 , t 2 ) ⇒ Signal ( t 1 ) = Signal ( t 2 ) ) \forall t_1 \forall t_2\, (\text{Connected}(t_1, t_2) \Rightarrow \text{Signal}(t_1) = \text{Signal}(t_2)) ∀ t 1 ∀ t 2 ( Connected ( t 1 , t 2 ) ⇒ Signal ( t 1 ) = Signal ( t 2 ) )
信号只能是 0 或 1:∀ t ( Signal ( t ) = 1 ∨ Signal ( t ) = 0 ) \forall t\, (\text{Signal}(t) = 1 \lor \text{Signal}(t) = 0) ∀ t ( Signal ( t ) = 1 ∨ Signal ( t ) = 0 ) ,并且 1 ≠ 0 1 \neq 0 1 = 0 。
连接关系对称:∀ t 1 ∀ t 2 ( Connected ( t 1 , t 2 ) ⇒ Connected ( t 2 , t 1 ) ) \forall t_1 \forall t_2\, (\text{Connected}(t_1, t_2) \Rightarrow \text{Connected}(t_2, t_1)) ∀ t 1 ∀ t 2 ( Connected ( t 1 , t 2 ) ⇒ 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 ) = OR ⇒ ( Signal ( Out ( 1 , g ) ) = 1 ⇔ ∃ n ( Signal ( 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 ) = AND ⇒ ( Signal ( Out ( 1 , g ) ) = 0 ⇔ ∃ n ( Signal ( 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 ) = XOR ⇒ ( Signal ( Out ( 1 , g ) ) = 1 ⇔ Signal ( In ( 1 , g ) ) = Signal ( 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))) ∀ g ( Type ( g ) = NOT ⇒ Signal ( Out ( 1 , g ) ) = Signal ( In ( 1 , g ) ) )
调试知识库时要特别注意补上 1 ≠ 0 1 \neq 0 1 = 0 ,否则 XOR 等规则可能不能按预期工作。
11. 一阶逻辑实例化
11.1 为什么一阶推理比命题推理难
命题逻辑中命题符号固定;一阶逻辑中有变量、量词和函数项。因此推理常要先回答:哪些对象能让两个谓词匹配?这就是合一。
11.2 全称实例化
全称语句蕴涵它的所有实例。若有 ∀ v α \forall v\, \alpha ∀ v α 则任意基项 g g g 都可实例化。例:
∀ x ( King ( x ) ∧ Greedy ( x ) ⇒ Evil ( x ) ) \forall x\, (\text{King}(x) \land \text{Greedy}(x) \Rightarrow \text{Evil}(x))
∀ x ( King ( x ) ∧ Greedy ( x ) ⇒ Evil ( x ) )
可推出 King ( John ) ∧ Greedy ( John ) ⇒ Evil ( John ) \text{King}(\text{John}) \land \text{Greedy}(\text{John}) \Rightarrow \text{Evil}(\text{John}) King ( John ) ∧ Greedy ( John ) ⇒ Evil ( 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})) King ( Father ( John ) ) ∧ Greedy ( Father ( John ) ) ⇒ Evil ( Father ( John ) ) 。
全称实例化可以多次应用;加入实例后与原知识库在逻辑上等价。
11.3 存在实例化
若有 ∃ v α \exists v\, \alpha ∃ v α ,可引入一个全新的 Skolem 常量 k k k :Subst ( { v ↦ k } , α ) \text{Subst}(\{v \mapsto k\}, \alpha) Subst ( { v ↦ k } , α ) 。例:
∃ x ( Crown ( x ) ∧ OnHead ( x , John ) ) \exists x\, (\text{Crown}(x) \land \text{OnHead}(x, \text{John}))
∃ x ( Crown ( x ) ∧ OnHead ( x , John ) )
可替换为 Crown ( C 1 ) ∧ OnHead ( C 1 , John ) \text{Crown}(C_1) \land \text{OnHead}(C_1, \text{John}) Crown ( C 1 ) ∧ OnHead ( C 1 , John ) ,前提是 C 1 C_1 C 1 是新常量。
重要区别:
全称实例化可以反复添加实例。
存在实例化一般用一次,并用新式子替代原存在语句。
替换后的 KB 不与原 KB 逻辑等价,但与原 KB 可满足性等价。
因此 ∃ x AsHighAs ( x , Everest ) \exists x\, \text{AsHighAs}(x, \text{Everest}) ∃ x AsHighAs ( x , Everest ) 不能随便实例化为 AsHighAs ( Everest , Everest ) \text{AsHighAs}(\text{Everest}, \text{Everest}) AsHighAs ( Everest , Everest ) ,因为存在量词只保证某个对象存在,不保证就是已有常量 Everest。
11.4 命题化
一阶逻辑可通过实例化变成命题逻辑。例如知识库:
∀ x ( King ( x ) ∧ Greedy ( x ) ⇒ Evil ( x ) ) \forall x\, (\text{King}(x) \land \text{Greedy}(x) \Rightarrow \text{Evil}(x))
∀ x ( King ( x ) ∧ Greedy ( x ) ⇒ Evil ( x ) )
King ( John ) \text{King}(\text{John})
King ( John )
Greedy ( John ) \text{Greedy}(\text{John})
Greedy ( John )
命题化后有命题符号 King ( John ) , Greedy ( John ) , Evil ( John ) \text{King}(\text{John}),\; \text{Greedy}(\text{John}),\; \text{Evil}(\text{John}) King ( John ) , Greedy ( John ) , Evil ( John ) 。
课件结论:每个一阶知识库都可以命题化以保持蕴涵。基础语句被原 KB 蕴涵,当且仅当被命题化 KB 蕴涵。若有函数符号,基项无限多,例如 Father ( Father ( Father ( John ) ) ) \text{Father}(\text{Father}(\text{Father}(\text{John}))) Father ( Father ( Father ( John ) ) ) 。
Herbrand 定理 :若一阶 KB 蕴涵 α \alpha α ,则存在命题化 KB 的某个有限子集已经蕴涵 α \alpha α 。推理思路:
按项深度 0, 1, 2, … 逐步命题化。
对每个有限命题化 KB 做命题推理。
若 α \alpha α 被蕴涵,最终会找到证明。
若不被蕴涵,可能永远停不下来。
这就是一阶逻辑蕴涵的半可判定性 :被蕴涵的结论存在算法最终回答"是";不被蕴涵的结论不存在通用算法保证有限时间回答"否"。
命题化还会产生大量无关实例。若有 p p p 个 k k k 元谓词和 n n n 个常量,基础原子数量可达 p ⋅ n k p \cdot n^k p ⋅ n k ;有函数符号时更糟。
12. 合一与代换
12.1 代换
代换是变量到项的映射:θ = { x ↦ John , y ↦ Father ( John ) } \theta = \{x \mapsto \text{John}, y \mapsto \text{Father}(\text{John})\} θ = { x ↦ John , y ↦ Father ( John ) } 。应用代换:
Knows ( x , y ) θ = Knows ( John , Father ( John ) ) \text{Knows}(x, y)\theta = \text{Knows}(\text{John}, \text{Father}(\text{John}))
Knows ( x , y ) θ = Knows ( John , Father ( John ) )
12.2 合一
合一寻找一个代换 θ \theta θ ,使两个表达式变得相同:Unify ( α , β ) = θ \text{Unify}(\alpha, \beta) = \theta Unify ( α , β ) = θ 当且仅当 α θ = β θ \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 ( John , Jane ) ) = { x ↦ 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 , OJ ) ) = { x ↦ OJ , y ↦ 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 ( y , Mother ( y ) ) ) = { y ↦ John , x ↦ Mother ( John ) }
而 Unify ( Knows ( John , x ) , Knows ( x , OJ ) ) \text{Unify}(\text{Knows}(\text{John}, x), \text{Knows}(x, \text{OJ})) Unify ( Knows ( John , x ) , Knows ( x , OJ ) ) 失败,因为它要求 x x x 同时匹配 John 和 OJ。
12.3 合一规则
可合一的情况:
相同常量与相同常量:成功。
变量与不含自身的项:绑定变量。
同名谓词或函数:参数逐一合一。
失败的情况:
不同常量。
不同谓词名。
元数不同。
occurs check 失败,即变量要绑定到包含自己的项。
occurs check 例:x = f ( x ) x = f(x) x = f ( x ) 失败。
常见不可合一选择题:p ( x , x ) p(x, x) p ( x , x ) 与 p ( y , f ( y ) ) p(y, f(y)) p ( y , f ( y ) ) 。若合一,需要 x = y ∧ x = f ( y ) x = y \land x = f(y) x = y ∧ x = f ( y ) ,推出 y = f ( y ) y = f(y) y = f ( y ) ,变量出现在自己的函数项中,失败。
12.4 标准化分离
两个子句归结或规则匹配前,若变量名可能冲突,需要标准化分离,把不同句子的变量改成彼此不同。例如把一个句子里的 x x x 改名为 z 17 z_{17} z 1 7 。变量名不重要,作用域才重要。
13. 一般化分离规则 GMP
13.1 GMP 形式
命题 Modus Ponens:
P , P ⇒ Q Q \frac{P,\quad P \Rightarrow Q}{Q}
Q P , P ⇒ Q
一阶逻辑的 GMP 加上了合一。若有事实 p 1 ′ , … , p n ′ p'_1, \dots, p'_n p 1 ′ , … , p n ′ 和规则 p 1 ∧ p 2 ∧ ⋯ ∧ p n ⇒ q p_1 \land p_2 \land \dots \land p_n \Rightarrow q p 1 ∧ p 2 ∧ ⋯ ∧ p n ⇒ q ,存在代换 θ \theta θ 使每个前提匹配 p i ′ θ = p i θ p'_i \theta = p_i \theta p i ′ θ = p i θ ,则可推出 q θ q\theta q θ 。
例:
King ( x ) ∧ Greedy ( x ) ⇒ Evil ( x ) \text{King}(x) \land \text{Greedy}(x) \Rightarrow \text{Evil}(x)
King ( x ) ∧ Greedy ( x ) ⇒ Evil ( x )
King ( John ) \text{King}(\text{John})
King ( John )
Greedy ( John ) \text{Greedy}(\text{John})
Greedy ( John )
代换 θ = { x ↦ John } \theta = \{x \mapsto \text{John}\} θ = { x ↦ John } ,推出 Evil ( John ) \text{Evil}(\text{John}) Evil ( John ) 。
13.2 GMP 的边界
GMP 通常用于确定子句 KB,所有变量默认全称量化。课件结论:
GMP 可靠。
GMP 对一阶确定子句 KB 完备。
GMP 对一般 FOL 不完备,因为并非所有句子都能化成 Horn 形式。
即使限制在 Horn 子句,一阶逻辑仍是半可判定的。
14. 一阶前向链与后向链
14.1 一阶前向链
一阶前向链从事实出发,用 GMP 不断推出新事实。性质:
对一阶确定子句可靠。
对一阶确定子句完备。
若没有函数符号,即 Datalog,可在多项式轮数内终止。Datalog 中最多产生 p ⋅ n k p \cdot n^k p ⋅ n k 个基础文字。
一般一阶确定子句若含函数符号,当前查询不被蕴涵时可能不终止。
效率要点:
没必要每轮匹配所有规则,只需检查前一轮新增事实涉及的规则。
数据库索引可让已知事实检索接近 O ( 1 ) O(1) O ( 1 ) 。
合取前提与事实集匹配本身是 NP-hard。
14.2 一阶后向链
一阶后向链从查询出发,找能推出该查询的规则,再用合一生成子目标。Prolog 风格:
查询 q q q 。
找规则结论 q ′ q' q ′ 。
合一 q q q 与 q ′ q' q ′ 。
在代换下递归证明规则前提。
性质:深度优先递归证明搜索;空间与证明大小线性相关;因无限循环可能不完备;可通过检查目标栈避免直接循环;可用缓存减少重复子目标;广泛用于逻辑程序设计。
14.3 FC/BC 对一般 FOL 的不完备
前向链和后向链对 Horn KB 完备,但对一般 FOL KB 不完备。原因是一般 FOL 可以包含非 Horn 子句、析取结论、复杂否定等结构,不能只靠确定子句上的 GMP 覆盖所有有效推理。要覆盖一般 FOL,使用一阶归结。
15. 一阶 CNF、Skolem 化与归结
15.1 一阶 CNF 标准化流程
要用归结,先把 FOL 公式转成子句集:
消去双向蕴涵。
消去蕴涵。
否定内移。
标准化变量名,使不同量词使用不同变量。
Skolem 化消去存在量词。
去掉全称量词。
用分配律得到 CNF。
拆成子句。
15.2 Skolem 化
存在量词不在任何全称量词作用域内:∃ x P ( x ) \exists x\, P(x) ∃ x P ( x ) 变为 P ( A ) P(A) P ( A ) ,其中 A A A 是新的 Skolem 常量。
存在量词在全称量词作用域内:∀ x ∃ y Parent ( y , x ) \forall x \exists y\, \text{Parent}(y, x) ∀ x ∃ y Parent ( y , x ) ,这里 y y y 依赖于 x x x ,变为 ∀ x Parent ( F ( x ) , x ) \forall x\, \text{Parent}(F(x), x) ∀ x Parent ( F ( x ) , x ) ,其中 F F F 是新的 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 ) )
意思:每个爱所有动物的人,都被某个人爱。
消去蕴涵:∀ 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 ) )
否定内移:∀ 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 ) ) ∨ ∃ y 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)) ∀ x ( ∃ y ( Animal ( y ) ∧ ¬ Loves ( x , y ) ) ∨ ∃ z 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)) ∀ x ( ( Animal ( F ( x ) ) ∧ ¬ Loves ( x , F ( x ) ) ) ∨ 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 ( x , F ( x ) ) ) ∨ 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 ) ) ∧ ( ¬ Loves ( x , F ( x ) ) ∨ Loves ( G ( x ) , x ) )
得到两个子句:
Animal ( F ( x ) ) ∨ Loves ( G ( x ) , x ) \text{Animal}(F(x)) \lor \text{Loves}(G(x), x)
Animal ( F ( x ) ) ∨ Loves ( G ( x ) , x )
¬ Loves ( x , F ( x ) ) ∨ Loves ( G ( x ) , x ) \lnot \text{Loves}(x, F(x)) \lor \text{Loves}(G(x), x)
¬ Loves ( x , F ( x ) ) ∨ Loves ( G ( x ) , x )
15.4 一阶归结规则
若两个子句中有可合一的互补文字:
L 1 ∨ ⋯ ∨ L k 和 M 1 ∨ ⋯ ∨ M n L_1 \lor \dots \lor L_k \quad \text{和} \quad M_1 \lor \dots \lor M_n
L 1 ∨ ⋯ ∨ L k 和 M 1 ∨ ⋯ ∨ M n
且 Unify ( L i , ¬ M j ) = θ \text{Unify}(L_i, \lnot M_j) = \theta Unify ( L i , ¬ M j ) = θ ,则推出:
( L 1 ∨ ⋯ ∨ L i − 1 ∨ L i + 1 ∨ ⋯ ∨ L k ∨ M 1 ∨ ⋯ ∨ M j − 1 ∨ M j + 1 ∨ ⋯ ∨ M n ) θ (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
( L 1 ∨ ⋯ ∨ L i − 1 ∨ L i + 1 ∨ ⋯ ∨ L k ∨ M 1 ∨ ⋯ ∨ M j − 1 ∨ M j + 1 ∨ ⋯ ∨ M n ) θ
归结前两个子句要标准化分离,避免共享变量名造成误绑定。
例:
¬ Rich ( x ) ∨ Unhappy ( x ) \lnot \text{Rich}(x) \lor \text{Unhappy}(x)
¬ Rich ( x ) ∨ Unhappy ( x )
Rich ( Ken ) \text{Rich}(\text{Ken})
Rich ( Ken )
合一 θ = { x ↦ Ken } \theta = \{x \mapsto \text{Ken}\} θ = { x ↦ Ken } ,推出 Unhappy ( Ken ) \text{Unhappy}(\text{Ken}) Unhappy ( Ken ) 。
一阶归结应用于 CNF ( KB ∧ ¬ α ) \text{CNF}(\text{KB} \land \lnot\alpha) CNF ( KB ∧ ¬ α ) ,对 FOL 是完备的。
16. 完整证明例题
16.1 Robbie 友好证明
知识库:
Robot ( Robbie ) \text{Robot}(\text{Robbie})
Robot ( Robbie )
Owner ( Bob , Robbie ) \text{Owner}(\text{Bob}, \text{Robbie})
Owner ( Bob , 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))
∀ x ∀ y ( ( Robot ( x ) ∧ Owner ( y , x ) ) ⇒ FriendlyTo ( x , y ) )
目标:FriendlyTo ( Robbie , Bob ) \text{FriendlyTo}(\text{Robbie}, \text{Bob}) FriendlyTo ( Robbie , 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) ¬ Robot ( x ) ∨ ¬ Owner ( y , x ) ∨ FriendlyTo ( x , y )
加入否定目标:¬ FriendlyTo ( Robbie , Bob ) \lnot \text{FriendlyTo}(\text{Robbie}, \text{Bob}) ¬ FriendlyTo ( Robbie , Bob )
归结:
规则与 Robot ( Robbie ) \text{Robot}(\text{Robbie}) Robot ( Robbie ) 归结,代换 θ 1 = { x ↦ Robbie } \theta_1 = \{x \mapsto \text{Robbie}\} θ 1 = { x ↦ Robbie } ,得到 ¬ Owner ( y , Robbie ) ∨ FriendlyTo ( Robbie , y ) \lnot \text{Owner}(y, \text{Robbie}) \lor \text{FriendlyTo}(\text{Robbie}, y) ¬ Owner ( y , Robbie ) ∨ FriendlyTo ( Robbie , y ) 。
与 Owner ( Bob , Robbie ) \text{Owner}(\text{Bob}, \text{Robbie}) Owner ( Bob , Robbie ) 归结,代换 θ 2 = { y ↦ Bob } \theta_2 = \{y \mapsto \text{Bob}\} θ 2 = { y ↦ Bob } ,得到 FriendlyTo ( Robbie , Bob ) \text{FriendlyTo}(\text{Robbie}, \text{Bob}) FriendlyTo ( Robbie , Bob ) 。
与否定目标归结:□ \square □
因此 K B ⊨ FriendlyTo ( Robbie , Bob ) KB \models \text{FriendlyTo}(\text{Robbie}, \text{Bob}) K B ⊨ FriendlyTo ( Robbie , Bob ) 。
16.2 为什么不能证明 Bob 聪明
若知识库只有:
Robot ( Robbie ) \text{Robot}(\text{Robbie})
Robot ( Robbie )
Owner ( Bob , Robbie ) \text{Owner}(\text{Bob}, \text{Robbie})
Owner ( Bob , 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))
∃ y ∃ x ( Owns ( y , x ) ∧ Robot ( x ) ∧ Smart ( y ) )
不能推出 Smart ( Bob ) \text{Smart}(\text{Bob}) Smart ( 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)) ∀ y ( ( ∃ x ( Owns ( y , x ) ∧ Robot ( x ) ) ) ⇒ 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))
∀ x ∀ y ∀ z ( American ( x ) ∧ Weapon ( y ) ∧ Sells ( x , y , z ) ∧ Hostile ( z ) ⇒ Criminal ( x ) )
Nono 有某个导弹,Skolem 化为:Owns ( Nono , M 1 ) \text{Owns}(\text{Nono}, M_1) Owns ( Nono , M 1 ) ,Missile ( M 1 ) \text{Missile}(M_1) 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 ) ∧ Owns ( Nono , x ) ⇒ Sells ( West , x , Nono ) )
导弹是武器:∀ x ( Missile ( x ) ⇒ Weapon ( x ) ) \forall x\, (\text{Missile}(x) \Rightarrow \text{Weapon}(x)) ∀ x ( Missile ( x ) ⇒ Weapon ( x ) )
美国的敌人是敌对国家:∀ x ( Enemy ( x , America ) ⇒ Hostile ( x ) ) \forall x\, (\text{Enemy}(x, \text{America}) \Rightarrow \text{Hostile}(x)) ∀ x ( Enemy ( x , America ) ⇒ Hostile ( x ) )
事实:American ( West ) \text{American}(\text{West}) American ( West ) ,Enemy ( Nono , America ) \text{Enemy}(\text{Nono}, \text{America}) Enemy ( Nono , America )
推理链:
Missile ( M 1 ) ⇒ Weapon ( M 1 ) \text{Missile}(M_1) \Rightarrow \text{Weapon}(M_1)
Missile ( M 1 ) ⇒ Weapon ( M 1 )
Missile ( M 1 ) ∧ Owns ( Nono , M 1 ) ⇒ Sells ( West , M 1 , Nono ) \text{Missile}(M_1) \land \text{Owns}(\text{Nono}, M_1) \Rightarrow \text{Sells}(\text{West}, M_1, \text{Nono})
Missile ( M 1 ) ∧ Owns ( Nono , M 1 ) ⇒ Sells ( West , M 1 , Nono )
Enemy ( Nono , America ) ⇒ Hostile ( Nono ) \text{Enemy}(\text{Nono}, \text{America}) \Rightarrow \text{Hostile}(\text{Nono})
Enemy ( Nono , America ) ⇒ Hostile ( Nono )
于是犯罪规则四个前提都满足:
American ( West ) ∧ Weapon ( M 1 ) ∧ Sells ( West , M 1 , 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})
American ( West ) ∧ Weapon ( M 1 ) ∧ Sells ( West , M 1 , Nono ) ∧ Hostile ( Nono )
推出 Criminal ( West ) \text{Criminal}(\text{West}) Criminal ( West ) 。
17. 考试速查
17.1 概念判断
K B ⊨ α KB \models \alpha K B ⊨ α 是语义蕴涵,不是算法运行结果。
K B ⊢ i α KB \vdash_i \alpha K B ⊢ i α 是推理过程 i i i 的导出关系。
可靠性:导出的都被蕴涵。
完备性:被蕴涵的都能导出。
命题逻辑归结可靠且完备。
一阶归结对 FOL 完备。
GMP 对一阶确定子句完备,对一般 FOL 不完备。
前向链和后向链对 Horn KB 完备,对一般 FOL 不完备。
一阶逻辑蕴涵半可判定。
17.2 翻译题
"所有"通常主连接词是 ⇒ \Rightarrow ⇒ 。
"存在"通常主连接词是 ∧ \land ∧ 。
∀ x ∃ y \forall x \exists y ∀ x ∃ y 与 ∃ y ∀ x \exists y \forall x ∃ y ∀ x 一般不同。
函数返回对象,谓词返回真假。
函数项不能单独放在公式里当命题。
先定义谓词表,注意参数顺序。
用等号表达唯一性、至多一个、恰好几个。
17.3 合一题
检查顺序:
谓词名是否相同。
元数是否相同。
常量是否冲突。
函数名是否冲突。
变量绑定是否违反 occurs check。
是否需要标准化分离。
常见失败:x = f ( x ) x = f(x) x = f ( x ) 。常见 MGU 不是"越具体越好",而是"限制越少越好"。
17.4 CNF 与 Skolem
CNF 流程:消去 ⇔ \Leftrightarrow ⇔ → 消去 ⇒ \Rightarrow ⇒ → ¬ \lnot ¬ 内移 → 变量标准化 → Skolem 化 → ∀ \forall ∀ 删除 → ∨ \lor ∨ 分配到 ∧ \land ∧ → 拆子句。
Skolem:
不依赖全称变量:新常量。
依赖全称变量:新函数。
存在实例化或 Skolem 化一定要用新符号。
17.5 归结证明
证明 K B ⊨ α KB \models \alpha K B ⊨ α ,就做 CNF ( KB ∧ ¬ α ) \text{CNF}(\text{KB} \land \lnot\alpha) CNF ( KB ∧ ¬ α ) ,然后归结出 □ \square □ 。每一步写清:选择哪两个子句;哪两个文字互补;MGU 是什么;得到的新子句是什么。检查空子句是否真的来自互补文字全部消去。
18. 最后一页压缩版
逻辑智能体:TELL ( KB, percept ) , ASK ( KB, query ) \text{TELL}(\text{KB, percept}),\; \text{ASK}(\text{KB, query}) TELL ( KB, percept ) , ASK ( KB, query )
蕴涵:K B ⊨ α ⟺ M ( K B ) ⊆ M ( α ) KB \models \alpha \iff M(KB) \subseteq M(\alpha) K B ⊨ α ⟺ M ( K B ) ⊆ M ( α )
可靠与完备:K B ⊢ i α ⇒ K B ⊨ α KB \vdash_i \alpha \Rightarrow KB \models \alpha K B ⊢ i α ⇒ K B ⊨ α ;K B ⊨ α ⇒ K B ⊢ i α KB \models \alpha \Rightarrow KB \vdash_i \alpha K B ⊨ α ⇒ K B ⊢ i α
反证归结:K B ⊨ α ⟺ K B ∧ ¬ α KB \models \alpha \iff KB \land \lnot\alpha K B ⊨ α ⟺ K B ∧ ¬ α 不可满足
命题 CNF:( A ∨ ¬ B ) ∧ ( ¬ A ∨ C ) (A \lor \lnot B) \land (\lnot A \lor C) ( A ∨ ¬ B ) ∧ ( ¬ A ∨ C )
Horn 子句:P 1 ∧ ⋯ ∧ P m ⇒ Q P_1 \land \dots \land P_m \Rightarrow Q P 1 ∧ ⋯ ∧ P m ⇒ Q
所有 A 是 B:∀ x ( A ( x ) ⇒ B ( x ) ) \forall x\, (A(x) \Rightarrow B(x)) ∀ x ( A ( x ) ⇒ B ( x ) )
有些 A 是 B:∃ x ( A ( x ) ∧ B ( x ) ) \exists x\, (A(x) \land B(x)) ∃ x ( A ( x ) ∧ 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))) ∀ x ( A ( x ) ⇒ ∃ y ( B ( y ) ∧ R ( x , y ) ) )
合一:Unify ( α , β ) = θ ⟺ α θ = β θ \text{Unify}(\alpha, \beta) = \theta \iff \alpha\theta = \beta\theta Unify ( α , β ) = θ ⟺ α θ = β θ
GMP:p 1 ′ , … , p n ′ , p 1 ∧ ⋯ ∧ p n ⇒ q ⇒ q θ p'_1, \dots, p'_n,\; p_1 \land \dots \land p_n \Rightarrow q \;\Rightarrow\; q\theta p 1 ′ , … , p n ′ , p 1 ∧ ⋯ ∧ p n ⇒ q ⇒ q θ ,其中 p i ′ θ = p i θ p'_i \theta = p_i \theta p i ′ θ = p i θ
一阶归结:Unify ( L i , ¬ M j ) = θ \text{Unify}(L_i, \lnot M_j) = \theta Unify ( L i , ¬ M j ) = θ ,推出删去互补文字后的合并子句,并整体应用 θ \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 a , b , λ 。向量是一列数,常记为 x , w , y x, w, y x , w , y 。矩阵是二维表,常记为 X , W , A X, W, A X , W , A 。默认把向量看成列向量:
x = [ x 1 x 2 ⋮ x d ] ∈ R d x = \begin{bmatrix} x_1 \\ x_2 \\ \vdots \\ x_d \end{bmatrix} \in \mathbb{R}^d
x = ⎣ ⎢ ⎢ ⎢ ⎢ ⎡ x 1 x 2 ⋮ x d ⎦ ⎥ ⎥ ⎥ ⎥ ⎤ ∈ R d
若有 n n n 个样本、每个样本 d d d 个特征,机器学习里常把数据矩阵写成:
X = [ x 1 T x 2 T ⋮ x n T ] ∈ R n × d X = \begin{bmatrix} x_1^T \\ x_2^T \\ \vdots \\ x_n^T \end{bmatrix} \in \mathbb{R}^{n \times d}
X = ⎣ ⎢ ⎢ ⎢ ⎢ ⎡ x 1 T x 2 T ⋮ x n T ⎦ ⎥ ⎥ ⎥ ⎥ ⎤ ∈ R n × d
其中第 i i i 行 x i T x_i^T x i T 是第 i i i 个样本。
维度检查是防止公式写错的最快方法。若 X ∈ R n × d X \in \mathbb{R}^{n \times d} X ∈ R n × d ,则 w ∈ R d w \in \mathbb{R}^d w ∈ R d ,X w ∈ R n Xw \in \mathbb{R}^n X w ∈ R n ,它表示对 n n n 个样本分别做线性预测。
2. 转置
向量转置:x T = [ x 1 x 2 ⋯ x d ] x^T = [x_1 \; x_2 \; \cdots \; x_d] x T = [ x 1 x 2 ⋯ x d ]
矩阵转置:( A T ) i j = A j i (A^T)_{ij} = A_{ji} ( A T ) i j = A j i
常用规则:
( A + B ) T = A T + B T (A + B)^T = A^T + B^T
( A + B ) T = A T + B T
( A B ) T = B T A T (AB)^T = B^T A^T
( A B ) T = B T A T
( A T ) T = A (A^T)^T = A
( A T ) T = A
注意第二条会反序,这是很多推导里最容易错的地方。
3. 内积
两个同维向量的内积:
w T x = ∑ j = 1 d w j x j w^T x = \sum_{j=1}^{d} w_j x_j
w T x = j = 1 ∑ d w j x j
线性模型 f ( x ) = w T x + b f(x) = w^T x + b f ( x ) = w T x + b 可以理解为"每个特征 x j x_j x j 乘上重要性 w j w_j w j ,再求和"。若 w j > 0 w_j > 0 w j > 0 ,该特征越大,打分越大;若 w j < 0 w_j < 0 w j < 0 ,该特征越大,打分越小。
内积还可以衡量方向相似度:w T x = ∥ w ∥ ∥ x ∥ cos θ w^T x = \|w\| \|x\| \cos\theta w T x = ∥ w ∥ ∥ x ∥ cos θ ,其中 θ \theta θ 是两个向量夹角。若 w T x = 0 w^T x = 0 w T x = 0 ,则两个向量正交,也就是方向垂直。
4. 范数和距离
向量的 L2 范数:
∥ x ∥ 2 = x T x = ∑ j = 1 d x j 2 \|x\|_2 = \sqrt{x^T x} = \sqrt{\sum_{j=1}^{d} x_j^2}
∥ x ∥ 2 = x T x = j = 1 ∑ d x j 2
若上下文没有特别说明,∥ x ∥ \|x\| ∥ x ∥ 通常指 L2 范数。两个点的欧氏距离:
∥ x − z ∥ 2 = ∑ j = 1 d ( x j − z j ) 2 \|x - z\|_2 = \sqrt{\sum_{j=1}^{d} (x_j - z_j)^2}
∥ x − z ∥ 2 = j = 1 ∑ d ( x j − z j ) 2
kNN 和 K-Means 里经常用平方距离:∥ x − z ∥ 2 2 = ( x − z ) T ( x − z ) \|x - z\|_2^2 = (x - z)^T(x - z) ∥ x − z ∥ 2 2 = ( x − z ) T ( x − z ) 。平方距离省去了开方,最小化时和原距离等价,因为开方函数单调递增。
L1 范数:∥ x ∥ 1 = ∑ j = 1 d ∣ x j ∣ \|x\|_1 = \sum_{j=1}^{d} |x_j| ∥ x ∥ 1 = ∑ j = 1 d ∣ x j ∣ 。机器学习里 L1 正则常产生稀疏权重,L2 正则常让权重整体变小。
5. 矩阵乘法
若 A ∈ R m × n A \in \mathbb{R}^{m \times n} A ∈ R m × n ,B ∈ R n × p B \in \mathbb{R}^{n \times p} B ∈ R n × p ,则 A B ∈ R m × p AB \in \mathbb{R}^{m \times p} A B ∈ R m × p ,元素为:
( A B ) i j = ∑ k = 1 n A i k B k j (AB)_{ij} = \sum_{k=1}^{n} A_{ik} B_{kj}
( A B ) i j = k = 1 ∑ n A i k B k j
也就是说,A B AB A B 的第 i , j i, j i , j 个元素是 A A A 的第 i i i 行和 B B B 的第 j j j 列做内积。最小二乘中:
X w = [ x 1 T w x 2 T w ⋮ x n T w ] Xw = \begin{bmatrix} x_1^T w \\ x_2^T w \\ \vdots \\ x_n^T w \end{bmatrix}
X w = ⎣ ⎢ ⎢ ⎢ ⎢ ⎡ x 1 T w x 2 T w ⋮ x n T w ⎦ ⎥ ⎥ ⎥ ⎥ ⎤
它一次性算出所有样本的预测值。
6. 单位矩阵、逆矩阵和伪逆
单位矩阵 I I I 满足 I x = x , A I = A , I A = A Ix = x,\; AI = A,\; IA = A I x = x , A I = A , I A = A 。
逆矩阵 A − 1 A^{-1} A − 1 满足 A − 1 A = A A − 1 = I A^{-1} A = A A^{-1} = I A − 1 A = A A − 1 = I 。不是所有矩阵都有逆。方阵 A A A 可逆通常要求列之间没有线性冗余,也就是满秩。
如果 X T X X^T X X T X 不可逆,最小二乘不能直接写 ( X T X ) − 1 X T y (X^T X)^{-1} X^T y ( X T X ) − 1 X T y ,这时可以用 Moore-Penrose 伪逆:w ∗ = X + y w^* = X^+ y w ∗ = X + y 。直观上,伪逆是在"没有普通逆矩阵"时给出最小二乘意义下的合理解。
7. 对角矩阵和权重矩阵
对角矩阵只有主对角线可能非零:R = diag ( r 1 , … , r n ) R = \text{diag}(r_1, \dots, r_n) R = diag ( r 1 , … , r n ) 。加权最小二乘中:
J ( w ) = ( y − X w ) T R ( y − X w ) J(w) = (y - Xw)^T R (y - Xw)
J ( w ) = ( y − X w ) T R ( y − X w )
若记误差向量 e = y − X w e = y - Xw e = y − X w ,则 e T R e = ∑ i = 1 n r i e i 2 e^T R e = \sum_{i=1}^{n} r_i e_i^2 e T R e = ∑ i = 1 n r i e i 2 。所以 R R R 的作用就是给不同样本误差加不同权重。
8. 超平面和法向量
线性分类边界 w T x + b = 0 w^T x + b = 0 w T x + b = 0 是一个超平面。二维时是直线,三维时是平面,高维时叫超平面。w w w 是法向量,表示垂直于边界的方向。若点 x x x 满足 w T x + b > 0 w^T x + b > 0 w T x + b > 0 ,它在边界的一侧;若 w T x + b < 0 w^T x + b < 0 w T x + b < 0 ,它在另一侧。
点 x x x 到超平面 w T x + b = 0 w^T x + b = 0 w T x + b = 0 的距离为 ∣ w T x + b ∣ ∥ w ∥ \dfrac{|w^T x + b|}{\|w\|} ∥ w ∥ ∣ w T x + b ∣ 。带标签 y ∈ { − 1 , + 1 } y \in \{-1, +1\} y ∈ { − 1 , + 1 } 时,SVM 的几何间隔为 y ( w T x + b ) ∥ w ∥ \dfrac{y(w^T x + b)}{\|w\|} ∥ w ∥ y ( w T x + b ) 。这就是 SVM 中间隔公式的来源。
9. 投影
若 u u u 是单位向量,即 ∥ u ∥ = 1 \|u\| = 1 ∥ u ∥ = 1 ,则 x x x 在方向 u u u 上的投影长度为 u T x u^T x u T x ,投影向量为 ( u T x ) u (u^T x) u ( u T x ) u 。若 U = [ u 1 , … , u k ] U = [u_1, \dots, u_k] U = [ u 1 , … , u k ] 的列向量两两正交且都是单位向量,则 U T U = I U^T U = I U T U = I 。x x x 投影到这些方向张成的子空间中,低维坐标为 z = U T x z = U^T x z = U T x ,重构为 x ^ = U z \hat{x} = Uz x ^ = U z 。
PCA 中 z i = U k T ( x i − x ˉ ) z_i = U_k^T (x_i - \bar{x}) z i = U k T ( x i − x ˉ ) ,就是把中心化后的样本投影到前 k k k 个主成分方向上。
10. 二次型和半正定
SVM 核矩阵会用到
形如下面的表达式叫二次型:x T A x x^T A x x T A x 。如果对任意 x x x 都有 x T A x ≥ 0 x^T A x \geq 0 x T A x ≥ 0 ,则称 A A A 是半正定矩阵,记为 A ⪰ 0 A \succeq 0 A ⪰ 0 。
最简单例子:x T I x = x T x = ∥ x ∥ 2 ≥ 0 x^T I x = x^T x = \|x\|^2 \geq 0 x T I x = x T x = ∥ x ∥ 2 ≥ 0 。核矩阵半正定的关键证明就是把二次型写成一个范数平方:
a T K a = ∥ ∑ i = 1 n a i ϕ ( x i ) ∥ 2 ≥ 0 a^T K a = \left\| \sum_{i=1}^{n} a_i \phi(x_i) \right\|^2 \geq 0
a T K a = ∥ ∥ ∥ ∥ ∥ ∥ i = 1 ∑ n a i ϕ ( x i ) ∥ ∥ ∥ ∥ ∥ ∥ 2 ≥ 0
所以只要 K i j = ϕ ( x i ) T ϕ ( x j ) K_{ij} = \phi(x_i)^T \phi(x_j) K i j = ϕ ( x i ) T ϕ ( x j ) ,核矩阵一定半正定。
11. 特征值和特征向量
PCA 的核心
若非零向量 u u u 满足 A u = λ u Au = \lambda u A u = λ u ,则 u u u 是矩阵 A A A 的特征向量,λ \lambda λ 是对应特征值。含义:矩阵 A A A 作用到方向 u u u 上时,不改变方向,只把长度缩放 λ \lambda λ 倍。
PCA 中协方差矩阵 S S S 的特征值和特征向量满足 S u j = λ j u j S u_j = \lambda_j u_j S u j = λ j u j ,其中:
u j u_j u j :第 j j j 个主成分方向。
λ j \lambda_j λ j :数据在该方向上的方差大小。
PCA 取最大 k k k 个特征值对应的特征向量,因为这些方向保留最多方差信息。
12. 协方差矩阵
数据中心化后 x ~ i = x i − x ˉ \tilde{x}_i = x_i - \bar{x} x ~ i = x i − x ˉ ,协方差矩阵:
S = 1 n ∑ i = 1 n x ~ i x ~ i T S = \frac{1}{n} \sum_{i=1}^{n} \tilde{x}_i \tilde{x}_i^T
S = n 1 i = 1 ∑ n x ~ i x ~ i T
若把中心化样本按行放入矩阵 X ~ \tilde{X} X ~ ,也可写成 S = 1 n X ~ T X ~ S = \frac{1}{n} \tilde{X}^T \tilde{X} S = n 1 X ~ T X ~ 。
S j j S_{jj} S j j 表示第 j j j 个特征自己的方差,S j k S_{jk} S j k 表示第 j j j 和第 k k k 个特征一起变化的程度。PCA 对 S S S 求特征向量,本质是在找数据变化最大的正交方向。
13. 矩阵求导
机器学习里常见目标函数是标量,但变量是向量。梯度 ∇ w J \nabla_w J ∇ w J 和 w w w 形状相同。常用结论:
∂ ∂ w ( a T w ) = a \frac{\partial}{\partial w}(a^T w) = a
∂ w ∂ ( a T w ) = a
∂ ∂ w ( w T a ) = a \frac{\partial}{\partial w}(w^T a) = a
∂ w ∂ ( w T a ) = a
∂ ∂ w ( w T w ) = 2 w \frac{\partial}{\partial w}(w^T w) = 2w
∂ w ∂ ( w T w ) = 2 w
若 A A A 是对称矩阵:
∂ ∂ w ( w T A w ) = 2 A w \frac{\partial}{\partial w}(w^T A w) = 2Aw
∂ w ∂ ( w T A w ) = 2 A w
最小二乘最常用公式:
∂ ∂ w ∥ X w − y ∥ 2 = 2 X T ( X w − y ) \frac{\partial}{\partial w} \|Xw - y\|^2 = 2X^T(Xw - y)
∂ w ∂ ∥ X w − y ∥ 2 = 2 X T ( X w − y )
加权最小二乘中,若 R = R T R = R^T R = R T :
∂ ∂ w ( y − X w ) T R ( y − X w ) = − 2 X T R ( y − X w ) \frac{\partial}{\partial w}(y - Xw)^T R (y - Xw) = -2X^T R (y - Xw)
∂ w ∂ ( y − X w ) T R ( y − X w ) = − 2 X T R ( y − X w )
逻辑回归中常用链式法则:
∂ L ∂ w j = ∂ L ∂ z ∂ z ∂ w j \frac{\partial L}{\partial w_j} = \frac{\partial L}{\partial z} \frac{\partial z}{\partial w_j}
∂ w j ∂ L = ∂ z ∂ L ∂ w j ∂ z
因为 z = w T x + b z = w^T x + b z = w T x + b ,∂ z ∂ w j = x j \frac{\partial z}{\partial w_j} = x_j ∂ w j ∂ z = x j ,所以只要先求出 ∂ L ∂ z = p − y \frac{\partial L}{\partial z} = p - y ∂ z ∂ L = p − y ,就得到 ∂ L ∂ w j = ( p − y ) x j \frac{\partial L}{\partial w_j} = (p - y) x_j ∂ w j ∂ L = ( 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)})
δ ( ℓ ) = ( ( W ( ℓ + 1 ) ) T δ ( ℓ + 1 ) ) ⊙ ϕ ′ ( z ( ℓ ) )
这里的 ⊙ \odot ⊙ 不是矩阵乘法,而是逐元素乘法。若 a = [ a 1 a 2 ] , b = [ b 1 b 2 ] a = \begin{bmatrix} a_1 \\ a_2 \end{bmatrix},\; b = \begin{bmatrix} b_1 \\ b_2 \end{bmatrix} a = [ a 1 a 2 ] , b = [ b 1 b 2 ] ,则 a ⊙ b = [ a 1 b 1 a 2 b 2 ] a \odot b = \begin{bmatrix} a_1 b_1 \\ a_2 b_2 \end{bmatrix} a ⊙ b = [ a 1 b 1 a 2 b 2 ] 。它要求两个向量形状相同。
15. 机器学习中最常见的维度检查
线性回归:X ∈ R n × d X \in \mathbb{R}^{n \times d} X ∈ R n × d ,w ∈ R d w \in \mathbb{R}^d w ∈ R d ,y ∈ R n y \in \mathbb{R}^n y ∈ R n ,X w − y ∈ R n Xw - y \in \mathbb{R}^n X w − y ∈ R n ,X T ( X w − y ) ∈ R d X^T(Xw - y) \in \mathbb{R}^d X T ( X w − y ) ∈ R d ,所以梯度和 w w w 同维。
多分类线性模型:X ∈ R n × d X \in \mathbb{R}^{n \times d} X ∈ R n × d ,W ∈ R d × k W \in \mathbb{R}^{d \times k} W ∈ R d × k ,Y ∈ R n × k Y \in \mathbb{R}^{n \times k} Y ∈ R n × k ,X W ∈ R n × k XW \in \mathbb{R}^{n \times k} X W ∈ R n × k 。
神经网络单层:a ( ℓ − 1 ) ∈ R d ℓ − 1 a^{(\ell-1)} \in \mathbb{R}^{d_{\ell-1}} a ( ℓ − 1 ) ∈ R d ℓ − 1 ,W ( ℓ ) ∈ R d ℓ × d ℓ − 1 W^{(\ell)} \in \mathbb{R}^{d_\ell \times d_{\ell-1}} W ( ℓ ) ∈ R d ℓ × d ℓ − 1 ,b ( ℓ ) ∈ R d ℓ b^{(\ell)} \in \mathbb{R}^{d_\ell} b ( ℓ ) ∈ R d ℓ ,则 z ( ℓ ) = W ( ℓ ) a ( ℓ − 1 ) + b ( ℓ ) ∈ R d ℓ z^{(\ell)} = W^{(\ell)} a^{(\ell-1)} + b^{(\ell)} \in \mathbb{R}^{d_\ell} z ( ℓ ) = W ( ℓ ) a ( ℓ − 1 ) + b ( ℓ ) ∈ R d ℓ 。
16. 看到公式不会时的快速拆解法
第一步,看形状。 先给每个量标维度,确认乘法是否合法。
第二步,看含义。 比如 X w Xw X w 是所有样本预测,X w − y Xw - y X w − y 是所有误差,∥ X w − y ∥ 2 \|Xw - y\|^2 ∥ X w − y ∥ 2 是总平方误差。
第三步,看几何。 w T x + b = 0 w^T x + b = 0 w T x + b = 0 是边界,w w w 是法向量,∥ w ∥ \|w\| ∥ w ∥ 控制间隔尺度。
第四步,看优化。 若目标是平方误差,通常求导令 0;若目标有 sigmoid 或神经网络,通常用梯度下降;若是 SVM hard margin,通常是带约束的二次规划。
第五步,检查答案形状。 比如求 w w w ,答案必须是 d d d 维向量;求核矩阵,答案必须是 n × n n \times n n × n 矩阵;求 PCA 投影,低维结果必须是 k k k 维。