Post Detail

大话增强学习-3

Hugiss  

大话增强学习-2中,我们描述了蒙特卡洛方法,试很多次,知道哪些s是好的,慢慢的把这些好的s连起来就知道最佳策略了。就像走迷宫,一通瞎走尝试很多次,记录下每次经过每个岔口时走了多久,慢慢地就知道最快的路了。

然而,瞎走法有个前提是情景任务,即能够允许瞎尝试。然而,有时候老天并不给你瞎尝试的自由,不允许你一路走到底看个究竟。本文讲解的方法,就是解决这种没法一路走到底的问题。

本文由Hugiss.com原创,转载请注明出处。

引子

大话增强学习-1中,我们给出了两个增强学习的最关键的公式。

qlearning
qlearupdate

大话增强学习-2中,我们关注的不是q(s,a),而是v(s)。蒙特卡洛方法计算v(s)采取的是累积取平均的方法。

vfunupdate

在蒙特卡洛法中,v的值是多次瞎试(摸索)取平均得到的,是无偏估计,只要次数足够多,肯定越来越准确。不说人话,这叫做zero bias, high variance。可对于那种没有大结局的问题,该怎么办呢?比如开好车开到某地开好车就是个没有大结局的问题,试到车撞坏了不是理想的结局。

即然我们得不到一个准确的v(s)了,那么就只能估计出一个差不多的v(s)了。

本文的方法,就是基于估计这个词。学名叫做Temporal Difference算法,中文叫做时间差分法。

怎么估计

咱们不是对v做迭代吗?那按照下面公式不就得了。

td

好了,收工了。这就是TD算法。跟第一篇中介绍的Q-learning算法去迭代Q(s,a)不能再像了。其实Q-learning就是一种TD算法。我们又回到第一篇文章了。这大概就叫融会贯通吧。

可以想像,TD算法是有偏差bias的,且v的初始值影响到了最终的效果。另一个限制是必须知道R(s,a)。

小结

我们转了一圈又回到了Q-learning。学会了不瞎试到底直接根据当前模型来估计出新的v。蒙特卡洛走的比较远,TD不深度探索。

td
vfunupdate

麻烦来了,我们如果既不知道R(s,a)又不能一口气走到底知道v(s),该怎么办呢?我有这么几个想法。

  • 利用domain knowledge,自己定一个v(s)函数或R(s,a)函数。只是这样就退化到上个世纪森蓝国际象棋的水平了。
  • 给不出一个v(s)的话,可以采用(半)监督学习来训练出一个v(s)来,给一些个s,人工靠经验标注一些v(s),训练出一个函数逼近器来。同理也可以这么搞R(s,a)函数。
  • 蒙特卡洛走个若干步,得到近似的v(s),反正再走下去,r的n次方也很小很小了,误差不大。

暂时就写到这里。增强学习博大精深,欢迎各路大神指正。

Show Disqus Comments