Monte Carlo Tree Search
- 为什么要学习MCTS
- 一部分原因是过去12年AI最大的成就莫过于Alpha Go,一个超越任何人类的围棋玩家
- 引入基于模型的RL思想和规划(planning)的好处
Introudction
Model-Based Reinforcement Learning
- 前面的博文:从经验中直接学习价值函数或者策略
- 这篇博文:从经验中直接学习模型(Transition or Reward model)
- 并且使用规划(planning)来构建一个价值函数或者策略
- 整合学习和规划到一个单独的架构
planning,取一个已知的world模型然后使用价值迭代或者策略迭代或者动态规划,尝试去计算出一个用于这些给定模型的策略。
Model-Based and Model-Free RL
- Model-Free RL
- 没有模型
- 从经验中学习价值函数(和/或策略)
- Model-Based RL
- 从经验中学习一个模型
- 从该模型中规划出价值函数(和/或策略)
当你有一个simulator(模拟器)的时候,你可以从模拟器中获取经验,然后:
- DP
- model-free RL
- policy search
Model-Based RL
Advantages of Model-Based RL
- 优点:
- 能高效地使用监督学习的方法去学习模型
- 可以推理模型不确定性(像用于探索/利用权衡的上界置信边界(upper confidence bound))
- 缺点:
- 首先要学习出一个模型,然后再构建一个价值函数
这样会有两个近似误差来源
- 首先要学习出一个模型,然后再构建一个价值函数
变迁动态,大体上会被认为随机的,所以需要能产生分布预测的监督学习。奖励模型可以被看出是标量,所以可以使用非常经典的基于回归的方法。
还有一个需要提及的model-based reinforcement learning的优势,在迁移方面是非常强大的。Model-Based RL的一个好处是如果你学习了一个world的动态模型,如果有人更改了奖励函数,隐含着你可以做零改动迁移(zero shot transfer),直接用原来的模型再加上新的奖励函数去计算一个新的计划。
MDP Model Refresher
- 一个模型 M mathcal{M} M表示了一个被 η eta η参数化的MDP < S , A , P , R > <mathcal{S},mathcal{A},mathcal{P},mathcal{R}> <S,A,P,R>
- 假定状态空间 S mathcal{S} S和动作空间 A mathcal{A} A是已知的
- 那么一个模型
M
=
<
P
η
,
R
η
>
mathcal{M}=<mathcal{P}_eta,mathcal{R}_eta>
M=<Pη,Rη>表示了状态变迁
P
η
≈
P
mathcal{P}_eta approxmathcal{P}
Pη≈P且
R
η
≈
R
mathcal{R}_eta approx mathcal{R}
Rη≈R
S t + 1 ∼ P η ( S t + 1 ∣ S t , A t ) S_{t+1} sim mathcal{P}_eta(S_{t+1}|S_t,A_t) St+1∼Pη(St+1∣St,At)
R t + 1 = R η ( R t + 1 ∣ S t , A t ) R_{t+1} = mathcal{R}_eta(R_{t+1}|S_t,A_t) Rt+1=Rη(Rt+1∣St,At) - 典型地,假定状态变迁和奖励之间的条件性独立
P [ S t + 1 , R t + 1 ∣ S t , A t ] = P [ S t + 1 ∣ S t , A t ] P [ R t + 1 ∣ S t , A t ] mathbb{P}[S_{t+1},R_{t+1}|S_t,A_t]=mathbb{P}[S_{t+1}|S_t,A_t]mathbb{P}[R_{t+1}|S_t,A_t] P[St+1,Rt+1∣St,At]=P[St+1∣St,At]P[Rt+1∣St,At]
Model Learning
- 目标:从经验 S 1 , A 1 , R 2 , . . . , S T {S_1,A_1,R_2,...,S_Tau} S1,A1,R2,...,ST中估计模型 M η mathcal{M}_eta Mη
- 这是一个监督学习问题
S 1 , A 1 → R 2 , S 2 S_1,A_1 ightarrow R_2,S_2 S1,A1→R2,S2
S 2 , A 2 → R 3 , S 3 S_2,A_2 ightarrow R_3,S_3 S2,A2→R3,S3
. . . ... ...
S T − 1 , A T − 1 → R T , S T S_{Tau-1},A_{Tau-1} ightarrow R_{Tau},S_{Tau} ST−1,AT−1→RT,ST - 学习 s , a → r s,a ightarrow r s,a→r是一个回归问题
- 学习 s , a → s ′ s,a ightarrow s' s,a→s′是一个(概率)密度评估问题
- 选择损失函数,e.g. 均方误差,KL散度,…
- 找到使得实验误差最小化的参数集 η eta η
Example
以下列出了模型的一些例子:
- Table Lookup Model(表格查询模型)
- Linear Expectation Model(线性期望模型)
- Linear Gaussian Model(线性高斯模型)
- Gaussian Process Model(高斯过程模型)
- Deep Belief Network Model(深度置信网络模型)
- …
还有一种非常适合这里的模型Baysian DNN(贝叶斯深度神经网络),但是它非常难训练。
Table Lookup Model
- 该模型是一个显式的MDP, P ^ , R ^ hat{mathcal{P}},hat{mathcal{R}} P^,R^
- 计数每一个状态动作对的访问次数
N
(
s
,
a
)
N(s,a)
N(s,a)
- 或者
- 在每一个时间步 t t t,记录经验元组 < S t , A t , R t + 1 , S t + 1 > <S_t,A_t,R_{t+1},S_{t+1}> <St,At,Rt+1,St+1>
- 为了采样模型,随机选取匹配的元组 < s , a , . , . > <s,a,.,.> <s,a,.,.>
AB Example
TD需要马尔科夫假设,而MC则不需要。
在该例下,TD:
V
(
A
)
=
V
(
B
)
=
.
75
V(A)=V(B)=.75
V(A)=V(B)=.75
MC:
V
(
A
)
=
0
V(A) = 0
V(A)=0 而
V
(
B
)
=
0.75
V(B) = 0.75
V(B)=0.75
因为MC采样到A的sample回报是0
Planning with a Model
- 给定一个模型 M η = < P η , R η > mathcal{M}_eta=<{mathcal{P}_eta,mathcal{R}_eta}> Mη=<Pη,Rη>
- 求解MDP < S , A , P η , R η > <mathcal{S},mathcal{A},mathcal{P}_eta,mathcal{R}_eta> <S,A,Pη,Rη>
- 然后选一个适合的planning算法
- 价值迭代
- 策略迭代
- 树搜索
- …
Sample-Based Planning
- 一个简单但是做planning有效的方法
- 仅仅使用模型生成采样
- 从模型中采样经验
S t + 1 ∼ P η ( S t + 1 ∣ S t , A t ) mathcal{S}_{t+1}simmathcal{P}_eta(mathcal{S}_{t+1}|mathcal{S}_{t},mathcal{A}_{t}) St+1∼Pη(St+1∣St,At)
R t + 1 = R η ( R t + 1 ∣ S t , A t ) R_{t+1}=mathcal{R}_eta(mathcal{R}_{t+1}|mathcal{S}_{t},mathcal{A}_{t}) Rt+1=Rη(Rt+1∣St,At) - 可以使用model-free的RL方法来采样,e.g.:
- 蒙特·卡罗尔树搜索
- Sarsa
- Q-learning
- 基于采样的planning方法通常有更好的数据高效性
Back to the AB Example
- 从真实经验中构建一个table-lookup模型
- 应用model-free的RL方法来采样经验
- 以蒙特·卡罗尔学习为例: V ( A ) = 1 V(A)=1 V(A)=1, V ( B ) = 0.75 V(B)=0.75 V(B)=0.75
- 回顾前面的例子:MC在原始经验上收敛到了什么?
V ( A ) = 0 V(A)=0 V(A)=0, V ( B ) = 0.75 V(B)=0.75 V(B)=0.75
Planning with an Inaccurate Model
- 给定一个不完美的模型 < P η , R η > ≠ < P , R > <mathcal{P}_ eta,mathcal{R}_eta> ot=<mathcal{P},mathcal{R}> <Pη,Rη>�=<P,R>
- model-based RL方法的表现受限于近似MDP的最佳策略 < S , A , P η , R η > <mathcal{S},mathcal{A},mathcal{P}_ eta,mathcal{R}_eta> <S,A,Pη,Rη>
- 例如. Model-based RL方法和估计模型一样好。
- 当模型是不准确的时候,planning过程会计算出一个次优策略
- 解决方法1:当模型是错的时候,使用model-free的RL方法(能够解决该问题取决于模型出错的原因)
- 解决方法2:对模型的不确定性做显式推理(回顾前面关于Exploration/Exploitation的博文)
Simulation-Based Search
基于模拟的搜索,终于到正题了
前向搜索
前向搜索的思想非常简单,向前看,然后再选择最佳的动作。
- 前向搜索算法通过向前预测选择最佳动作
- 这样来使用当前的状态从根开始构建一棵搜索树
- 使用一个MDP模型来完成向前预测
- 并不需要整个MDP,只需要从现在开始做预测的子MDP
Simulation-Based Search
- 前向搜索的模式,但是使用了基于采样的planning
- 从当前开始使用模型采样周期(episode)
- 应用model-free的RL来采样周期
Simulation-Based Search (2)
- 从当前开始使用模型采样周期(episode)
{ S t k , A t k , R t + 1 k , . . . , S T k } k = 1 K ∼ M v {S_t^k,A_t^k,R_{t+1}^k,...,S_Tau^k}_{k=1}^Ksimmathcal{M}_v {Stk,Atk,Rt+1k,...,STk}k=1K∼Mv - 应用model-free的RL来采样周期
- Monte Carlo control → ightarrow → Monte Carlo search
- Sarsa → ightarrow → TD search
Simple Monte-Carlo Search
- 给定一个模型 M v mathcal{M}_v Mv和一个采样策略 π pi π
- 对每一个动作
a
∈
A
a in mathcal{A}
a∈A
- 从当前(真实)状态
s
t
s_t
st模拟
K
K
K个周期
{ s t , a , R t + 1 k , . . . , S T k } k = 1 K ∼ M v , π {s_t,a,R_{t+1}^k,...,S_Tau^k}_{k=1}^Ksim mathcal{M}_v,pi {st,a,Rt+1k,...,STk}k=1K∼Mv,π - 通过对回报取平均的方式来评估动作(Monte-Carlo evaluation)
Q ( s t , a ) = 1 K ∑ k = 1 K G t → P q π ( s t , a ) Q(s_t,a)=frac{1}{K}sum_{k=1}^{K}G_t stackrel{P} ightarrow q_pi(s_t,a) Q(st,a)=K1∑k=1KGt→Pqπ(st,a)
- 从当前(真实)状态
s
t
s_t
st模拟
K
K
K个周期
- 选取有最大价值的当前(真实)动作
a t = a r g m a x a ∈ A Q ( s t , a ) a_t=mathop{argmax}limits_{ain A} Q(s_t,a) at=a∈AargmaxQ(st,a) - 这其实基本上做了一步策略提升
Expectimax Tree
- 我们能比只做一步策略提升做得更进一步吗
- 如果有一个MDP模型 M v mathcal{M}_v Mv
- 可以通过为当前的状态构建一个最大期望树来计算一个最优的
q
(
s
,
a
)
q(s,a)
q(s,a)价值
- 局限性:树的大小扩张的规模
( ∣ S ∣ ∣ A ∣ ) H (|S||A|)^H (∣S∣∣A∣)H
Monte-Carlo Tree Search (MCTS)
- 给定一个模型 M v mathcal{M}_v Mv
- 以当前状态为根构建一个搜索树
- 采样动作和下一个状态
- 从根结点状态通过执行 K K K次周期模拟迭代地构建和更新树
- 在搜索结束之后,选择在搜索树中有最大价值的当前(真实)动作
a t = a r g m a x a ∈ A Q ( s t , a ) a_t=mathop{argmax}limits_{ain A}Q(s_t,a) at=a∈AargmaxQ(st,a)
- 模拟一个周期包括了两个阶段(in-tree, out-of-tree)
- Tree policy:为树节点选择动作来最大化 Q ( S , A ) Q(S,A) Q(S,A)
- Roll out Policy:e.g. 随机选择动作,或者另一个策略
- 为了评估一个树节点
i
i
i在状态动作对
(
s
,
a
)
(s,a)
(s,a)的价值,在从该节点之后横跨整个模拟周期能达到的所有点获得的所有的回报上取平均:
- 在比较温和的条件下,收敛到最优的搜索树
Q ( S , A ) → q ∗ ( S , A ) Q(S,A) ightarrow q^*(S,A) Q(S,A)→q∗(S,A)
Upper Confidence Tree (UCT) Search
-
我们怎样在一个模拟周期内选择动作?
-
UCT(上界置信树搜索):从老虎机(bandit)文献上借鉴过来的思想,即把选择动作当做是一个多臂老虎机(MAB)问题
-
在每一个臂上维持一个回报的上界置信边界
-
简单起见可以把每一个状态节点看作是一个单独的MAB
-
对于模拟周期 k k k中的结点 i i i,选择有最高上界动作/臂来模拟并在树上展开(或评估)
a i k = a r g m a x Q ( s , a , i ) a_{ik}=argmax Q(s,a,i) aik=argmaxQ(s,a,i) -
这隐含着用来模拟周期的策略(和展开/更新树的策略)在整个周期上是可以改变的
Case Study: the Game of Go
- 围棋已有2500年的历史(按我们国家的说法有4000年)
- 最难的经典棋盘游戏
- 非常大的挑战性任务(John McCarthy)
- 传统的博弈树(game-tree)搜索在围棋这个例子上失败了
- 提问:在围棋对弈的过程中属于在一个动态模型和回报模型是未知的吗?
<font=‘楷体’>不,是已知的。因为围棋的规则是已知的,所有状态的变迁和奖励都是已知的。
Position Evaluation in Go
- 一个位置(指棋盘上) s s s有多好
- 奖励函数(这里没有折扣)
R t = 0 R_t=0 Rt=0 对所有非终止步 t < T t<Tau t<T
R T = { 1 , 如 果 黑 棋 获 胜 0 , 如 果 白 棋 获 胜 R_{Tau}= egin{cases} 1, 如果黑棋获胜 \ 0, 如果白棋获胜 end{cases} RT={1,如果黑棋获胜0,如果白棋获胜
这个奖励函数非常稀疏 - 策略 π = < π B , π W > pi=<pi_B,pi_W> π=<πB,πW>同时为两个玩家选择动作
- 价值函数(描述位置
s
s
s有多好)
v π ( s ) = E [ R T ∣ S = s ] = P [ B l a c k w i n s ∣ S = s ] v_pi(s)=mathbb{E}[R_Tau|S=s]=mathbb{P}[Black wins | S = s] vπ(s)=E[RT∣S=s]=P[Black wins∣S=s]
v ∗ ( s ) = m a x π B m i n π W v π ( s ) v^*(s)=mathop{max}limits_{pi B}mathop{min}limits_{pi W}v_pi(s) v∗(s)=πBmaxπWminvπ(s)
Monte-Carlo Evaluation in Go
接下来一系列slides是MCTS在围棋中的例子:
Advantages MC Tree Search
- 高度选择性的最好优先搜索
- 动态性的评估状态(不像DP)
- 使用采样来打破维度诅咒
- 对黑盒模型同样适用(只需要采样)
- 计算高效,任何时间都可以运行,可并行