大话增强学习第三篇。本系列以口语化形式,讲述理解增强学习。
在大话增强学习-2
中,我们描述了蒙特卡洛方法,试很多次,知道哪些s是好的,慢慢的把这些好的s连起来就知道最佳策略了。就像走迷宫,一通瞎走尝试很多次,记录下每次经过每个岔口时走了多久,慢慢地就知道最快的路了。
然而,瞎走法有个前提是情景任务
,即能够允许瞎尝试。然而,有时候老天并不给你瞎尝试的自由,不允许你一路走到底看个究竟
。本文讲解的方法,就是解决这种没法一路走到底的问题。
引子
在大话增强学习-1
中,我们给出了两个增强学习的最关键的公式。
$$ q(s,a) = R(s,a) + r*max(q(s{’},a{’})) $$
$$ q_{latest} = (1-a)q_{old} + aq_{new} = q_{old} + a(q_{new} - q_{old}) $$
在大话增强学习-2
中,我们关注的不是q(s,a),而是v(s)。蒙特卡洛方法计算v(s)采取的是累积取平均
的方法。
$$ v_{latest} = (1-a)v_{old} + a*v_{new} = v_{old} + a(v_{new} - v_{old}) $$
在蒙特卡洛法中,v的值是多次瞎试(摸索)取平均得到的,是无偏估计
,只要次数足够多,肯定越来越准确。不说人话,这叫做zero bias, high variance
。可对于那种没有大结局
的问题,该怎么办呢?比如开好车
和开到某地
,开好车
就是个没有大结局的问题,试到车撞坏了不是理想的结局。
即然我们得不到一个准确的v(s)了,那么就只能估计
出一个差不多的v(s)了。
本文的方法,就是基于估计
这个词。学名叫做Temporal Difference算法,中文叫做时间差分法。
怎么估计
咱们不是对v做迭代吗?那按照下面公式不就得了。
$$ v_{new} = R(s,a) + rv_{old}(s{’}) $$
好了,收工了。这就是TD算法。跟第一篇中介绍的Q-learning算法去迭代Q(s,a)不能再像了。其实Q-learning就是一种TD算法。我们又回到第一篇文章了。这大概就叫融会贯通吧。
可以想像,TD算法是有偏差bias的,且v的初始值影响到了最终的效果。另一个限制是必须知道R(s,a)。
小结
我们转了一圈又回到了Q-learning。学会了不瞎试到底直接根据当前模型来估计
出新的v。蒙特卡洛走的比较远,TD不深度探索。
$$ v_{new} = R(s,a) + rv_{old}(s{’}) $$
$$ v_{latest} = (1-a)v_{old} + a*v_{new} = v_{old} + a(v_{new} - v_{old}) $$
麻烦来了,我们如果既不知道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次方也很小很小了,误差不大。
暂时就写到这里。增强学习博大精深,欢迎指正。