类似神经网络的数据结构

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

目前,每个生物都由一个神经网络控制。神经网络的权重和偏置是从生物的基因组中导出的。神经网络的第一个输入是[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

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

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