我按书上的介绍写了一个 BP 神经网络,但运行后发现网络的输出逐渐接近书上给出的一个常量 a。
// 这一行计算结点的输出,训练后,输出层结点的输出接近常数 a
node.Output = (2 * a) / (1 + Math.Exp(-b * node.Input)) - a;
// 这一行计算输出层结点的梯度,训练后,输出层结点的梯度接近 0
node.Grads = (b / a) * (node.ExpectedOutput - node.Output) * (a - node.Output) * (a + node.Output);
//  权值增量
double delta = LearningRate * conn.To.Grads * conn.From.Output;
问题好像出在梯度的式子上,如果结点的输出接近 a 或 -a,或接近期望输出,就会使梯度接近0,于是权值的变化就会很小,网络趋于稳定,现在的问题是,输出向 a 或 -a 靠近,而不是向期望输出靠近,请高手指教是什么原因。能否留下邮箱,我会发送代码。