【问题标题】:Feed Forward ANN: calculating delta node from previous layer delta前馈 ANN:从上一层 delta 计算 delta 节点
【发布时间】:2016-02-04 05:34:42
【问题描述】:

我正在尝试在 CUDA 中实现前馈神经网络。 到目前为止,我使用Jeff Heaton's YouTube videos 作为指导来推断算法并实现它们。 我不清楚一件事:

Heaton 在他的 Gradient Calculation 视频中解释了如何获取输出神经元的节点 delta δ[i]。 然后我必须在我之前的(隐藏层)中将它重用为 δ[k] 以计算 δ[i]。

但是,没有提及当我有多个节点增量,或者层 i 到层 k 的多个传出权重时会发生什么。同样,我如何计算特定重量的梯度也令人困惑;我是使用节点增量还是层的增量?

例如,如果我的输出层有 2 个神经元会怎样?我是否对层 k 中的所有节点的 δ[k] 求和?

Heaton 提供的公式:

f'( Sum (weight[i] * input[i] ) ) * Σ w[ki]  * δ[k]

似乎表明 δ[k] 代表前一层(而不仅仅是输出节点),如视频 @ 9:25' 中所示。

事实上,该 YouTube 视频中的两个 cmet 也问了同样的问题,但没有得到满意的答复。

据我了解,δ[k] 表示从上一层/下一层 ki 连接的层的误差,而不是 节点连接到层i中的当前节点?

编辑

我已经在线阅读了一些论文和教程/课程,但似乎在某种程度上回答了我的问题的那一篇可以是found here。 具体来说,博客作者使用的公式与 Heaton 使用的相同,但他解释说:

HLN = Hidden Layer Neuron, 
LLN = Last Layer Neuron,
aO=actualOUTPUT,
dE=deltaError


HLN.dE = (HLN.aO) x (1-HLN.aO) x (Sum of   [LLN.dE   x   LLN to HLN connection weight])

这似乎暗示公式实际上是:

Si = Σ (w[ji] * a[j])
δ[i] = f'( Si ) * Σ( w[ki]  * δ[k] )

言辞:

前一个激活输出的总和乘以它们的边 (权重),通过 sigmoid 导数。

然后对于每个传出的权重 w[ki] 乘以各自的 δ[k](例如,w[ki] * δ[κ])。将这些值相加,然后乘以 sigmoid 导数的结果。

如果发生这种情况,我仍然想听听实施前馈神经网络的人的意见。

【问题讨论】:

    标签: algorithm neural-network backpropagation gradient-descent


    【解决方案1】:

    你是对的。正式化更新的最简单方法可能是:

    f'(x) 是激活函数的导数,x_i 是发送单元 i 的输出,x_j 是接收单元 j 的输出。因此,换句话说,您将当前单元与先前访问层的所有连接的增量相加(因此,反向传播)。

    【讨论】:

    • 非常感谢您的帮助!
    • 为什么它是 f'(xj) 而不是 f'(zj) 而 zj 是节点 j 的传入输入的加权和?
    • @Kie 上面的形式化(我在 5 年前写的)绝对违反了今天的变量命名标准,但它应该意味着你所说的,即“接收单元的输出(!) x_j" = z_j = sum w_ij * x_i.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-16
    • 2021-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-03
    • 1970-01-01
    相关资源
    最近更新 更多