多层神经网络的反向传播
Back propogation on multi layered neural networks
我在不使用任何库或 Accord.Net 的情况下使用 c# 制作神经网络系统。但是我一直在研究如何反向传播我的错误。我是否必须包括我已经传播到下一层的所有层,或者只有前一层进入等式?
编辑以获取更多信息:
我的网络结构主要是动态的。它创建了一个神经网络,用户输入有多少层和每层的节点数。它具有根据使用的数据集创建的输入和输出层。它可以在层上使用线性、sigmoid、tanh 或 relu 激活函数,并且您可以在每一层混合匹配它们。
我确实了解反向传播的工作原理及其用途。但是我看到的每个例子都只在 3 个分层结构上使用它,其中有 1 个输入层、1 个隐藏层和 1 个输出层。他们计算输出层误差并更新其权重。然后他们计算包含输出层的隐藏层误差。
我的问题从这里开始。它们不显示好像只包含隐藏层之前的层(考虑从右到左进行反向传播),或者直到输出层的所有层都包含在误差方程中。
可视化
输入层--->隐藏层1--->隐藏层2--->输出层
在这个例子中,当我计算隐藏层1的误差和权重更新时,我只包括隐藏层2,还是隐藏层2 + 输出层?
我想知道你所说的 "include" 是什么意思。反向传播应该计算梯度。梯度是每个变量对损失函数的导数(你称之为误差,但这个术语不太精确。它不是误差,它是斜率)。计算完梯度后,所有参数("weights")都会立即更新。
计算梯度本质上是数值微分。如果你有a * b = c
,你有所有a
、b
和c
和gradient(c)
,那么很容易计算a
的梯度还有 b
(gradient(a) = b * gradient(c)
)。
所以你把渐变一层一层往后推。对于每一层,您只需要下一层的渐变。 TensorFlow 等框架会自动为您执行此操作。该技术适用于任何计算图,而不仅仅是您描述的结构的神经网络。首先了解沿计算图的数值微分的一般概念,可以很容易地理解神经网络的特殊情况。
我在不使用任何库或 Accord.Net 的情况下使用 c# 制作神经网络系统。但是我一直在研究如何反向传播我的错误。我是否必须包括我已经传播到下一层的所有层,或者只有前一层进入等式?
编辑以获取更多信息:
我的网络结构主要是动态的。它创建了一个神经网络,用户输入有多少层和每层的节点数。它具有根据使用的数据集创建的输入和输出层。它可以在层上使用线性、sigmoid、tanh 或 relu 激活函数,并且您可以在每一层混合匹配它们。
我确实了解反向传播的工作原理及其用途。但是我看到的每个例子都只在 3 个分层结构上使用它,其中有 1 个输入层、1 个隐藏层和 1 个输出层。他们计算输出层误差并更新其权重。然后他们计算包含输出层的隐藏层误差。
我的问题从这里开始。它们不显示好像只包含隐藏层之前的层(考虑从右到左进行反向传播),或者直到输出层的所有层都包含在误差方程中。
可视化
输入层--->隐藏层1--->隐藏层2--->输出层
在这个例子中,当我计算隐藏层1的误差和权重更新时,我只包括隐藏层2,还是隐藏层2 + 输出层?
我想知道你所说的 "include" 是什么意思。反向传播应该计算梯度。梯度是每个变量对损失函数的导数(你称之为误差,但这个术语不太精确。它不是误差,它是斜率)。计算完梯度后,所有参数("weights")都会立即更新。
计算梯度本质上是数值微分。如果你有a * b = c
,你有所有a
、b
和c
和gradient(c)
,那么很容易计算a
的梯度还有 b
(gradient(a) = b * gradient(c)
)。
所以你把渐变一层一层往后推。对于每一层,您只需要下一层的渐变。 TensorFlow 等框架会自动为您执行此操作。该技术适用于任何计算图,而不仅仅是您描述的结构的神经网络。首先了解沿计算图的数值微分的一般概念,可以很容易地理解神经网络的特殊情况。