#对value-based的RL算法的一些看法

基于值函数的强化学习方法是我接触最早的一类强化学习方法,包括q-learning,DQN或DDPG都是基于值函数的方法。这些方法的主要思路是建立模型(表格或神经网络)去拟合状态动作值函数(状态动作的长期回报),根据模型输出的值函数选择相应的动作选择或进行梯度优化。

但是,value-based强化学习方法的训练优化却存在一些问题,因为这些模型的训练都是使用时间差分方法去进行更新。时间差分法(TD法)是一种结合了蒙特卡洛法和动态规划的方法,用对当前状态动作值函数的估计来更新当前的状态动作值函数。更新方式一般为:
$$
q_t(s,a)=q_{t-1}(s,a)+\alpha[q_{target}(s,a)-q_{t-1}(s,a)]
$$
其中$q_{target}(s,a)$为对当前状态动作值函数的估计,可以展开为:
$$
q_{target}(s,a)=r(s’)+\gamma q(s’,a’)
$$
其中$r(s’)$是在当前状态s下做完动作a后转移到下一个状态s’时环境返回的奖励,$\gamma$是衰减因子,$q(s’,a’)$是下一个状态的动作值函数。用这两项的加和可以估计当前状态动作值函数的长期回报,且随着不断迭代比上一次估计更加准确。

问题的关键在于$a’$如何选择,因为我们在更新当前状态动作值函数的时候并不知道在下一个状态如何选择动作。在qlearning中,选择下一个状态的最大动作值函数来进行当前状态动作值函数的估计,这种思想是没有问题的,因为最终的模型肯定以一个贪心的原则来进行动作的选择,所以当前的值函数的长期回报肯定用下一个状态的最大动作值函数来计算。可问题就在于在不断更新的过程中,值函数还未完全收敛前,如果一直用下一个状态的最大动作值函数来更新,会导致对当前动作值函数的过估计。原因如下:

1

因为在优化过程中会对每一个状态动作值函数进行迭代更新,所以最终我们会求得一个这样的值:
$$
E[max(f(x)+noise)]
$$
但我们想要的是:
$$
max[E(f(x)+noise)]
$$
明显第一个式子比第二个式子求得的值大,这就导致了对动作值函数的过估计问题。如果所有的动作值函数都被相同程度的过估计其实不会产生太大问题,但就是怕不同动作值函数被过估计的程度不同,则会导致模型的性能出现问题。

针对过估计的问题,有人对qlearning,DQN和DDPG分别做了改进,对应的算法分别是double q learning,DDQN和TD3,接下来将一一讨论这些算法是如何优化的。