【发布时间】: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] 表示从上一层/下一层 k 到 i 连接的层的误差,而不是 节点连接到层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