在深度 Q 学习中,目标更新频率和批量训练频率是否相关?

人工智能 强化学习 深度学习
2021-10-30 06:45:51

在深度 Q 学习算法中,我们每 执行一次批量训练,train_freq并且每 更新目标网络的参数target_update_freq是否train_freqtarget_update_freq必要相关,例如,一个应该总是大于另一个,还是必须根据问题独立优化?

编辑将名称更改batch_freqtrain_freq

1个回答

在 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,但我并不完全确定这与优先重放内存采样相结合,这似乎是您正在使用的库中的默认值。