Artificial intelligence 神经网络:反向传播过程中的误差计算

Artificial intelligence 神经网络:反向传播过程中的误差计算,artificial-intelligence,computer-science,neural-network,Artificial Intelligence,Computer Science,Neural Network,我正在使用反向传播实现一个神经网络,但是在计算错误时遇到了问题。简而言之,我的sigmoid函数将所有节点输出压缩为1.0,这将导致错误计算返回0: error = (expected - actual) * (1 - actual) * actual ^^ this term causes multiply by 0 所以我的误差总是0 我怀疑问题出在我的sigmoid实现上,它返回1.0,而不是渐进地限制在1.0以下:

我正在使用反向传播实现一个神经网络,但是在计算错误时遇到了问题。简而言之,我的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是正确的,还是我有别的错误?

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


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

约为0..300。它很大,因为我有大量的输入和隐藏节点。我尝试对20x20位图进行分类,输出结果为8位。因此对于300,指数函数将非常小,可能等于0,您将得到1.0的结果。对于0,当然不应该是这样。Wolfram alpha甚至认为结果是1.0,因为指数项非常小^%28-300%29%29在大约-37处,1.0和正确答案之间的差异将低于双精度类型的精度(可能是ruby使用的)。^%28-37%29%29%29%29抱歉,链接搞砸了,你必须复制/粘贴。是的,同意精度。对于我的输入范围,有没有更合适的方法来计算sigmoid?或者我最好完全取消sigmoid并使用阈值激活?在ruby中,您可以使用bigdecimal(我想,只是谷歌搜索了那个)。你应该问问自己,这些微小的差异是否真的相关,你的范围是否合适。当x=37时,你说的是万亿分之一。是的,你的函数应该总是小于1。我认为一些取整问题可能是罪魁祸首。。。