神经网络:计算反向传播期间的误差

时间:2012-09-30 20:09:39

标签: artificial-intelligence computer-science neural-network

我正在使用this article来实现具有反向传播的神经网络,但无法计算错误。简而言之,我的sigmoid函数将我的所有节点输出压缩到1.0,然后导致错误计算返回0:

error = (expected - actual) * (1 - actual) * actual
                                    ^^ this term causes multiply by 0

所以我的错误总是为0。

我怀疑问题在于我的sigmoid实现,它返回1.0,而不是渐近地限制在1.0以下:

# ruby
def sigmoid(x)
  1/(1+Math.exp(-x))
end

我是否正确sigmoid永远不会达到1.0,或者我有其他错误?

1 个答案:

答案 0 :(得分:1)

在数学语境中,你是正确的,sigmoid永远不会达到1.0。但是在实际的编程环境中,Math.exp(-x)最终会变得如此之小,以至于它与0之间的差异可以忽略不计,你将获得1.0的结果。根据x的范围,这不会令人惊讶。

为了使用sigmoid方法,你应该使每个节点的输入权重之和大约为1。这将使sigmoid的输出合理,并使您的权重更快收敛。