• 蒙特卡洛树搜索方法介绍——后台规划(background planning)与决策时规划(decision-time planning)


    引言

    上一节介绍了优先级遍历算法(反向聚焦),本节将从规划执行时机的角度对算法进行解析。

    后台规划

    回顾:动态规划算法

    在介绍后台规划之前,回顾一下动态规划算法的迭代过程:
    动态规划算法如下表所示:

    算法基于随机MDP的状态价值函数 V π ( s ) V_\pi(s) Vπ(s)策略迭代算法
    输入
    (Input)
    初始策略 π ( a ∣ s ) \pi(a \mid s) π(as),动态特性函数 P P P,奖赏函数 r r r,折扣系数 γ \gamma γ
    初始化操作
    (Initialization operation)
    1. 对 ∀ s ∈ S \forall s \in \mathcal S sS,初始化状态价值函数 V π ( s ) V_\pi(s) Vπ(s)
    2. 阈值 θ \theta θ设置为一个较小的实数值;
    策略评估
    (Policy Evaluation)
    1. repeat 对每一轮策略评估 τ = 0 , 1 , 2 , ⋯ \tau=0,1,2,\cdots τ=0,1,2,
    2.    d e l t a ← 0 delta \gets 0 delta0
    3.    for 每个状态 s s s do
    4.        v ← V π ( s ) v \gets V_\pi(s) vVπ(s)
    5.        V π ( s ) ← ∑ a ∈ A ( s ) π ( a ∣ s ) ∑ s ′ , r P ( s ′ , r ∣ s , a ) [ r + γ V π ( s ′ ) ] V_\pi(s) \gets \sum_{a \in \mathcal A(s)} \pi(a \mid s) \sum_{s',r}P(s',r \mid s,a)[r +\gamma V_\pi(s')] Vπ(s)aA(s)π(as)s,rP(s,rs,a)[r+γVπ(s)]
    6.        d e l t a ← max ⁡ ( d a l t a , ∣ v − V π ( s ) ∣ ) delta \gets \max(dalta,\mid v -V_\pi(s) \mid) deltamax(dalta,vVπ(s))
    7.    end for
    8. until d e l t a < θ delta < \theta delta<θ
    策略改进
    (Policy Improvment)
    1. policy_stable = True
    2. for 每个状态 s s s do
    3.    old_policy ← π ( a ∣ s ) \gets \pi(a \mid s) π(as)
    4.    Q ( s , a ) = ∑ s ′ , r P ( s ′ , r ∣ s , a ) [ r + γ V π ( s ′ ) ] Q(s,a) = \sum_{s',r}P(s',r \mid s,a)[r +\gamma V_\pi(s')] Q(s,a)=s,rP(s,rs,a)[r+γVπ(s)]
    5.    max_action ← arg ⁡ max ⁡ a Q ( s , a ) \gets \mathop{\arg\max}\limits_{a} Q(s,a) aargmaxQ(s,a)
         max_count ← c o u n t ( max ⁡ ( Q ( s , a ) ) ) \gets count(\max(Q(s,a))) count(max(Q(s,a)))
    6.    for 每个状态-动作对 ( s , a ′ ) (s,a') (s,a) do
    7.        if a ′ = = a' == a== max_action then
    8.            π ( a ′ ∣ s ) = 1 / \pi(a'\mid s) = 1 / π(as)=1/(max_count)
    9.        else
    9.            π ( a ∣ s ) = 0 \pi(a\mid s) = 0 π(as)=0
    10.      end if
    11.   end for
    12.   if old_policy ≠ π ( a ∣ s ) \neq \pi(a \mid s) =π(as) then
    13.      policy_stable ← \gets False
    14.end for
    15.until policy_stable = True
    输出结果 v ∗ = V , π ∗ = π v_* =V,\pi_* = \pi v=V,π=π

    我们重新观察策略迭代的整个执行过程,在策略评估(Policy Evaluation)部分,它通过模拟模型 P ( s ′ , r ∣ s , a ) P(s',r \mid s,a) P(s,rs,a)产生所有可能发生的模拟经验;并根据模拟经验更新状态价值函数 V π ( s ) V_\pi(s) Vπ(s)
    V π ( s ) = ∑ a ∈ A ( s ) π ( a ∣ s ) ∑ s ′ , r P ( s ′ , r ∣ s , a ) [ r + γ V π ( s ′ ) ] V_\pi(s) = \sum_{a \in \mathcal A(s)} \pi(a \mid s) \sum_{s',r} P(s',r \mid s,a)[r + \gamma V_\pi(s')] Vπ(s)=aA(s)π(as)s,rP(s,rs,a)[r+γVπ(s)]
    总而言之,动态规划的策略评估过程关注的是当前状态 s s s
    策略改进部分,它生成策略的关键点在于对状态集合 S \mathcal S S中的所有状态(包含当前状态 s s s 自身) 进行关注:
    Q ( s , a ) = ∑ s ′ , r P ( s ′ , r ∣ s , a ) [ r + γ V π ( s ′ ) ] = P ( s i ′ , r i ∣ s , a ) [ r i + γ V π ( s i ′ ) ] ( s i ′ ∈ S )

    Q(s,a)=s,rP(s,rs,a)[r+γVπ(s)]=P(si,ris,a)[ri+γVπ(si)](siS)" role="presentation" style="position: relative;">Q(s,a)=s,rP(s,rs,a)[r+γVπ(s)]=P(si,ris,a)[ri+γVπ(si)](siS)
    Q(s,a)=s,rP(s,rs,a)[r+γVπ(s)]=P(si,ris,a)[ri+γVπ(si)](siS)
    想要得到上述的 Q ( s , a ) Q(s,a) Q(s,a)结果,需要知道当前状态-动作对的所有模拟样本,这些样本同样需要从样本模型中产生
    r(s,a)表示奖励函数。
    { ( s , a , s i ′ , r i ) } ∣ s i ′ ∈ S , r i ∈ r ( s , a ) \{(s,a,s'_i,r_i)\}|_{s'_i \in \mathcal S,r_i \in r(s,a)} {(s,a,si,ri)}siS,rir(s,a)

    至此,我们发现,基于动态规划的策略迭代不仅关注当前状态,并且还在‘后台’处理多个状态的规划方法

    回顾:Dyna-Q算法

    和上述思路相同的还有 D y n a − Q Dyna-Q DynaQ算法。 D y n a − Q Dyna-Q DynaQ学习过程中的关键点表示如下:

    • 基于当前状态 s s s与对应 Q − T a b l e Q-Table QTable,使用 ϵ − \epsilon- ϵ贪心策略选择动作 a a a
      a ← π ( s , Q ) a \gets \pi(s,Q) aπ(s,Q)
    • 执行动作 a a a,基于真实环境进行状态转移,得到下一状态 s ′ s' s和对应奖励 r r r,得到一个真实样本
      ( s , a , s ′ , r ) (s,a,s',r) (s,a,s,r)
    • 基于真实样本,对 Q − T a b l e Q-Table QTable进行更新:
      Q ( s , a ) ← Q ( s , a ) + α [ r + γ max ⁡ a Q ( s ′ , a ) − Q ( s , a ) ] Q(s,a) \gets Q(s,a) + \alpha[r + \gamma \mathop{\max}\limits_{a} Q(s',a) -Q(s,a)] Q(s,a)Q(s,a)+α[r+γamaxQ(s,a)Q(s,a)]

    可以看出, D y n a − Q Dyna-Q DynaQ学习过程同样也是仅关注当前状态 s s s自身的情况;

    继续观察规划过程:相比于动态规划 D y n a − Q Dyna-Q DynaQ的规划过程只是随机抽取 n n n组状态-动作对,并且可能存在无效的状态-动作对。但这并不影响 D y n a − Q Dyna-Q DynaQ不仅关注当前状态,并且还关注其他状态的思想

    我们称上述求解强化学习任务的思想为 后台规划
    这种思想更侧重于‘当前状态利用全局信息(其他随机状态甚至是所有状态)’给出当前动作,而不是仅靠当前状态自身。
    无论是策略改进中遍历所有状态查找最优‘状态-动作价值函数’Q(s,a)还是Dyna-Q中随机选择状态-动作对(s,a)更新Q-Table都是一个道理。

    决策时规划

    观察后台规划的思想,我们可能产生这样一种思维逻辑
    当遇到某状态 s s s时,可能只是有一个模糊的策略方向,但是不管三七二十一,先按照当前策略把动作给选了,后面策略优化的部分再慢慢地让后台去做。
    D y n a − Q Dyna-Q DynaQ就表现得很明显了,学习过程先通过真实模型真实样本先更新进 Q − T a b l e Q-Table QTable中,后续规划过程中的随机抽样再将 Q − T a b l e Q-Table QTable慢慢完善好。

    决策时规划就和后台规划思维逻辑的侧重点 存在明显区别:
    当遇到某状态 s s s时,先不着急选择动作,而是先将策略规划到当前最优,再通过该策略选择动作。

    决策时规划思想衍生的一种经典逻辑:

    • 仅知道当前状态 s s s,对于 s s s的每一个可选动作 a ∈ A ( s ) a \in \mathcal A(s) aA(s)

    • 通过样本模型 M o d e l Model Model得到下一时刻的状态价值函数
      以动作 a 1 a_1 a1为例:执行动作 a 1 a_1 a1后,可能得到 m m m个‘下一状态’ s i ′ ( i = 1 , 2 , . . . , m ) s'_i(i=1,2,...,m) si(i=1,2,...,m) m m m个模拟样本。
      { ( s , a 1 , s i ′ , r i ) } ∣ ( i = 1 , 2 , ⋯   , m ) \{(s,a_1,s'_i,r_i)\}|_{(i=1,2,\cdots,m)} {(s,a1,si,ri)}(i=1,2,,m)
      每一个‘下一状态’ s i ′ s'_i si都对应一个‘状态价值函数’
      V ( s i ′ ) ( i = 1 , 2 , ⋯   , m ) V(s'_i)(i=1,2,\cdots,m) V(si)(i=1,2,,m)
      a 1 a_1 a1的‘状态-动作价值函数' Q ( s , a 1 ) Q(s,a_1) Q(s,a1)可以表示为:
      Q ( s , a 1 ) = ∑ i = 1 m P ( s i ′ , r i ∣ s , a ) [ r i + γ V ( s i ′ ) ] Q(s,a_1) = \sum_{i=1}^m P(s'_i,r_i \mid s,a)[r_i + \gamma V(s'_i)] Q(s,a1)=i=1mP(si,ris,a)[ri+γV(si)]

    • 以此类推,可以计算动作集合 A ( s ) \mathcal A(s) A(s)中所有动作的状态-动作价值函数,得到一个集合:
      { Q ( s , a i ) } ∣ a i ∈ A ( s ) \{Q(s,a_i)\}|_{a_i \in \mathcal A(s)} {Q(s,ai)}aiA(s)

    • 从中选择一个最优 Q ( s , a i ) Q(s,a_i) Q(s,ai)对应的动作作为最优动作
      a ^ = arg ⁡ max ⁡ a i { Q ( s , a i ) ∣ a i ∈ A ( s ) } \hat a = \mathop{\arg\max}\limits_{a_i}\{Q(s,a_i)|_{a_i \in \mathcal A(s)}\} a^=aiargmax{Q(s,ai)aiA(s)}

    上述逻辑只是执行一次转移过程的逻辑(单步前瞻(one-step-ahead)),实际上甚至可以基于某条轨迹执行多次状态转移来考量和选择动作,但无论是哪种逻辑,决策时规划选择出的动作一定是当前状态下相对局部最优的动作
    这种规划并不一定仅执行一次状态转移(例如动态规划方法),甚至会执行一条‘轨迹’。即被选择的动作会综合考量后续‘若干次状态转移’后的影响力。

    假设某状态通过某种价值函数和策略已经得到得到一个 局部最优动作,在执行该动作后,我们可以 丢弃上述更新过程中的中间结果(策略、价值函数)
    原因在于状态空间很大的情况下,智能体很难在短时间重回同一个状态
    对于这句话的理解:
    1. 以象棋为例,象棋自身就是‘决策时规划’的典型例子,换成我方下棋时,智能体可以停下来思考,不急于马上做出下棋动作;相反,执行完该动作后,一般情况下不会出现悔棋操作,自然不会像后台规划一样出现‘后置优化策略的情况’。

    2. 言归正传,虽然‘象棋规则本身’是无法变化的,如马走日,象飞田。但无论我方还是对方,执行一次下棋动作后,环境都会发生变化。例如在某一步中跳了一次马,20步之后又想准备跳马时,此时虽然跳马的规则没变,但20步之后的环境(局势)发生很大变化,要向哪里跳收益最大,使用20步之前的策略可能并不是很有效了。

    我们如何实现决策时规划这种选择的动作可以前瞻若干个状态转移过程 的要求?下一节将介绍——启发式搜索方法

    相关参考:
    8.8 决策时规划
    【强化学习】规划与学习-决策时规划
    深度强化学习原理、算法与PyTorch实战——刘全、黄志刚编著

  • 相关阅读:
    大数据必学Java基础(三十):IDEA的使用介绍
    [Python进阶] 操纵键盘:PyAutoGUI
    深度剖析js闭包
    iPhone15发布,苹果和台积电的牛皮都破了,3纳米没那么神奇
    代码随想录训练营二刷第二十五天 | 216.组合总和III 17.电话号码的字母组合
    C# NAudio 音频库
    图论相关内容
    手写注解框架(一)
    应对项目严重滞后4大有效补救方法
    最小二乘法,加权最小二乘法,迭代重加权最小二乘法
  • 原文地址:https://blog.csdn.net/qq_34758157/article/details/126192415