基础算法篇(二),蒙特卡洛方法解决Model-Free强化学习问题

从这一节开始,我们开始向大家介绍如何解决Model-Free强化学习问题。
在前面强化学习基本概念小结中我们向大家介绍了,Model-Free指的是状态转移概率 p p p(或状态转移矩阵 P P P)未知,那么以下两个公式:
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)]
q π ( s , a ) = r s a + γ ∑ s ′ ∈ S P s s ′ a ∑ a ′ ∈ A π ( a ′ ∣ s ′ ) q π ( s ′ , a ′ ) {\mathrm q}_{\mathrm\pi}\left(\mathrm s,\mathrm a\right)=r_s^a+\gamma\sum_{s'\in S}P_{ss'}^a\sum_{\mathrm a'\in\mathrm A}\mathrm\pi\left(\mathrm a'\left|\mathrm s'\right.\right){\mathrm q}_{\mathrm\pi}\left(\mathrm s',\mathrm a'\right) qπ(s,a)=rsa+γsSPssaaAπ(as)qπ(s,a)
就无法使用。因此,我们只能转而去看 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 ) = 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]
  • q π ( s , a ) = E π [ G t ∣ s t = s , a t = a ] q_\pi\left(s,a\right)=E_\pi\left[G_t\left|s_t=s,a_t=a\right.\right] qπ(s,a)=Eπ[Gtst=s,at=a]

其中 G t = r t + 1 + γ r t + 2 + ⋯ = ∑ k = 0 ∞ γ k r t + k + 1 G_t=r_{t+1}+\gamma r_{t+2}+\cdots=\sum_{k=0}^\infty\gamma^kr_{t+k+1} Gt=rt+1+γrt+2+=k=0γkrt+k+1,为累积回报,是在某一个完整过程中产生的。那么,我们能不能用多次的累积回报去逼近 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)呢?
根据这个思路,就引出了我们今天要介绍的蒙特卡洛方法。

蒙特卡洛方法介绍

蒙特卡罗方法也称统计模拟方法,是1940年代中期由于科学技术的发展和电子计算机的发明,而提出的一种以概率统计理论为指导的数值计算方法。
我们在这里就是“通过随机抽样的方法,以抽样的数字特征估算随机变量的数字特征”。
具体来说就是“把样本点的累积回报加起来求平均,来逼近状态价值或状态-行为值”:
v π ( s ) ≈ a v e r a g e ( G t ) v_{\mathrm\pi}\left(s\right)\approx average\left(G_t\right) vπ(s)average(Gt)
那么,在这个采样求平均的过程中,会遇到以下两个问题:

  • 一是在一次完整状态过程中,同样一个状态可能会多次出现,那么这时的累积回报该如何使用?
    这有两种解决方法,一是首次访问(first visit),即只用第一次出现的;二是每次访问(every visit),即每次出现的值都使用。
  • 二是累积状态存储更新问题,我们上面的公式中有个average,意味着可能要存储所有状态,如何节省存储空间?
    这个问题可用如下公式解决:
    y k = 1 k ∑ i = 1 k x i        = 1 k ( x k + ∑ i = 1 k − 1 x i )        = 1 k [ x k + ( k − 1 ) y k − 1 ]        = y k − 1 + 1 k ( x k − y k − 1 ) y_k=\frac1k\sum_{i=1}^kx_i\\\;\;\;=\frac1k\left(x_k+\sum_{i=1}^{k-1}x_i\right)\\\;\;\;=\frac1k\left[x_k+\left(k-1\right)y_{k-1}\right]\\\;\;\;=y_{k-1}+\frac1k\left(x_k-y_{k-1}\right) yk=k1i=1kxi=k1(xk+i=1k1xi)=k1[xk+(k1)yk1]=yk1+k1(xkyk1)

下面,我们使用蒙特卡洛方法解决状态价值或状态-行为值的求解,以及最优策略的求解问题。

状态价值或状态-行为值的求解

根据前面蒙特卡洛方法的介绍,我们可以得到状态价值的求解公式如下所示:

  • v ( s t k ) = v ( s t k − 1 ) + 1 N ( s t k ) [ G t k − v ( s t k − 1 ) ] v\left(s_t^k\right)=v\left(s_t^{k-1}\right)+\frac1{N\left(s_t^k\right)}\left[G_t^k-v\left(s_t^{k-1}\right)\right] v(stk)=v(stk1)+N(stk)1[Gtkv(stk1)] (1)

其中 N ( s t k ) = N ( s t k − 1 ) + 1 N\left(s_t^k\right)=N\left(s_t^{k-1}\right)+1 N(stk)=N(stk1)+1 (2)。这样我们在计算中只需要存储 v ( s t k ) v\left(s_t^k\right) v(stk) N ( s t k ) N\left(s_t^k\right) N(stk)这两个值即可。
同理,状态-行为值也可以用如下公式求得:

  • q ( s t k , a t k ) = q ( s t k − 1 , a t k − 1 ) + 1 N ( s t k ) [ G t k − q ( s t k − 1 , a t k − 1 ) ] q\left(s_t^k,a_t^k\right)=q\left(s_t^{k-1},a_t^{k-1}\right)+\frac1{N\left(s_t^k\right)}\left[G_t^k-q\left(s_t^{k-1},a_t^{k-1}\right)\right] q(stk,atk)=q(stk1,atk1)+N(stk)1[Gtkq(stk1,atk1)] (3)

有时,我们在使用海量数据分布式迭代时,可能很难计算准确的次数 N ( s t k ) N\left(s_t^k\right) N(stk)。这时,我们就可以使用一个系数 α \alpha α来代替,即:

  • v ( s t k ) = v ( s t k − 1 ) + 1 α [ G t k − v ( s t k − 1 ) ] v\left(s_t^k\right)=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)] (4)
  • 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)=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)] (5)

最优策略求解

蒙特卡洛法在最优策略求解时,与前面的动态规划方法思路基本一致。但不同点在于,为了保证能够更加广泛的采样,因此最优策略不能直接使用贪婪方法,而是要进行一定的改进,以保证各种策略都能够被采样到。这个方法就是 ε \varepsilon ε-贪婪法,即设定一个较小的 ε \varepsilon ε值,使用 1 − ε 1-\varepsilon 1ε的概率选择最大 q π ( s , a ) {\mathrm q}_{\mathrm\pi}\left(\mathrm s,\mathrm a\right) qπ(s,a) a a a,用 ε \varepsilon ε的概率随机选择其他m个行为。具体如下所示:

  • π ( 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 (6)

其中 m = ∣ A ( s ) ∣ m=\left|A\left(s\right)\right| m=A(s)。在实际求解过程中,为了使算法可以收敛, ε \varepsilon ε需要随着算法的迭代过程逐渐减小,因此一般可以设 ε = 1 k \varepsilon=\frac1k ε=k1

蒙特卡洛算法思路

介绍了上面几部分内容后,我们可以得到针对Model-Free强化学习问题的蒙特卡洛算法,具体如下:

  1. 初始化 q ( s , a ) = 0 \mathrm q\left(\mathrm s,\mathrm a\right)=0 q(s,a)=0 N ( s , a ) = 0 \mathrm N\left(\mathrm s,\mathrm a\right)=0 N(s,a)=0 k = 1 k=1 k=1,随机初始化一个策略 π ( a ∣ s ) \mathrm\pi\left(\mathrm a\left|\mathrm s\right.\right) π(as)
  2. 基于策略 π \mathrm\pi π进行第 k k k次采样,得到一个完整的状态序列: s 0 , a 1 , r 1 , s 1 , ⋯   , s t , a t + 1 , r t + 1 , s t + 1 , ⋯   , a T , r T , s T {\mathrm s}_0,{\mathrm a}_1,{\mathrm r}_1,{\mathrm s}_1,\cdots,{\mathrm s}_{\mathrm t},{\mathrm a}_{\mathrm t+1},{\mathrm r}_{\mathrm t+1},{\mathrm s}_{\mathrm t+1},\cdots,{\mathrm a}_{\mathrm T},{\mathrm r}_{\mathrm T},{\mathrm s}_{\mathrm T} s0,a1,r1,s1,,st,at+1,rt+1,st+1,,aT,rT,sT
  3. 利用 G t = r t + 1 + γ r t + 2 + ⋯ = ∑ k = 0 ∞ γ k r t + k + 1 G_t=r_{t+1}+\gamma r_{t+2}+\cdots=\sum_{k=0}^\infty\gamma^kr_{t+k+1} Gt=rt+1+γrt+2+=k=0γkrt+k+1计算累积回报,并根据公式(2)和(3)更新 q ( s t k ) q\left(s_t^k\right) q(stk) N ( s t k ) N\left(s_t^k\right) N(stk)
  4. 根据公式(6),更新策略 π ( a ∣ s ) \mathrm\pi\left(\mathrm a\left|\mathrm s\right.\right) π(as)
  5. 如果 q ( s t k ) q\left(s_t^k\right) q(stk)收敛,则得到的 π ( a ∣ s ) \mathrm\pi\left(\mathrm a\left|\mathrm s\right.\right) π(as)即为最优策略,否则到第二步再次循环。

以上就是蒙特卡洛算法的基本思路。大家请牢记这一思路,后续大部分Model-Free算法都是从这一思路衍生出来的。当然,蒙特卡洛法要求完整的状态序列,这在很多强化学习问题中都很难满足,而且这种执行完一个完整序列才调整策略的方法效率也较低,下面我们介绍在此基础上改进产生的时间差分(TD)算法。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值