提问者:小点点

用神经网络和遗传算法求解异或问题


我正在尝试使用神经网络解决异或问题。为了训练,我正在使用遗传算法。

但是经过一定数量的世代(200)后,错误停留在1。并且输出是正确的,除了1 xor 0,输出是0而不是1,我不明白为什么会发生这种情况。

种群规模:100
交叉率:70
突变率:5
精英数量:2
激活功能:乙状体
选择方法:7名参赛者的锦标赛选择

变异算法=

for (int i=0; i< individual.getNbrOfWeights(); i++)

    if (random(0,100) < mutationRate)
    {
        genome[i] = genome[i] + random(-0.1,0.1);
    }

体能计算 =

double error = 0;

error = error + feedForward({0, 1}, 1);
error = error + feedForward({1, 0}, 1);
error = error + feedForward({1, 1}, 0);
error = error + feedForward({0, 0}, 0);     

fitness = error;

其中错误是目标输出

我尝试在变异中将权重设置在[-22]的范围内,但结果变得更糟(错误停留在1.6)。所以我现在不知道它是否有义务在一定范围内设置重量。。。

我真的需要你的帮助,提前谢谢。

编辑

事实上,问题出在权重初始化和突变方法上。

>

  • 当我将权重设置在[-1 1]之间时,算法不会收敛。但是我越扩大范围,它就会给出更好的结果,比如在[-4 4]之间。

    对于突变,我尝试了两种方法(突变一个随机选择的基因):

    -

    -


  • 共1个答案

    匿名用户

    您指定 sigmoid 作为激活函数,但您应用负数,sigmoid 使用正数。我认为这是问题的原因。您应该指定另一个激活函数,例如双曲正切函数 (tanh)。

    编辑:我现在很确定:重点是健身值。我怀疑您将其评估为错误(即最小化它),同时选择具有更大健身价值的更好的个人。

    相关问题