动态规划(Dynamic Programming)

区分Continuing Task和Episodic Task

前一节我们已经解释了什么是episode,episode即为从初始的状态到终止状态的整个过程。那么什么是Continuing Task? 什么是Episodic Task呢?其实,两者最根本的区别就是Continuing Task是无法确认最终的终止状态,其动作状态会一直发生下去的即为Continuing Task。与此相反,Episodic Task是拥有有限长度的状态,也就是知道最终的结束状态。

强化学习分类

强化学习基本上可以分为两大类。第一类是有模型的强化学习,另一类为无模型的强化学习。模型可以简单地理解为transition-state probability。而动态规划(Dynamic Programming)就是一个基于有模型的强化学习方法。分类图如下所示:

《动态规划(Dynamic Programming)》 强化学习分类

动态规划(Dynamic Programming)

根据前面推导出来的Value Functions的表达公式,我们可以看出当前状态的值可以通过接下来的状态值计算出来。但是,这两个状态的值函数我们都不知道。因此,该算法也被称为自举(bootstrapping)。接下来我们先看看动态规划方法如何对policy来进行评估的。

策略评估(Policy Evaluation)

如何来评估策略的好坏呢?这时候我们需要从数学的角度出发,也就是要通过数值的方式来对策略进行评估。数值大代表策略好,数值小代表策略不是很好,我们很容易就会想到Value Functions。

根据Bellman Equation我们得到state value的计算公式如下:

《动态规划(Dynamic Programming)》 iterative policy evaluation

于是,我们就可以通过一次次的迭代来得到该policy的state value了。其伪代码如下:

《动态规划(Dynamic Programming)》 policy evaluation 伪代码

从伪代码中,我们可以知道Policy Evaluation是对一个Policy进行计算的。当我们更新的state value值几乎不变时,就可以让其停止迭代了。

列1: 我们有一个Gridworld的游戏,其中有2个终点,1-14数字分别代表14个不同的状态(state),我们可以朝四个方向走(上下左右),也就是代表了我们的动作(action),每一次状态的改变都会得到-1的奖励。游戏如下图所示:

《动态规划(Dynamic Programming)》 Gridworld Game

通过Iterative Policy Evaluation方法进行迭代,我们得到前两次迭代的state value矩阵。如下所示:

《动态规划(Dynamic Programming)》 policy evaluation example

我们来看一下k=2时,-1.7是怎么计算出来的。因为我们可以采取4个动作,所以每个动作的概率都为0.25, 而在状态1的位置上,其可以向左、向右、向下和原地不动。因此,其state value就等于(0.0 * 0.25) + (-1 * 0.25) + (-1 * 0.25) + (-1 * 0.25) = -1.75,四舍五入即为-1.7。

策略提升(Policy Improvement)

我们进行策略评估的目的就是为了找到最优的策略。还是拿列1来举例,当k=2时,我们已经计算出了各个状态下的state value,比如我们在状态2的情况下,为了转换到更好的状态,我们就朝四个方向观察一番,发现通过向左走可以得到更多(-1.7 > -2.0)的奖励,于是我们便采取向左的动作,使状态转换到了状态1。这就是策略提升。

通过例子,我们可以知道我们在状态不好的情况下采取相应行动转换到比较好的状态的值(也就是action value)一定会大于当前状态不好的值(state value)。通过公式推导,我们只需要选择state value值大的地方执行策略即可。公式推导如下:

《动态规划(Dynamic Programming)》 公式推导1

因此,我们可以使用贪婪策略(greedy policy),也就是取其最大值,来得出最优的策略(在当前状态下应该采取的动作)和最优的state value。公式如下所示:

《动态规划(Dynamic Programming)》 optimal policy
《动态规划(Dynamic Programming)》 optimal state value

策略迭代(Policy Iteration)

策略迭代就是结合了策略评估和策略提升,通过一次次的迭代来得到最优的策略。如图:

《动态规划(Dynamic Programming)》 策略迭代

其中E表示进行一次Policy Evaluation,I表示进行一次Policy Improvement,*表示最优解,0-n表示进行了多少次迭代。伪代码如下所示:

《动态规划(Dynamic Programming)》 Policy Iteration Code

值迭代(Value Iteration)

根据策略迭代算法,每一次迭代都要进行策略评估和策略提升,直到二者都收敛。可我们的目标是选出最优的策略,那么有没有可能在策略评估值没有收敛的情况下,最优策略已经收敛了呢?答案是有这个可能。我们还拿例1来看,迭代步骤如下所示:

《动态规划(Dynamic Programming)》 Gridworld Game

可以看出当迭代第三次时,policy已经收敛了,因此无需再对其做策略评估。值迭代过程就是运用了这一点的原理,使用缩减过的策略评估在每次迭代中,都会求最大的policy值,直到其策略收敛。其公式,伪代码如下:

《动态规划(Dynamic Programming)》 Value Iteration
《动态规划(Dynamic Programming)》 伪代码

GridWorld 部分代码

《动态规划(Dynamic Programming)》 代码1
《动态规划(Dynamic Programming)》 代码2

Reference

1. Reinforcement Learning An Introduction

2.强化学习入门 第二讲 基于模型的动态规划方法 https://zhuanlan.zhihu.com/p/25580624

3.Github: Reinforcement Learning An Introduction https://github.com/ShangtongZhang/reinforcement-learning-an-introduction

    原文作者:倒着念
    原文地址: https://www.jianshu.com/p/f63d674b7688
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞