DQL是2014年提出的。自那以后提出了很多改进。所以,今天我们来看看四种极大提升DQN agents的训练和结果的方法:
- fixed Q-targets
- double DQNs
- dueling DQN (aka DDQN)
- Prioritized Experience Replay (aka PER)
Fixed Q-targets
Theory
在Deep Q Learning的文章中,当我们想要计算TD error(loss)的时候,我们是通过计算TD target(Q_target)和当前Q value(Q的估计)的差来得到的。
但是其实对于真实的TD target,我们是不知道的,没有概念的。我们也是需要预测的。使用Bellman 方程,我们发现TD target仅仅是当前动作的reward加上通过衰减的下一个state的最高Q value。
然而,问题是我们使用同样的参数(网络权重)来估计target和Q value。这就使得网络权重和TD target具有很强的相关性。
因此,这就意味着训练的每一步,我们的Q value偏移了,同时Q target也偏移了。所以,我们离我们的目标更近了,但是目标同时又移动了。就像是在追逐一个移动的目标!这就导致了训练过程中的振荡。
就像假设你是一个牛仔(Q估计),然后你想要抓住牛(Q target),你必须不断缩小与牛的距离(减小error)。
在每个时间步,你努力去接近牛,但是牛同时也在移动(因为使用了同样的参数)。
这就导致会有一个奇怪的追逐路径(训练时的振荡)
为了解决这个问题,我们使用DeepMind提出的fixed Q-targets的思想:
- 使用一个单独的固定参数的网络(w-)来预测TD target
- 在每个 τ \tau τ步骤,我们复制我们DQN网络的参数来更新目标网络。
由于添加了这个步骤,我们的学习过程更加稳定,因为目标函数会固定一段时间。
Implementation
fixed Q-targets 的实现是很直接的:
- 首先,我们创建两个网络(DQNetwork,TargetNetwork)
- 然后,我们创建一个函数来复制我们的DQNetwork的参数给TargetNetwork
- 最后,在训练的时候,我们使用TargetNetwork计算TD target。每 τ