类似神经网络的数据结构

我正在进行一个小型副项目,目的是实验遗传算法。这个项目涉及两个类,生物和食物。生物每经过一个时间单位就会增加饥饿值,当找到食物时饥饿值会减少。生物可以移动,而食物是静止的。每个生物都有一个基因组,这只是一个随机生成的字符字符串。目标是经过几代之后,生物会进化出专门的移动模式,从而实现最佳的食物消耗。

目前,每个生物都由一个神经网络控制。神经网络的权重和偏置是从生物的基因组中导出的。神经网络的第一个输入是[0,0]。神经网络产生两个输出,分别决定生物的x和y方向的移动。这个输出将作为下一时间单位神经网络的输入。例如:

1: [0,0]->NN->[.598.., -.234...] // 生物向右上移动2: [.598...,-.234...]->NN->[-.409...,-.232...] // 生物向左上移动3: [-.409...,-.232...]->NN-> 等等

问题是,无论权重如何初始化,神经网络都会找到一种“固定点”。也就是说,经过两三次迭代后,输出和输入几乎相同,因此生物总是朝同一个方向移动。现在我没有训练神经网络,我也不想训练。所以我正在寻找一种生成输出的替代方法。

更具体地说,假设我有由基因组生成的n个随机权重。我需要一个由这些n个权重决定的关系,能够(以最宽泛的意义上)将[-1,1]范围内的两个输入映射到同一范围内的两个输出。关键是我希望权重对函数的行为有显著影响。我不想它像y=mx+b那样,我们只是改变y和b。

我知道这是一个相当模糊的描述。起初我认为神经网络会很完美,但似乎在没有训练的情况下,输入对输出的影响几乎为零(这也是合理的,因为神经网络是用来训练的)。

有什么建议吗?


回答:

这只是一个想法。

你有 f(genome) -> (w_1, w_2, ..., w_n),其中 f 基于 genome 生成 w

例如,你可以使用一个哈希函数 h 并计算 [h(w_1, ..., w_(n/2)), h(w_(n/2+1), ..., w_n))]

通常,哈希函数应该对输入的微小变化产生非常不同的输出。但并非总是如此。你可以寻找那些是连续的哈希函数(输入的微小变化,输出的微小变化)。这种类型的函数可用于相似性搜索,http://en.wikipedia.org/wiki/Locality_sensitive_hashing 可能会提供一些想法。这样你实际上可以直接在基因组上使用哈希函数。

否则,你可以尝试分割基因组或权重,并为分割部分赋予不同的用途。假设 n = 4

(w_1, w_2) 影响 x

(w_3, w_4) 影响 y

然后你可以计算 x(w_1 + w_2*Random_[-1,1])/2,其中 Random_[-1,1] 是区间 [-1,1] 内的随机数,并且假设对于所有 iw_i \in [-1,1]

y 进行类似的计算。

然后你的遗传算法将优化生物移动的速度和随机性,以便最佳地寻找食物。如果你有更多的权重(或更长的基因组),你可以尝试设计一个更复杂的函数,遵循类似的思路。

这实际上表明,在使用遗传算法时,问题解决的重点转移到了寻找好的基因组表示和好的适应度函数上,所以如果在这方面遇到一些困难,不要担心。

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中创建了一个多类分类项目。该项目可以对…

发表回复

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