1. 程式人生 > >吳恩達深度學習筆記3-Course1-Week3【淺層神經網路】

吳恩達深度學習筆記3-Course1-Week3【淺層神經網路】

淺層神經網路:

一、淺層神經網路的表示

本文中的淺層神經網路指的是 two layer nn 即 one input layer + one hidden layer + one output layer。通常計算神經網路的層數不包括 input layer 。
這裡寫圖片描述
notation:
上標 [l]:代表第l層,Input layer 為[0]
下標i:表示第i個unit,也可以看做第i行

二、神經網路的計算

每個unit都需要進行z和a的計算:
這裡寫圖片描述
各引數矩陣的維度:
W[1]: (4,3), b[1]: (4,1)
W[2]: (1,4), b[2]: (1,1)
即:W[I]:(nl,n(l-1)), b[l]:(nl,1), nl表示第l層的unit的個數
注意:這裡的 W[l] 表示的是已經對列堆起來的 W[l] 的轉置

三、前向傳播的向量化實現

single example的向量化:
這裡寫圖片描述
multiple example的向量化:
X:(nx,m),m個example,每個用一列表示
上標(i):代表第i個example,從1開始
這裡寫圖片描述

multiple example的向量化的理解:
主要就是弄清楚矩陣相乘的過程,就是重複進行single example的計算,然後把它們的結果列堆疊成矩陣。A/Z矩陣的每一行表示同一個unit的不同example的結果,每一列表示同一個example的不同unit的結果。
這裡寫圖片描述

四、啟用函式(activation function)

四種activation function:sigmoid; tanh; ReLU; Leaky ReLU


這裡寫圖片描述
特點及如何選擇:
sigmoid:求導=a(1-a),當|z|比較大的時候,梯度會很小,梯度下降慢。二分類的output layer 一般使用sigmoid
tanh:求導=1-a^2,當|z|比較大的時候,梯度會很小,梯度下降慢。正常比sigmoid好,因為取值為(-1,1)起到歸一化的作用均值為0。
ReLU:當z>0時,梯度始終為1,梯度下降塊。z<0時,梯度為0,實際使用中影響不大。最常用,首選。
Leaky ReLU:相比ReLU修正了z<0時,梯度為0的缺點。

正常選ReLU。如果不知道該選那個,可以一個一個試,在交叉驗證集中評估,找出結果最好的那一個。

為什麼要使用啟用函式:


如果不使用啟用函式或者使用線性啟用函式。兩個線性函式的組合仍然是線性函式,隱藏神經單元就不起作用了。有時候output layer不使用啟用函式,如房價的預測。
**這裡寫圖片描述**

五、神經網路的梯度下降

計算公式:左邊為single example,右邊為multiple example
這裡寫圖片描述

六、隨機初始化

如果在初始時,W,b都設定一樣,那麼WX+b都一樣,通過梯度下降去進行計算dw,得到梯度大小也相等,不管進行多少次迭代,每個隱藏層單元仍然是對稱的。無論設定多少個隱藏單元,其最終的影響都是相同的,那麼設定多個隱藏神經元只是重複計算,沒有作用。

隨機初始化程式碼:

W[1] = np.random.rand((4,3))* 0.01
b[1] = np.zero((4,1))

W的值乘以0.01(不是固定的)是為了使W初始化為較小的值,這是因為如果使用sigmoid或者tanh作為啟用函式時,W小則Z=WX+b也比較小,處在啟用函式0的附近梯度較大,演算法的更新速度比較快。如果W太大,得到的梯度較小,更新會變慢。ReLU和Leaky ReLU作為啟用函式時,因為在大於0的時候,梯度均為1,所以可以不用乘0.01。