关于在象棋这样的游戏中应用强化学习的一些疑问


9

我发明了象棋的棋盘游戏。我建立了一个引擎,使其可以自主播放。引擎基本上是决策树。由以下人员组成:

  1. 一个搜索功能,可以在每个节点找到所有可能的合法举动
  2. 评估功能,可为棋盘位置分配一个数值(正数表示第一个玩家获得优势,负数表示第二个玩家赢得胜利)
  3. Alphabeta修剪negamax算法

有关此引擎的主要问题是评估功能的优化确实很棘手。我不知道要考虑哪些因素以及要考虑的权重。我认为改善引擎的唯一方法是,每次因数和权重的不同组合进行尝试时都要迭代游戏。但是,这在计算上似乎是一项艰巨的壮举(我可以不使用深度学习而向后传播吗?)。

我想使用强化学习,通过与自己对战来改善引擎。我一直在阅读有关该主题的文章,但我仍然很困惑。

在游戏中,输赢(1或0)部分还有什么其他奖励?如果我使用其他奖励,例如每次评估函数的输出,该如何实现呢?如何修改评估函数,以在迭代后获得更好的回报?

Answers:


6

我想使用强化学习,通过与自己对战来改善引擎。我一直在阅读有关该主题的信息,但我仍然很困惑。

警告:强化学习是一门复杂的大课题。尽管您可能会绕开玩游戏的机器人,但您可能想学习RL基础知识。萨顿和巴托强化学习:入门是一个不错的起点

在游戏中,输赢(1或0)部分还有什么其他奖励?

通常取决于您的游戏。实际上,对于像象棋这样的赢/输/输游戏,则每个动作的奖励为0,但最后获胜(+1)或失败(-1)。在零和游戏中,这与极小极大值,字母修剪等非常吻合。

强化学习旨在解决奖励延迟的环境。为临时非目标添加“帮助者”奖励通常会适得其反。

如果我使用其他奖励,例如每次评估函数的输出,该如何实现呢?

通常您不会。应用自弹式RL的目的是学习返回(有时称为Utility)功能,该功能可以预测游戏结束时您对总+ 1/0 / -1奖励的期望。您将用它来代替当前的启发式搜索以进行minimax搜索。或者,潜在地,您可以调整当前的启发式函数以在相同范围内输出,并使用RL优化其权重以对真实的最佳播放返回函数进行最佳近似(这可能太复杂而无法精确计算)。

如何修改评估函数,以在迭代后获得更好的回报?

这就是所有RL方法都尝试做的事情,有各种各样的求解器。没有简短的解释方式。您可以从Q-Learning之类的简单方法开始。Q-Learning学习Q(s,a)的估计值(称为动作值),它是处于状态s并采取动作a之后遵循最佳策略的预期回报。从学习环境中的每个步骤开始,它都会做出任意猜测,并将其提炼得更接近真实值。简单的表格Q学习器可以通过存储一张包含所有状态和动作的大表来进行优化,该表具有到目前为止对真实值的最佳估计,并根据经验对每个新估计进行平均。

还可以将用于启发式学习的RL方法与超前最小极大搜索相结合-这就是原始的AlphaGo所做的事情,以及AlphaGo Zero在训练过程中所做的事情。这是一种功能强大的方法,因为minimax搜索将用于仔细检查RL生成的启发式算法。尽管对于足够简单的游戏,RL可以学习完美的启发法,并且您只需要本地搜索(下一步应该是什么)。

除非您的游戏非常简单(所有可能的状态都适合内存),否则您将在RL算法中需要某种函数逼近器。神经网络是标准选择。这部分不可避免地要有东西 -尽管另一个不错的选择是定义一堆代理特征(您可能会用来手工构造试探法)并使用线性近似器-只是所有特征的加权总和。这可以很好地发挥作用,并且已经在使用RL训练的跳棋(草稿)球员中使用过。

实际上,只要您自己的启发式函数不太常见,您就可以像对待线性近似器一样对待它,并使用RL为其学习最佳权重。


“强化学习旨在解决延迟奖励的环境。为临时非目标增加“帮助”奖励通常会适得其反。我想指出的是,有一篇论文试图通过引入中介目标“ Hindsight Experience Replay ” 来解决稀疏奖励的问题。
nbro

1
@nbro:解决稀疏奖励的尝试很多,这是RL中的一个开放式问题,增加问题挑战的一种方法是使奖励更加稀疏。资格跟踪是另一种尝试,分层RL是另一个有希望的领域。。。我想我不想在这里将这些技术添加到答案中,因为它更多地是关于OP问题的可行性以及该主题的简介
Neil Slater
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.