【问题标题】:Back propogation on multi layered neural networks多层神经网络的反向传播
【发布时间】:2018-06-20 09:48:20
【问题描述】:

我正在用 c# 制作一个神经网络系统,而不使用任何库或 Accord.Net。但我坚持如何反向传播我的错误。我必须包括我已经传播到下一层的所有层,还是只有前一层进入方程?

编辑以获取更多信息:

我的网络结构大多是动态的。它使用用户输入创建一个神经网络,其中包含每层的层数和节点数。它具有基于使用的数据集创建的输入和输出层。它可以在层上使用线性、sigmoid、tanh 或 relu 激活函数,并且您可以在每层混合匹配它们。

我确实了解反向传播的工作原理及其用途。但是我看到的每个例子都只在 3 个分层结构上使用它,1 个输入层,1 个隐藏层和 1 个输出层。他们计算输出层误差并更新其权重。然后他们计算包含输出层的隐藏层误差。

我的问题从这里开始。它们没有显示好像只包括隐藏层之前的层(认为你从右到左进行反向传播),或者直到输出层的所有层都包含在误差方程中。

用于可视化

输入层 ---> 隐藏层 1 ---> 隐藏层 2 ---> 输出层

在这个例子中,当我计算隐藏层1的误差和权重更新时,我是只包括隐藏层2,还是隐藏层2+输出层?

【问题讨论】:

    标签: c# neural-network deep-learning backpropagation


    【解决方案1】:

    我想知道您所说的“包含”是什么意思。反向传播应该计算梯度。梯度是每个变量对损失函数的导数(您称其为误差,但该术语并不十分精确。这不是误差,而是斜率)。计算梯度后,所有参数(“权重”)都会立即更新。

    计算梯度本质上是数值微分。如果你有a * b = c,你有所有abcgradient(c),那么很容易计算ab的梯度(gradient(a) = b * gradient(c))。

    所以你一层一层地向后推动渐变。对于每一层,您只需要下一层的渐变。 TensorFlow 等框架会自动为您执行此操作。该技术适用于任何计算图,而不仅仅是您描述的结构的神经网络。首先了解沿计算图的数值微分的一般概念可以很容易地理解神经网络的特殊情况。

    【讨论】:

    • 我的主管禁止我为这个项目使用任何框架或库。所以我必须自己编写所有算法和逻辑。这就是为什么我在这个话题上挣扎。你能再扩展一下吗?当我计算输出的误差和梯度时,我应该如何使用它们在更深层传播?
    • 逐层下推渐变。您只需要下一层的梯度即可计算上一层。如果您想要完整的描述,请查找教程。在这里,您需要就具体问题提出尖锐的问题。
    • 我最近亲手写了一个神经网络。我能够理解计算的方式是考虑 TensorFlow 会做什么。反向计算每个操作的梯度。 NN 层是 output = activationFunction(inputs * weights + biases)。所以+ (gradient(inputs * weights + biases)) 的梯度是,例如,activationFunction'(inputs * weights + biases) * gradient(output),如果我没记错的话。然后,您再次通过+* 进一步推动该渐变。
    • 我在学习 NN 教程中的数学公式时遇到了麻烦,但这种按操作视图进行的操作对我有很大帮助。我认为数学公式是解释神经网络的一种可怕方式。直觉是如此简单,数学只是让外行人模糊不清。
    • 先生,您是救生员。这是我遇到的确切问题。我对这些公式一无所知,但这个类比让我明白了一切。非常感谢^_^。
    猜你喜欢
    • 2015-03-03
    • 2012-02-21
    • 2011-01-05
    • 1970-01-01
    • 1970-01-01
    • 2018-05-17
    • 2013-04-26
    • 2016-09-19
    相关资源
    最近更新 更多