前馈ANN:从前一层delta

时间:2015-11-03 21:49:24

标签: algorithm neural-network backpropagation gradient-descent

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

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

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

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

Heaton提供的公式:

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

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

事实上,YouTube视频中的两条评论也提出了同样的问题,但没有给出满意的答复。

据我所知,δ[k]表示 i 连接到的上一层/下一层 k 的错误,而不是 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] )

用语言说:

  

先前激活输出的总和乘以其边缘   (权重),是通过S形导数。

     

然后,对于每个外出的重量 w [ki] 乘以相应的   δ[k] (例如, w [ki] * δ[κ] )。将这些值相加,并乘以S形导数的结果。

如果发生这种情况,我仍然希望听到已实施前馈神经网络的人的发言。

1 个答案:

答案 0 :(得分:3)

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

enter image description here

f'(x)是激活函数的导数,x_i是发送单元i的输出,x_j是接收单元j的输出。因此,在文字中,您将当前单位对先前访问图层的所有连接的增量求和(因此,返回传播)。