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

2021-08-14 13:48:12 字數 2211 閱讀 8991

乙個淺層神經網路示意圖:

如圖所示,表示乙個單隱層的網路結構。

這裡主要需要注意的是,層與層之間引數矩陣的規格大小:

隱藏層和輸出層之間

由上面我們可以總結出,在神經網路中,我們以相鄰兩層為觀測物件,前面一層作為輸入,後面一層作為輸出,兩層之間的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 以上,這樣的結果是有些讓人沮喪的。今天進過艱苦奮鬥,...