吳恩達深度學習筆記(16)-神經網絡的表示與輸出計算

神經網絡的表示(Neural Network Representation)

先回顧一下我在上一篇筆記畫幾張神經網絡的圖片,在這次,我們將討論這些圖片的具體含義,也就是我們畫的這些神經網絡到底代表什麼。

我們首先關注一個例子,本例中的神經網絡只包含一個隱藏層(圖1)。

這是一張神經網絡的圖片,讓我們給此圖的不同部分取一些名字。

吳恩達深度學習筆記(16)-神經網絡的表示與輸出計算

圖1

我們有輸入特徵x_1、x_2、x_3,它們被豎直地堆疊起來,這叫做神經網絡的輸入層

它包含了神經網絡的輸入;然後這裡有另外一層我們稱之為隱藏層(圖1的四個結點)。

待會兒會回過頭來講解術語"隱藏"的意義;

在本例中最後一層只由一個結點構成,而這個只有一個結點的層被稱為輸出層,它負責產生預測值。

解釋隱藏層的含義:在一個神經網絡中,當你使用監督學習訓練它的時候,訓練集包含了輸入x也包含了目標輸出y,所以術語隱藏層的含義是在訓練集中,這些中間結點的準確值我們是不知道到的,也就是說你看不見它們在訓練集中應具有的值。你能看見輸入的值,你也能看見輸出的值,但是隱藏層中的東西,在訓練集中你是無法看到的。

所以這也解釋了詞語隱藏層,只是表示你無法在訓練集中看到他們。

現在我們再引入幾個符號,就像我們之前用向量x表示輸入特徵。這裡有個可代替的記號a^[0]可以用來表示輸入特徵。a表示激活的意思,它意味著網絡中不同層的值會傳遞到它們後面的層中,輸入層將x傳遞給隱藏層,所以我們將輸入層的激活值稱為a^[0];

下一層即隱藏層也同樣會產生一些激活值,那麼我將其記作a^[1],所以具體地,這裡的第一個單元或結點我們將其表示為a_1^[1],第二個結點的值我們記為a_2^[1]以此類推。

所以這裡的是一個四維的向量如果寫成Python代碼,那麼它是一個規模為4x1的矩陣或一個大小為4的列向量,

如下公式,它是四維的,因為在本例中,我們有四個結點或者單元,或者稱為四個隱藏層單元; 公式1

吳恩達深度學習筆記(16)-神經網絡的表示與輸出計算

最後輸出層將產生某個數值a,它只是一個單獨的實數,所以的y^值將取為a^[2]。

這與邏輯迴歸很相似,在邏輯迴歸中,我們有y^直接等於a,在邏輯迴歸中我們只有一個輸出層,所以我們沒有用帶方括號的上標。

但是在神經網絡中,我們將使用這種帶上標的形式來明確地指出這些值來自於哪一層,有趣的是在約定俗成的符號傳統中,在這裡你所看到的這個例子,只能叫做一個兩層的神經網絡(圖2)。原因是當我們計算網絡的層數時,輸入層是不算入總層數內,所以隱藏層是第一層,輸出層是第二層。第二個慣例是我們將輸入層稱為第零層,所以在技術上,這仍然是一個三層的神經網絡,因為這裡有輸入層、隱藏層,還有輸出層。但是在傳統的符號使用中,如果你閱讀研究論文或者在這門課中,你會看到人們將這個神經網絡稱為一個兩層的神經網絡,因為我們不將輸入層看作一個標準的層。

吳恩達深度學習筆記(16)-神經網絡的表示與輸出計算

最後,我們要看到的隱藏層以及最後的輸出層是帶有參數的,這裡的隱藏層將擁有兩個參數W和b,我將給它們加上上標^([1])(W^[1]),b^[1]),表示這些參數是和第一層這個隱藏層有關係的。

之後在這個例子中我們會看到W是一個4x3的矩陣,而b是一個4x1的向量,第一個數字4源自於我們有四個結點或隱藏層單元,然後數字3源自於這裡有三個輸入特徵,我們之後會更加詳細地討論這些矩陣的維數,到那時你可能就更加清楚了。相似的輸出層也有一些與之關聯的參數W^[2]以及b^[2]。

從維數上來看,它們的規模分別是1x4以及1x1。

1x4是因為隱藏層有四個隱藏層單元而輸出層只有一個單元,我會對這些矩陣和向量的維度做出更加深入的解釋,

所以現在你已經知道一個兩層的神經網絡什麼樣的了,即它是一個只有一個隱藏層的神經網絡。

下面將更深入地瞭解這個神經網絡是如何進行計算的,也就是這個神經網絡是怎麼輸入x,然後又是怎麼得到^y。

計算一個神經網絡的輸出(Computing a Neural Network's output)

首先,回顧下只有一個隱藏層的簡單兩層神經網絡結構:

吳恩達深度學習筆記(16)-神經網絡的表示與輸出計算

其中,x表示輸入特徵,a表示每個神經元的輸出,W表示特徵的權重,上標表示神經網絡的層數(隱藏層為1),下標表示該層的第幾個神經元。這是神經網絡的符號慣例,下同。

神經網絡的計算

關於神經網絡是怎麼計算的,從我們之前提及的邏輯迴歸開始,如下圖所示。用圓圈表示神經網絡的計算單元,邏輯迴歸的計算有兩個步驟,首先你按步驟計算出z,然後在第二步中你以sigmoid函數為激活函數計算z(得出a),一個神經網絡只是這樣子做了好多次重複計算。

吳恩達深度學習筆記(16)-神經網絡的表示與輸出計算

回到兩層的神經網絡,我們從隱藏層的第一個神經元開始計算,

如上圖第一個最上面的箭頭所指。從上圖可以看出,輸入與邏輯迴歸相似,這個神經元的計算與邏輯迴歸一樣分為兩步,小圓圈代表了計算的兩個步驟。

第一步,計算z_1^[1],

吳恩達深度學習筆記(16)-神經網絡的表示與輸出計算

第二步,通過激活函數計算a_1^[1]

吳恩達深度學習筆記(16)-神經網絡的表示與輸出計算

隱藏層的第二個以及後面兩個神經元的計算過程一樣,只是注意符號表示不同,最終分別得到a_2^[1] 、a_3^[1]、a_4^[1],詳細結果見下:

吳恩達深度學習筆記(16)-神經網絡的表示與輸出計算

向量化計算 如果你執行神經網絡的程序,用for循環來做這些看起來真的很低效。

所以接下來我們要做的就是把這四個等式向量化。

向量化的過程是將神經網絡中的一層神經元參數縱向堆積起來,例如隱藏層中的w縱向堆積起來變成一個(4,3)的矩陣,用符號W^[1]表示。

另一個看待這個的方法是我們有四個邏輯迴歸單元,且每一個邏輯迴歸單元都有相對應的參數——向量w,把這四個向量堆積在一起,你會得出這4×3的矩陣。 因此, 公式1如下:

吳恩達深度學習筆記(16)-神經網絡的表示與輸出計算

公式2:

吳恩達深度學習筆記(16)-神經網絡的表示與輸出計算

詳細過程見下: 公式3:

吳恩達深度學習筆記(16)-神經網絡的表示與輸出計算

公式4:

吳恩達深度學習筆記(16)-神經網絡的表示與輸出計算

對於神經網絡的第一層,給予一個輸入x,得到a^[1],x可以表示為a^[0]。通過相似的衍生你會發現,後一層的表示同樣可以寫成類似的形式,得到a^[2],^y=a^[2],具體過程見公式1、2。

吳恩達深度學習筆記(16)-神經網絡的表示與輸出計算

如上圖左半部分所示為神經網絡,把網絡左邊部分蓋住先忽略,那麼最後的輸出單元就相當於一個邏輯迴歸的計算單元。

當你有一個包含一層隱藏層的神經網絡,你需要去實現以計算得到輸出的是右邊的四個等式,並且可以看成是一個向量化的計算過程,計算出隱藏層的四個邏輯迴歸單元和整個隱藏層的輸出結果,如果編程實現需要的也只是這四行代碼。

總結:通過本次筆記,你能夠根據給出的一個單獨的輸入特徵向量,運用四行代碼計算出一個簡單神經網絡的輸出。

接下來的筆記你將瞭解的是如何一次能夠計算出不止一個樣本的神經網絡輸出,而是能一次性計算整個訓練集的輸出。


分享到:


相關文章: