我希望这里有经验的用户能给我一些建议。我正在实现一个具有2个输入、2个隐藏节点和1个输出的神经网络。
我对隐藏层和输出层都使用了Sigmoid激活函数,并且使用了反向传播。我相当确定自己正确理解了理论。我的程序可以计算梯度,更新权重和偏置,并使用动量和强度变量进行调整。
使用多层网络的目的是解决非线性可分问题,但到目前为止,我只能解决线性可分的AND和OR布尔函数。我尝试了各种不同的动量和强度设置,但都没有成功。
我的通常输出对于所有4个变量总是完全相同的。有一段时间接近0.55,直到我调整了设置,现在它们都输出0.9。如果我移除偏置,第一个值会变为零,但第四个不会。
有什么建议吗?
回答:
为了回答我自己的问题 ..
经过大量的尝试和错误,我决定大胆尝试使用tanh(x)代替Sigmoid .. 只经过一点微调,它就成功了!
如果其他人也在为这种网络挣扎,这可能对你也有帮助。
其导数是(1 – tanh(x))(1 + tanh(x))。