【问题标题】:is error value incorrect for output neurons?输出神经元的误差值不正确吗?
【发布时间】:2015-08-21 08:01:12
【问题描述】:

我使用全连接神经网络进行图像识别“mnist”。

我的网络有 784 个输入神经元,一个隐藏层由 1569 个神经元组成,一个输出层由 10 个神经元组成。

我有两个问题:

  1. 我使用 sigmoid 和公式计算错误 error = output * (1 - output) * (target - output)。问题是如果输出神经元是1,要求的值是0,那error=0,但是错了,不是吗?

  2. 如果隐藏层神经元的加权和变得太大,结果为 1,使用 sigmoid 是否正确?什么值来初始化权重?

【问题讨论】:

    标签: machine-learning neural-network


    【解决方案1】:

    通常情况下,我在 0.01 到 0.5 之类的随机范围内初始化权重时效果很好。

    To 1:据我所知,输出层的本地错误通常是expectedOutput - currentOutput,因为这个简化的语句永远不会失败并且有足够的准确性。在此之后,对于全连接层,您使用反向传播来调整隐藏层的权重。看看 Yann Lecuns 的高效工作:Efficient Backprop

    To 2:为了防止输出层的输入为 1,因为隐藏层的总和太大并且 sigmoid 为大量的 epoch 提供 1,您可以做一个简单、简单、高效的 hack:总是将每个输出层神经元的输入除以父(隐藏)层中的神经元数量,因此在使用 sigmoid 传递函数之前,您的输入始终在区间 [-1.0, 1.0] 中。在大多数情况下,这个技巧大大减少了训练网络所需的 epoch 数量。

    【讨论】:

      【解决方案2】:

      好的,它建议您随机初始化权重。通常,它建议您从 ((−1/√d),(1√d)) 范围内选择神经网络的初始权重,其中 d 是给定神经元的输入数。

      而且误差始终是实际输出-电流输出。您提到的公式与隐藏层权重调整中BPN算法的步骤之一有关。我建议减少模型中隐藏节点的数量。一般建议隐藏节点的数量少于输入的数量。

      sigmoid 函数非常适合您的任务。

      【讨论】:

      • 您能否详细说明error = output * (1 - output) * (target - output) 背后的原因。这将适用于什么时候?在我看来,拥有 sigmoid 激活函数是必要的,但我无法找到解释如何或为什么。
      猜你喜欢
      • 2016-02-21
      • 2020-08-14
      • 2021-02-27
      • 1970-01-01
      • 2016-09-08
      • 2013-06-22
      • 2014-07-05
      • 1970-01-01
      • 2021-04-12
      相关资源
      最近更新 更多