程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

如何使用神经网络学习虚拟生物?[关闭]

发布于2019-08-27 09:43     阅读(987)     评论(0)     点赞(30)     收藏(4)


我正在做一个简单的学习模拟,屏幕上有多个生物。他们应该学习如何吃,使用他们简单的神经网络。它们有4个神经元,每个神经元激活一个方向的运动(从鸟的视角看是一个2D平面,因此只有四个方向,因此需要四个输出)。他们唯一的输入是四只“眼睛”。当时只有一只眼睛可以活动,它基本上用作指向最近物体(绿色食物块或其他生物体)的指针。

因此,网络可以这样想象: 在此输入图像描述

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

在此输入图像描述

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

在此输入图像描述

现在我已经描述了我的一般想法,让我了解问题的核心......

  1. 初始化 | 首先,我创造了一些生物和食物。然后,将其神经网络中的所有16个权重设置为随机值,如下所示:weight = random.random()* threshold * 2。阈值是一个全局值,描述每个神经元需要获得多少输入才能激活(“激活”)。通常设置为1。

  2. 学习 | 默认情况下,神经网络中的权重每步降低1%。但是,如果某些有机体实际上设法吃东西,那么最后一个有效输入和输出之间的联系就会得到加强。

但是,有一个大问题。我认为这不是一个好方法,因为他们实际上并没有学到任何东西!只有那些随机设定为有益的初始体重的人才会有机会吃东西,然后只有他们的体重会增强!那些与他们的关系设置得很糟糕的人呢?他们只会死,不会学习。

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

编辑: 谢谢你的答案!其中每一个都非常有用,有些只是更相关。我决定使用以下方法:

  1. 将所有权重设置为随机数。
  2. 随着时间的推移减少重量。
  3. 有时随机增加或减少重量。单位越成功,其权重就越小。
  4. 当有机体吃东西时,增加相应输入和输出之间的重量。

解决方案


这类似于尝试查找全局最小值的问题,很容易陷入局部最小值。考虑尝试找到下面的配置文件的全局最小值:您将球放在不同的位置并按照它向下滚动到最小值,但根据您放置它的位置,您可能会陷入局部倾斜。在此输入图像描述

也就是说,在复杂的情况下,您无法始终使用小的优化增量从所有起点获得最佳解决方案。 对此的一般解决方案是更频繁地波动参数(,在这种情况下的权重)(并且通常在进行模拟时减小波动的大小 - 如在模拟退火中),或者仅仅意识到一堆起点不会有意思。



所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:https://www.pythonheidong.com/blog/article/62714/6cbd2a6dd1db0d03d040/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

30 0
收藏该文
已收藏

评论内容:(最多支持255个字符)