乙個淺層神經網路示意圖:
如圖所示,表示乙個單隱層的網路結構。
這裡主要需要注意的是,層與層之間引數矩陣的規格大小:
隱藏層和輸出層之間
由上面我們可以總結出,在神經網路中,我們以相鄰兩層為觀測物件,前面一層作為輸入,後面一層作為輸出,兩層之間的w引數矩陣大小為 (n
out,
nin)
,b引數矩陣大小為 (n
out,
1),這裡是作為 z=
wx+b
的線性關係來說明的,在神經網路中, w[
i]=w
t 。
在logistic regression中,一般我們都會用 (n
in,n
out)
來表示引數大小,計算使用的公式為: z=
wtx+
b ,注意這兩者的區別。
除輸入層之外每層的計算輸出可由下圖總結出:
其中,每個結點都對應這兩個部分的運算,z運算和a運算。 在程式設計中,我們使用向量化去計算神經網路的輸出:
在對應圖中的神經網路結構,我們只用python**去實現右邊的四個公式即可實現神經網路的輸出計算。
假定在m個訓練樣本的神經網路中,計算神經網路的輸出,用向量化的方法去實現可以避免在程式中使用for迴圈,提高計算的速度。
下面是實現向量化的解釋:
由圖可以看出,在m個訓練樣本中,每次計算都是在重複相同的過程,均得到同樣大小和結構的輸出,所以利用向量化的思想將單個樣本合併到乙個矩陣中,其大小為 (x_,m) ,其中 x_ 表示每個樣本輸入網路的神經元個數,也可以認為是單個樣本的特徵數,m表示訓練樣本的個數。
通過向量化,可以更加便捷快速地實現神經網路的計算。
幾種不同的啟用函式 g(x) :
=11+
e−z
導數: a′
=a(1
−a)
a=ez−e
−zez
+e−z
導數: a′
=1−a
2
a=max(0,
z)導數:a′
=⎧⎩⎨
1,0,
if z
> 0
if z
< 0
a=max(
0.01z,
z)導數:a′
=⎧⎩⎨
1,0.01
,if
z> 0
if z
< 0
sigmoid函式和tanh函式比較:
然而sigmoid和tanh函式在當 |z| 很大的時候,梯度會很小,在依據梯度的演算法中,更新在後期會變得很慢。在實際應用中,要使 |z| 盡可能的落在0值附近。
relu彌補了前兩者的缺陷,當 z>0 時,梯度始終為1,從而提高神經網路基於梯度演算法的運算速度。然而當 z<0 時,梯度一直為0,但是實際的運用中,該缺陷的影響不是很大。
leaky relu保證在 z<0 的時候,梯度仍然不為0。
在選擇啟用函式的時候,如果在不知道該選什麼的時候就選擇relu,當然也沒有固定答案,要依據實際問題在交叉驗證集合中進行驗證分析。
以本節中的淺層神經網路為例,我們給出神經網路的梯度下降法的公式。
下面為該例子的神經網路反向梯度下降公式(左)和其**向量化(右):
如果在初始時,兩個隱藏神經元的引數設定為相同的大小,那麼兩個隱藏神經元對輸出單元的影響也是相同的,通過反向梯度下降去進行計算的時候,會得到同樣的梯度大小,所以在經過多次迭代後,兩個隱藏層單位仍然是對稱的。無論設定多少個隱藏單元,其最終的影響都是相同的,那麼多個隱藏神經元就沒有了意義。
在初始化的時候, w 引數要進行隨機初始化, b 則不存在對稱性的問題它可以設定為0。 以2個輸入,2個隱藏神經元為例:
w = np.random
.rand((2,2))* 0.01
b = np.zero((2,1))
這裡我們將w的值乘以0.01是為了盡可能使得權重w初始化為較小的值,這是因為如果使用sigmoid函式或者tanh函式作為啟用函式時,w比較小,則 z = wx+b 所得的值也比較小,處在0的附近,0點區域的附近梯度較大,能夠大大提高演算法的更新速度。而如果w設定的太大的話,得到的梯度較小,訓練過程因此會變得很慢。
relu和leaky relu作為啟用函式時,不存在這種問題,因為在大於0的時候,梯度均為1。
[1] 吳恩達網路雲課堂 deeplearning.ai 課程
[2]
神經網路和深度學習(二)淺層神經網路
1 計算神經網路的輸出 正向傳播 矩陣表示 向量化 2 多個樣本的向量化 正向傳播 3 啟用函式 1 sigmoid函式僅用於二分分類的情況,較少使用 2 tanh函式絕大多數情況下優於sigmoid函式 3 relu函式是預設的常用啟用函式 4 leaking relu 帶洩露的relu函式 4 ...
深度學習 淺層神經網路 3
目錄 一 神經網路表示 神經網路層數 隱藏數 輸出層 1 輸入不算是一層,可以說是第0層 第i層的值 w 1 可以用來表示是第1層的引數 每一層中有多個神經元,然後它們可以做相同的事,比如第一層中有3個引數,用下標來區分 二 啟用函式 sigmoid a frac 只用於二元分類輸出層 缺點 不是以...
神經網路學習(十)淺層BP神經網路總結
系列部落格是博主學習神經網路中相關的筆記和一些個人理解,僅為作者記錄筆記之用,不免有很多細節不對之處。我的這一階段目標是在學習完淺層bp神經網路的相關知識時,可以將手寫字的識別率達到98 在前面的幾次實驗中,mnist手寫字的識別率始終未達到98 以上,這樣的結果是有些讓人沮喪的。今天進過艱苦奮鬥,...