我正嘗試在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形導數的結果相乘。
我還是想聽聽已經實施了前饋神經網絡的人,如果那是發生了什麼。
非常感謝您的幫助! –