基础算法篇(三),时序差分方法解决Model-Free强化学习问题

上一章我们介绍用蒙特卡洛(MC)方法解决Model-Free的强化学习问题时,核心关键就是利用多次的累积回报去逼近状态价值 v π ( s ) v_{\mathrm\pi}\left(s\right) vπ(s)或状态-行为值 q π ( s , a ) {\mathrm q}_{\mathrm\pi}\left(\mathrm s,\mathrm a\right) qπ(s,a)。即如下公式:

  • v ( s t k ) ← v ( s t k − 1 ) + 1 α [ G t k − v ( s t k − 1 ) ] v\left(s_t^k\right)\leftarrow v\left(s_t^{k-1}\right)+\frac1\alpha\left[G_t^k-v\left(s_t^{k-1}\right)\right] v(stk)v(stk1)+α1[Gtkv(stk1)] (1)
  • q ( s t k , a t k ) ← q ( s t k − 1 , a t k − 1 ) + 1 α [ G t k − q ( s t k − 1 , a t k − 1 ) ] q\left(s_t^k,a_t^k\right)\leftarrow q\left(s_t^{k-1},a_t^{k-1}\right)+\frac1\alpha\left[G_t^k-q\left(s_t^{k-1},a_t^{k-1}\right)\right] q(stk,atk)q(stk1,atk1)+α1[Gtkq(stk1,atk1)] (2)

其中 G t k = r t + 1 k + γ r t + 2 k + ⋯ = ∑ m = 0 ∞ γ m r t + m + 1 k G_t^k=r_{t+1}^k+\gamma r_{t+2}^k+\cdots=\sum_{m=0}^\infty\gamma^mr_{t+m+1}^k Gtk=rt+1k+γrt+2k+=m=0γmrt+m+1k,为累积回报,是在第 k k k个完整过程中产生的。
但这就带来了一个问题,那就是采用MC时,需要完整的过程。但是,很多时候,完整过程是很难得到的。因此,蒙特卡洛方法就有可能导致学习的效率低下(例如一次完整过程非常漫长),甚至无法学习(没有最终状态),那么如何解决这一问题呢?

时序差分算法基本思想

首先,我们可以回顾一下动态规划算法解决Model-Based问题时的思路,具体公式如下:

  • v π ( s ) = ∑ a ∈ A π ( a ∣ s ) [ r s a + γ ∑ s ′ ∈ S P s s ′ a v π ( s ′ ) ] v_{\mathrm\pi}\left(s\right)=\sum_{a\in A}\mathrm\pi\left(\mathrm a\left|\mathrm s\right.\right)\left[\mathrm r_{\mathrm s}^{\mathrm a}+\mathrm\gamma\sum_{\mathrm s'\in\mathrm S}\mathrm P_{\mathrm{ss}'}^{\mathrm a}{\mathrm v}_{\mathrm\pi}\left(\mathrm s'\right)\right] vπ(s)=aAπ(as)[rsa+γsSPssavπ(s)]

其中使用到了下一个状态的价值函数 v π ( s ′ ) {\mathrm v}_{\mathrm\pi}\left(\mathrm s'\right) vπ(s),并通过迭代方法最终使状态价值函数和状态-行为值函数都收敛。
那么我们能不能借助这个思想,对上面的公式(1)和(2)进行一定的改造呢?
我们从 G t k G_t^k Gtk的公式入手:

  • G t k = r t + 1 k + γ r t + 2 k + γ 2 r t + 3 k + ⋯          = r t + 1 k + γ ( r t + 2 k + γ r t + 3 k + ⋯   )          = r t + 1 k + γ G t + 1 k \mathrm G_{\mathrm t}^{\mathrm k}=\mathrm r_{\mathrm t+1}^{\mathrm k}+\mathrm{γr}_{\mathrm t+2}^{\mathrm k}+\mathrm\gamma^2\mathrm r_{\mathrm t+3}^{\mathrm k}+\cdots\\\;\;\;\;=\mathrm r_{\mathrm t+1}^{\mathrm k}+\mathrm\gamma\left(\mathrm r_{\mathrm t+2}^{\mathrm k}+\mathrm{γr}_{\mathrm t+3}^{\mathrm k}+\cdots\right)\\\;\;\;\;=\mathrm r_{\mathrm t+1}^{\mathrm k}+\mathrm{γG}_{\mathrm t+1}^{\mathrm k} Gtk=rt+1k+γrt+2k+γ2rt+3k+=rt+1k+γ(rt+2k+γrt+3k+)=rt+1k+γGt+1k

同时,考虑 v π ( s ) = E π [ G t ∣ s t = s ] v_\pi\left(s\right)=E_\pi\left[G_t\left|s_t=s\right.\right] vπ(s)=Eπ[Gtst=s],则有如下关系:

  • v π ( s ) = E π [ G t ∣ s t = s ]                    = E π [ r t + 1 + γ G t + 1 ∣ s t = s ]                    = E π [ r t + 1 + γ v π ( s t + 1 ) ∣ s t = s ] v_\pi\left(s\right)=E_\pi\left[G_t\left|s_t=s\right.\right]\\\;\;\;\;\;\;\;\;\;=E_\pi\left[r_{t+1}+\gamma G_{t+1}\left|s_t=s\right.\right]\\\;\;\;\;\;\;\;\;\;=E_\pi\left[r_{t+1}+\gamma v_\pi\left(s_{t+1}\right)\left|s_t=s\right.\right] vπ(s)=Eπ[Gtst=s]=Eπ[rt+1+γGt+1st=s]=Eπ[rt+1+γvπ(st+1)st=s]

那么,在公式(1)和(2)中,我们用 r t + 1 k + γ v ( s t + 1 k − 1 ) r_{t+1}^k+\gamma v\left(s_{t+1}^{k-1}\right) rt+1k+γv(st+1k1) r t + 1 k + γ q ( s t + 1 k − 1 , a t + 1 k − 1 ) r_{t+1}^k+\gamma q\left(s_{t+1}^{k-1},a_{t+1}^{k-1}\right) rt+1k+γq(st+1k1,at+1k1)代替 G t k G_t^k Gtk,那么就可以得到如下公式:

  • v ( s t k ) ← v ( s t k − 1 ) + 1 α [ r t + 1 k + γ v ( s t + 1 k − 1 ) − v ( s t k − 1 ) ] v\left(s_t^k\right)\leftarrow v\left(s_t^{k-1}\right)+\frac1\alpha\left[r_{t+1}^k+\gamma v\left(s_{t+1}^{k-1}\right)-v\left(s_t^{k-1}\right)\right] v(stk)v(stk1)+α1[rt+1k+γv(st+1k1)v(stk1)] (3)
  • q ( s t k , a t k ) ← q ( s t k − 1 , a t k − 1 ) + 1 α [ r t + 1 k + γ q ( s t + 1 k − 1 , a t + 1 k − 1 ) − q ( s t k − 1 , a t k − 1 ) ] q\left(s_t^k,a_t^k\right)\leftarrow q\left(s_t^{k-1},a_t^{k-1}\right)+\frac1\alpha\left[r_{t+1}^k+\gamma q\left(s_{t+1}^{k-1},a_{t+1}^{k-1}\right)-q\left(s_t^{k-1},a_t^{k-1}\right)\right] q(stk,atk)q(stk1,atk1)+α1[rt+1k+γq(st+1k1,at+1k1)q(stk1,atk1)] (4)

上面这个公式看起来挺麻烦的,其实道理很简单,就是参照动态规划的方法,将原来蒙特卡洛方法中全过程的累积回报 G t k G_t^k Gtk,变成了环境的实时奖励 r t + 1 k r_{t+1}^k rt+1k下一状态的状态函数 v ( s t + 1 k − 1 ) v\left(s_{t+1}^{k-1}\right) v(st+1k1)或状态-行为值 q ( s t + 1 k − 1 , a t + 1 k − 1 ) q\left(s_{t+1}^{k-1},a_{t+1}^{k-1}\right) q(st+1k1,at+1k1)的和

这样,就避免了蒙特卡洛算法中必须要全过程累积回报的缺点,使得能够在过程中利用两步信息就学习。

时序差分中的策略求解

虽然时序差分借鉴了动态规划的思想,但其解决的是Model-Free问题,因此无法利用状态转移概率从状态价值直接求解得到状态-行为值。所以,在策略求解中,时序差分与蒙特卡洛方法一样,都是采用经验平均直接对状态-行为值进行优化,最终求得最优状态-行为价值和最优策略。
但是与蒙特卡洛方法利用完整状态序列进行学习不一样的是,时序差分是在过程中进行学习【利用公式(4)更新】的。
由公式(4)可以看出,在更新过程中,需要三个值,即:

  1. q ( s t k − 1 , a t k − 1 ) q\left(s_t^{k-1},a_t^{k-1}\right) q(stk1,atk1)
  2. r t + 1 k r_{t+1}^k rt+1k
  3. q ( s t + 1 k − 1 , a t + 1 k − 1 ) q\left(s_{t+1}^{k-1},a_{t+1}^{k-1}\right) q(st+1k1,at+1k1)

上面三个值中, r t + 1 k r_{t+1}^k rt+1k是直接环境给的。那么关于剩下两个如何取值,就诞生了两种方法。一个是采用同一策略的on-policy【一般翻译为同轨策略】,另一个是采用不同策略的off-policy【一般翻译为离轨策略】,下面我们直接从算法层面讲这两种方法的不同。

on-policy与SARSA

首先算法应随机初始化 Q ( s , a ) Q\left(s,a\right) Q(s,a),其中终止状态 Q = 0 Q=0 Q=0,然后对于一个完整的Episode,算法如下:

  1. 初始化 s s s
  2. s s s下,使用 ε ‐ g r e e d y \varepsilon‐greedy εgreedy策略,从所有 Q ( s , a ) Q\left(s,a\right) Q(s,a)中选择行动 a a a
  3. 执行动作 a a a,得到 r r r s ′ s' s
  4. s ′ s' s下,使用 ε ‐ g r e e d y \varepsilon‐greedy εgreedy策略,从所有 Q ( s ′ , a ′ ) Q\left(s',a'\right) Q(s,a)中选择行动 a ′ a' a
  5. 利用公式 Q ( s , a ) ← Q ( s , a ) + α [ r + γ Q ( s ′ , a ′ ) − Q ( s , a ) ] Q\left(s,a\right)\leftarrow Q\left(s,a\right)+\alpha\left[r+\gamma Q\left(s',a'\right)-Q\left(s,a\right)\right] Q(s,a)Q(s,a)+α[r+γQ(s,a)Q(s,a)]进行更新;
  6. s ← s ′ s\leftarrow s' ss a ← a ′ a\leftarrow a' aa
  7. s s s是终止状态,则结束;否则跳到第3步。

为什么说SARSA是on-policy的呢?大家请看第4、5、6步,这里用来计算目标值的策略 Q ( s ′ , a ′ ) Q\left(s',a'\right) Q(s,a)和生成行动 a ′ a' a的策略是同一个策略,即 Q Q Q更新前就生成了下一个action。

off-policy与Q-Learning

同样对于一个完整的Episode,算法如下:

  1. 初始化 s s s
  2. s s s下,使用 ε ‐ g r e e d y \varepsilon‐greedy εgreedy策略,从所有 Q ( s , a ) Q\left(s,a\right) Q(s,a)中选择行动 a a a
  3. 执行动作 a a a,得到 r r r s ′ s' s
  4. 使用贪婪策略,找到最大的 Q ( s ′ , a ′ ) Q\left(s',a'\right) Q(s,a)
  5. 利用公式 Q ( s , a ) ← Q ( s , a ) + α [ r + γ ⋅ m a x Q ( s ′ , a ′ ) − Q ( s , a ) ] Q\left(s,a\right)\leftarrow Q\left(s,a\right)+\alpha\left[r+\gamma\cdot maxQ\left(s',a'\right)-Q\left(s,a\right)\right] Q(s,a)Q(s,a)+α[r+γmaxQ(s,a)Q(s,a)]进行更新;
  6. s ← s ′ s\leftarrow s' ss
  7. s s s是终止状态,则结束;否则跳到第2步。

为什么说Q-Learning是off-policy的呢?大家请看第5、6步,这里是用来计算目标值的策略 Q ( s ′ , a ′ ) Q\left(s',a'\right) Q(s,a),再往后看,更新后策略已经发生了变化,再从7——>2后生成新的action,这就说明生成目标值的策略和生成行动的策略不是一个策略,即 Q Q Q更新后才生成下一个action。

由上面SARSA和Q-Learning的具体算法可以看出,他们的区别主要在于更新的方式不同:

  • SARSA使用 ε ‐ g r e e d y \varepsilon‐greedy εgreedy策略,选择 Q ( s ′ , a ′ ) Q\left(s',a'\right) Q(s,a)以及对应的 a ′ a' a,进行更新并继续执行;
  • Q-Learning则使用贪婪策略,找到最大的 Q ( s ′ , a ′ ) Q\left(s',a'\right) Q(s,a)进行更新,而 a ′ a' a则还是使用 ε ‐ g r e e d y \varepsilon‐greedy εgreedy策略进行选择,并继续执行。

根据 ε ‐ g r e e d y \varepsilon‐greedy εgreedy的公式:

  • π ( a ∣ s ) = { 1 − ε + ε m    i f    a ∗ = arg ⁡ max ⁡ a ∈ A q ( s , a ) ε m    e l s e \mathrm\pi\left(\mathrm a\left|\mathrm s\right.\right)=\left\{\begin{array}{l}1-\varepsilon+\frac\varepsilon m\;\mathrm{if}\;\mathrm a\ast=\arg\max_{\mathrm a\in\mathrm A}\mathrm q\left(\mathrm s,\mathrm a\right)\\\frac\varepsilon m\;\mathrm{else}\end{array}\right. π(as)={1ε+mεifa=argmaxaAq(s,a)mεelse

可知,其实就是SARSA在值更新时有一定概率使用了其他的值,而Q-Learning则直接使用了最大值,即两者使用的更新模式是不一样的。

小结

时序差分算法为强化学习提供了很多重要的思路,但无论是SARSA或者Q-Learning都有一个很明显的问题,就是需要维护 Q ( s , a ) Q\left(s,a\right) Q(s,a),很多情况下,这个Q表会非常大,以至于算法根本无法实现。

  • 那么,有没有什么办法能够近似的去表示或者拟合状态价值函数 v π ( s ) v_\pi\left(s\right) vπ(s)或状态-行为值函数 q π ( s , a ) q_\pi\left(s,a\right) qπ(s,a)呢?

深度神经网络的出现,为这一问题提供了可行的方法。后面,我们将详细介绍相关方法,并正式开启我们的深度强化学习之旅。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值