前面我们讲了很多的基于价值、基于模型的算法,本章将会介绍基于模型的强化学习算法。
1、基于模型的强化学习概述
前面我们有讲过动态规划来求解强化学习问题,那就是一个简单的基于模型的强化学习任务,但是那个算法的状态转移概率是知道的,或者说很容易算得出来的。但是对于比较复杂的问题,想得到状态转移模型就没有那么容易。前面讲的解决办法就是绕过这个问题,不求这个状态转移模型的概率P,而改求价值函数或者直接求解策略。今天我们就是直接和这个问题面对面,我们就是要把它求出来,当然并不是完全没有误差的求出来,只是说得到的结果尽可能的近似这个概率P。
一个简单的概述就是:个体从真实的episode(序列)中进行模型学习(Model Learning),获得模型的环境模型(Model),进而获得模型的准确描述,该过程为学习阶段。基于获得的环境模型,个体与模拟环境(而非真实环境)进行交互并获得大量的episode数据。在模拟经验轨迹集上,个体采用免模型的强化学习求解对价值函数或者策略函数进行更新,该过程称为规划阶段,随后用求得的价值函数或者策略函数与环境发生实际交互,获得更多的episode数据。一直重复上述过程,知道获得较为理想的价值函数或者策略函数。
可以用下面的图表示:
注意:“规划”指个体与模拟环境进行交互,而非与实际环境进行交互,并在与模拟环境交互过程中进行episode数据的采集,采集到的数据成为模拟episode。
2、学习过程
上一节讲到基于模型的RL有两个过程:学习过程和规划过程。这里先了解学习过程。
学习是代表从真实的episode中学习到环境模型,即学习代表环境的马尔科夫决策过程。M~~MDP(S,A,P,R)。在求解基于模型的强化学习模型任务中,假定状态空间S和动作空间A已知,需要求解MDP中的状态转移概率P和奖励函数R的近似表示,即 P η P_η Pη和 R η R_η Rη。其中η为待求解的模拟环境的参数。
所以对模型 M η M_η Mη的估计就是对状态转移概率 P η P_η Pη和奖励函数 R η R_η Rη进行估计。从episode数据{ s 1 , a 1 , r 1 , s 2 . . . . r T s_1,a_1,r_1,s_2....r_T s1,a1,r1,s2....rT}可知,可以直接使用监督学习的方法对 P η P_η Pη和 R η R_η Rη进行求解。
(1)状态转移概率
P
η
P_η
Pη
首先需要若干组episode数据{
s
1
,
a
1
,
r
1
,
s
2
.
.
.
.
r
T
s_1,a_1,r_1,s_2....r_T
s1,a1,r1,s2....rT}构建有监督的训练数据。
其中<
s
t
,
a
t
s_t,a_t
st,at>为模型的输入,
s
t
+
1
s_{t+1}
st+1为模型的输出(即监督信号),这属于密度估计问题。可以用均方误差或者相对熵等来作为优化参数η的损失函数。可以用查表法或者深度神经网络模型来求解这个
P
η
P_η
Pη
(2)奖励函数 R η R_η Rη
利用监督学习来求解奖励函数同样需要episode数据构建有监督的训练数据,与概率状态转移概率 P η P_η Pη不同的是,从< s t , a t s_t,a_t st,at>中学习 r t + 1 r_{t+1} rt+1的过程属于回归问题。求解过程和 P η P_η Pη类似。通过定义损失函数,再使用机器学习的办法对损失函数进行优化求解。
3、规划问题
规划过程主要是基于环境模型
M
η
=
<
P
η
,
R
η
>
M_η = <P_η,R_η>
Mη=<Pη,Rη>,求解基于该模型的最优价值函数或最优策略。
具体而言,规划过程首先基于模型生成大量的模拟episode数据,随后采用免模型的方法(策略梯度、值函数近似等等)从生成的模拟episode数据中学习价值函数或策略函数。
注意:学习过程主要使用环境中的真实episode数据,而规划过程主要使用环境模拟生成的模拟episode数据,即利用模拟经验代替真实经验。
那现在有个问题就是,为什么不直接使用真实数据,非要使用模拟数据?模拟的数据肯定会产生误差,因为本身的模拟环境就和真实的环境有不同的。原因在于有时候真实的环境中并没有那么多的episode数据,我们只能通过现有的有限的数据的学习产生和真实数据相差不大的数据,当然这里的和“真实数据相差不大”只是我们的想象,能不能做到就得看具体的情况。通过充分的利用有限的真实数据,使得个体在更短的迭代次数里获得更好的策略。
4、架构整合
架构整合将会基于模型和强化学习和免模型的强化学习进行有机的结合,进而能够同时利用两种算法的优势以解决更为复杂的强化学习任务。
如下图示:
从图中可以看出这里和基于模型的强化学习的不同在于多了一个direct RL的箭头(直接强化学习)。同时这里的经验(experience)有了两个用途:
(1)用于环境模型的学习,并随后基于环境模型改进价值函数或者策略函数。
(2)通过强化学习算法直接进行价值函数的学习和更新。
直接方法更加简洁而且不受模型片偏差的影响,间接方法就如前面所讲的,能够充分的利用有限的真实数据。
基于模型和免模型结合的代表就是Dyna算法。
Dyna算法框架和不同的具体的不基于模型的强化学习一起,可以得到具体的不同算法。如果我们使用基于价值函数的Q-Learning,那么我们就得到了Dyna-Q算法。我们基于Dyna-Q来看看Dyna算法框架的一般流程.
5、Dyna-Q算法流程
这里我们给出基于价值函数的Dyna-Q算法的概要流程。假设模型使用的是查表法。
1. 初始化任意一个状态s,和任意一个动作a对应的状态价值Q(s,a), 初始化奖励模型R(s,a)和状态模型P(s,a)
2. for i=1 to 最大迭代次数T:
a) S ← current state
b) A ← ϵ−greedy(S,Q)
c) 执行动作A,得到新状态S′和奖励R
d) 使用Q-Learning更新价值函数:Q(S,A)=Q(S,A)+α[R+γmaxaQ(S′,a)−Q(S,A)]
e) 使用S,A,S′更新状态模型P(s,a),使用S,A,R更新状态模型R(s,a)
f) for j=1 to 最大次数n:
i) 随机选择一个之前出现过的状态S, 在状态S上出现过的动作中随机选择一个动作A
ii) 基于模型P(S,A)得到S′, 基于模型R(S,A)得到R
iii) 使用Q-Learning更新价值函数:Q(S,A)=Q(S,A)+α[R+γmaxaQ(S′,a)−Q(S,A)]
从上面的流程可以看出,Dyna框架在每个迭代轮中,会先和环境交互,并更新价值函数和(或)策略函数,接着进行n次模型的预测,同样更新价值函数和(或)策略函数。这样同时利用上了和环境交互的经历以及模型的预测。
6、总结
基于模型的强化学习一般不单独使用,而是和不基于模型的强化学习结合起来,因此使用Dyna算法框架是常用的做法。对于模型部分,我们可以用查表法和监督学习法等方法,预测或者采样得到模拟的经历。而对于非模型部分,使用前面的Q-Learning系列的价值函数近似,或者基于Actor-Critic的策略函数的近似都是可以的。
除了Dyna算法框架,我们还可以使用基于模拟的搜索(simulation-based search)来结合基于模型的强化学习和不基于模型的强化学习,并求解问题。这部分我们在下面一章讨论。
下一章:基于模拟的搜索