如何让虚拟生物使用神经网络进行学习?

我正在制作一个简单的学习模拟,其中屏幕上有多个生物。它们应该使用简单的神经网络学习如何进食。它们有4个神经元,每个神经元激活一个方向的移动(这是一个从鸟瞰视角看的二维平面,因此只有四个方向,因此需要四个输出)。它们的唯一输入是四个“眼睛”。每次只能有一个眼睛处于活跃状态,它基本上是指向最近的物体(要么是绿色的食物块,要么是另一个生物)。

因此,可以这样想象这个网络:
enter image description here

一个生物看起来像这样(无论是在理论上还是在实际的模拟中,它们确实是带有周围眼睛的红色块):

enter image description here

这就是整体外观(这是旧版本,眼睛当时还不工作,但相似):

enter image description here

现在我已经描述了我的总体想法,让我们进入问题的核心…

  1. 初始化|
    首先,我创建了一些生物和食物。然后,它们神经网络中的16个权重被设置为随机值,像这样:weight = random.random()threshold2。阈值是一个全局值,描述每个神经元需要获得多少输入才能激活(“触发”)。它通常设置为1。

  2. 学习|
    默认情况下,神经网络中的权重每一步都会降低1%。但是,如果某个生物确实设法吃到了东西,最后一个活跃输入和输出之间的连接就会得到加强。

但是,这里有一个大问题。我认为这不是一个好的方法,因为它们实际上没有学到任何东西!只有那些初始权重随机设置为有利的生物才有机会吃到东西,然后只有它们的权重会被加强!那些连接设置得不好怎么办?它们只会死掉,而不是学习。

我如何避免这种情况?唯一想到的解决方案是随机增加/减少权重,这样最终会有人得到正确的配置,并通过偶然吃到东西。但我觉得这个解决方案非常粗糙和丑陋。你有什么想法吗?


回答:

这类似于试图找到全局最小值的问题,很容易陷入局部最小值。考虑尝试为下面的轮廓找到全局最小值:你将球放在不同的地方,然后跟随它滚下山到最小值,但根据你放置的位置,你可能会陷入局部凹陷。enter image description here

也就是说,在复杂的情况下,你不能总是通过小的优化增量从所有起点到达最佳解决方案。 对此的一般解决方案是更剧烈地波动参数(在本例中,即权重)(通常在模拟进行时减小波动的大小——就像在模拟退火中一样),或者只是意识到很多起点不会去到任何有趣的地方。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注