一、双深度Q网络(DDQN)
Q^值总是被高估。下图中,假设横坐标是a,纵坐标是Q^,蓝色是实际值,绿色是被高估的值。我们总倾向于选择《Q^值被高估的动作a》计算目标函数,因此目标函数往往被高估。
解决方法:
二、竞争深度Q网络(dueling DQN)
原来的DQN中,Q函数输出的是Q(s,a),现在输出两个值,一个是V(s),一个是A(s,a)。V(s)与A(s,a)之和为Q(s,a)。
假设我们采样到a1,a2而没有采样到a3。在原来的DQN中,只有Q(s,a1)和Q(s,a2)会被更新;而在竞争深度Q网络中,因为我们更新的是V(s),所以Q(s,a3)也被更新了。
为了避免模型坍缩到V(s)恒等于0的情况,我们给A(s,a)做一些限制,使它的更新更困难一些,让模型倾向于更新V。一个简单的想法是,要求对于每个s,A(s,a)的均值为0。这种情况下,A(s,a)可以看做0均值化的Q(s,a),而V(s)就是这个均值。
三、优先级经验回放
replay buffer中有些数据的TD error特别大,可以给这些数据增加一个优先权,它们将会更容易被采样到。