我正在经历这个DQN 的实现,我看到在第 124 行和第 125 行已经初始化了两个不同的 Q 网络。根据我的理解,我认为第一个网络预测适当的动作,第二个网络预测目标 Q 值以找到贝尔曼误差。
为什么我们不能只制作一个简单地预测 Q 值并将其用于两种情况的网络?我最好的猜测是这样做是为了减少计算时间,否则我们将不得不找出每个动作的 q 值,然后选择最好的一个。这是唯一的原因吗?我错过了什么吗?
我正在经历这个DQN 的实现,我看到在第 124 行和第 125 行已经初始化了两个不同的 Q 网络。根据我的理解,我认为第一个网络预测适当的动作,第二个网络预测目标 Q 值以找到贝尔曼误差。
为什么我们不能只制作一个简单地预测 Q 值并将其用于两种情况的网络?我最好的猜测是这样做是为了减少计算时间,否则我们将不得不找出每个动作的 q 值,然后选择最好的一个。这是唯一的原因吗?我错过了什么吗?
我最好的猜测是这样做是为了减少计算时间,否则我们将不得不找出每个动作的 q 值,然后选择最好的一个。
它对计算时间没有实际影响,只是略有增加(由于两个网络使用了额外的内存)。我想你可以缓存目标网络的结果,但对于大多数环境来说这可能不值得,而且我还没有看到这样做的实现。
我错过了什么吗?
这与使用函数逼近(即神经网络)时 Q 学习算法的稳定性有关。使用一个单独的目标网络,每隔这么多步骤更新一个最新学习参数的副本,有助于防止失控偏差在数值上控制系统,导致估计的 Q 值发散。
想象一个数据点(在) 导致当前较差的高估变得更糟。或许甚至还没有被访问过,或者值到目前为止看到的高于平均水平,只是偶然。如果一个样本在经验回放中出现多次,每次都会变得更糟,因为更新到基于TD目标. 修复目标网络限制了这种高估可能造成的损害,让学习网络有时间收敛并失去更多的初始偏差。
在这方面,使用单独的目标网络与体验回放的目的非常相似。它稳定了一个算法,否则会出现收敛问题。
也可以使用带有“双重学习”的 DQN 来解决一个单独的问题:最大化偏差。在这种情况下,您可能会看到具有 4 个神经网络的 DQN 实现。