更新:更好地阐述问题。

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

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

A sample XOR neural network
(来源: 维基媒体网站)

我在用着 随机反向传播.

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

步骤1 计算每个输入实例的输出。
第2步 计算输出神经元(在我们的例子中只有一个)和目标值之间的误差:
Step 2
步骤3 我们使用步骤 2 中的误差来计算每个隐藏单元 h 的误差:
Step 3

“权重 kh”是隐藏单元 h 和输出单元 k 之间的权重,这很令人困惑,因为输入单元没有与输出单元关联的直接权重。盯着公式几个小时后,我开始思考求和的含义,并且我开始得出结论:连接到隐藏层神经元的每个输入神经元的权重乘以输出误差并求和。这是一个合乎逻辑的结论,但该公式似乎有点令人困惑,因为它清楚地表示了“权重 kh”(输出层 k 和隐藏层 h 之间)。

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

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

有帮助吗?

解决方案

您张贴在这里的教程其实这样做是错误。我双重检查它反对主教的两个标准书和我的两个工作实现的。我会指出下面确切位置。

要记住的重要一点是,你总是相对于一个单位或重量搜索的误差函数的导数。前者是增量,后者是你用什么来更新你的权重。

如果您想了解反向传播,你必须了解的链式法则。它在这里所有关于链式法则。如果你不知道它是怎么工作的,检查了在维基百科 - 它并不难。但是,只要你理解了推导,一切都属于地方。诺言! :)

?E /∂W可以通过链式法则组合成?E /∂o∂o/∂W。 ∂o/∂W很容易计算的,因为它只是相对于所述权重单元的激活/输出的衍生物。 ?E /∂o其实就是我们所说的增量。 (我假设E,O和W是向量/矩阵这里)

我们确实有他们的输出单元,因为这是我们可以计算出误差。 (主要是我们有归结为(t_k的增量误差函数 - o_k),例如用于线性输出和在壳体后勤输出交叉熵的情况下二次误差函数)

现在的问题是,我们怎样才能衍生品的内部单位?好吧,我们知道,一个单元的输出是他们的权重加权所有传入单位之和的传递函数的事后申请。所以o_k = F(SUM(w_kj * o_j,对于所有j))。

所以我们要做的是,对于派生o_k到o_j。由于delta_j =?E /∂o_j=?E /∂o_k∂o_k/∂o_j= delta_k∂o_k/ o_j。因此,考虑delta_k,我们可以计算出delta_j!

让我们做到这一点。 o_k = F(总和(w_kj * o_j,对于所有的j))=>∂o_k/∂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_kj

其他提示

我不知道你的问题是什么,但我居然通过教程去了自己,我可以向你保证,不是一个明显的错字等,没有什么不正确了。

我会作一个假设,你的问题是因为你弄糊涂了有关如何向传播的隐藏三角洲的。如果这确实是你的问题,那么请考虑

“ALT文本” 结果 <子>(来源: pandamatak.com

您可能正在困惑,作者是如何得出这个公式。这实际上是多元链式法则的直接应用。即,(其后的内容被从维基百科截取)

“假设是Z = F的每个参数(U,V)是这样的两变量函数为u = H(X,Y)和v = G(X,Y),并且这些功能都是可微然后链式法则将如下所示:

“替代文字”

“替代文字”

现在想象通过感应参数延伸的链式法则到

E(Z '<子> 1 ,Z'<子> 2 ,...,Z'<子>名词) 其中,z'<子>ķ是第k个输出层的输出预活化, 和z“<子>ķ(W <子>ジ),它是说,E是z的函数”和z”本身的瓦特<子>ジ(如果没有在第一<强对你有意义>认为非常仔细地约NN是如何设置。)申请直接推广到n个变量的链式法则:

δE(Z '<子> 1 ,Z'<子> 2 ,...,Z'<子>名词 / <子>ΔW<子>ジ =Σ<子>ķ δE / <子>ΔZ'<子>ķ ΔZ'<子>ķ / <子>ΔW<子>ジ

这是最重要的步骤,作者然后再次施加链式法则,总和内此时展开ΔZ'<子>ķ / <子>ΔW<子>ジ 术语,即

ΔZ '<子>ķ / <子>ΔW<子>ジ = ΔZ'<子>ķ / <子>ΔO<子>Ĵ ΔO<子>Ĵ / <子>ΔZ<子>Ĵ ΔZ<子>Ĵ / <子>ΔW<子>ジ

如果您有了解链式法则困难,你可能需要采取多元微积分课程,或者读一本教科书这样的部分。

好运。

我从步骤 3 的等式中读到的是:

  1. O_h = 该隐藏单元的最后一个输出(输入层上的O_h是实际输入值)
  2. w_kh = 该隐藏单元与下一层单元之间的连接权重(朝向输出)
  3. delta_k = 下一层单元的误差(朝向输出,与上一个项目符号相同的单元)

每个单元只有一个输出,但输出与下一层之间的每个链接都经过加权。所以输出是相同的,但在接收端,如果链接的权重不同,每个单元将收到不同的值。O_h 始终指的是该神经元最后一次迭代的值。错误不适用于输入层,因为根据定义,输入本身没有“错误”。

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

我相信这个方程是正确的,尽管有悖常理。可能令人困惑的是,在每个单元的前向传播中,我们必须考虑单元左侧的所有单元和链接(输入值),但对于误差传播(反向传播),必须考虑右侧的单元(输出)值)正在处理的单位。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top