上一篇讲了集成基于模型与不基于模型的强化学习框架Dyna,这一篇介绍另一种集成基于模型与不基于模型的强化学习框架基于模拟的搜索(Simulation Based Search)。
基于模拟的意思是,我们不是与环境交互获得真实的数据,而是基于模型进行采样得到训练样本。搜索则是为了利用模拟得到的训练样本来计算应该采取什么样的动作,以实现我们的长期累积奖励最大化。
既然我们已经有了一个环境的模型,那么利用这个模型来判断在当前状态$s$下应该采取什么样的动作最简单的方法就是前向搜索了。对于当前状态$s$,利用环境模型模拟该状态所有可能的动作,并得到所有可能动作分别可能达到的下一状态$s'$,并继续向前搜索展开,这样最后得到状态$s$最应该采用的动作$a$。前向搜索基于环境模型的全概率展开,很精确,但是状态数量多的话,特别慢,不太实用。
因此我们可以引入蒙特卡洛,根据基于环境模型模拟得到的数据,计算其动作价值函数并选择最优动作。具体来说,对于当前状态$s_t$,对于每一个可能采取的动作$a in A$,都利用环境模型进行K轮采样,这样每个动作a都会得到K组完整episode,一共得到K*len(A)组episode,
[{ {s_t},a,r_{t + 1}^k,{s_{t + 1}},a_{t + 1}^k,r_{t + 2}^k,...,s_T^k} _{k = 1}^K,a in A]
对于每个$(s_t, a), a in A$组合,我们可以基于蒙特克罗(平均期望)来计算其动作价值Q函数,并选择最大Q值对应的最优动作,
[egin{array}{*{20}{l}}
{Q({s_t},a) = frac{1}{K}sumlimits_{k = 1}^K {({G_t})} }\
{{a_t} = arg mathop {max }limits_{a in A} Q({s_t},a)}
end{array}]
简单蒙特卡罗搜索和起前向搜索比起来,对于状态动作数量的处理能力上了一个数量级,可以处理中等规模的问题。但是假如我们的状态动作数量达到非常大的量级,比如围棋的级别,那么简单蒙特卡罗搜索也太慢了。同时,由于使用蒙特卡罗法计算其动作价值函数,模拟采样得到的一些中间状态和对应行为的价值就被忽略了,这部分数据能不能利用起来呢?
下面我们看看蒙特卡罗树搜索(Monte-Carlo Tree Search,以下简称MCTS)怎么优化这个问题的解决方案。
MCTS不对当前状态$s_t$每一个可能采取的动作$a in A$都进行K轮采样,而是总共对当前状态$s_t$进行K次采样,(这样有可能采样到的动作只是动作全集A中的一部分,但是大大降低了计算量)。这样一共得到了K组完整的episode,
[{ {s_t},a_t^k,r_{t + 1}^k,{s_{t + 1}},a_{t + 1}^k,r_{t + 2}^k,...,s_T^k} _{k = 1}^K]
基于环境模型的模拟采样得到训练样本后,我们可以依据结果近似计算动作价值Q函数,并选择最大Q值对应的最优动作$a$,
[egin{array}{l}
Q({s_t},a) = frac{1}{K}sumlimits_{k = 1}^K {sumlimits_{u = t}^T {1({s_{uk}} = {s_t},{a_{uk}} = a){G_u}} } \
{a_t} = arg mathop {max }limits_{a in A} Q({s_t},a)
end{array}]
转载来自:
https://www.cnblogs.com/pinard/p/10470571.html