传统的DQN算法会导致overestimate。因为在训练开始时,最大的Q值并不一定是最好的行为。 也就是说较差的行为Q值相对较大,较好的行为Q值相对较小。这时我们在更新Q值时用最大期望来计算我们作为标签的Q值期望,会进一步导致上一个状态的Q值虚高。当然因为有explorating, 所以最后还是会收敛到最优解的, 但是在环境比较复杂时,学习速度会变得很慢。我们来看看这个问题的本质原因,比如说 Q(S1,a1) 虚高,那就会导致 Q(S2,a21)虚高,从而连锁导致 Q(S3,a32)虚高。也就是说一个Q(S1,a1)的虚高会导致agent更倾向于走整个S 3-2-1的状态。如果我们用两个不同的网络分别来采取行动和更新Q值可以解决这个问题,这两个网络中一个是freeze的,为target网络,另一个是不断更新的DQN,在限定的步数之后会同步整个网络。如果我们一直按照target网络来更新DQN,会有overestimate,因为每次的目标都是根据target网络中期望值最高的行为来更新的。更好的做法是,用DQN来选择行动,也就是说选择一个在DQN中期望值最高的行为(在target中显然这个行为不一定是期望最高的),用target网络计算这个Q值并得出DQN的标签。
为了解状态本身的好坏与行为带来的好坏,将Q值分为状态量V(s)与行为量A(s,a)。其中V(s)应为所有Q(s,a)的均值,这样我们就能得出Q(s,a1) = V(s) + A(s,a1) - ave(A(s,a))...