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)。
我正在尝试在 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)。