强化学习-策略迭代

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. 总结

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

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

原文地址:https://www.cnblogs.com/huangyc/p/10381184.html