我想在不使用DQN和样本与环境交互的情况下训练RL代理。在我的理解中,DQN是一种偏离策略的算法,因此它似乎是可能的。(我说得对吗?(然而,到目前为止我还没能训练好。具体来说,每个状态的argmax值都是相同的。(在最佳策略中应该有所不同。(
我的环境如下:
- 状态:4个状态(
A
、B
、C
、D
( - 动作:3个动作(
Stay
、Up
、Down
( - 奖励&过渡:
B
是终端状态。(括号中的表达式表示(状态、行动、奖励、下一个状态(。(- 当您在
A
中Stay
时,您将在A
中并获得0(A
、Stay
、0、A
( - 当你在
A
中Up
时,你将在B
中得到0.33(A
,Up
,0.33,B
( - 当您在
A
中Down
时,您将在A
中并获得0(A
、Down
、0、A
( - 当你在
B
中Stay
时,你将在B
中获得0.33(B
,Stay
,0.33,B
( - 当您在
B
中Up
时,您将在C
中并获得0.25(B
、Up
、0.25、C
( - 当您在
B
中Down
时,您将在A
中并获得0(B
、Down
、0、A
( - 当您在
C
中Stay
时,您将在C
中并获得0.25(C
、Stay
、0.25、C
( - 当您在
C
中Up
时,您将在D
中并获得0.2(C
、Up
、0.2、D
( - 当你在
C
中Down
时,你将在B
中获得0.33(C
,Down
,0.33,B
( - 当您在
D
中Stay
时,您将在D
中并获得0.2(D
、Stay
、0.2、D
( - 当您在
D
中Up
时,您将在D
中并获得0.2(D
、Up
、0.2、D
( - 当您在
D
中Down
时,您将在C
中并获得0.25(D
、Down
、0.25、C
(
- 当您在
我的训练方式:
- 我把上面的每个样本都放在缓冲存储器中
- 然后我使用DQN进行训练。(不与环境互动(
其他
- 神经网络
- 两层(输入层和输出层。它们之间没有隐藏层(
- 优化器:Adam
- 超参数
- 学习率:0.001
- 批量大小:在2到12之间变化
代码屏幕截图
- 主循环
- 培训代码
- 模型构建
结果
- 结果屏幕截图
- 列就是动作。(0:
Stay
,1:Up
,2:Down
( - 行是状态。(有些不同,有些相同(
- 每个状态的argmax都是1,这不是最佳策略
- 即使我运行了更多的循环,结果也没有改变
对不起,我不能做评论,所以这里是我的建议:
- 尝试添加另一个密集层并增加隐藏节点以更好地泛化
- 你的系统是确定性的,你的可能性很小(因此给回放内存提供的样本也很少(,所以为了让你的系统学习,可以有趣地大量增加划时代的数量(尽量使用200(
- 出于与上述相同的原因,添加Dropout可能会有所帮助,但将其作为补充步骤
- 通过网络对回放内存进行多次无序播放和传递
- 对于一项不太复杂的任务来说,你的学习率似乎很低