cor*_*zza 35 python simulation artificial-intelligence machine-learning neural-network
我正在做一个简单的学习模拟,屏幕上有多个生物.他们应该学习如何吃,使用他们简单的神经网络.它们有4个神经元,每个神经元激活一个方向的运动(从鸟的视角看是一个2D平面,因此只有四个方向,因此需要四个输出).他们唯一的输入是四只"眼睛".当时只有一只眼睛可以活动,它基本上用作指向最近物体(绿色食物块或其他生物体)的指针.
因此,网络可以这样想象:

有机体看起来像这样(在理论和实际模拟中,它们真的是红色的块,它们的眼睛围着它们):

这就是它的样子(这是一个老版本,眼睛仍然不起作用,但它是相似的):

现在我已经描述了我的一般想法,让我了解问题的核心......
初始化 | 首先,我创造了一些生物和食物.然后,将其神经网络中的所有16个权重设置为随机值,如下所示:weight = random.random()*threshold*2.阈值是一个全局值,描述每个神经元需要获得多少输入才能激活("激活").通常设置为1.
学习 | 默认情况下,神经网络中的权重每步降低1%.但是,如果某些有机体实际上设法吃东西,那么最后一个有效输入和输出之间的联系就会得到加强.
但是,有一个大问题.我认为这不是一个好方法,因为他们实际上并没有学到任何东西!只有那些随机设定为有益的初始体重的人才会有机会吃东西,然后只有他们的体重会增强!那些与他们的关系设置得很糟糕的人呢?他们只会死,不会学习.
我该如何避免这种情况?想到的唯一解决方案是随机增加/减少权重,这样最终有人会得到正确的配置,并偶然吃掉一些东西.但我觉得这个解决方案非常粗糙和丑陋.你有什么想法?
编辑: 谢谢你的答案!其中每一个都非常有用,有些只是更相关.我决定使用以下方法:
tom*_*m10 10
这类似于尝试查找全局最小值的问题,很容易陷入局部最小值.考虑尝试找到下面的配置文件的全局最小值:您将球放在不同的位置并按照它向下滚动到最小值,但根据您放置它的位置,您可能会陷入局部倾斜.
也就是说,在复杂的情况下,您无法始终使用小的优化增量从所有起点获得最佳解决方案. 对此的一般解决方案是更频繁地波动参数(即,在这种情况下的权重)(并且通常在进行模拟时减小波动的大小 - 如在模拟退火中),或者仅仅意识到一堆起点不会有意思.
你想怎么学习?你不喜欢随机种子生物死亡或繁荣的事实,但你唯一一次向你的生物体提供反馈就是随机获取食物.
让我们把它塑造成热和冷.目前,一切都反馈"冷",除非有机体正好在食物之上.因此,学习的唯一机会就是不小心跑过食物.如果需要,您可以收紧此循环以提供更持续的反馈.如果有食物运动则反馈温暖,如果移开则感冒.
现在,这方面的缺点是没有其他任何输入.你只有食物寻求者的学习技巧.如果你希望你的生物在饥饿和其他东西之间找到平衡(比如,过度拥挤避免,交配等),整个机制可能需要重新思考.