【问题标题】:Clarification on a Neural Net that plays Snake关于扮演 Snake 的神经网络的说明
【发布时间】:2017-06-25 06:50:59
【问题描述】:

我是神经网络/机器学习/遗传算法的新手,对于我的第一个实现,我正在编写一个学习玩蛇的网络 (An example in case you haven't played it before) 我有几个问题我不完全理解:

在我提出问题之前,我只想确保我正确理解了大意。有一群蛇,每条蛇都有随机生成的 DNA。 DNA 是神经网络中使用的权重。蛇每次移动时,它都会使用神经网络来决定去哪里(使用偏差)。当种群死亡时,选择一些父母(可能是最高适应度),并以轻微的突变机会交叉他们的 DNA。

1) 如果给定整个棋盘作为输入(大约 400 个点)足够多的隐藏层(不知道有多少,也许是 256-64-32-2?),以及足够的时间,它会学会不将自己封闭?

2) 什么是好的输入?以下是我的一些想法:

  • 400 个输入,板上每个空间一个。如果蛇应该去那里(苹果),则为正,如果它是一堵墙/您的身体,则为负。越接近 -1/1 越接近。
  • 6 个输入:游戏宽度、游戏高度、蛇 x、蛇 y、苹果 x 和苹果 y(如果通过这种方式训练,可能会学习在不同尺寸的板上玩,但不确定如何输入它的身体,因为它会改变大小)
  • 给它一个视野(可能是头部前面 3x3 的正方形),可以提醒蛇注意墙壁、苹果或它的身体。 (不幸的是,蛇只能看到前面的东西,这可能会妨碍它的学习能力)

3) 给定输入法,隐藏层大小的一个好的起点是什么(当然计划调整这个,只是不知道什么是好的起点)

4) 最后是蛇的适应度。除了拿到苹果的时间,它的长度,它的寿命,还有什么要考虑的吗?为了让蛇学会不阻挡自己,我还有什么可以添加到适应度来帮助它的吗?

谢谢!

【问题讨论】:

  • 我认为您的问题需要在语义上更加清晰和不那么含糊,因为 StackOverflow 是针对有明确答案的问题,而不是针对一般意见的问题。如果没有为您的问题提供更清晰答案的编辑,您的帖子可能会被 StackOverflow 版主关闭/锁定。

标签: machine-learning neural-network artificial-intelligence genetic-algorithm


【解决方案1】:

在这篇文章中,我会建议你:

  • 如何使用 LSTM 将导航指令映射到动作序列 神经网络
  • 可帮助您学习如何使用神经网络的资源 网络来完成你的任务
  • 如何安装和配置神经网络 基于我需要努力学习的网络库

您的想法的一般意见:

我可以看到您正在尝试做什么,并且我相信您的游戏理念(使用随机生成的对手身份来控制他们的行为,以随机改变他们使用人工智能的方式进行智能行为) ) 有很大的潜力。

使用神经网络将导航指令映射到动作序列

为了处理您的游戏板,因为它涉及 密集(相对于 稀疏)数据,您会发现卷积神经网络 (CNN) 很有用。但是,由于您需要将地图转换为动作序列,因此序列优化的神经网络(例如循环神经网络)可能对您最有用。我确实发现了一些使用神经网络将导航指令映射到动作序列、构建游戏地图以及在具有多种输入类型的游戏中移动角色的研究:

对您有帮助的一般意见

听起来您缺少对神经网络工作原理的一些基本了解,因此我对您的主要建议是研究更多神经网络背后的基本机制。请务必记住,神经网络是一种机器学习模型。所以,仅仅用随机参数构建一个神经网络是没有意义的。神经网络是从样本数据中训练出来的机器学习模型,一旦训练完成,就可以在测试数据上进行评估(例如执行预测)。

机器学习的根源在很大程度上受到贝叶斯统计的影响,因此您可能会从一本有关贝叶斯统计的教科书中受益,以更深入地了解基于机器的分类的一般工作原理。

了解不同类型的神经网络之间的差异也很有价值,例如长短期记忆 (LSTM) 和卷积神经网络 (CNN)。

如果您想修改如何使用神经网络进行分类任务,请尝试以下操作:

学习数学: 我的专业观点是,学习神经网络的底层数学非常重要。如果它令人生畏,我给你我的证词,我能够自己学习所有这些。但是,如果您更喜欢在课堂环境中学习,那么我建议您尝试一下。 学习神经网络的力学和数学的绝佳资源和教科书是:

神经网络库教程

我建议您尝试阅读神经网络库的教程,例如:

【讨论】:

【解决方案2】:

我看到了类似的应用程序。输入通常是蛇坐标、苹果坐标和一些感官数据(在你的情况下是蛇头旁边的墙或没有)。

在这种情况下,使用遗传算法是一个好主意。你只做参数学习(找到一组权重),但结构将基于你的估计。 GA也可以用于结构学习(寻找ANN的拓扑)。但是对两者都使用 GA 将非常难以计算。

弗洛雷亚诺教授做了类似的事情。他使用遗传算法为机器人的神经网络控制器寻找权重。机器人在迷宫中并执行一些任务。神经网络隐藏层是一个神经元,在输入上具有循环关节,在自身上具有一个横向连接。有两个输出。输出连接在输入层和隐藏层(提到一个神经元)。

但弗洛雷亚诺做了一些更有趣的事情。他说,我们不是天生就有确定的突触,我们的突触在我们的一生中会发生变化。所以他使用遗传算法来寻找突触变化的规则。这些规则基于 Hebbian 学习。他执行节点编码(对于连接到神经元的所有权重将应用相同的规则)。一开始,他在小的随机值上初始化权重。寻找规则而不是突触的数值会导致更好的结果。 One from Floreno's articles.

还有我自己的经验。在上个学期,我和我的同学得到了一项任务,找到 GA 的突触规则,但要找到 Spiking 神经网络。我们的 SNN 是移动机器人运动学模型的控制器,任务是引导机器人进入选定点。我们得到了一些结果,但不是预期的。你可以看到结果here。所以我建议你使用“普通”的 ANN 而不是 SNN,因为 SNN 会带来新的现象。

【讨论】:

    猜你喜欢
    • 2017-09-26
    • 2020-10-19
    • 2018-11-01
    • 2014-07-07
    • 2019-11-26
    • 2010-12-09
    • 1970-01-01
    • 1970-01-01
    • 2014-02-17
    相关资源
    最近更新 更多