三、淺層神經網路

鹤比纷恆红發表於2024-09-16

1、神經網路概覽

  什麼是神經網路?如下圖:

三、淺層神經網路

  神經網路的結構與邏輯迴歸類似,只是神經網路的層數比邏輯迴歸多一層,多出來的中間那層稱為隱藏層或中間層。從計算上來看,神經網路的正向傳播和反向傳播比logistic迴歸多了一次重複的計算。引入新的標籤:方括號上標[i]表示當前所處的層數;圓括號上標(i)表示第i個樣本。

三、淺層神經網路

2、神經網路表示

  下面我們講解只有一個隱藏層的神經網路,這是一張神經網路結構圖:

三、淺層神經網路
  在一個神經網路中,當你使用監督學習訓練它時,訓練集包含了輸入x,還有目標輸出y。“隱藏層”的含義是在訓練集中這些中間節點的真實數值我們是不知道的,看不到它們的數值。

  現在把隱藏層輸出記為a^[1],上標從0開始。用下標表示第幾個神經元,注意下標從1開始。例如a^[1]_1表示隱藏層第1個神經元(節點)。在python中,隱藏層有4個神經元就可以寫成下面矩陣的形式:

  三、淺層神經網路

  當我們在計算網路的層數時,不算輸入層。關於隱藏層對應的權重W^[i]和常數項b^[i]維度問題,總結:第i層的權重W^[i]維度的行等於i層神經元的個數,列等於i-1層神經元的個數;第i層常數項b^[i]的行等於第i層神經元的個數,列始終為1。

3、計算神經網路的輸出

  兩層神經網路可以看成是邏輯迴歸再重複計算一次。如下圖所示,邏輯迴歸的正向計算可以分解成計算z和a的兩部分:

三、淺層神經網路

  下面的圓圈代表了迴歸計算的兩個步驟,神經網路重複計算這些步驟很多次:

三、淺層神經網路

  對於兩層神經網路,從輸入層到隱藏層對應一次邏輯迴歸運算;從隱藏層到輸出層對應一次邏輯迴歸運算。每層計算時,要注意對應的上標和下標,一般我們記上標方括號表示layer,下標表示第幾個神經元。例如a^[l]_i表示第l層的第i個神經元。注意,i從1開始,l從0開始。

  下面,我們將從輸入層到輸出層的計算公式列出來:(共4個隱藏單元)
三、淺層神經網路
  然後,從隱藏層到輸出層的計算公式為: 
三、淺層神經網路

  上述每個節點的計算都對應著一次邏輯運算的過程,分別由計算z和a兩部分組成。

4、啟用函式

  在隱藏層和輸出層可以選擇啟用函式,目前為止我們用的是sigma啟用函式,但有時其他函式效果要好的多。我們看一些可供選擇的函式。不同的啟用函式有各自的優點。

sigmoid函式-(0,1)

三、淺層神經網路

tanh函式(雙曲正切函式)-(-1,1)

  三、淺層神經網路

    • 此啟用函式的平均值更接近0,類似資料中心化的效果,使資料平均值接近0,這實際讓下一層的學習更方便一點。

    • sigmoid函式和tanh函式都有一個缺點,如果z非常大或非常小時,那麼導數的梯度(函式的斜率)可能就很小,接近0,這樣會拖慢梯度下降演算法。

ReLU函式(修正線性單元)-機器學習最受歡迎的工具

  三、淺層神經網路

    • 在選擇啟用函式時有一些經驗法則,如果你的輸出是0和1(二元分類),那麼sigmoid函式很適合作為輸出層的啟用函式,然後其他所有單元都用ReLU函式,這是今天大多數人都在用的。

    • ReLU的缺點是當z為負時,導數為0,但還有一個版本,帶洩露的ReLU。

Leaky ReLU函式(洩露的ReLU)

  三、淺層神經網路

    • 為什麼是0.01,可以把它設成學習函式的另一個引數,根據實際效果進行改動

總結:

  1. sigmoid函式除非用於在二元分類的輸出層,不然絕對不要用,或者幾乎從來不用。

  2. tanh函式幾乎在所有場合都更優越。

  3. 最常用的預設啟用函式是ReLU,如果你不確定用哪個,你就用這個,或者也可以試試帶洩漏的ReLU。

  深度學習的一個特點是在建立神經網路時經常有很多不同的選擇,比如隱藏單元數、啟用函式,還有如何初始化權重。當不確定哪種啟用函式最有效時,可以先試試在保留交叉驗證資料集上或者開發集上跑,看看哪個引數效果好,就用哪個。

5、隨機初始化

  當你訓練神經網路時,隨機初始化權重很重要,對於logistic迴歸,可以將群組初始化為零,但如果神經網路的各引數陣列全部初始化為0,再使用梯度下降演算法,那會完全無效

  一般做法是將W進行隨機初始化(b可初始化為零)。python裡可以使用如下語句進行W和b的初始化:

W_1 = np.random.randn((2,2))*0.01 #隨機初始化 
b_1 = np.zero((2,1)) 
W_2 = np.random.randn((1,2))*0.01 
b_2 = 0

# 0.01怎麼來的?實際上我們通常把權重矩陣初始化成非常小非常小的隨機值,因為如果使用tanh函式或sigmoid啟用函式,
# 權重太大是計算出來的值可能落在平緩部分,梯度的斜率非常小,意味著梯度下降法會非常慢,學習過程也會非常慢。

  

相關文章