上一篇动态规划讲的是在马尔科夫模型$<S, A, P, R, gamma>$完全已知的情况下,利用概率全展开求解最优策略。可是有很多实际的情况是,我们没办法获得准确的分布来全概率展开的,那么对于这样马尔科夫模型不完全已知,即转移概率未知,不能全概率展开的情况我们应该怎么做呢?这就是强化学习的核心了,我们从生成的经验样本状态-动作-奖励对中,通过采样的方式估计价值函数,学习最优策略。从实际经验样本中学习是惊人的,因为它不需要事先了解环境的动态,但仍然可以达到最佳行为。从模拟的经验中学习也是很强大的。虽然需要一个模型,但该模型只需要生成样本转换,而不需要动态规划(DP)所需的所有可能转换的完全概率分布。令人惊讶的是,在许多情况下,很容易根据期望的概率分布产生抽样经验,但要获得显式的分布是不可行的。
本篇对应上一篇动态规划中的策略估计部分,下一篇讲策略改进部分。
蒙特卡洛和时序差分的区别在于,蒙特卡洛是从完整的从初始状态到终止状态的序列(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$,再循环这个过程,称之为时序差分学习。
蒙特卡洛朝着实际能到的累计奖励$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