我对神经网络/机器学习/遗传算法是新手,我正在编写一个学习玩贪吃蛇的神经网络(如果你之前没有玩过,这里有一个例子)。我有一些不太理解的问题:
在提出我的问题之前,我想先确保我对基本概念的理解是正确的。有一群蛇,每条蛇都有一个随机生成的DNA。DNA是神经网络中使用的权重。每当蛇移动时,它使用神经网络来决定去哪里(使用偏置)。当种群死亡时,选择一些父母(可能是最高适应度的),并以一定的突变几率交叉它们的DNA。
1) 如果给出整个棋盘作为输入(大约400个位置),足够的隐藏层(不知道多少,可能256-64-32-2?),以及足够的时间,它能学会不把自己困住吗?
2) 什么样的输入会比较好?以下是我的一些想法:
- 400个输入,每个棋盘上的位置一个。如果蛇应该去那里(苹果)则为正值,如果是墙壁/自己的身体则为负值。数值越接近-1/1,表示距离越近。
- 6个输入:游戏宽度,游戏高度,蛇的x坐标,蛇的y坐标,苹果的x坐标和苹果的y坐标(如果这样训练,可能会学会在不同大小的棋盘上玩,但不确定如何输入它的身体,因为身体大小会变化)
- 给它一个视野(可能是头前方3×3的方块),可以提醒蛇前方有墙壁、苹果或自己的身体。(不幸的是,蛇只能看到正前方的东西,这可能会阻碍它的学习能力)
3) 给定输入方法,隐藏层的大小应该从哪里开始比较好(当然计划调整这个,只是不知道一个好的起点)
4) 最后,关于蛇的适应度。除了获取苹果的时间,它的长度和寿命之外,还应该考虑其他因素吗?为了让蛇学会不把自己困住,我还能在适应度中添加什么来帮助它吗?
谢谢!
回答:
在这篇文章中,我将向你介绍:
- 如何使用LSTM神经网络将导航指令映射到动作序列
- 帮助你学习如何使用神经网络完成任务的资源
- 如何安装和配置神经网络库,基于我自己艰难学习的经验
对你想法的总体看法:
我能看出你在尝试做什么,我相信你的游戏想法(使用随机生成的对手身份来控制他们的行为,以一种随机改变他们使用人工智能智能行为的方式)具有很大的潜力。
使用神经网络将导航指令映射到动作序列
对于处理你的游戏棋盘,因为它涉及到密集(而不是稀疏)数据,你可能会发现卷积神经网络(CNN)很有用。然而,因为你需要将地图转换为动作序列,针对序列优化的神经网络(如循环神经网络)可能会对你最有用。我确实找到了一些研究,这些研究使用神经网络将导航指令映射到动作序列,构建游戏地图,并在具有多种输入类型的游戏中移动角色:
- Mei, H., Bansal, M., & Walter, M. R. (2015). Listen, attend, and walk: Neural mapping of navigational instructions to action sequences. arXiv preprint arXiv:1506.04089. 可用地址:Listen, Attend, and Walk: Neural Mapping of Navigational Instructions to Action Sequences
- Lample, G., & Chaplot, D. S. (2016). Playing FPS games with deep reinforcement learning. arXiv preprint arXiv:1609.05521. 可用地址:Super Mario as a String: Platformer Level Generation Via LSTMs
- Lample, G., & Chaplot, D. S. (2016). Playing FPS games with deep reinforcement learning. arXiv preprint arXiv:1609.05521. 可用地址:Playing FPS Games with Deep Reinforcement Learning
- Schulz, R., Talbot, B., Lam, O., Dayoub, F., Corke, P., Upcroft, B., & Wyeth, G. (2015, May). Robot navigation using human cues: A robot navigation system for symbolic goal-directed exploration. In Robotics and Automation (ICRA), 2015 IEEE International Conference on (pp. 1100-1105). IEEE. 可用地址:Robot Navigation Using Human Cues: A robot navigation system for symbolic goal-directed exploration
对你有帮助的总体看法
听起来你对神经网络的工作原理还有一些基本的理解不足,所以我对你的主要建议是多研究神经网络背后的基本机制。重要的是要记住,神经网络是一种机器学习模型。因此,仅仅用随机参数构建一个神经网络是没有意义的。神经网络是一种从样本数据中训练的机器学习模型,一旦训练完成,就可以在测试数据上进行评估(例如,进行预测)。
机器学习的根源在很大程度上受到贝叶斯统计的影响,所以你可能会从阅读一本关于贝叶斯统计的教科书中受益,以更深入地理解机器分类的一般工作原理。
了解不同类型的神经网络之间的区别,如长短期记忆(LSTM)和卷积神经网络(CNN)对你也将是有价值的。
如果你想尝试使用神经网络进行分类任务,可以试试这个:
学习数学知识:我的专业意见是,学习神经网络背后的数学知识非常重要。如果你觉得这很吓人,我可以作证,我是自己学会的。但如果你更喜欢在课堂环境中学习,那么我建议你尝试一下。一本学习神经网络机制和数学知识的优秀资源和教科书是:
神经网络库的教程
我建议你尝试完成一个神经网络库的教程,例如:
- TensorFlow tutorials
- Deep Learning tutorials with Theano
- CNTK tutorials(CNTK 205: Artistic Style Transfer特别酷。)
- Keras tutorial(Keras是一个强大的高级神经网络库,可以使用TensorFlow或Theano。)