0

我想使用 DQN 和样本来训练 RL 代理,而无需与环境交互。据我了解,DQN 是一种离策略算法,因此它似乎是可能的。(我说得对吗?)但是,到目前为止我还没有训练过。具体来说,每个状态的 argmax 的值是相同的。(在最优策略中应该是不同的。)

我的环境如下:

  • 状态:4 个状态(A, B, C, D
  • 动作:3 个动作 ( Stay, Up, Down)
  • Reward & Transition: B是终端状态。(括号中的表达式表示(状态、动作、奖励、下一个状态)。)
    • 当您Stay进入 时A,您将进入A并获得 0 ( A, Stay, 0, A)
    • 当您Up 进入 时A,您将进入B并获得 0.33 ( A, Up, 0.33, B)
    • 当您Down进入 时A,您将进入A并获得 0 ( A, Down, 0, A)
    • 当您Stay进入 时B,您将进入B并获得 0.33 ( B, Stay, 0.33, B)
    • 当您Up 进入 时B,您将进入C并获得 0.25 ( B, Up, 0.25, C)
    • 当您Down进入 时B,您将进入A并获得 0 ( B, Down, 0, A)
    • 当您Stay进入 时C,您将进入C并获得 0.25 ( C, Stay, 0.25, C)
    • 当您Up 进入 时C,您将进入D并获得 0.2 ( C, Up, 0.2, D)
    • 当您Down进入 时C,您将进入B并获得 0.33 ( C, Down, 0.33, B)
    • 当您Stay进入 时D,您将进入D并获得 0.2 ( D, Stay, 0.2, D)
    • 当您Up 进入 时D,您将进入D并获得 0.2 ( D, Up, 0.2, D)
    • 当您Down进入 时D,您将进入C并获得 0.25 ( D, Down, 0.25, C)

我的训练方式:

  • 我将上面的每个样本都放在缓冲存储器中。
  • 然后我使用 DQN 进行训练。(不与环境交互)

杂项。

  • 神经网络
    • 两层(输入和输出层。它们之间没有隐藏层)
  • 优化器:亚当
  • 超参数
    • 学习率:0.001
    • 批量大小:在 2 到 12 之间变化

代码截图

结果

  • 结果截图
  • 列是动作。(0: Stay, 1: Up, 2: Down)
  • 行是状态。(有些是不同的,有些是相同的)。
  • 每个状态的 argmax 为 1,这不是最优策略。
  • 即使我更多地运行循环,结果也不会改变。
4

1 回答 1

0

对不起,但我不能发表评论,所以在这里我的建议:

  • 尝试添加另一个密集层并增加隐藏节点以更好地泛化;
  • 你的系统是确定性的,你几乎没有可能性(因此很少有样本可以提供给回放内存),所以为了让你的系统学习,增加很多 epoch 的数量(尝试使用 200)可能会很有趣;
  • 出于上述相同的原因,添加 Dropout 可能会有所帮助,但将其作为补充步骤;
  • 通过网络多次混洗和传递回放内存;
  • 对于不太复杂的任务,您的学习率似乎很小;
于 2020-11-19T00:16:38.360 回答