本次更新方案:
Q(s,a) += reward * gamma^(inverse position in game state)
有几个问题:
您 - 显然 - 增加 Q 值而不是将它们训练到参考目标。因此,对 Q 的估计可能会发散,从而预测出不可能高或低的总奖励。尽管在您的情况下是零和游戏和初始随机移动,但它可能首先在零附近随机游走很长时间。
忽略增量,您使用的公式不是来自 Q 学习,而是有效地基于策略 Monte Carlo 控制,因为您使用游戏结束时的奖励总和作为 Q 值估计。理论上,只要稍加调整,就可以让它发挥作用,但它是一种与你说你想学习的算法不同的算法。
有必要澄清一些相关术语(您已经清楚地知道这些,但我想确保您在理解其余答案时将它们分开):
奖励。在 RL 中,在采取行动后,每次增量都可以返回奖励(实数)。奖励集是问题定义的一部分。常记为R或者r.
返回(又名Utility)。来自特定点的所有奖励的总和 - 可能会打折。常记为G或者U.
Value,如状态值或动作值。这通常是来自特定状态或状态、动作对的预期回报。Q(St,At)是处于状态时的预期回报St并采取行动At. 请注意,使用Q不会使您的算法 Q 学习。这Q动作值是几种 RL 算法的基础。
您的公式reward * gamma^(inverse position in game state)为您提供Return,G在抽样训练游戏中看到,Gt=γT−tRT在哪里T是游戏中的最后一步。前提是游戏最后只有一个非零奖励 - 在你的情况下是真的。因此,您可以将其用作训练示例,并使用输入训练您的网络St,At和所需的输出Gt以这种方式计算。那应该行得通。但是,如果您衰减探索参数,这只会找到最佳策略ϵ并从您的经验表中删除较旧的历史(因为较旧的历史将根据不完美的游戏估算回报)。
以下是使用 Q 学习的经验回放的常用方法:
保存经验时,存储St,At,Rt+1,St+1- 请注意,这意味着存储即时奖励,而不是返回(是的,您将存储很多零)。另请注意,您需要存储下一个状态。
当您有足够的经验可供抽样时,通常您不会只从一个样本中学习,而是选择一个 minibatch 大小(例如 32)并每次都使用该数量进行训练。这有助于收敛。
对于 Q-learning,您的 TD 目标是Rt+1+γmaxa′Q(St+1,a′),并且您从当前对 Q 的预测中进行引导,这意味着:
对于小批量中的每个样本,您需要计算从下一个状态开始的所有允许动作的预测 Q 值St+1- 使用中性网络。然后使用每个状态的最大值来计算maxa′Q(St+1,a′).
使用 NN 输入在 minibatch 上训练您的网络以进行单步梯度下降[St,At]以及来自每个示例的 TD 目标的训练标签。
是的,这意味着您使用相同的网络首先进行预测,然后根据这些预测从公式中学习。这可能是问题的根源,因此您可能需要维护两个网络,一个用于预测,一个用于学习。每隔几百次更新,将预测网络刷新为当前学习网络的副本。这是体验回放的常见补充(这是 Deep Mind 为 DQN 所做的事情),尽管对于像井字游戏这样简单的游戏来说,这可能不是必需的。
TD 目标是对预期的自举和有偏估计G. 偏差是问题的潜在来源(您可能会读到使用具有 Q-learning 的 NN 并不稳定,这是原因之一)。然而,通过正确的预防措施,例如经验回放,偏差会随着系统的学习而减少。
如果您想知道,这是两者的使用St(作为NN输入)和St+1(计算 TD 目标)在 Q 学习算法中,有效地将游戏结束奖励分配回游戏开始的 Q 值。
在您的情况下(以及在许多情节游戏中),不使用折扣应该没问题,即γ=1
从您之前的问题中,您注意到您正在训练两个竞争代理。这确实会导致体验重放的问题。问题是你需要训练的下一个状态将是对手行动之后的状态。因此,从技术上讲,对手被视为每个代理环境的一部分。代理学习击败当前对手。然而,如果对手也在学习一种改进的策略,那么它的行为就会改变,这意味着你存储的经验不再有效(从技术上讲,环境是非平稳的,这意味着一次最优的策略可能会变得次优之后)。因此,如果您有两个自修改代理,您将需要相对频繁地丢弃旧经验,即使使用 Q-learning。