【发布时间】:2016-06-20 12:28:55
【问题描述】:
我正在尝试通过使用 Q-Learning + 前馈神经网络作为 q 函数逼近器在 n*n 网格世界域中导航代理。基本上,代理应该找到到达某个终端目标位置的最佳/最短方式(+10 奖励)。代理采取的每一步都会获得 -1 奖励。在网格世界中,代理也应该避免一些位置(-10 奖励,终端状态)。
到目前为止,我实现了一个 Q 学习算法,它将所有 Q 值保存在一个 Q 表中,并且代理表现良好。 在下一步中,我想用神经网络替换 Q 表,在代理的每一步之后在线训练。我尝试了一个带有一个隐藏层和四个输出的前馈神经网络,代表网格世界(北、南、东、西)中可能动作的 Q 值。 作为输入,我使用了一个 nxn 零矩阵,它在代理的当前位置有一个“1”。
为了实现我的目标,我尝试从头开始解决问题:
使用标准 Q-Learning 探索网格世界,并在 Q-Learning 完成后使用 Q-map 作为网络的训练数据 --> 工作正常
使用 Q-Learning 并提供 Q-map 的更新作为训练数据 对于 NN (batchSize = 1) --> 效果不错
-
用 NN 完全替换 Q-Map。 (这就是重点,当它变得有趣时!)
-> 第一张地图:4 x 4 如上所述,我有 16 个“离散”输入,4 个输出,它与隐藏层中的 8 个神经元(relu)一起工作得很好(学习率:0.05)。我使用了一个带有 epsilon 的贪婪策略,在 60 集内从 1 减少到 0.1。 The test scenario is shown here. 将标准 qlearning 与 q-map 和“神经”qlearning 之间的性能进行比较(在这种情况下,我使用了 8 个神经元和不同的 dropOut 率)。
总结一下:神经Q-learning对小网格效果很好,性能还可以,很可靠。
-> 更大的地图:10 x 10
现在我尝试将神经网络用于更大的地图。 一开始我尝试了这个简单的case。
在我的例子中,神经网络如下所示:100 个输入; 4个输出;一个隐藏层中大约有 30 个神经元(relu);我再次对贪婪策略使用了递减的探索因子;超过 200 集学习率从 0.1 降低到 0.015 以增加稳定性。
首先,我遇到了由离散输入向量引起的单个位置之间的收敛和插值问题。 为了解决这个问题,我在向量中添加了一些相邻位置,其值取决于到当前位置的距离。这极大地改善了学习,政策也变得更好。上图显示了 24 个神经元的性能。
总结:简单的情况是由网络解决的,但只是通过大量的参数调整(神经元数量、探索因子、学习率)和特殊的输入变换。
现在这里是我仍未解决的问题/问题:
(1) 我的网络能够在 10 x 10 的地图中解决非常简单的案例和示例,但由于问题变得有点复杂,它失败了。在很可能失败的情况下,网络没有任何变化来找到正确的策略。 在这种情况下,我对任何可以提高性能的想法持开放态度。
(2) 有没有更聪明的方法来转换网络的输入向量?我敢肯定,将相邻位置添加到输入向量一方面可以改善 q 值在地图上的插值,但另一方面会使训练网络的特殊/重要位置变得更加困难。我已经在早期尝试过标准笛卡尔二维输入 (x/y),但失败了。
(3) 除了具有反向传播的前馈网络之外,是否还有另一种网络类型,通常使用 q 函数近似产生更好的结果?您是否看过项目,其中 FF-nn 在更大的地图上表现良好?
【问题讨论】:
标签: neural-network reinforcement-learning q-learning feed-forward