在深度 Q 学习算法中,我们每 执行一次批量训练,train_freq
并且每 更新目标网络的参数target_update_freq
。是否train_freq
和target_update_freq
必要相关,例如,一个应该总是大于另一个,还是必须根据问题独立优化?
编辑将名称更改batch_freq
为train_freq
。
在深度 Q 学习算法中,我们每 执行一次批量训练,train_freq
并且每 更新目标网络的参数target_update_freq
。是否train_freq
和target_update_freq
必要相关,例如,一个应该总是大于另一个,还是必须根据问题独立优化?
编辑将名称更改batch_freq
为train_freq
。
在 DQN 中,在重放内存有足够数据后收到的每个观察结果之后训练一个 minibatch 是相当常见的(多少足够是另一个参数)。这不是必需的,在训练步骤之间收集更多数据就可以了,算法仍然是 DQN。这里高于 1 的值train_freq
可能与使用优先重放内存采样有关——我对此没有真正的经验。
目标网络的更新通常需要比训练步骤更频繁地发生,其目的是在数值上稳定结果,以便对价值函数的高估或低估不会导致失控的反馈。
参数选择会相互影响,不幸的是机器学习中的大多数超参数都会这样做。这使得寻找理想值变得繁琐且耗时。
在这种情况下,可以肯定地说,train_freq
预计会远低于target_update_freq
,可能至少低一个数量级,更常见的是 2 或 3 个数量级。但是,这与说这两个超参数的选择之间存在很强的关系并不完全相同。的值在batch_size
这里也很重要,因为它显示了训练过程使用(和重用)内存的速率。
您正在使用的库具有以下默认值:
batch_size::Int64 = 32
train_freq::Int64 = 4
target_update_freq::Int64 = 500
它们似乎是合理的起点。您可以相对自由地更改它们,就好像它们是独立的一样,因为没有像“target_update_freq 应该是 train_freq 的 125 倍”这样的简单规则。作为一个非常粗略的指南,您可以预期 的高值train_freq
、低值batch_size
和低值target_update_freq
可能会导致学习过程中的不稳定,而在相反方向上走得太远可能会减慢学习速度。您可能可以设置train_freq
为 1,但我并不完全确定这与优先重放内存采样相结合,这似乎是您正在使用的库中的默认值。