强化学习可以解决环境中某些元素随机定位的问题吗?

人工智能 深度学习 强化学习 奖励
2021-10-22 08:02:52

我想在 20x20 板上使用强化学习来解决问题。一个代理(一只老鼠)必须通过收集奶酪来尽快获得尽可能高的奖励,总共有 10 个。智能体有固定的时间来解决这个问题,即每场比赛 500 步。问题是,奶酪将被随机分配到板上的字段中,但是代理知道奶酪的位置。

有什么办法可以仅使用强化学习(而不是训练荒谬的时间)来解决这个问题?或者是解决这个问题的唯一方法是使用像 A* 算法这样的算法?

我尝试了许多不同的(深度)-q-learning 模型,但总是失败得很惨。

编辑:在使用 GTX 950M 学习 6 小时后,我无法获得任何有意义的行为。也许我的实施已经关闭,但我不这么认为。

2个回答

是的,您可以为此使用 RL。诀窍是在状态描述中包含奶酪的位置。因此,除了鼠标位置的多达 400 个状态外,您还拥有(非常粗略)40010可能的奶酪位置,这意味着你有40011共州。

因此,如果您想使用 RL,您将需要一些函数逼近 - 您可能会使用卷积神经网络进行训练,其中包含包含鼠标和奶酪位置的棋盘“图像”,以及用于选择动作的 DQN。

这样看来,鼠标试图在最短的时间内得到奶酪的游戏在表面上似乎比 Atari 游戏环境中的许多游戏简单得多,而 DQN 已被证明可以很好地解决许多游戏。

我可能会使用两个图像通道——一个用于鼠标定位,一个用于奶酪定位。如果有的话,第三个通道可能用于墙壁/障碍物。

或者是解决这个问题的唯一方法是使用像 A* 算法这样的算法?

A* 加上某种序列优化,如旅行商问题 (TSP) 求解器,如果您已经提出问题并要求您以任何您想要的方式解决它,那么它可能是最佳的。只需解决 11 个位置 - 鼠标启动加上 10 个奶酪位置 - 然后您可以在现代 CPU 上在几秒钟内暴力破解移动组合,因此该部分可能不会特别令人兴奋(而 TSP 求解器可以参与更多和有趣) .

RL 的有趣之处在于它将如何解决问题。RL 是一种学习算法 - 实施它的目的是了解机器获取解决方案所需的知识。虽然 A* 和组合优化器是了解如何解决问题并根据更高级别的分析尽可能优化地解决问题的地方。A*/优化器解决方案比 RL 解决方案更健壮、编码更快、运行更快的可能性很高。

如果您只想解决手头的问题,那么这两种方法都没有本质上的错误。首先,这取决于您为什么要为这个问题烦恼的目标。

如果你真的想的话,你甚至可以结合 A* 和 RL。A* 找到路径,然后 RL 使用路径作为 CNN 输入的一部分来决定最佳序列。路线的 A* 分析可能会对 RL 阶段有很大帮助——将它们添加为一个或多个附加通道。

这里假设 OP 熟悉 DQN 基础知识。

用 Deep RL 解决这个问题的“标准”方法是使用卷积 DQN。

制作 2 到 4 个卷积层的网络,顶部有 1-2 个全连接。这里的诀窍是如何输出 Q 值。输入是带有奶酪的板,没有关于鼠标的信息。相反,net 应该为板上每个字段(鼠标的每个可能位置)的每个动作输出 Q,这意味着您输出 20x20x(字段中的 number_of_moves)Q 值。这会使 net 变得很大,但这是 DQN 最可靠的方式。对于重放缓冲区的每一次移动,只有一个 Q 值更新(产生梯度)与时间差方程

因为每个样本只更新一个值形式 20x20x(number_of_moves),所以您需要相当大的回放缓冲区和大量训练。在每一集(完整游戏)之后,应随机重新分配奶酪。剧集应该在回放缓冲区中混在一起,在 1 集上进行训练是一个很大的问题。希望这至少应该为您提供研究/开发的方向。警告:DQN 的训练速度很慢,并且具有如此大的动作空间(20 x 20 x number_of_moves)可能需要数百万或数千万甚至更多的动作。

或者,如果你不想要这么大的动作空间,就是使用actor-critic架构(或者说policy gradient,actor-critic是一种policy gradient)。Actor-critic 网络的动作空间很小,只有 number_of_moves 个输出。在缩小尺寸的情况下,方法的复杂性要高得多,并且行为可能难以预测或分析。但是,如果行动空间太大,它可能是更可取的解决方案。actor-critic 的实际问题和实现是一个太大的领域,无法在这里深入探讨。

编辑:还有另一种方法,DQN 的操作空间较小,但不知何故不太可靠,可能更慢:移动板,使鼠标位于板的中心,用零填充无效部分(新板的大小应该为 x2)。在这种情况下,只有 number_of_moves 应该在输出中。