【发布时间】:2017-08-04 16:08:40
【问题描述】:
我正在使用 Neataptic 来训练神经网络,该网络通过遗传算法解决 XOR。适应度定义如下:
// max score = 0
score -= Math.abs(0 - network.activate([0, 0])) * 5000;
score -= Math.abs(1 - network.activate([1, 0])) * 5000;
score -= Math.abs(1 - network.activate([0, 1])) * 5000;
score -= Math.abs(0 - network.activate([1, 1])) * 5000;
有时它运行得很好。但我假设它只是走运了。但很多时候,它甚至达不到-6000。它会经常在-8000 附近徘徊。
这些是我的设置:
GNN = new Evolution({
size: 100,
elitism: 10,
mutationRate: 0.3,
networkSize : [2,3,1],
mutationMethod: [
Methods.Mutate.MODIFY_RANDOM_BIAS,
Methods.Mutate.MODIFY_RANDOM_WEIGHT,
Methods.Mutate.SWAP_BIAS,
Methods.Mutate.SWAP_WEIGHT,
Methods.Mutate.MODIFY_SQUASH
],
crossOverMethod: [
Methods.Crossover.UNIFORM,
Methods.Crossover.AVERAGE,
Methods.Crossover.SINGLE_POINT,
Methods.Crossover.TWO_POINT
],
selectionMethod: [
Methods.Selection.FITNESS_PROPORTIONATE
],
generationMethod: [
Methods.Generation.POINTS
],
fitnessFunction: function(network){
var score = 0;
score -= Math.abs(0 - network.activate([0, 0])) * 5000;
score -= Math.abs(1 - network.activate([1, 0])) * 5000;
score -= Math.abs(1 - network.activate([0, 1])) * 5000;
score -= Math.abs(0 - network.activate([1, 1])) * 5000;
return Math.round(score);
}
});
(view the JSFiddle here and press train)
您建议我更改哪些设置? (请提供证明)
附注我知道通过反向传播训练 XOR 要容易得多,但这仅用于实验目的。
【问题讨论】:
-
我过去做过这个任务。 GA 找到“好的解决方案”。那么,网络拓扑是如何使用的呢?
-
我不明白为什么平均身体素质会比上一代更差。你是否使用了一些超剧烈的早熟收敛限制?
-
@viceriel 它的突变率很高,没有精英主义
-
如果你有高突变,GA 就像随机搜索一样。我理解,但选择任务是选择更合适的解决方案,所以即使没有精英主义,我也希望新一代的平均适应度更好。
标签: javascript neural-network genetic-algorithm