强化学习-策略迭代

1. 前言

强化学习-MDP(马尔可夫决策过程)算法原理中我们已经介绍了强化学习中的基石--MDP,本文的任务是介绍如何通过价值函数,去寻找到最优策略,使得最后得到的奖励尽可能的多。

2. 回顾MDP

通过学习MDP我们得到了2个Bellman公式:

  • 状态值函数:

\[v_{\pi}(s_t)=\sum_{a_t}\pi(a_t|s_t)\sum_{s_{t+1}}p(s_{t+1}|s_t,a_t)[r_{a_t}^{s_{t+1}} + \gamma * v_{\pi}(s_{t+1})] \]

  • 状态-行动值函数:

\[q_{\pi}(s_t,a_t)=\sum_{s_{t+1}}p(s_{t+1}|s_t,a_t)[r_{a_t}^{s_{t+1}} + \gamma * \sum_{a_{t+1}}\pi(a_{t+1}|s_{t+1})q_{\pi}(s_{t+1},a_{t+1})] \]

和2个\(v_{\pi}(s_t),q_{\pi}(s_t,a_t)\)之间的推导关系。

\[v_{\pi}(s_t)=\sum_{a_t}\pi(a_t|s_t)q_{\pi}(s_t,a_t) \]

\[q_{\pi}(s_t,a_t)=\sum_{s_{t+1}}p(s_{t+1}|s_t,a_t)[r_{a_t}^{s_{t+1}} + \gamma * v_{\pi}(s_{t+1})] \]

3. 策略迭代法

我们发现如果想知道最优的策略,就需要能够准确估计值函数。然而想准确估计值函数,又需要知道最优策略,数字才能够估计准确。所以实际上这是一个“鸡生蛋还是蛋生鸡”的问题。

所以策略迭代法通过迭代的方式,去不断的靠近最优策略。

策略迭代法的思路:

  1. 以某种策略\(\pi\)开始,计算当前策略下的值函数\(v_{\pi}(s)\)
  2. 利用这个值函数,更新策略,得到\(\pi*\)
  3. 再用这个策略\(\pi*\)继续前行,更新值函数,得到\(v'_{\pi}(s)\),一直到\(v_{\pi}(s)\)不在发生变化。

如何计算当前的状态值函数\(v^T_{\pi}(s)\)呢?比较正常的思路是通过上一次的迭代的\(v^{T-1}_{\pi}(s)\),来计算当前这一轮迭代的值函数\(v^T_{\pi}(s)\)。那我们结合下之前的状态值函数的Bellman公式,我们就能写出策略迭代中,计算当前状态值函数的公式了。

\[v^T_{\pi}(s_t)=\sum_{a_t}\pi^{T-1}(a_t|s_t)\sum_{s_{t+1}}p(s_{t+1}|s_t,a_t)[r_{a_t}^{s_{t+1}} + \gamma * v^{T-1}_{\pi}(s_{t+1})]\;\;\;\;\;\;(1) \]

公式中的T代表迭代的轮数,有了这个公式,我们计算出了当前的\(v^T_{\pi}(s)\),然后如何去更新策略\(\pi*\)呢?

其实也比较简单,需要两个步骤:

  • 计算当前的状态-动作值函数:

\[q^T_{\pi}(s_t,a_t)=\sum_{s_{t+1}}p(s_{t+1}|s_t,a_t)[r_{a_t}^{s_{t+1}} + \gamma * v^T_{\pi}(s_{t+1})]\;\;\;\;\;\;(2) \]

  • 通过当前的状态-动作值函数,找出比较好的策略序列:

\[\pi^{T+1}(s) = argmax_aq^T_{\pi}(s,a)\;\;\;\;\;\;(3) \]

到这里策略迭代的基本过程在逻辑上已经走通了,这里其实还有一个概念,在策略迭代的算法中,其实大家把整个过程分为两个大的步骤。

  1. 计算当前的状态值函数的过程,即公式(1)称为--策略评估(policy evaluation)
  2. 计算最优策略的过程,即公式(2)(3)称为--策略提升(policy improvement)

3.1 策略评估步骤

  1. 输入:策略\(\pi^{T-1}\),状态转移概率\(p(s_{t+1}|s_t,a_t)\),奖励\(r\),衰减因子\(\gamma\),值函数\(v^{T-1}(s)\)
  2. \(v_{0}(s) = v^{T-1}(s)\)
  3. \(Repeat\;\;k=0,1...\)
  4. \(for\;\;every\;\;s\;\;do\)
  5.   \(v_{k+1}(s_t)=\sum_{a_t}\pi^{T-1}(a_t|s_t)\sum_{s_{t+1}}p(s_{t+1}|s_t,a_t)[r_{a_t}^{s_{t+1}} + \gamma * v_{k}(s_{t+1})]\)
  6. \(Until\;\;v_{k+1}(s) = v_{k}(s)\)
  7. 输出\(v^{T}(s)=v_{k+1}(s)\)

3.2 策略迭代步骤

  1. 输入:策略\(\pi_{0}\),状态转移概率\(p(s_{t+1}|s_t,a_t)\),奖励\(r\),衰减因子\(\gamma\),值函数\(v_{0}(s)\)
  2. \(Repeat\;\;k=0,1...\)
  3. \(policy\;\;evaluation\)
  4. \(q_{k}(s_t,a_t)=\sum_{s_{t+1}}p(s_{t+1}|s_t,a_t)[r_{a_t}^{s_{t+1}} + \gamma * v_{k}(s_{t+1})]\)
  5. \(\pi_{k+1}(s) = argmax_aq_{k}(s,a)\)
  6. \(Until\;\;\pi_{k+1}(s) = \pi_{k}(s)\)
  7. 输出\(\pi^{*}(s)=\pi_{k+1}(s)\)

3.3 策略迭代图形化展示

image

其中横轴X表示值函数的收敛效果,数值到达∞时完成收敛,纵轴Y表示策略的优异度,数值到达∞时策略到达最优。每一次迭代的过程,首先达到值函数的收敛,再提升一些策略的优异度。

从图中也可以看出,策略评估在横轴X反向上的截距比较长,所以它花费的时间比较多,策略提升是在纵轴Y上的截距,所以花费的时间比较短。

4. 总结

策略迭代的思想比较简单,先策略评估,再策略提升,直到策略不再变化为止。

但是策略迭代有点缺点,策略迭代的主要时间都花费在策略评估上,对一个简单的问题来说,在策略评估上花费的时间不算长;但对复杂的问题来说,这个步骤的时间实在有些长。一个最直接的想法就是,我们能不能缩短在策略评估上花的时间呢?有,就是价值迭代,我们下一篇要讲解的内容。

posted @ 2019-02-14 22:49  hyc339408769  阅读(5243)  评论(0编辑  收藏  举报