Introduce
slide
Search
slide
e.g.
- problem: pathing
- states: (x,y) location
- action: NSEW
- successor: update location only
- goal test: is (x,y) = END
- problem: eat-all-dots
- states: (x,y) dot boolean
- action: NSEW
- successor: update location and possibly a dot boolean
- goal: all dots false
状态空间 states:
World State:
e.g. Pacman
- parameters
- Agent position: 120
- Food count: 30
- Ghost: 12
- Agent facing: NSEW
- World States:
- Agent position: 120
- food count: 2
- Ghost: 12*12
- Agent facing: 4
- total: 120 * 2^30 * 12*12 * 4
- state of pathing: 120
- states for eat-all-dots: 120 * 2
针对不同的问题会有不同大小的解空间
状态空间越少越好, 状态空间越大, 搜索越多
状态空间图 State Space Graph
很少使用这种状态空间图, 因为保存的内容太多了
所以使用另外的一种算法
搜索树 Search Tree
当前状态作为一个根节点, 然后可以往不同决策行进
是一种”what if”树
每一个子节点都表示一种可能性(successor)
依然是无法表达出整个状态空间
b: branching factor: 表示一个节点可以扩展多少子节点m: maximum depth: 搜索可能达到的最深的路径
fringe
边缘
维护所有已扩展的路径中的叶子节点的路径(从根节点到该节点的路径)
更新: 选择一个fringe里面的叶子节点, 然后扩展到其子节点.
err
如果图上有环, 那么会导致搜索可能陷入循环, 导致没有optimal
优化: never expand a state twice. 只对某一个state搜索一次, 第二次直接停止.
不会破坏completeness, 因为所有节点还是会被访问到
different between search graph and search tree
搜索
属性
- complete: 是否能找到完整的节点
- optimal: 能否找到最优解
- time complexity
- space complexity
b是branching factor: 表示多少种不同的选择
m是最大深度, 选择的次数
solutions可能在任意深度
一共有
DFS
depth-first search
使用stack来存储
- complete: 如果深度有限那么是完整的
- optimal: 只找到了最左侧的解, 但是并没有考虑深度问题, 所以不是optimal
- time:
- space:
BFS
breadth-first search
-
complete: yes
-
optimal: 如果每一条边的cost是1, 那么才是optimal的
-
time: , 其中表示搜索结果的层级
-
space:
Iterative Deepening
- 限制深度为1, 进行DFS, 判断是否有解
- 如果无解, 那么限制深度为2, 进行DFS, 判断是否有解
- …
上一层的时间复杂度远远小于下一层的时间复杂度, 每一层指数增长, 上一层的搜索对下一层可以忽略不计, 因此实用性比较好
Cost-Sensitive Search
每个状态的转移具有不同的花费.
Uniform Cost Search(UCS)
strategy: 展开cost最小的node
- complete:
- optimal
- time:
- space: 存储到priority queue内部, 比较的是cumulative cost.
假设最小的花费(最优解)是, 并且这条路上的最小花费是, 那么有效路径长度大概是
缺点: 展开的过程中, 所有展开的距离(cost)是相同的
Model
agent对于world state的一种建模. 需要基于这个建模进行Planning和Searching
e.g. 出门是否带伞: Model: 看了天气预报 / Model: 随机带伞
Search Heuristics
目标函数: 搜索使靠近
Greedy Search
贪心算法: 只考虑当前状态的最优解
best cases:
worst cases:
A* Search
uniform-cost search: backward cost 路径的花费:
greedy search: forward cost 未来估计价值:
A* search:
-
complete: 需要让是admissible: 其中是真实距离
-
optimal:
假设:
- 任意节点, 最优解, 次优解
Claim:
-
A will exit fringe before B
A比B先弹出fringe, 表示A会先进行is_goal的测试
Proof:
- 因此, 节点一定在节点之前找到
- A的所有祖先节点都比B先expand
- A比B先expand
所以是optimal的
heuristics越接近真实cost, 搜索代价就越小
admissible
其中是真实距离
consistency
其中表示A到C的实际距离
consistency可以推出admissible
CSP
constraint satisfaction problems约束满足问题(约束求解)
Search问题的最终goal是一个固定的state, 但是CSP的每一次搜索之后都需要重新判断goal的state
state有一个变量, 属于一个域
e.g. 四色问题
- Variable: 不同区域
- Domain:
- constraint:
- implicit: 区域区域
- explicit:
e.g. N皇后问题
- Formulation 1:
- Variables: 不同棋盘位置
- Domains:
- constraints:
- Formulation 2:
- 不能有相互威胁的存在
unary一元约束:
Bin二元约束:
Higher-order: 更多变量之间的约束
soft: preferences, 更倾向于某些选择而不是强制约束, 经常使用不同选择有不同cost来确定(在Bayes Net部分cover)
Solving
- 初始状态: 空的assignment, {}
- Successor function: 给一个未赋值的变量赋值
- 变量的赋值是可交换的, 所以需要一个固定的赋值顺序
- e.g.
[WA = red then NT = green] == [NT = green then WA = red]
- e.g.
- 但是赋值的顺序会影响搜索的效率
- 变量的赋值是可交换的, 所以需要一个固定的赋值顺序
- goal test: 所有的变量是complete的并且满足所有的约束条件
Backtracking Search
在DFS的基础上的优化
每走一步都进行计算判断是否满足约束, 如果不满足, 那么回溯
function BACKTRACKING-SEARCH(csp) returns solution/failure
return RECURSIVE-BACKTRACKING({}, csp)
function RECURSIVE-BACKTRACKING(assignment, csp) returns solution/failure
if assignment is complete then return assignment
var <- SELECT-UNASSIGNED-VARIABLE(VARIABLES[csp],assignment,csp)
for each value in ORDER-DOMAIN-VALUES(var, assignment, csp) dp
if value is consistent with assignment given CONSTRAINTS[csp] then
add {var=value} to assignment
result <- RECURSIVE-BACKTRACKING(assignment, csp)
if result != failure then return result
remove {var=value} from assignment
return failureImproving
filtering: 能否直接找到不满足的情况
ordering: 哪些变量应该先赋值
Structure: 利用问题建模的结构
filtering
剪枝(forward checking)
每一次赋值, 去掉不满足的assignment(对整个图进行遍历一边). 如果出现了某一个state没有值可选, 那么直接停止搜索, 进行回溯
速度变快, 但是数据结构变复杂
约束传递(Constraint Propagation)
每一次赋值之后, 将这个赋值的约束传递给所有未被赋值的state
e.g.
graph LR A(a,b,c)-->B(a,b,c) A-->C(a,b,c) B-->D(a,b,c) C-->D B-->C
…
原理: 在每一次确定一个选项之后, 去判断相邻且未选择的state中,是否有值能满足constraint. 即, 遍历Domain中所有可选的值, 判断如果选这个能否还能满足constraint
缺点:
graph LR a(a,c)-->b(a,c) a-->c(a,c) b-->c
无法提前结束, 但是这种情况无解
弧相容(Consistency of Arc)
将相互约束的两个state之间的无向边理解成相互指向的有向边.
一个约束弧Arc 是相容的 当且仅当 tail 中每一个value 在head 中有一个可以满足约束
方向: 未赋值变量指向正在赋值的节点之间的所有弧
如果head 因为constraint失去了value, 那么所有指向的tail 都需要重新进行遍历
Algorithm:
- 将CSP约束图中所有的弧存入队列Q中
- 从Q中pop一个arc, 并强制要求每一个正在移除的弧中, 对tail 的每一个剩余的值都有一个head 中的值能够满足约束
- 如果不存在使得满足约束, 需要将从的domain中移除
- 如果有任意值在中被移除, 将所有的的弧push入Q中
- 重复操作, 直到或者某一个的domain为空
function AC_3(csp) returns the CSP, possibly with reduced domains
inputs: csp, a binary CSP with variables {X1, X2, ... Xn}
local variables: queue, a queue of arcs, initially all the arcs in csp
while queue is not empty do
(Xi,Xj) <- REMOVE-FIRST(queue)
if REMOVE-INCONSISTENT-VALUES(Xi, Xj) then
for each Xk in NEIGHBORS[Xk] do
add (Xk, Xi) to queue
function REMOVE-INCONSISTENT-VALUES(Xi, Xj) returns true iff succeeds
removed <- false
for each x in DOMAIN[Xi] do
if no value y in DOMAIN[Xj] allows (x,y) to satisfy the constraint Xi <- Xj
then delete x from DOMAIN[Xi]
removed <- true
return removede.g.

initial: Q=[SA->V,V->SA,SA->NSW,NSW->SA,SA->NT,NT->SA,V->NSW,NSW->V]
-
SA->VSA: bluesatisfy the constraintNo value will be removed
-
V->SAV: blueviolate the constraintremove blue from domain of
Vre-add
SA->Vinto queue(NSW->Vis already in queue):Q=[SA->NSW,NSW->SA,SA->NT,NT->SA,V->NSW,NSW->V,SA->V]
-
…
-
NSW->SA
the domain of
SAis emptybacktracking
Complexity:
最坏情况下时间复杂度是, 其中为弧(有向边的数量, 即无向边数量), d为最大domain的大小
每一条弧最多插入队列词, 每一次相容性检验需要, 因此最多有
Tip
但是听说可以通过数据结构优化至 , 但具体方法未给出
ordering
Minimal Remain Value
每次对最少选择的(约束最多的)state做选择
Least Constraining Value
每次选择最少受限的值, 因为这样最有可能找到可行解
structure
Tree Structure CSP
需要保证不存在环
- 无向无环图的任意节点都可以作为树, 因此只需要任选一个节点作为树根
- 将无向边转换为指向根节点反向的有向边, 拓扑排序, 即可将无向图线性化
- Remove Backward:
For i = n:2, apply RemoveInconsistent(Parent(Xi),Xi) - Assign Forward:
For i = 1:n, assign Xi consistently with Parent(Xi)
因为在经历过backward的consistency of arc之后, 所有的弧都是consistent的. 因此无论后续节点选什么值, forward的过程中都可以找到对应的可选的值. 因此在forward的时候不会进行回溯
Iterative Algorithms for CSP
思想: 拿到一个不满足约束的complete的解, 然后给重新赋值, 使冲突达到最小
- 拿到一个solution, 可能冲突
- 随机选择一个冲突的值
- 给该变量赋值使最小化冲突的值
preformance:
很大或者很小的时候都很快
Local Search
只对局部状态做调整
优点: 不需要关心之前的状态和访问过的状态, 更快
缺点: 可能会导致incomplete和suboptimal
state: 一个complete的分配(assignment)
successor function: local changes
但是不同的策略可能导致不同的结果
Hill Climbing
贪心, 类似梯度上升
但是可能陷入局部最优
Beam Search
每次不止选择一个状态, 而是选择多个状态, 能够减少出现局部最优但是全局非最优的可能
也不能保证optimal
Simulate Annealing
模拟退火
- 拿到一个随机的移动
- 总是接受一个uphill的移动
- 如果是downhill, 那么有的概率接受这个移动, T是温度, 是能量差, 可以理解为上一步的评分和下一步的评分之差(这里可以看成满足constraints的个数)
- T会随着时间的变化变小
如果T下降足够慢, 那么我们会更容易得到optimal的solution(探索更多, 更加容易跳出local局部最优)
Genetic Algorithm
遗传算法
- 根据fitness(评分)选择n个进行杂交
- 随机选择一个点, 交换两者的DNA(值)
- 概率突变
Adversarial Search
slide
Game Type:
- 是否确定(只能选择一个或几个行为之一) Deterministic or stochastic
- 玩家个数
- 是否零和博弈 zero sum
- 是否观测到当前状态的所有信息 Perfect Infomation
目的是找到一个policy(strategy), 能够给定任意的state , 找到一个行为action
Search
Single-Agent Tree
Minmax Search
对抗: 红色状态是敌人的agent, 要让红色状态的state value越小越好, 蓝色状态的state value越大越好
- 如果是终止状态, 直接返回终止状态的value
- 如果是max, 寻找最大化的state value:
max(v, value(successor)) - 如果是min, 寻找最小化的state value:
min(v, value(successor))
是类似穷举的DFS
时间复杂度:
空间复杂度:
是state, 是步数
Improve
depth-limited search
在有限深度下搜索
Evaluation Function: 对非终止节点的state value的估计, 根据不同的特征进行判断
理想方程: 真实的minmax search的state value
Monte Carlo Tree Search
对树进行采样, 控制采样的深度和次数, 对采样的结果进行统计, 可以得出原始的树的state value和distribution
Game Tree Pruning
Minmax Pruning
第一步找到了3, 第二步中, 找到了一个2, 那么第二步的min的state value一定是一个小于2的值, 那么可以直接舍去这一个选择(要选择max的state value)
Alpha-Beta Pruning
- 假设现在对节点
n计算state value - 展开
n的节点的子节点. 因为是取最小, 那么展开n的子节点的过程中,n的state value一定是递减的 - 假设
a是MIN层中最大的节点 n的state value一旦小于a的state value, 那么在向上传递的过程中, 在与a同层的位置一定会选择更大的a而不是n的state value- 所以可以直接舍去
n节点的后续计算
Implementation:
- 初始化是MAX的最优选项, 是MIN的最优选项
- max value:
- 初始化
- 更新每一个successor
v = max(v, value(successor))- 如果, 那么直接不计算(剪枝)
- 更新
- min value:
- 初始化
- 更新每一个successor:
v=min(v, value(successor))- 如果, 剪枝
- 更新
Propositional Logic
slide
Truth tables for connectives
| P | Q | P | PQ | PQ | PQ | PQ |
|---|---|---|---|---|---|---|
| F | F | T | F | F | T | T |
| F | T | T | F | T | T | F |
| T | F | F | F | T | F | F |
| T | T | F | T | T | T | T |
Inference Rule
推理: 两个model为true的时候一定能推出下面的为true:
e.g. 请推导出
- to prove , consider use contradiction by shown is unsatisfiable
- expand and to CNF
- use Inference rule:
Horn Logic
首先将所有的Knowledge Base转写成的格式()
Forward chain
所需要的前提()的个数作为需要证实的数量.
如果的证明有两条路线, 那么这两条路线需要的证据是分开计算的.
只要有一条路线的证据数量被满足(为True), 那么认为也为True
initial:
step 1:
step 2:
step 3:
step 4:
step 5:
Then, we can obtain the final by knowledge base
Backward chain
找到需要证明的内容, 然后找如果要证明这个命题需要证明哪些
不断回溯, 知道找到已证明(true)的内容
First-Order Logic
slide
Pros of Propositional Logic:
- 比较简单
- 支持命题操作比较多
- 可以将简单的逻辑组合, 推导出新的知识
- 上下文无关 context-independent Cons of Propositional Logic:
- 很难表述一个单独的单词
- 很难表述数字
- 很难表示关系
- Generalizations, patterns, regularities can’t easily be represented (e.g., “all triangles have 3 sides”)
一阶谓词逻辑
假设world包含:
- Object: 人, 房子, 颜色, …
- Relations: red, round, prime, bigger than, …
- Functions: father of, best friend of, …
假设了world中存在一些事实
Basic Element
Logic Symbols:
- Connectives
- Quantifiers
- Variables
- Equality
Non-Logic Symbols:
- Constants
KingJohn, 2 (numbers), ShanghaiTech, ... - Predications
Brother, >, ... - Functions
Sqrt, LeftLegOf, ...
Atomic Sentences: Predicate(term1, term2, ...) or term1 = term2
Term: Constants or Variables or Function(term1, term2, ...)
一个原子语句Function(term1, term2, ...)是正确的当且仅当object term1, term2, ...是在Predicate所描述的relation中
Model的数量是infinity的
Inference
-
Universal Instantiation
e.g. 可以推出
-
Exists Instantiation
e.g. 可以推出
被称为Skolemization, 其中称为Skolem symbol
一般使用和配合, 一般使用和配合
Unify
第四行的表示的原因是两个sentence, 表示的变量名重复但是表示的含义不同. 因此需要标准化: 不同变量需要有不同变量名
为了Unify和, 需要给变量赋值. 其中两种为:
- or
有一个最泛化的Unify的方式:
Horn Logic
Generalized Modus Pones(GMP):
e.g.
, ,
- is , is
- is , is
- Therefore,
- is , is
Forward Chaining
e.g.
The US law says that it is a crime for an American to sell weapons to hostile nations. The country Nono, an enemy of America, has some missiles, and all of its missiles were sold to it by Colonel West, who is American. Prove that Col. West is a criminal.
前向推理的性质:
- 对于一阶Horn Logic而言, FC是complete的
- 如果一阶谓词逻辑(FOL)没有function(Datalog), 那么FC在有限步数内终止
- 一般而言, 如果没有entail, 那么FC可能不会终止.
- 这是不可避免的
Backward Chaining
后向推理的性质:
- 使用DFS进行搜索. 搜索的空间占用和证明所需要的大小呈线性关系
- 通过检查当前目标和堆栈中的每个目标, 避免无限循环
- 通过缓存当前的结果, 避免重复子目标
Resolution(Inference Rule)
example
Conversion to CNF
- Eliminate biconditionals and implications
- Move inwards:
- Standardize variables: 对于每一个语句, 都需要使用不同的变量
- Skolemize: 将变量替换成一个特定的值
- Drop universal quantifierfs:
- Distribute over
Bayes Network
slide
CPT: Conditional Probability Table
独立:
条件独立: 给定某个条件下, 两个事件相互独立
写作
链式法则chain rule:
可以在使用链式法则的时候使用条件独立化简条件:
e.g.: Traffic, Umbrella, Rain
对于某一个子节点:
- 假设父节点的domain为
- 假设该节点的domain为
- 每一行之和是1
- 那么该节点的复杂度(参数量)是
- 的原因是行之和为1
对于一个Bayesian Network:
- 个变量
- 最大的domain是
- 最大的父节点数量是
全联合概率密度分布是
Bayes Net的空间是
Markov Blanket
给定父节点, 子节点, 子节点的父节点, 然后该节点与其他所有节点条件独立
-
causal chain
Global semantic:
给定, 有
-
Global semantic:
给定, 有
-
若不给定, 那么
给定, 有与不独立
灰色节点表示是given nodes, 即给定的条件(或者说block的nodes)
这里的Active Triple表示dependent, Inactive Triple表示Conditional Independent
判断两个节点是否是条件独立, 那么可以看这条路径是否是Inactive的.
查询是否条件独立的编程思想:
- 第一层循环遍历所有的路径
- 第二层循环遍历所有的Triple
和节点有两个路径, 只有第二条能够全部Inactive
详情参考
D-separate
graph TB X-->Y-->Z M-->N M-->P A-->B C-->B这个时候,有三种情况:
- 第一种原来是条件不独立,给定之后变成条件独立
- 第二种原来条件不独立,给定后条件独立
- 第三种原来条件独立,给定之后条件不独立
可以认为,两者之间如果有一条通路,那么就算是条件独立。但是注意第三种,给定之后不是将通路打断,而是把断掉的通路合成
Link to original
Node Ordering
每一个模型的假设是不同的, 即可以认为是也可以认为是
但是每一种假设会有不同的计算复杂度和不同的空间复杂度
如果Bayes Network建模的是因果关系, 那么会高效很多
Markov Network
可以看作是无向图+势函数的结合
Bayes Network是有向无环图来建模, Markov Network是无向有环图来定义的
Clique: 一个完全图(全连接)
Maximal Clique: 最大的全连接的图
定义势函数针对Clique(或者Maximal Clique).
对于联合概率, 与势函数的乘积成比例:
, 其中是归一化系数
Markov Blanket: 所有与该节点直接相连的节点组成Markov Blanket
e.g.
定义每个pixel , 定义pixel对应是否是想要的分类
定义势函数 where is feature vector
定义势函数表示相邻的两个点之间更可能是相同的分类
如果有更复杂的网络结构, 那么分类的准确率会更大
Convert Bayes Network to Markov Network
Moralization:
Bayes Network中, 相关的关系不一定体现在边的连接上. 但是在Markov Network中, 只有相连的两个节点才会有关系. 所以在转换的过程中, 需要把相关的两个点添加边连接
Steps:
- Moralization
- Construct potential functions from CPTs
Bayes Network和Markov Network编码了同样的分布
但是并不是编码相同的条件独立性
Tip
如, 在第二张图中, 我们可以认为Markov Network的建模中, 共同影响.
但是Bayes Network中, 不能影响
认为Bayes Network和Markov Network更接近于谓词逻辑PL(相较于一阶谓词逻辑FOL)
可以认为BN和MN是带有概率的拓展PL
CRF Conditional Random Field
生成式模型: 建模一个分布:
- Bayes Network和Markov Network都是Generative Model
判别式模型: 只建模, 不建模
- CRF, Image Segmentation
CRF的概率:
applications:
- NLP
- Pos tagging
- Named entity recognize
- Syntactic parsing
- CV
- Image Segmentation
- Posture Recognize
Bayes Net Inference
slide
Variable Elimination
考虑
可以将原本16乘法7加法转换成2乘法3加法
于是考虑隐变量的因子消除方法:
但是有一个问题. 在计算的时候, 不是一个正常的实数, 而是一系列与有关的值. 所以在计算的时候, 需要把他们当成一个多元的变量, 称作factor
operation
-
Join Factors
给定多个CPT, 将多个CPT整合成一个CPT
-
Variable Elimination
将隐变量求和, 消除
假设求
- 从local CPT开始
- 选择一个隐变量
- 将所有提到的factor进行join
- 对进行求和(sum elimination)
- 重复, 直到只剩下和
e.g.
Ordering Matter
graph TB Z-->A Z-->B Z-->C Z-->D
假设我们需要计算
那么所有其他的变量都是hidden variable
-
如果消除顺序为
P(D)=\alpha\sum_{a,b,c,z}P(z)P(D|z)P(A|z)P(B|z)P(C|z)$$ $$=\alpha\sum_{z}P(z)P(D|z)\sum_aP(A|z)\sum_bP(B|z)\sum_cP(C|z)CBAZ -
如果消除顺序为
ZABC
消除顺序不同则参数量不同
不存在一种最小的复杂度对于一个Bayes Network Variable Elimination. 这个和图的结构有关
Message Passing and General Graphs
graph LR A---B C---B B---D D---E D---F
对于poly-tree的网络, 可以看作图上的信息的传播. 将算好的概率传播
分团之后, 两个团的连接点必须同时出现在两个团中. 如 cluster1: , cluster2: , 相连的两个点是和, 那么这两个点必须在这两个cluster中同时出现
Bayes Net: Approximate Inference
slide
Sampling from given distribution
-
step1: 从一个
[0, 1)的uniform distribution采样一个u有多重方式实现, 如:
import random u = random.random() -
step2: 从采样的概率中获取到变量
如:
Prior Sampling
先根据的概率采样:
然后已知的情况下采样 ,
然后在已知的情况下采样:
最终得到
重复多次
采样的顺序最好为Bayes Network的拓扑结构(有了condition才能更好算出当前的结果)
采样多次之后, 假设我们有
如果要计算, 那么有, 则
Tip
算法推导:
- 根据真实概率采样
_{Prior Sample}(x_1,\cdots,x_n)=\prod_iP(x_i|\text{Parent}(x_i))=P(x_1,\cdots,x_n)$$
- 采样得到的概率有
hat P(x_1,\cdots,x_n)=\frac{N_{Prior Sample}(x_1,\cdots,x_n)}{N}$$
- 则当采样次数时:
lim_{N\to\infty}\hat P(x_1,\cdots,x_n)=\lim_{N\to\infty}\frac{N_{Prior Sample}(x_1,\cdots,x_n)}{N}$$
Rejection Sample
假设我们需要计算, 即需要已知的概率, 那么我们直接不需要采样(记录)出现或者的情况
有问题:
假设condition本身就是很小的概率, 那么我们的概率可能很小或者极大.
如:
graph LR a[Shape]-->b[Color]
假设, 那么本身出现blue的概率很小, 那么如果采样Shape, 很容易出现极端情况
Likelihood Sample
为了解决Rejection Sample的问题, 我们首先固定已知的变量, 在这种情况下进行采样, 而不是直接采样然后拒绝
将所有采样的Evidence的条件概率相乘作为权重
然后在计算概率的时候, 我们并不是使用出现的个数, 而是使用采样对应的权重进行计算
那么有
然后归一化
Tip
正确性推导
Importance Sample
使用Likelihood Sample的优化, 改变weight的计算
假设很小, 那么很难采样. 我们可以自己设计一个分布, 然后根据进行采样, 最终使用作为权重
选取对算法的影响很大. 最好的应该是
Gibbs Sample
原先的采样是, 现在我们认为采样的时候与其他所有的变量相关, 即
但是注意有Markov Blanket阻断其他变量的信息流通, 那么我们其实只需要关注:
Markov Chain Monte Carlo(MCMC)
Markov Chain是一个条件假设: 每一个状态只依赖于前一个状态而不是全局状态
Monte Carlo: 采样算法
Metropolis-Hastings
在给定分布下进行采样
- 是一种易于采样的分布
有概率接受这个采样, 接受概率为
Probabilistic Temporal Model
slide
Markov Model
graph LR a(X0)-->b(X1) b-->|......|e(X_t-1) e-->c(Xt) c-->|......|d(XT)
假设许多离散的变量(infinity)拥有相同且有限的domain(Domain中的values叫做states),
转移模型展示了state随时间的转移的概率
Stationarity Assumption: 所有时间步上, 有相同的转移模型
联合概率:
Markov Assumption: , 即每一个变量之和自己的上一时刻的状态相关, 与过去的state无关
Example
Weather Predict
可以写成, 迭代计算从开始
Stationary Distribution
注意: 随着后续转移次数增多, 状态最终有可能会趋向于一个固定的概率, 无论初始值是什么
因此我们称Stationary Distribution
但是并不是所有的Markov Chain都有Stationary Distribution
Example
Weather
HMM - Hidden Markov Model
Another View of HMM
Background
频率派: 统计机器学习, 核心思想是定义一个Loss Function, 然后进行优化
一般思路:
- 定义model: e.g. 超平面
- 定义strategy: 定义优化的策略, 即定义一个Loss Function. 不同的Loss Function会偏向优化不同的方面
- 算法求解: e.g. 梯度下降,随机梯度下降,牛顿法,逆牛顿法,…
贝叶斯派: 概率图模型, 核心思想是做推断, 求后验概率, 求后验概率相关的计算(方差, 期望, etc…), 采用数值积分的方式(Monta Carlo的方法有了实质的突破)
那么HMM从根本上是属于概率图模型
概率图模型
有向图: 贝叶斯网络
无向图: 马尔可夫随机场
概率图+时间: 动态模型 Dynamic Model
一般而言的模型, 如高斯混合模型(GMM), N个样本: 这些样本之间是独立同分布的.
但是Dynamic Model是在普通模型的基础上添加了时间序列. 这个时间可以认为是真实的时间, 也可以是一个抽象的时间, 也可以是一个序列(一段话, 一个句子(nlp))
这个时候之间就不是独立同分布(i.i.d)的了
e.g.
graph LR i1-->i2 i1-->o1 i2-->i3 i2-->o2 i3-->...其中, 是系统状态system state, 是隐变量, 而是观测变量.
可以认为横向是时间, 或者说是序列; 纵向是混合mixture
如果时间序列上(横向)的system state是离散的, 每一个隐变量的取值是离散的: HMM; 如果是连续, 那么判断是否是线性的. 其中一个线性的代表是Kalman Filter, 非线性的代表是Partide Filter
HMM
参数
假设观测变量用表示, 系统状态变量用i表示
然后假设取值集合(值域): o的值域, i的取值集合(值域):
其中, . 注意这里的下标表示状态取值的第个值,而指系统变量在时刻的取值
这里的是指的是在初始状态下为第个状态的概率, 并不是第个system state的概率. 默认初始状态下所有system state的分布相同
假设
齐次马尔可夫假设
可以简单认为是无后效性的. 也就是说, 认为未来和过去没有关系
即,只和相关, 其他的都无关
观测独立假设
即, 只和有关
三个主要问题
Evaluation
根据初始化的参数求
常用Forward Backward Algorithm
Learning
求参数
使用EM算法
Decoding
根据O求解I. 常见两种求解:
- 预测, 求解
- 滤波, 求解
Evaluation
Given , find
其中
因此
注意到时间复杂度为是一个指数时间增长的, 时间复杂度非常恐怖. 所以使用另外的方法计算
前向算法
现在假设一个记号(注意分别作为参数的i是的下标,而是表示第个system state)
这个记号表示第个system state为, 并且观测到的结果为的概率.
那么有:
尝试通过累加的方式消除掉引入的
现在通过计算能化简计算:
后向传播
假定一个记号, 表示在给定第个时刻的system state 之后, 可观测变量为的概率
注意, 和是正好错开了一个时序
那么有
那么根据, 写出:
现在推导的地推表达式
引论: Markov Blanket and
D-separate
graph TB X-->Y-->Z M-->N M-->P A-->B C-->B这个时候,有三种情况:
- 第一种原来是条件不独立,给定之后变成条件独立
- 第二种原来条件不独立,给定后条件独立
- 第三种原来条件独立,给定之后条件不独立
可以认为,两者之间如果有一条通路,那么就算是条件独立。但是注意第三种,给定之后不是将通路打断,而是把断掉的通路合成
Link to originalLearning
Baum-Welch算法是在EM算法之前提出的, 但是实际上Baum-Welch算法就是EM算法的一种特殊形式
考虑EM算法公式:
在这里, 隐变量, , , 那么就有了针对HMM的EM算法的公式:
注意, 是上一次迭代产生的结果, 那么是一个常数, 对求解没有关系, 因此可以舍弃.
我们再定义中间的函数
将原始的Evalution带入表达式:
应用拉格朗日乘子法:
关于和的推导过程是类似的, 这里不做推导.
Decoding
也称为Viterbi Algorithm
我们可以认为这里有一个动态规划的问题
假设路径的长度是, 那么我们的目的就是找到最短路径. 这样就能最大化概率
定义
意义是达到时刻的时候, 选择作为system state的概率的最大值
状态转移方程为:
记录中间经过的路径:
其他
假设隐变量是, 观测变量是
filtering
是给定观测结果从之后找到对应的隐变量
这个可以做online learning在线学习
每进来一个数据就可以做一次filtering, 是可以做online的
smoothing
给定所有的观测值, 然后求解某一个时刻的隐变量
更偏向offline, 类似于全部结束之后的整体复盘
称作前向后向算法
中间的化简用到了D-separate
prediction
在给定前时刻的观测值之后, 预测后面一个或者多个隐变量或者观测值的过程
马尔可夫齐次假设和filtering问题:
观测独立假设和上面刚刚求解的预测:
只能知道Evidence Variable(或者说, 可观测变量), 但是Markov Chain的state transition是在隐变量上进行的.
graph LR 0(X0)-->1(X1) 1-->2(X2) 2-->3(X3) 3-->i(...) 1-->a[E1] 2-->b[E2] 3-->c[E3]
Model
- Initial Distribution:
- Transition Model:
- Emission Model:
Joint Distribution of HMM:
独立性:
- 给定上一时刻的state, 当前时刻的state与其他时刻的state条件独立
- 给定当前的隐变量, 当前的evidence与其他任何变量条件独立
Inference
规定: 一个标记:
-
Filtering
belief state: 给定目前为止所有的观测变量之后找到当前state的后验概率分布
-
Prediction
在给定目前为止所有变量之后, 计算未来state的后验概率分布
-
Smoothing
在给定目前为止所有evidence之后计算过去的一个state的后验概率分布
-
Most Likely explanation
Filtering
Filtering: infer current state given all evidence
目标: 用迭代的方式求解Filtering
其中是正则化项. 因为已经观测到了和, 所以是一个常量, 不影响概率分布. 因此可以直接写成一个正则化项的形式
假设结果是, 计算过程为. 其中初始化为
时间复杂度: , 其中是state的数量
变量消除:
Example
Weather
Another view
每一个边(Arc)表示一个transition:
每一个边都有自己的weight:
weight的乘积与这个path的路径的概率成正比:
计算新的state: , 类似BFS
使用动态规划的思想: 保存每一个state的概率, 便于计算(用空间换时间, 不用记忆化需要时间, 用记忆化搜索之后时间为):
Most Likely Explanation
维特比算法 Viterbi algorithm. 计算最优路径:
-
Viterbi algorithm
对于时间的state, 记录最大概率的路径
-
Forward Algorithm
求和. 对于时间的state, 记录路径到该节点处的总概率
时间复杂度:
空间复杂度: )
本质上是一个Search. 从根节点出发, 逐层扩展. 保留概率最大的state.
DBN Dynamic Bayes Network
Bayes Network的基础之上, 加上了时间的状态
假设后一时态的状态和上一时态的状态有关.
每一个Dynamic Bayes Network都可以被HMM表示. 但是每一个DBN的时态都需要做笛卡尔积.
如: 3个二元变量在HMM中就是一个大小的一个隐变量
优点
依赖稀疏(Sparse Dependencies): 参数量极少
e.g. 假设有20个二元变量, 每一个变量都有两个祖先:
- HMM parameters:
- DBN parameters: , 两个父节点和自己一共八个状态
Exact Inference
Variable Elimination 应用给DBN
-
Offline: 将网络在个时间步上展开, 然后消除变量, 计算得出
但是会导致出现很大的BN
-
Online: 正常展开. 但是每一次展开都消除掉上一时间步中的所有的变量.
Particle Filtering
对于一个状态空间极大的HMM, 直接进行Exact Inference是不可行的
我们使用approximate inference, 将Evidences看作”下游”, 通过忽略evidence, 直接对Hidden State进行采样. 但是权重会下降非常快, 概率变得非常低, 可能会导致过少的可接受的结果出现.
改进: 使用Particle Filtering
每一个采样的sample叫做一个particle. 初始可以设置成先验分布或者均一分布进行采样. 然后将采样的粒子作为新的概率. 注意, 一般而言, 采样的大小
第一次根据的分布采样. 然后有转移概率:, 当前状态下的权重是. 但是weight在多次之后会变得很小, 会导致每个粒子的权重一直在衰减.
所以进行resample. 在拿到weight之后iou, 根据这个weight重新进行采样新的分布, weight全为1
Markov Decision Process
slide
是Non-deterministic的搜索算法
假定了下一时刻的状态只和当前事态的状态和当前时刻的action有关, 与之前的状态和动作无关
假设是reward function, 表示每存活一定时间对总的reward的更新:
不同的reward function会导致不同的结果
Markov Search Tree
节点并不是真实的节点, 而是虚拟的节点, 类似expectation-max的节点
Utilities of Sequences
如何考虑未来的reward的影响? 应该放弃眼前的收益考虑更长远的收益还是更期待长期的收益?
Utility Function: 是基于整个Sequence的值的函数, 并不完全等于Reward Function. 如果只关注了最近的一个值的update, 那么就是Reward
Discounting: 如果未来的reward比较低, 对当前的影响不大, 那么设置一个discounting factor: , 每一个时间步的reward的影响(reward的值)乘上作为未来的权重. 如果更看重当前, 那么设置, 如果更看中未来, 可以让.
有助于防止无限循环, 有助于算法收敛
防止无限循环的方法:
- 设置discounting factor<1
- 设置最多轮数, 设置最大搜索深度
- 设置aborting state. 如果一个状态进去就出不来, 就设置这个状态为停止状态, 表示这个状态没必要再搜索
Optimal Quantities
optimal value function:
其中, 是状态转移的概率, 是状态转移的reward, 是discounting factor.
前面两个式子可以写成一个总式(最后一行), 叫做Bellman Equation
Value Iteration
从开始, 迭代计算
复杂度:
Q-value
相同的, Q-value也可以使用Value Iteration计算
proof
Bellman equation
max norm
the bellman update is a contraction by a factor of on the space of utility vectors
there exists only one optimal value of contraction transformation
Value iteration converges to
example
Example
Value Iteration:
Example
Value Iteration:
Computing action from values
称作policy extraction
或者如果已知optimal q-function, 可以写成:
相较于从value得出, action从q-value得出更容易(计算量更少)
Policy Iteration
Problem with Value Iteration:
- 太慢, 每一次迭代的时间复杂度为
- 对自己的所有值域遍历(每个值对应的value都更新, 复杂度),
- 取每个action中的最大值()
- 每个action的值由action对应状态的转移概率和对应的Reward乘积决定()
- 在max这一步的value基本没有改变
因此提出: 只关注即可, 而不是关注每一个值
-
计算当前Policy的结果
计算一个固定的(不一定optimal, 可能是随机)Utility Function
-
优化Policy
更新policy使用one-step look-ahead, 可能不是最优, 但是收敛速度更快
-
Step1
不再提供action, 而是给定一个policy函数, 根据这个函数计算对应的值.
复杂度:
或者假定已经达到了收敛状态, 那么只需要解出一个线性方程即可
-
Step2
更新Policy:
Value Iteration v.s. Policy Iteration
都是计算相同的内容: 计算一个最优的action
都是动态规划
Value Iteration:
- 每一次更新都会计算所有的state的value
- 会track所有的state的值
Policy Iteration:
- 只更新一部分固定的state. 每一个iteration都只关注一个state而不是全部的state
- 每一次计算之后都会更新policy function
- 可能收敛更快
Reinforcement Learning
slide
所有的 ReinforcementLearning tag的文章均基于此
使用类似MDP的定义, 但是这个时候并不清楚或者
在Agent中存在或者说action, 在environment中存在state, reward function和transition function.
认为在environment中的作为ground truth, 因此是function而不是model(model是Agent中学习到的)
Basic Idea: 假设在时间步有一个策略,
- 找到当前可观测状态
- 找到action:
- 根据environment的transition probability 找到
- 我们的目标是最大化
Offline learning v.s. Online learning:
offline不需要真正运行一次游戏, 不会对环境产生影响(e.g. MDP)
online需要真实运行一次游戏, 对环境影响(e.g. RL)
Model Based Learning
通过经验进行学习一个近似的模型, 然后将学习到的模型进行估计
Step 1: 采取不同的action然后基于outcomes计算MDP Model
-
计算outcomes 根据给定的
a是由给出的, 这个是在Agent中, 我们认为在更新environment的过程中, 是固定的.
-
归一化, 然后计算
我们认为虽然的parameters中有三个, 但是是current state是固定的, 认为是固定的. 因此随机性只产生在处.
-
计算对于每一个给定的
Reward Function是environment中的函数, 有可能是已知的, 但是在真实的environment中也是需要迭代的.
Step 2: 使用MDP的Iteration的方法计算, 更新
Pros:
- 更有效率地利用sample(低sample complexity)
Cons:
-
May not scale to large state space
-
solving MDP is intractable for very large
当状态空间很大的时候, MDP很难搜索
-
-
RL feedback loop tends to magnify small model errors
本身RL就是一个模拟, 自带一定的误差. 多次训练可能会放大这个error
-
Much harder when the environment is partially observable
当空间是not perfect infomation的时候, 很难完整的看到environment
Model Free Learning
Note
model based v.s. model free
假设计算所有人的平均年龄:
- 如果已知每个年龄有多少概率:
- 如果未知
- model based
- model free
区别: 是否要估计某一个统计量的分布. Model free是直接通过sample来模拟一个概率分布
passive v.s. active Reinforcement learning
- passive RL: 在根据过去已经给定的策略下估计, 常见在evaluation
- active RL: 在根据过去给定的策略, 并且手动去测试下估计
Passive RL
简单来说就是policy evaluation
- Input: a fixed policy
- know
- don’t know
- goal: learn state values
Example
Direct Estimation
Goal: Compute each state value under
Idea: Average together obversed samples values
对于B: 只有两个, 即Episode1, Eposide2, 加和的结果是(8+8)=16, Average=8
对于C: 我们只关心从C开始的, 四个Eposide都有C, 那么只看四个的最下面两个value: (-1+10)+(-1+10)+(-1+10)+(-1-10)=16, Average=4
对于A: 只有一个, Eposide4, -10
对于E: 两个, Eposide3,Eposide4, (-1-1+10)+(-1-1-10)=-4, Average=-2
Pros:
- 易于理解
- 不需要任何关于和的知识
- 使用sample transition能近似计算出来正确的结果
Cons:
- 浪费了state connection的信息, 每个state是独立的, 所以需要很长时间的学习
Sample-Based Policy Evaluation
给定一个固定的策略, state的value是一个期望:
-
Idea1: 使用真实采样去估计期望
但是有一个问题: RL的过程中, 一旦采取了action, 那么environment一定会改变. 如果想要回到上一个状态, 那么需要走回上一个状态. 但是environment已经改变掉了, 因此是无法改变的
-
Idea2: Update value of after each transition
Update based on and
…
有一个问题: 会在结果不精确的前提下flash掉之前的估计的结果. 因为这个是based on一个数据而不是大量数据的平均
-
Idea3:
Note
在有增量的连续数据流的过程中, 如何维持一个average:
记录之前的average和之前的数据量, 增量数据只需要
是凸的combination, 因此是无偏的
TD Learning
是learning rate. 是TD error
Example
第一个transition:
第二个transition:
TD Value Learning的优点:
- Model free
- Bellman Update with running sample mean
缺点:
- 需要transition model去improve
Q-Learning
对Q-state进行TD Value learning:
我们直接从中学习, 不需要转移模型
缺点: 空间复杂度会比较大. 每一个格子需要存储所有action的value
接受一个sample
根据旧的来更新新的
性质:
-
根据已有的policy 去更新value. 但是是和采样的policy是无关的. 是off-policy learning.
但是需要更多探索, learning rate()不能太大
虽然TD value learning很像梯度下降, 但是并不是梯度下降, 是不动点迭代
Exploration and Exploitation
-greedy
是一个Exploration的方法
每一个时间步, 根据概率去选择: 随机行动()或者根据现有概率行动()
可能会做一些非常愚蠢的动作, 有些动作可以认为是重复无限次.
Optimisitic Exploration Functions
如果一个state value是, 这个state经过了次, 那么
当探索次数比较小的时候, 这个state的function比较大, 会更倾向探索. 如果探索次数比较多, 会趋向于自己本身的value, 根据自己本身的value来选择action