2

我正嘗試在CUDA中實現前饋神經網絡。 到目前爲止,我用Jeff Heaton's YouTube videos作爲指導來推斷算法並實現它們。 我並不清楚一件事:前饋ANN:計算來自前一層delta的delta節點

Heaton在他的Gradient Calculation視頻中解釋瞭如何獲得輸出神經元的節點deltaδ[i]。 然後,爲了計算δ[i],我必須在我之前的(隱藏層)中重用它作爲δ[k]。

然而,存在的當我有一個以上的節點增量,或用於層多於一個傳出的權重發生了什麼沒有提及我到層ķ。同樣,我對如何計算特定重量的梯度感到困惑;我是否使用節點增量或層的增量?

例如,如果我的輸出層有2個神經元會發生什麼?對於層k中的所有節點求和δ[k]嗎?

由希頓提供的公式:

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

顯示錶明δ[k]爲代表先前層(而不是僅僅輸出節點)的如圖所示的視頻@ 9:25' 。

事實上,YouTube視頻中的兩條評論也提出了同樣的問題,但沒有給出令人滿意的答覆。

據我明白,δ[k]的從先前/以下的層表示誤差ķ哪一層連接,而不是節點到當前節點在層連接到?

編輯

我讀了幾篇論文和教程/在線課程,而是一個似乎在一定程度上回答我的問題,可以found here。 具體而言,博客的作者使用的配方,相同的希頓用的一個,但他解釋說:

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]) 

在詞:

先前激活輸出乘以它們的邊緣 (權重)的總和,通過乙狀結腸衍生物放。

然後,對於每個出正在進行的重量瓦特[き]由相應 δ[K]相乘(例如,瓦特[き] * δ[κ])。將這些值相加,並與S形導數的結果相乘。

我還是想聽聽已經實施了前饋神經網絡的人,如果那是發生了什麼。

回答

3

你說得對。可能是最簡單的方法來正規化所述更新是:

enter image description here

和f'(X)是該激活函數的導數,X_I發送單元i和x_j的從接收單元j中的輸出。因此,換句話說,你總結了當前單元對以前的拜訪層(因此,回傳傳播)的所有連接的增量。

+0

非常感謝您的幫助! –