之前我们已经说过基于动态规划的方法来解决强化学习的问题,但是这是对于有一定的模型(知道在某一个状态下采取某一个动作的概率)才能应用的场景,在实际的情况中,想要了解到所有状态下可以采取行动的概率以及采取行动后到达某一状态的概率是困难的。
由此,我们引入了不基于模型的预测方法,也即蒙特卡罗方法(MC),蒙特卡罗方法的特征是采样,那么什么是样本(sample)?我们定义智能体从某一个状态开始,到某一个终点状态停止所收集的数据为这里的样本。通过多次采样,再计算这些样本中状态的状态值的平均值,由大数定律可以知道,当样本的数目非常大时,平均值非常接近期望值,也即我们可以算出状态的状态值。
显然,由于智能体的动作时随机的,在一组样本中,智能体可能到达同一状态多次,因此我们引入了初次蒙特卡罗方法和每次蒙特卡罗方法。由之前学过的内容我们知道,智能体在状态s下获得的奖励为:
随机取两次样本,S0是初始状态,b表示在第一次采样中,第一次到达s状态获得的回报,则是第一次采样中,第二次到达状态s获得的回到,这两者的值通常情况下,并不相同。
初次蒙特卡罗方法:初次蒙特卡罗方法在计算状态的平均值时,每个状态在一次采样中只会取第一次出现的回报值,假设我们进行了多次采样,访问到状态s的总次数为N,则有
每次蒙特卡罗方法:通过这个方法在计算平均值时,在一次采样中每次出现的回报值都会纳入计算,从而
当N非常大时,平均值等价于期望值,我们就可以得到各个状态的状态值,也就是
如果我们将其中的平均值看成是状态值,看成是,令1/k作为一个步长,从而我们可以得出蒙特卡罗学习方法的状态值更新公式:
但是蒙特卡罗方法有一个缺陷,他需要在每次采样结束以后才能更新当前的值函数,但问题规模较大时,这种更新的方式显示是非常慢的。结合我们之前所学的动态规划思想解决强化学习问题的过程,我们是否可以将蒙特卡罗方法中的采样过程缩短,从而提高速度呢?答案是肯定的,那就是时序差分(TD)的强化学习方法,在时序差分的方法当中,我们不需要每次等到采样结束以后再去更新值函数,取而代之的是我们可以采用自举(bootstrapping)方式来进行更新,在计算某一状态的回报时,用的是即将离开这一个状态的奖励加上乘以下一个状态的预估状态值,具体来说,时序差分方法的值函数更新公式为:
,其中的为TD目标,为TD误差。
以上这种基于当前状态往前看一步的预测,我们把它叫做TD(0),而一开始我们所讲的蒙特卡罗方法则是看到最后,也就是,很自然的我们可以想到TD(n),此时的值函数更新公式为:
,其中的。
关于随机采样更新值函数的方法有蒙特卡罗和时序差分,我们是否可以确定哪种方法更好呢?显然两者的应用场景是不同的,我们是否可以将两者结合,也就是说找到一个合适的n,使得更新的方法兼具蒙特卡罗和时序差分的优点或者是达到更加良好的预测效果呢?自然的想到,这将是一个参数调优的问题。为了综合考虑所有步数的预测,我们将所有步数的预测的结果乘以权值再进行求和,我们引入,也就是对所有的预测进行几何加权,,从而我们给出值函数的更新公式:
最后,我们再介绍一下前向认识和后向认识。
前向认识:一个状态的价值函数需要通过求得,而后者又间接的需要后面状态的回报才可以计算,这个过程和蒙特卡罗方法一样,需要经历完整的序列才可以更新当前的状态值函数。
后向认识:一个状态对另外一个状态的影响,我们把它成为启发,常见的启发有频率启发和就近启发,此外我们再给每一个状态定一个数值表示效用,来表示当前状态对后续状态的影响,所有状态的效用和成为效用迹。
我们定义:
,其中表示当前状态为s时,取1,否则取0.
则我们将值函数更新的公式推出如下:
,