使用遗传算法进化多层感知器

Evolve a Multi Layer Perceptron using genetic algorithms

我想使用遗传算法进化神经网络,以逼近数学函数(线性、三次、正弦、tanh 等)。要求是 NN 应该根据神经元的拓扑结构、权重和激活函数进行演化。评估函数将计算 NN 的输出与应近似的函数(均方误差)之间的误差。

我主要担心的是我希望能够对 representation/encoding/genome 进行绝对控制,因为我想同时进化神经元层、它们的权重和它们的激活函数,所以我必须想出一个包含所有这些东西的染色体。

您会推荐哪些工具?我正在检查 DEAP 以改进神经网络,我正在考虑 PyLearn 2 以实现 GA 将产生的实际最佳配置。

最先进的神经网络是用 Lua 编写的 Torch7。这就是 Facebook AI 和 Google DeepMind 使用的(以及我的实验室)。但我想 lua 不是实现采样算法的最佳语言。

另一种最先进的框架是用 python 编写的,它叫做 Theano,但我更喜欢 Torch。但是,它们可能对您的任务来说太过分了。

一个简单的替代方法是使用 Autograd,这是一个自动 numpy 微分库 https://github.com/HIPS/autograd 可以轻松训练您的神经网络并对其进行绝对控制。他们的文档中有几个示例。

最后,遗传算法是 Monte Carlo 的另一个名称,并且有很多关于实现这些东西的资源 python(例如 https://codereview.stackexchange.com/questions/41004/organising-code-for-a-genetic-algorithm-in-python 或 github)。

DEAP 听起来是一个不错的流行选择,而 PyEvolve 已经过时了。

编辑:我忘了提到 Keras (http://keras.io/),它实际上可能是另一个不错的选择,并且是基于 Theano 的。

您也可以看看 Blocks。它是一个建立在 theano 之上的库,通过变量注释来管理计算图。与 keras、pylearn2 和 lasgne 等库相比,它允许使用更丰富的模型(即,更复杂、更多的重复性、更多你做白日梦的奇怪的类似神经堆栈的结构)模型。如果您只想 'evolve' 经典 MLP 架构的变体,那么这些库可能会更好。