上一篇动态规划讲的是在马尔科夫模型$<S, A, P, R, \gamma>$完全已知的情况下,利用概率全展开求解最优策略。这一篇讲马尔科夫模型不完全已知,即转移概率未知,不能全概率展开的情况下,利用蒙特卡洛(Monte-Carlo)和时序差分(Temporal-Difference)来通过采样的方式估计价值函数,求解最优策略。
本篇的策略对应上一篇动态规划中的策略估计和策略迭代部分,是先估计策略再改进策略的蒙特卡洛同策略学习方式,下一篇对应值迭代,是边评估边改进的时序差分异策略学习方式。
蒙特卡洛和时序差分的区别在于,蒙特卡洛是从完整的从初始状态到终止状态,的序列(episode)中学习,利用平均值估计价值值函数。时序差分是从不完整的序列中学习,利用自举(bootstrapping )来更新价值值函数。下面具体展开来讲。
蒙特卡洛学习
策略估计
从根据策略$\pi$得到的完整序列$<S_1, A_1, R_1, ..., S_{terminal}>$
对完整序列中的某一状态$s$,计算累积奖励:
$G_t = R_{t+1} + \gamma R_{t+2} +... + \gamma^{T-1} R_T$
对每一个完整序列,有两种方式累积$G_t$,针对每一个状态只计算第一次出现(First-Visit)时的$G_t$,或者是累积每一次出现(Every-Visit)时的$G_t$。
然后利用累积的$G_t$除以次数,也就是经验平均值来更新$v_{\pi}({s_t})$,是$G_t$的无偏估计,
$v_{\pi}({s_t})=E[G_t]$
为了加快计算,利用递增来更新,
$v_{\pi}({s_t}) \leftarrow v_{\pi}({s_t}) + \alpha ({G_t} - v_{\pi}({s_t}))$
策略迭代
像动态规划里解释的一样,迭代收敛得到了新的$v_\pi$后,就可以依据新的$v_\pi$改进我们的策略$\pi$。改进的策略$\pi$又可以继续迭代收敛到新的$v_\pi$,如此循环,最终收敛至$\pi^*$,称之为蒙特卡洛学习。
时序差分学习
像动态规划里解释的一样,为了加快收敛速度,我们可以在$v_\pi$还没有收敛的迭代过程中,就立马改进策略$\pi$,再循环这个过程,称之为时序差分学习。
蒙特卡洛朝着实际能到的累计奖励$G_t$的方向更新$v_{\pi}({s_t})$,
$v_{\pi}({s_t}) \leftarrow v_{\pi}({s_t}) + \alpha ({G_t} - v_{\pi}({s_t}))$
时序差分朝着估计得到的累计奖励$R_t+\gamma v(s_{t+1})$的方向更新$v_{\pi}({s_t})$,$R_t+\gamma v(s_{t+1})$是TD目标,${R_{t + 1}} + \gamma v(s_{t+1}) - v({s_t})$是TD误差,
$v({s_t}) \leftarrow v({s_t}) + \alpha ({R_{t + 1}} + \gamma v(s_{t+1}) - v({s_t}))$
蒙特卡洛和时序差分的区别
时序差分利用了马尔科夫特性,可每一步在线学习,不必等到序列结束,可以从不完整的序列中学习,更有效率,但收敛性一般,对初始值较敏感,低方差,有一些偏差。
蒙特卡洛没有利用马尔科夫特性,必须等到序列结束,从完成的序列中学习,有很好的收敛性,对初始值不那么敏感,高方差,零偏差。
参考:
1. David Silver 课程
2. Reinforcement learning: An Introduction. Richard S. Sutton