1.視頻網站:mooc慕課https://mooc.study.163.com/university/deeplearning_ai#/c
2.詳細筆記網站(中文):http://www.ai-start.com/dl2017/
3.github課件+作業+答案:https://github.com/stormstone/deeplearning.ai
3.3 計算神經網絡的輸出 Computing a Neural Network’s Output
本節將會介紹NN的輸出究竟是如何計算出來的。
以上節輸入單個特徵向量X(包含x1,x2,x3三個元素)的雙層NN爲例。
最終只需要4行代碼就可以完成計算輸出。
觀察下圖
圖中的圓圈代表了我們介紹過的,邏輯迴歸計算的2個步驟。
- 第一步計算出z
- 第二步就算出激活函數a
而NN只不過重複計算這些步驟很多次。
我們先來觀察NN隱藏層的一個節點。
上面的圖在上節已經出過,我們暫時只保留隱藏層的一個節點,把其他節點隱去。
這個節點的計算和邏輯迴歸類似。我們把它分成2個步
- 第一步,節點的左邊計算
- 第二步,節點的右邊計算
符合約定
上面公式中z,w,b,a的上標表示它們所在層(layer),[1]表示隱藏層;下標表示所在層中的第幾個節點(node in layer)。
然後再看NN隱藏層中的第二個節點
類似的,也是分成2步計算
- 第一步,節點的左邊計算
- 第二步,節點的右邊計算
注意:上標和第一個節點一致,也是[1],表示隱藏層;但是下標變成了2,表示是隱藏層的第二個節點。
同樣的,隱藏層的第三和第四個節點(單元)的計算步驟也是一樣的。
如果執行NN的程序,用for循環來做上面這些計算,那會很低效,所以下面就要實現向量化計算。
向量化的過程是將神經網絡中的一層神經元參數縱向堆積起來,例如隱藏層中參數w的縱向堆積起來變成一個4x3的矩陣,用符號W[1]表示。
另一個方法是,隱藏層有四個邏輯迴歸單元,且每一個邏輯迴歸單元都有相對應的參數w向量,把這四個向量堆積在一起,就會得出這4x3的矩陣。
然後把W矩陣乘以輸入特徵x1,x2,x3,也就是W乘以X矩陣轉置。
最後再加上b。
最終得到了上圖中的公式,它和上面4個節點的等式是完全相等的。最終計算得到了,,,。
向量化時候有一條經驗法則:當在NN一層中有不同的節點,就把它們縱向堆疊起來。所以在這裏我們把隱藏層的4個節點,,,堆疊起來構成一個列向量。類似的,還可以得到矩陣W[1]和b[1]。
最終概括如下
同樣,概括a如下
我們把本例中NN向量化公式彙總如下
對於神經網絡的第一層(隱藏層),給予一個輸入X,得到a[1],a[0]可以作爲輸入特徵向量X的別名。通過相似的推導你會發現,下一層的表示同樣可以寫成類似的形式,得到a[2],即NN的預測結果。
總結:
爲了計算輸出或者說預測,當你有一個單隱層(淺層)NN,你需要在代碼中實現的就是計算上圖右邊的4個等式,這是一個向量化的計算過程。其中前2個等式是用來計算隱藏層的邏輯迴歸,而後2個等式是用來計算輸出層的邏輯迴歸。
本節介紹了輸入單個特徵向量(單樣本)如何通過4個公式計算得到雙層NN預測結果。
3.4 多樣本向量化 Vectorizing across multiple examples
本節將介紹如何將不同訓練樣本向量化並計算出預測結果。該過程與你在邏輯迴歸中所做類似。
上圖是上一節的4個公式。對於單個訓練樣本,你可以用它們生成一個預測結果。
如果你有m個訓練樣本,你需要重複這個過程。
用第一個訓練樣本x(1)來計算得到。這是對第一個樣本的預測。
用第二個訓練樣本x(2)來計算得到。這是對第二個樣本的預測。
依次類推
用第m個訓練樣本x(m)來計算得到。這是對第m個樣本的預測。
用激活函數表示法,把它們寫成
依次類推
符號約定
所以,圓括號中的i表示第i個樣本,方括號[2]表示第二層。
如果用for循環遍歷m個訓練樣本,那麼方法如上圖。
下面將介紹用向量化方法計算。
定義矩陣X,把訓練樣本橫向堆到各列。這是 n x m 維的矩陣。
定義矩陣Z[1],同樣也是把所有z[1]向量以列向量橫向堆疊起來。
定義矩陣A[1],同樣也是把所有a[1]向量以列向量橫向堆疊起來。
類似的,還可以定義矩陣Z[2]和A[2]。
現在我們可以得到神經網絡多樣本情況向量化的計算公式如下
矩陣Z[1],A[1],Z[2]和A[2]中的元素
- 橫向表示不同訓練樣本,從左向右掃描,可以遍歷整個訓練集。
- 豎向表示NN中每一層的不同節點
例如,矩陣的最左上角元素,它是位於第一個訓練樣本上的第一個隱藏單元。它的下方的元素(第一列,第二行)對應於第一個訓練樣本上的第二個隱藏單元。