你将如何从游戏中的一系列动作中编码你的输入向量/矩阵来训练人工智能?例如国际象棋人工智能?

人工智能 深度学习 人工智能设计 训练 组合游戏
2021-10-18 14:05:43

我已经在诸如信用违约检测、图像中的对象识别、股票价格预测等领域中看到用于分类/回归任务的数据集。所有这些数据集都可以简单地表示为大小的输入矩阵(n_samples,n_features)并输入到你的机器学习算法中,最终产生一个训练有素的模型,提供一些预测能力。从直觉和数学上讲,这对我来说很有意义。

但是,我真的很想知道如何考虑游戏类任务(国际象棋、围棋、赛斯布林斯马里奥赛车 AI)的输入矩阵的结构(使用国际象棋示例):

  1. 你如何将棋盘的状态编码为模型可以训练的东西?将棋盘状态视为 8x8 矩阵(或 1x64)向量是否合理,每个点都由取决于棋子类型和颜色的数值编码?

  2. 假设有合适的棋盘状态表示,考虑到每种棋子类型的移动方式不同,模型如何能够提出建议?它是否不必评估每个棋子的不同移动可能性并提出它“认为”哪个移动对游戏有最好的长期结果?

  3. 对 2 的跟进 - 考虑到现在采取的行动和未来采取的 n 次行动之间的相互作用,模型将如何识别和权衡现在可能提供更好位置的移动与那些提供位置的移动未来 n 步 - 是否必须将棋盘状态输入扩展到长度为 1x64n 的向量,其中 n 是单个玩家预期的移动总数,或者这是应该能够捕获的不同算法的函数历史资料有哪些培训?

我不确定我是否过度考虑了这一点并且遗漏了一些非常明显的东西,但我会很感激任何关于如何思考这个问题的指导。

1个回答

问题的核心似乎真的是:“如何思考这个问题”,其中“这个”是 AI 玩家的输入。

玩 AI 玩家的现代尝试试图“按原样”取代人类玩家。一点优势都没有。这意味着我们希望向软件播放器和人类播放器提供相同的“原始输入”。对于视频游戏,原始输入通常是我们看到的屏幕,但它也可能包括声音、来自游戏控制器的振动反馈、来自驱动齿轮的力反馈等。基本上任何可用的传感器输入。对于像围棋这样的实体棋盘游戏,原始输入可以是视频源,就像AlphaGo一样。这样做,我们回到了视频游戏的方法。所以 AI 播放器的输入通常是一个张量,其中每个元素是屏幕像素的强度,或者其他一些传感器信号(注意这里没有关于张量的形状,请参见下文)。

这里的思维方式其实很简单,也很简洁:我们想要一个 AI 玩家来代替人类玩家。因此,我们列出了人类玩家可以感知的内容,并将每个输入建模为张量(这包括向量和矩阵)。

这里可能有一个微妙之处。我们面临的选择并不那么明显,而且通常会有尝试和错误(许多错误)。例如,来自 DeepMind 的用于玩 Atari 游戏的 Deep-Q 网络将两个连续视频帧之间的差异作为输入。其他一些方法可以解决与实际输入序列(例如 10 个连续帧)相同的问题。这两种方法都是有效的——它们只是有不同的权衡,我们必须评估以找到最佳配置。

另一个微妙之处是输入的“形状”。单个 (W, H) 输入帧应该是 (W*H) 向量,还是 (W, H) 矩阵,还是其他?后果可能很远。如果帧是具有透明度的 RGB 帧,则输入很可能是一个形状张量(W,H,4),一个具有 4 个形状“切片”(W,H)的“立方体积”——每个切片一个RGB 通道,第四个用于透明度。现在想象一下,如果您也有声音,并且可以添加第五个“切片”——如果您有立体声或杜比系统声道,则可以添加更多。

最后一点:这里除了输入之外,没有提到AI播放器的架构。尽管大多数示例都是基于神经网络的最新架构,但这种“思考”也适用于任何可以利用输入的东西。例如,IBM 的 Big Blue 系统在国际象棋中战胜了 Gary Kasparov,它是一个专门使用(如果我没记错的话)智能树搜索的 AI 玩家。然而,它的输入是代表棋盘的张量。