Computer science 理解神经网络反向传播

Computer science 理解神经网络反向传播,computer-science,machine-learning,neural-network,backpropagation,Computer Science,Machine Learning,Neural Network,Backpropagation,更新:更好地表述该问题 我试图以XOR神经网络为例来理解反向传播算法。在这种情况下,有2个输入神经元+1偏置,2个隐藏层神经元+1偏置,1个输出神经元 A B A XOR B 1 1 -1 1 -1 1 -1 1 1 -1 -1 -1 (来源:) 我正在使用 在阅读了更多的内容后,我发现输出单元的错误会传播到隐藏层。。。起初这是令人困惑的,因为当你到达神经网络的输入层时,每个神经元都会从隐藏层的两个神经元得到一个误差调整。特别是,一开始很难

更新:更好地表述该问题

我试图以XOR神经网络为例来理解反向传播算法。在这种情况下,有2个输入神经元+1偏置,2个隐藏层神经元+1偏置,1个输出神经元

 A   B  A XOR B
 1    1   -1
 1   -1    1
-1    1    1
-1   -1   -1

(来源:)

我正在使用

在阅读了更多的内容后,我发现输出单元的错误会传播到隐藏层。。。起初这是令人困惑的,因为当你到达神经网络的输入层时,每个神经元都会从隐藏层的两个神经元得到一个误差调整。特别是,一开始很难掌握误差的分布方式

步骤1计算每个输入实例的输出。
步骤2计算输出神经元(在我们的例子中只有一个)和目标值之间的误差:

步骤3我们使用步骤2中的误差来计算每个隐藏单元h的误差:

“权重kh”是隐藏单元h和输出单元k之间的权重,这很容易混淆,因为输入单元没有与输出单元相关联的直接权重。在盯着公式看了几个小时后,我开始思考求和意味着什么,我开始得出结论,每个连接到隐层神经元的输入神经元的权重乘以输出误差并求和。这是一个合乎逻辑的结论,但公式似乎有点混乱,因为它清楚地表明了“权重kh”(在输出层k和隐藏层h之间)

我对这里的一切理解正确吗?有人能证实这一点吗

输入层的O(h)是多少?我的理解是每个输入节点有两个输出:一个进入隐藏层的第一个节点,另一个进入第二个节点隐藏层。两个输出中的哪一个应该插入公式的
O(h)*(1-O(h))
部分?

我从步骤3的方程式中了解到:

  • O_h=此隐藏单元的最后输出(输入层上的O_h为实际输入值)
  • w_kh=此隐藏单元和下一层单元之间的连接重量(朝向输出)
  • delta_k=下一层的单位误差(朝向输出,与上一个项目符号的单位相同)
  • 每个单元只有一个输出,但是输出和下一层之间的每个链接都是加权的。因此,输出是相同的,但在接收端,如果链路的重量不同,每个单元将接收不同的值。O_h总是指最后一次迭代中该神经元的值。错误不适用于输入层,因为根据定义,输入本身没有“错误”

    误差需要从输出端开始逐层计算,因为我们需要层N+1的误差值来计算层N。你是对的,反向传播中输入和输出之间没有直接联系


    我相信这个等式是正确的,如果违反直觉的话。可能令人困惑的是,在每个单元的前向传播中,我们必须考虑单元左边的所有单元和链接(输入值),但是对于误差传播(反向传播),必须考虑被处理单元的右边(输出值)的单位。 你在这里发布的教程实际上是做错了。我根据Bishop的两本标准书和我的两个工作实现对它进行了双重检查。我将在下面指出确切的位置

    需要记住的一件重要事情是,您总是在搜索误差函数相对于单位或重量的导数。前者是增量,后者是用来更新权重的

    如果你想了解反向传播,你必须了解链规则。这里都是关于链式规则的。如果你不知道它到底是如何工作的,去维基百科看看吧——这并不难。但是一旦你理解了推导,一切都会就绪。承诺!:)

    ∂E/∂W可以组成∂E/∂o∂o/∂通过链式法则。∂o/∂W很容易计算,因为它只是一个单位的激活/输出相对于权重的导数。∂E/∂o实际上就是我们所说的三角洲。(我假设E、o和W在这里是向量/矩阵)

    我们有它们作为输出单位,因为这是我们可以计算误差的地方。(大多数情况下,我们有一个误差函数,它可以归结为δ(t_k-o_k),例如线性输出的二次误差函数和逻辑输出的交叉熵。)

    现在的问题是,我们如何得到内部单位的导数?我们知道,一个单位的输出是所有输入单位的总和,通过它们的权重加权,然后应用传递函数。所以o_k=f(总和(w_kj*o_j,对于所有j))

    所以我们要做的是,导出关于o_j的o_k。因为delta_j=∂E/∂o_j=∂E/∂好的∂好的/∂o_j=δk∂好的,好的。给定delta_k,我们可以计算delta_j

    让我们这样做。o_k=f(总和(w_kj*o_j,代表所有j))=>∂好的/∂o_j=f’(总和(w_kj*o_j,代表所有j))*w_kj=f’(z_k)*w_kj


    对于S形传递函数的情况,这变成z_k(1-z_k)*w_kj。(这是教程中的错误,作者说o_k(1-o_k)*w_k!

    我不确定你的问题是什么,但我实际上自己也看过了教程,我可以向你保证,除了一个明显的打字错误之外,它没有任何错误

    我将假设您的问题是因为您对反向传播隐藏增量是如何导出的感到困惑。如果这确实是你的问题,那么请考虑


    (来源:)

    你可能对作者是如何推导这个方程式感到困惑。这实际上是