Feed Forward ANN:从前一层delta计算delta节点

Feed Forward ANN: calculating delta node from previous layer delta

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

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

但是,没有提到当我有多个节点增量,或者层i[=53 有多个输出权重时会发生什么=]到层k。同样,我对如何计算特定权重的梯度感到困惑;我应该使用节点增量还是图层增量?

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

希顿提供的公式:

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

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

其实那个YouTube视频里有两条评论也问了同样的事情,但是都没有给出满意的答复。

据我理解,δ[k]表示从previous/following层k到第i[=53=层的误差] 连接到,而不是层 i 中当前节点连接到的 node?

编辑

我已经阅读了几篇论文并在网上 tutorials/lessons,但似乎能在一定程度上回答我的问题的可能是 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] )

换言之:

The Sum of the previous activation outputs multiplied by their edges (weights), is put through the sigmoid derivative.

Then for each out-going weight w[ki] is multiplied by the respective δ[k] (e.g., the w[ki] * δ[κ]). Those values are summed, and multiplied with the result of the sigmoid derivative.

我仍然想听听已经实现了前馈神经网络的人的意见,如果是这样的话。

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

其中 f'(x) 是激活函数的导数,x_i 发送单元 i 的输出和 x_j 来自接收单元 j 的输出。因此,换句话说,您将当前单元与 previously 访问层的所有连接的增量相加(因此,backpropagation)。