Introduce

Search

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, 判断是否有解

上一层的时间复杂度远远小于下一层的时间复杂度, 每一层指数增长, 上一层的搜索对下一层可以忽略不计, 因此实用性比较好

每个状态的转移具有不同的花费.

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

目标函数: 搜索使靠近

贪心算法: 只考虑当前状态的最优解

best cases:

worst cases:

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]
    • 但是赋值的顺序会影响搜索的效率
  • goal test: 所有的变量是complete的并且满足所有的约束条件

在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 failure

Improving

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:

  1. 将CSP约束图中所有的弧存入队列Q中
  2. 从Q中pop一个arc, 并强制要求每一个正在移除的弧中, 对tail 的每一个剩余的值都有一个head 中的值能够满足约束
    • 如果不存在使得满足约束, 需要将的domain中移除
  3. 如果有任意值在中被移除, 将所有的的弧push入Q中
  4. 重复操作, 直到或者某一个的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 removed

e.g.

initial: Q=[SA->V,V->SA,SA->NSW,NSW->SA,SA->NT,NT->SA,V->NSW,NSW->V]

  • SA->V

    SA: blue satisfy the constraint

    No value will be removed

  • V->SA

    V: blue violate the constraint

    remove blue from domain of V

    re-add SA->V into queue(NSW->V is already in queue): Q=[SA->NSW,NSW->SA,SA->NT,NT->SA,V->NSW,NSW->V,SA->V]

  • NSW->SA

    the domain of SA is emptybacktracking

Complexity:

最坏情况下时间复杂度是, 其中为弧(有向边的数量, 即无向边数量), d为最大domain的大小

每一条弧最多插入队列词, 每一次相容性检验需要, 因此最多有

Tip

但是听说可以通过数据结构优化至 , 但具体方法未给出

ordering

Minimal Remain Value

每次对最少选择的(约束最多的)state做选择

Least Constraining Value

每次选择最少受限的值, 因为这样最有可能找到可行解

structure

Tree Structure CSP

需要保证不存在环

  1. 无向无环图的任意节点都可以作为树, 因此只需要任选一个节点作为树根
  2. 将无向边转换为指向根节点反向的有向边, 拓扑排序, 即可将无向图线性化
  3. Remove Backward: For i = n:2, apply RemoveInconsistent(Parent(Xi),Xi)
  4. Assign Forward: For i = 1:n, assign Xi consistently with Parent(Xi)

因为在经历过backward的consistency of arc之后, 所有的弧都是consistent的. 因此无论后续节点选什么值, forward的过程中都可以找到对应的可选的值. 因此在forward的时候不会进行回溯

Iterative Algorithms for CSP

思想: 拿到一个不满足约束的complete的解, 然后给重新赋值, 使冲突达到最小

  1. 拿到一个solution, 可能冲突
  2. 随机选择一个冲突的值
  3. 给该变量赋值使最小化冲突的值

preformance:

很大或者很小的时候都很快

只对局部状态做调整

优点: 不需要关心之前的状态和访问过的状态, 更快

缺点: 可能会导致incomplete和suboptimal

state: 一个complete的分配(assignment)

successor function: local changes

但是不同的策略可能导致不同的结果

Hill Climbing

贪心, 类似梯度上升

但是可能陷入局部最优

每次不止选择一个状态, 而是选择多个状态, 能够减少出现局部最优但是全局非最优的可能

也不能保证optimal

Simulate Annealing

模拟退火

  1. 拿到一个随机的移动
  2. 总是接受一个uphill的移动
  3. 如果是downhill, 那么有的概率接受这个移动, T是温度, 是能量差, 可以理解为上一步的评分和下一步的评分之差(这里可以看成满足constraints的个数)
  4. T会随着时间的变化变小

如果T下降足够慢, 那么我们会更容易得到optimal的solution(探索更多, 更加容易跳出local局部最优)

Genetic Algorithm

遗传算法

  1. 根据fitness(评分)选择n个进行杂交
  2. 随机选择一个点, 交换两者的DNA(值)
  3. 概率突变

Adversarial Search

Game Type:

  • 是否确定(只能选择一个或几个行为之一) Deterministic or stochastic
  • 玩家个数
  • 是否零和博弈 zero sum
  • 是否观测到当前状态的所有信息 Perfect Infomation

目的是找到一个policy(strategy), 能够给定任意的state , 找到一个行为action

Search

Single-Agent Tree

对抗: 红色状态是敌人的agent, 要让红色状态的state value越小越好, 蓝色状态的state value越大越好

  • 如果是终止状态, 直接返回终止状态的value
  • 如果是max, 寻找最大化的state value: max(v, value(successor))
  • 如果是min, 寻找最小化的state value: min(v, value(successor))

是类似穷举的DFS

时间复杂度:

空间复杂度:

是state, 是步数

Improve

在有限深度下搜索

Evaluation Function: 对非终止节点的state value的估计, 根据不同的特征进行判断

理想方程: 真实的minmax search的state value

对树进行采样, 控制采样的深度和次数, 对采样的结果进行统计, 可以得出原始的树的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

Truth tables for connectives

PQ PPQPQPQPQ
FFTFFTT
FTTFTTF
TFFFTFF
TTFTTTT

Inference Rule

推理: 两个model为true的时候一定能推出下面的为true:

e.g. 请推导出

  1. to prove , consider use contradiction by shown is unsatisfiable
  2. expand and to CNF
  3. 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

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

  1. Eliminate biconditionals and implications
  2. Move inwards:
    forall x[\exists y\text{ Animal}(y)\wedge\neg\text{Loves}(x,y)]\vee[\exists y\text{ Loves}(y,x)]$$
  3. Standardize variables: 对于每一个语句, 都需要使用不同的变量
  4. Skolemize: 将变量替换成一个特定的值
  5. Drop universal quantifierfs:
  6. Distribute over

Bayes Network

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

这个时候,有三种情况:

  1. 第一种原来是条件不独立,给定之后变成条件独立
  2. 第二种原来条件不独立,给定后条件独立
  3. 第三种原来条件独立,给定之后条件不独立

可以认为,两者之间如果有一条通路,那么就算是条件独立。但是注意第三种,给定之后不是将通路打断,而是把断掉的通路合成

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

Variable Elimination

考虑

可以将原本16乘法7加法转换成2乘法3加法

于是考虑隐变量的因子消除方法:

但是有一个问题. 在计算的时候, 不是一个正常的实数, 而是一系列与有关的值. 所以在计算的时候, 需要把他们当成一个多元的变量, 称作factor

operation

  1. Join Factors

    给定多个CPT, 将多个CPT整合成一个CPT

  2. Variable Elimination

    将隐变量求和, 消除

假设求

  • 从local CPT开始
  • 选择一个隐变量
    • 将所有提到的factor进行join
    • 进行求和(sum elimination)
  • 重复, 直到只剩下

e.g.

Ordering Matter

graph TB
Z-->A
Z-->B
Z-->C
Z-->D

假设我们需要计算

那么所有其他的变量都是hidden variable

  • 如果消除顺序为CBAZ

    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)
  • 如果消除顺序为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

Sampling from given distribution

  1. step1: 从一个[0, 1)的uniform distribution采样一个u

    有多重方式实现, 如:

    import random
    u = random.random()
  2. 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

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

只能知道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, 记录路径到该节点处的总概率

m_{1:1}(\text{rain})=0.9\times\max(0.1\times0.5, \underline{0.7\times0.5})=0.315$$$$\cdots\cdots

时间复杂度:

空间复杂度: )

本质上是一个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

是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的值)乘上作为未来的权重. 如果更看重当前, 那么设置, 如果更看中未来, 可以让.

有助于防止无限循环, 有助于算法收敛

防止无限循环的方法:

  1. 设置discounting factor<1
  2. 设置最多轮数, 设置最大搜索深度
  3. 设置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基本没有改变

因此提出: 只关注即可, 而不是关注每一个值

  1. 计算当前Policy的结果

    计算一个固定的(不一定optimal, 可能是随机)Utility Function

  2. 优化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

所有的 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