使用神经网络进行Q学习

Sil*_*ear 5 artificial-intelligence neural-network q-learning encog deep-learning

我正在尝试为乒乓球游戏实现Deep q学习算法。我已经使用表格作为Q函数实现了Q学习。它工作得很好,并学会了如何在10分钟内击败天真的AI。但是我无法使用神经网络作为Q函数逼近器来使其工作。

我想知道自己是否走在正确的轨道上,所以以下是我在做什么的摘要:

  • 我将当前状态,已采取的行动和奖励作为当前体验存储在重播内存中
  • 我将多层感知器用作Q函数,其中1个隐藏层具有512个隐藏单元。对于输入->隐藏层,我正在使用S型激活函数。对于隐藏->输出层,我正在使用线性激活函数
  • 状态由球员和球的位置以及球的速度表示。位置被重新映射到一个较小的状态空间。
  • 我正在使用epsilon-greedy方法来探索epsilon逐渐下降到0的状态空间。
  • 学习时,随机选择32个后续经验。然后,我为所有当前状态和操作Q(s,a)计算目标q值。

    forall Experience e in batch if e == endOfEpisode target = e.getReward else target = e.getReward + discountFactor*qMaxPostState end

现在,我有一组32个目标Q值,我正在使用批梯度下降法用这些值训练神经网络。我只是在做1个训练步骤。我应该怎么做?

我正在用Java编程,并将Encog用于多层感知器实现。问题在于培训非常缓慢,性能很弱。我想我缺少了一些东西,但是找不到。我希望至少会有一个不错的结果,因为表格方法没有问题。

Mar*_*oma 2

我使用多层感知器作为 Q 函数,其中包含 1 个隐藏层和 512 个隐藏单元。

可能太大了。取决于您的输入/输出维度和问题。你尝试少了吗?

健全性检查

网络能够学习必要的功能吗?

收集真实输入/输出。以受监督的方式拟合网络。它能提供所需的输出吗?

一个常见的错误是最后一个激活函数出了问题。大多数时候,您会需要一个线性激活函数(正如您所拥有的)。然后你希望网络尽可能小,因为强化学习非常不稳定:你可以在不起作用的地方运行 99 次,在起作用的地方运行 1 次。

我探索得够多吗?

检查你探索了多少。也许您需要更多探索,尤其是在开始时?

也可以看看