如上圖所示,該神經網路有三層。我們標記第一層(也就是輸入層)為a(
1),第一層與第二層連線權重為w(
1),然後第一層輸入與第一層權重的線性和為z(
1),第一層神經元個數為n(
1),並依次標記剩餘網路層。
可以看出,存在 z(
l)j=
∑i=1
n(l)
a(l)
i⋅w(
l)i,
j=a(
l)⊤w
(l)j
a(l+1)=
f(z(
l))
f(⋅)
是啟用函式。
對於多層神經網路,我們定義其代價函式為 j(
w,b)
=12n
∑i=i
n(yi
−h(x
i))2
其中(x
i,yi
) 是樣本集合,h(
⋅)是網路**函式,通常為了防止過擬合,需要在後面加上一項正則項,用來約束引數複雜度。
當網路**結果(h(
⋅))與樣本的ground truth(yi
)接近時,代價函式最小。換言之,我們要想使得**結果準確,那麼需要最小化代價函式j(
⋅)。 此時,利用梯度下降演算法,我們知道引數的更新公式如下所示: w=
w−α⋅
∂j(w
,b)∂
w b=
b−α⋅
∂j(w
,b)∂
b 那麼,對於上面的代價函式,假設網路一共有l+
1 層,那麼對於最後一層引數,其為w(
l) 和b
(l) ,有z(
l)=a
(l)⋅
w(l)
+b(l
) ,以及a(
l+1)
=f(z
(l))
,那麼 ∂j
(w,b
)∂w(
l)=∂
j∂h⋅
∂h∂z
(l)⋅
∂z(l
)∂w(
l)我們只考慮乙個訓練樣本的情況,即代價函式中n=
1 ,此時上面的三項分別為 ∂j
∂h=−
(y−h
(x))
, ∂h∂
z(l)
=f′(
z(l)
) , ∂z
(l)∂
w(l)
=a(l
) 那麼 ∂j(
w,b)
∂w(l
)=−(
y−h(
x))⋅
f′(z
(l))
⋅a(l
)=δ(
l+1)
⋅a(l
) 其中δ
l+1=
−(y−
h(x)
)⋅f′
(z(l
))=−
(y−a
(l+1
))⋅f
′(z(
l)) 稱為殘差項。
同理可以求得 ∂j
(w,b
)∂b(
l)=δ
(l+1
) 以上只是最後一層引數的更新公式,對於
l 層引數,其更新公式 ∂j
∂w(l
)=∂j
∂a(l
+1)⋅
∂a(l
+1)∂
z(l)
⋅∂z(
l)∂a
(l)⋅
∂a(l
)∂z(
l−1)
⋯∂a(
l+1)
∂z(l
)⋅∂z
(l)∂
w(l)
其中∂j∂
a(l+
1)⋅∂
a(l+
1)∂z
(l)=
δ(l+
1),且,每經過一層,殘差就多一項∂z
(i)∂
a(i)
⋅∂a(
i)z(
i−1)
=w(i
)⋅f′
(z(i
−1))
,所以定義l層的殘差為 δ(
l)=δ
(l+1
)⋅w(
l)⋅f
′(z(
l−1)
) 所以第i層的殘差為 δ(
i)=δ
(i+1
)⋅w(
i)⋅f
′(z(
i−1)
) 那麼上面第
l 層的權重更新公式為 ∂j
∂w(l
)=δ(
l+1)
⋅∂z(
l)∂w
(l)=
δ(l+
1)⋅a
(l)同理可得 ∂j
∂b(l
)=δ(
l+1)
這樣,每次更新引數w(
l)和b
(l) 時,需要事先根據之前的殘差計算出δ(
l+1)
即可。
以下是本文配套的python工程,實現了乙個多層神經網路,對mnist資料集進行訓練以及分類。
python專案位址
對於權重更新,有兩種方式,批量梯度下降演算法和隨機梯度下降演算法,所謂批量梯度下降演算法,就是一次計算出所有訓練集合的誤差,然後調整引數,這樣調整是全域性最優的,但是計算量大速度慢,適合訓練資料較小的情況。
另一種方式是隨機梯度下降演算法,就是每次計算出乙個或部分訓練樣本的殘差,然後調整引數使之收斂。這樣優點是收斂快,但是存在較大誤差,模型不準確,適合訓練集較大(可以多次執行來減小模型誤差)。
本文參考:
[1]ufldl
[2]neural networks and deep learning(michael nielsen)
人工神經網路 多層神經網路
模型原型 sklearn.neural network.mlpclassifier hidden layer sizes 100,activation relu algorithm adam alpha 0.0001,batch size auto learning rate constant le...
神經網路簡介
簡單介紹一下什麼是神經網路,以及其原理 這個感知器有3個input和乙個output,分別是x1 x2,x3,有乙個output。乙個感知器可以擁有多個input,如x1 x2,input和output的值都有乙個特點,就是只能是1或者0,也就是說x1 x2,只能取0或者1,而output也只能取0...
神經網路簡介
新手上路很多概念不清楚,本文作為記錄和筆記,簡單摘抄,列出關鍵概念,以便查閱,詳細內容移步原文 參考 如何自己從零實現乙個神經網路?量子位的回答 知乎 神經元 神經網路基本單元,獲得輸入,計算,產生輸出 權重 wx 偏置 b 啟用函式 使用的sigmoid,作用對無限制的輸入轉換為可 形式輸出,從而...