发布于2019-08-27 09:43 阅读(987) 评论(0) 点赞(30) 收藏(4)
我正在做一个简单的学习模拟,屏幕上有多个生物。他们应该学习如何吃,使用他们简单的神经网络。它们有4个神经元,每个神经元激活一个方向的运动(从鸟的视角看是一个2D平面,因此只有四个方向,因此需要四个输出)。他们唯一的输入是四只“眼睛”。当时只有一只眼睛可以活动,它基本上用作指向最近物体(绿色食物块或其他生物体)的指针。
因此,网络可以这样想象:
有机体看起来像这样(在理论和实际模拟中,它们真的是红色的块,它们的眼睛围着它们):
这就是它的样子(这是一个老版本,眼睛仍然不起作用,但它是相似的):
现在我已经描述了我的一般想法,让我了解问题的核心......
初始化 | 首先,我创造了一些生物和食物。然后,将其神经网络中的所有16个权重设置为随机值,如下所示:weight = random.random()* threshold * 2。阈值是一个全局值,描述每个神经元需要获得多少输入才能激活(“激活”)。通常设置为1。
学习 | 默认情况下,神经网络中的权重每步降低1%。但是,如果某些有机体实际上设法吃东西,那么最后一个有效输入和输出之间的联系就会得到加强。
但是,有一个大问题。我认为这不是一个好方法,因为他们实际上并没有学到任何东西!只有那些随机设定为有益的初始体重的人才会有机会吃东西,然后只有他们的体重会增强!那些与他们的关系设置得很糟糕的人呢?他们只会死,不会学习。
我该如何避免这种情况?想到的唯一解决方案是随机增加/减少权重,这样最终有人会得到正确的配置,并偶然吃掉一些东西。但我觉得这个解决方案非常粗糙和丑陋。你有什么想法?
编辑: 谢谢你的答案!其中每一个都非常有用,有些只是更相关。我决定使用以下方法:
这类似于尝试查找全局最小值的问题,很容易陷入局部最小值。考虑尝试找到下面的配置文件的全局最小值:您将球放在不同的位置并按照它向下滚动到最小值,但根据您放置它的位置,您可能会陷入局部倾斜。
也就是说,在复杂的情况下,您无法始终使用小的优化增量从所有起点获得最佳解决方案。 对此的一般解决方案是更频繁地波动参数(即,在这种情况下的权重)(并且通常在进行模拟时减小波动的大小 - 如在模拟退火中),或者仅仅意识到一堆起点不会有意思。
作者:黑洞官方问答小能手
链接:https://www.pythonheidong.com/blog/article/62714/6cbd2a6dd1db0d03d040/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!