gpt4 book ai didi

neural-network - 使用神经网络进行 Q 学习

转载 作者:行者123 更新时间:2023-12-04 19:00:05 25 4
gpt4 key购买 nike

我正在尝试为乒乓球游戏实现深度 q 学习算法。
我已经使用表格作为 Q 函数实现了 Q 学习。它运作良好,并在 10 分钟内学会了如何击败幼稚的 AI。但我不能让它工作
使用神经网络作为 Q 函数逼近器。

我想知道我是否在正确的轨道上,所以这里是我正在做的事情的总结:

  • 我将当前状态、采取的行动和奖励作为当前经验存储在回放内存中
  • 我使用多层感知器作为 Q 函数,具有 1 个隐藏层和 512 个隐藏单元。对于输入 -> 隐藏层,我使用的是 sigmoid 激活函数。对于隐藏 -> 输出层,我使用的是线性激活函数
  • 状态由球员和球的位置以及球的速度表示。位置被重新映射到一个更小的状态空间。
  • 我正在使用 epsilon-greedy 方法来探索 epsilon 逐渐下降到 0 的状态空间。
  • 学习时,随机选择一批 32 个后续经验。然后我
    计算所有当前状态和 Action 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 来实现多层感知器。问题是训练很慢,性能很弱。我想我错过了一些东西,但无法弄清楚是什么。我希望至少有一个不错的结果,因为表格方法没有问题。

    最佳答案

  • 尝试在隐藏层中使用 ReLu(或更好的 Leaky ReLu)-Units 并在输出中使用 Linear-Activision。
  • 尝试更改优化器,有时使用适当的学习率衰减的 SGD 会有所帮助。
    有时 ADAM 工作正常。
  • 减少隐藏单元的数量。可能只是太多了。
  • 调整学习率。你拥有的单元越多,学习率的影响就越大,因为输出是之前所有神经元的加权和。
  • 尝试使用球的局部位置含义:ballY - paddleY。这可以极大地帮助,因为它将数据减少到: 高于或低于由符号区分的桨。请记住:如果您使用本地位置,则不需要玩家的桨位置,而敌人的桨位置也必须是本地的。
  • 您可以将之前的状态作为附加输入,而不是速度。
    网络可以计算这两个步骤之间的差异。
  • 关于neural-network - 使用神经网络进行 Q 学习,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39693259/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com