神经网络中成本函数的计算得到 NaN 或 Inf

Calculation of Cost function in Neural Network Getting NaN or Inf

我正在尝试使用此函数计算神经网络的成本函数,作为我的编程任务的一部分。

其中 K 是标签的数量。 hTheta 和 y 都是大小为 (5000,10) 的矩阵,因为我有 5000 个训练示例和 10 个标签。我正在使用 Octave, 我得到的成本函数为 NaN。 (这也是预期的,因为 hTheta 和 Y 的所有值不是 0 就是 1,log(0)*0 将不会被定义)。

但是我应该如何计算成本?

注意 - hTheta 由神经网络上的前馈算法生成,y 是输入标签。

这里Yi可以是1或者0,但是hi不能是0或 1。这是因为如果您使用 sigmoid logisitic 函数,则保持 0(或 1)将要求 sigmoid 函数的参数为​​ -infinity(或 +infinity),这是不可能的。一个可能的原因可能是您一定是选择了太高的学习率。尝试降低学习率。当我遇到同样的问题时,这对我有用。

可靠地防止这种情况发生的一般方法是削减您的值或添加一个小值 epsilon e=10e-6(或类似的东西),以便您始终拥有 log(x+e)x+e != 0.根据您的具体操作,您可能还需要将 x 剪辑到 e 和 1 之间。如果您将 log 组合成单个 [=15] 中的分数=],您将再次在分母中添加 e 以避免被零除。

防止任何 NAN 行为比试图避免它更好。例如,对于 RNN,您可能会出现梯度爆炸 - 这种情况通常是您无法控制的超参数选择 - 导致 x=infinity 如果未捕获则生成 NAN。