如何在前馈神经网络中处理不同类型和长度的输入?

人工智能 神经网络 游戏-ai 前馈神经网络 特征
2021-11-11 13:59:55

在学习了神经网络的基础知识并编写了一个使用 MNIST 数据集的代码之后,我想通过制作一个能够玩游戏的游戏来进行下一步。我想让它在像slither.io这样的游戏上运行。所以,为了能够创建多个snake实例并加快游戏速度,我重新创建了一个简单的游戏版本:

在此处输入图像描述

核心功能即将完成,现在是人工智能的工作。我想通过仅使用 NumPy 来保持脚本非常简单(并不是说我对 TensorFlow、PyTorch 或 Spark 不感兴趣,但我想在使用这些框架之前从“低层次”理解事物)。

起初,我希望 AI 能够通过读取像素来提出输出。但经过一些研究,我真的不想涉足卷积网络、递归和递归神经网络。我想重新使用我对 MNIST 所做的简单前馈 NN 并对其进行调整。

因此,我想我将使用以下数据,而不是使用像素:

  • {x,y} 蛇的位置
  • {x,y} 食物位置
  • 食物价值
  • 时间,为了得到蛇,在短时间内吃更多的食物。
  • 距中心的距离,不死在区域外

在此处输入图像描述

需要处理很多不同的数据!

在此处输入图像描述

我的问题

  1. 一个简单的 FNN 可以在输入层处理不同类型的数据吗?
  2. 它会在可变数量的输入下正常工作吗?

事实上,在蛇周围的特定区域,食物的数量是可变的。我遇到了这篇文章,它回答了我的问题,但是如果我想让神经网络忘记一些没有被使用的输入,那么dropout在这种情况下会有什么用处。或者这些输入的权重值(向零校正)就足够了?

1个回答

简而言之

  1. 只要使用实数表示,ANN 就不会遇到“不同类型”数据的问题:ANN 的输入表示长度并且易于理解和处理。

  2. 可变数量的输入有点棘手。一般来说,这也不是问题。网络将不时补偿一些输入的缺失(当食物太远时?)。您不必为您的案例使用 RNN。

在全

我认为您的网络的输入可以改进。

在构建新的 ANN 时,您始终必须考虑以下几个方面:

  • 神经网络只是将输入映射到输出的无状态函数。
  • 这里没有魔法:有了好的输入,你就能得到好的输出。
  • 想想你将如何编写一个算法来解决这个问题。最好的一组输入是什么?可以在其他地方进行一些计算吗?(使用其他 ANN,如果您想创建 ANN 链或传统算法)。
  • 预处理可以带来很大的不同!
  • 想想你的输入需要/导致的空间分离。

所有这些点都是相互关联的,它们仅与您提供给网络的输入有关。

现在,记住这些点,你可以再次检查你的输入,看看你是否可以改进一些东西:

目标1:吃东西

为了确保蛇会接近食物,我们肯定需要将 ANN 传递给食物的位置。但是你确定一长串坐标是最好的选择吗?也许最近食物的坐标就足够了。如果你是那条蛇,你想收到什么?或者,如果你是一条真正的蛇,你会得到什么?想象一下,你的蛇有一个传感器,可以确定获取食物的最佳地点。它就像一个指南针,只输出一个值,从 0 到 365(或选择你喜欢的任何范围)。该指南针将指向最近的较大食物群最近的食物记住:1 值总是比 N 好,你应该尽量避免输入可变数量,这总是一种不顺利的气味。

目标2:不要死

与中心的距离效果很好。这是人工神经网络在移动时会考虑的一个简单阈值,它有效且易于实现。你为什么不添加另一个指南针,它总是告诉你中心的位置而不是蛇的坐标?通过这种方式,您使用了 2 个彼此相关的值,而不是 3 个,这对于 ANN 来说更难破译。

时间真的没有必要。您正在插入一个与任何其他、环境或食物无关的值。任何可能的行为都不受其值的影响(如果 ANN 知道它只剩下 15 秒,它就不会改变它的行为。如果它知道它在 1 分钟或 4000 分钟后就“活着”,也是如此)。