如何使用强化学习向神经网络教授棋盘游戏策略?

数据挖掘 机器学习 神经网络 强化学习 q学习
2021-10-12 12:22:19

我需要使用强化学习来教神经网络棋盘游戏的策略。我选择 Q-learning 作为特定的算法。

我希望神经网络具有以下结构:

  1. 层 -rows * cols + 1神经元 - 输入 - 棋盘上连续字段的值(0为空,12代表玩家),该状态下的动作(自然数)
  2. 层 - (??) 神经元 - 隐藏
  3. 层 - 1 神经元 - 输出 - 给定状态下的动作值(浮点数)

我的第一个想法是从创建状态、动作和价值观的地图开始,然后尝试教授神经网络。如果教学过程不成功,我可以增加神经元的数量并重新开始。

但是,我很快遇到了性能问题首先,我需要从简单的内存 Python 切换dict到数据库(没有足够的 RAM)。现在数据库似乎是一个瓶颈(简单地说,有太多可能的状态,以至于检索动作值需要相当长的时间)。计算需要数周时间。

我想可以即时教授神经网络,而中间没有地图层。但是我如何在隐藏层上选择正确数量的神经元呢?我怎么知道我正在丢失大量保存(学习)的数据?

2个回答

您需要使用一些函数逼近方案。此外,经验回放之所以有用,有两个原因:(1)你想保留过去的记忆(2)你需要去关联教导你的网络的方式。

看看 Deepmind 在 ATARI 游戏上的 DQN。您所描述的基本上是他们已经解决的问题。该论文在他们的网站上: http: //deepmind.com/dqn.html

Mnih V、Kavukcuoglu K、Silver D、Rusu AA、Veness J、Bellemare MG 等。通过深度强化学习进行人工控制。自然。2015 年 2 月 25 日;518(7540):529–33。

关于网络架构,肯定需要一些实验。作为替代方案,您还可以查看 HyperNEAT。他们发展了网络拓扑:

Hausknecht M、Khandelwal P、Miikkulainen R、Stone P. HyperNEAT-GGP:基于 HyperNEAT 的 Atari 通用游戏玩家。在:第 14 届遗传和进化计算年会论文集 p。217-24。可从:http ://dl.acm.org/citation.cfm?id=2330195

对于更具战略意义的游戏。或许你可以看看《长颈鹿:使用深度强化学习下棋》http://arxiv.org/abs/1509.01549

为了训练代理玩棋盘游戏,首要任务是创建强化学习环境。

环境的4个基本方面是:

  • 观察空间:输入/状态是什么,以及它的形状和范围?
  • 动作空间:可能的动作是什么,以及它的形状和范围?
  • 奖励函数:特定状态+动作对的奖励是多少?是即时奖励还是稀疏奖励?奖励函数会对环境的难度影响很大。
  • 一集/一场比赛什么时候结束?

我强烈建议使用与OpenAI Gym相同的 API,因为它很受欢迎且质量很高。然后,您可以尝试直接应用这些算法,然后再自行尝试。它们是最先进的算法,质量有保证。

关于神经网络架构,您可以利用游戏的本质来获得更好的结果。

例如在围棋中,位置是对称的,动作简单且与位置无关,非常适合使用卷积神经网络(AlphaGo Zero)。

另一方面,在国际象棋中,由于动作是不对称的并且依赖于位置,谷歌不得不重新设计架构来训练代理下棋。