我有一个包含数十万个训练示例的数据集。根据事件是否发生,有 27 个输入变量和一个输出变量,始终为 0 或 1。
因此,我的网络有 27 个输入和 1 个输出。我希望网络的输出是对事件发生可能性的置信度猜测,例如,如果输出为 0.23,则表示网络认为事件发生的可能性为 23%。
我正在使用反向传播来训练神经网络。它似乎运行良好,当事件发生的可能性更大时,网络输出更高的数字,而当事件不太可能时,网络输出的数字更低。
当这不是我真正希望网络输出的内容时,我的训练数据只有 0 或 1 个值作为输出,这是否是一个有效的担忧?
我担心的是反向传播试图减少网络输出与训练数据中输出值之间的误差平方,该值始终为 0 或 1。因为它是误差的平方它试图减少,我担心它的概率输出可能不是基于它看到的 27 个输入的事件发生的真实概率的线性映射。
这是一个有效的担忧吗?当我的测试数据只有 0 或 1 的输出时,我可以使用任何技术让神经网络输出 0 和 1 之间的线性置信度猜测吗?
我对我的所有神经元都使用了 sigmoid 激活函数,对于这个问题是否有更好的激活函数选择?
编辑:感谢 Xpector 的回答,我现在明白并不是所有的反向传播都旨在减少误差的平方,这取决于所使用的损失函数。我包括了我在这里使用的反向传播代码的一部分,它计算了错误:
var neuronOutput = layerOutputs[i];
var error = (neuronOutput - desiredOutput[i]);
errors[i] = error * Maths.SigmoidDerivative(neuronOutput);
这是来自开源 RProp 实现。我不确定这里使用的是什么损失函数。