淺層神經網路 2

2021-08-16 17:01:22 字數 2459 閱讀 7522

搭建乙個神經網路時,你可以選擇隱藏層中或者輸出層中使用什麼啟用函式(actuation function),到目前為止,我們一直使用的是sigmoid函式,但其他函式效果會更好。

在實際訓練中,有個函式表現總是比sigmoid好,叫tanh(雙曲正切函式),它的輸出是(-1,1),從數學上,它其實是sigmoid函式的平移。

z)但是這兩個函式在z很大或者很小的時候,導數接近與0,這會拖慢梯度下降演算法。

目前最受歡迎的修正線性單元relu(rectified linear unit),它在z大於0的時候導數一直為1.在小於0的情況下,導數為0,但是實際運算中,z同時為0的概率很低。

,z)還有乙個帶洩露的relu(leaky relu),這通常比relu效果好,不過實際使用的頻率並不高。

在選擇啟用函式時有個經驗法則:如果輸出是0或者1或者二分類問題,輸出層啟用函式可以選擇sigmoid函式,其餘全部為relu。實際使用relu或者leaky relu,神經網路收斂會快的多。

為什麼啟用函式都要使用非線性函式呢?事實證明,要讓你的神經網路計算出有趣的函式,你必須使用非線性函式。因為你如果採用了線性啟用函式,那麼你的**輸出只不過是輸入的線性組合

當你對神經網路進行反向傳播時,你需要計算啟用函式的斜率或者導數。利用微積分我們可以輕易的計算常見啟用函式的導數。下面給出啟用函式的導數公式:

sigmoid function:dz

=a(1

−a) dz=

a(1−

a)tanh function: dz

=1−a

2 dz=

1−a2

relu function:dz

=1if

z>0,

dz=0

ifz<

0 dz=

1ifz

>0,

dz=0

ifz<

0leaky dunction dz

=1if

z>0,

dz=0.

oz,i

fz<

0 dz=

1ifz

>0,

dz=0.

oz,i

fz<

0, 這裡我們取leaky relu = max(0.01z, z)

對於2層的神經網路,我們有:

引數:w[1

],b[

1],w

[2],

b[2]

w [1

],b[

1],w

[2],

b[2]

成本函式:j(

w[1]

,b[1

],w[

2],b

[2])

j (w

[1],

b[1]

,w[2

],b[

2])那麼梯度下降法就可以寫成:

repeat

這樣,我們就實現了一次迭代。每個導數的具體實現只需要根據鏈式求導方法就可以計算出來。最後結果如下:

對於神經網路的權重不能同時初始化為0,因為這樣會發現,所有的節點都是完全對稱的,每個節點都在計算相同的函式。這個問題的解決方案是隨機初始化所有引數,如w[

1]]=

np.r

ando

m.ra

ndn(

(2,2

))∗0.01

w [1

]]=n

p.ra

ndom

.ran

dn((

2,2)

)∗0.01

,即將其初始化為高斯分布的很小的權重。b其實沒有具備的破壞對稱性問題,故它可以初始化為0。之所以後面*0.01是因為如果啟用函式為sigmoid或者tanh,會減小收斂速度。

神經網路和深度學習 淺層神經網路

乙個淺層神經網路示意圖 如圖所示,表示乙個單隱層的網路結構。這裡主要需要注意的是,層與層之間引數矩陣的規格大小 隱藏層和輸出層之間 由上面我們可以總結出,在神經網路中,我們以相鄰兩層為觀測物件,前面一層作為輸入,後面一層作為輸出,兩層之間的w引數矩陣大小為 n out,nin b引數矩陣大小為 n ...

神經網路學習(十)淺層BP神經網路總結

系列部落格是博主學習神經網路中相關的筆記和一些個人理解,僅為作者記錄筆記之用,不免有很多細節不對之處。我的這一階段目標是在學習完淺層bp神經網路的相關知識時,可以將手寫字的識別率達到98 在前面的幾次實驗中,mnist手寫字的識別率始終未達到98 以上,這樣的結果是有些讓人沮喪的。今天進過艱苦奮鬥,...

神經網路和深度學習(二)淺層神經網路

1 計算神經網路的輸出 正向傳播 矩陣表示 向量化 2 多個樣本的向量化 正向傳播 3 啟用函式 1 sigmoid函式僅用於二分分類的情況,較少使用 2 tanh函式絕大多數情況下優於sigmoid函式 3 relu函式是預設的常用啟用函式 4 leaking relu 帶洩露的relu函式 4 ...