多层神经网络上的反向传播



我正在用c#制作一个神经网络系统,而不使用任何库或 Accord.Net。但是我被困在如何支持传播我的错误上。我是否必须包含我已经传播到下一层的所有层,或者只有前一层进入等式?

编辑以获取更多信息:

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

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

我的问题从这里开始。它们不会显示好像只包含隐藏层之前的层(当您从右到左进行反向传播时思考(或直到输出层的所有层都包含在误差方程中。

用于可视化

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

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

我想知道你说的"包括"是什么意思。反向传播应该计算梯度。梯度是每个变量相对于损失函数的导数(你称之为误差,但该项并不十分精确。这不是错误,而是斜坡(。计算梯度后,所有参数("权重"(将立即更新。

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

所以你逐层向后推梯度。对于每一层,你只需要下一层的渐变。像TensorFlow这样的框架会自动为你做到这一点。该技术适用于任何计算图,而不仅仅是您描述的结构的神经网络。首先,理解计算图上的数值微分的一般概念,可以很容易地理解神经网络的特殊情况。

最新更新