我正在使用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,或者我有其他错误?
答案 0 :(得分:1)
在数学语境中,你是正确的,sigmoid永远不会达到1.0。但是在实际的编程环境中,Math.exp(-x)最终会变得如此之小,以至于它与0之间的差异可以忽略不计,你将获得1.0的结果。根据x的范围,这不会令人惊讶。
为了使用sigmoid方法,你应该使每个节点的输入权重之和大约为1。这将使sigmoid的输出合理,并使您的权重更快收敛。