【发布时间】:2016-09-26 00:44:52
【问题描述】:
我正在尝试为乒乓球游戏实现深度 q 学习算法。 我已经使用表格作为 Q 函数实现了 Q 学习。它工作得很好,并学会了如何在 10 分钟内击败幼稚的 AI。但我不能让它工作 使用神经网络作为 Q 函数逼近器。
我想知道我是否走在正确的轨道上,所以这里总结一下我正在做的事情:
- 我将当前状态、采取的行动和奖励作为当前体验存储在回放记忆中
- 我正在使用多层感知器作为 Q 函数,其中包含 1 个隐藏层和 512 个隐藏单元。对于输入 -> 隐藏层,我使用的是 sigmoid 激活函数。对于隐藏层 -> 输出层,我使用的是线性激活函数
- 状态由球员和球的位置以及球的速度表示。位置被重新映射到更小的状态空间。
- 我正在使用 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 实现多层感知器。问题是训练很慢,性能很弱。我想我错过了一些东西,但不知道是什么。我希望至少有一个不错的结果,因为表格方法没有问题。
【问题讨论】:
标签: neural-network artificial-intelligence deep-learning encog q-learning