2020-5-7 吳恩達-NN&DL-w3 淺層NN(3.3 計算神經網絡的輸出,3.4 多樣本向量化)

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個步

  • 第一步,節點的左邊計算z1[1]=w1[1]Tx+b1[1]z^{[1]}_1=w_1^{[1]T}x+b_1^{[1]}
  • 第二步,節點的右邊計算a1[1]=σ(z1[1])a_1^{[1]}=\sigma(z_1^{[1]})

符合約定
上面公式中z,w,b,a的上標表示它們所在層(layer),[1]表示隱藏層;下標表示所在層中的第幾個節點(node in layer)。

然後再看NN隱藏層中的第二個節點
在這裏插入圖片描述

類似的,也是分成2步計算

  • 第一步,節點的左邊計算z2[1]=w2[1]Tx+b2[1]z^{[1]}_2=w_2^{[1]T}x+b_2^{[1]}
  • 第二步,節點的右邊計算a2[1]=σ(z2[1])a_2^{[1]}=\sigma(z_2^{[1]})

注意:上標和第一個節點一致,也是[1],表示隱藏層;但是下標變成了2,表示是隱藏層的第二個節點。

同樣的,隱藏層的第三和第四個節點(單元)的計算步驟也是一樣的。
在這裏插入圖片描述

如果執行NN的程序,用for循環來做上面這些計算,那會很低效,所以下面就要實現向量化計算。

向量化的過程是將神經網絡中的一層神經元參數縱向堆積起來,例如隱藏層中參數w的縱向堆積起來變成一個4x3的矩陣,用符號W[1]表示。
另一個方法是,隱藏層有四個邏輯迴歸單元,且每一個邏輯迴歸單元都有相對應的參數w向量,把這四個向量堆積在一起,就會得出這4x3的矩陣。

然後把W矩陣乘以輸入特徵x1,x2,x3,也就是W乘以X矩陣轉置。

最後再加上b。
在這裏插入圖片描述

最終得到了上圖中的公式,它和上面4個節點的等式是完全相等的。最終計算得到了z1[1]z^{[1]}_1,z2[1]z^{[1]}_2,z3[1]z^{[1]}_3,z4[1]z^{[1]}_4

向量化時候有一條經驗法則:當在NN一層中有不同的節點,就把它們縱向堆疊起來。所以在這裏我們把隱藏層的4個節點z1[1]z^{[1]}_1,z2[1]z^{[1]}_2,z3[1]z^{[1]}_3,z4[1]z^{[1]}_4堆疊起來構成一個列向量Z[1]Z^{[1]}。類似的,還可以得到矩陣W[1]和b[1]
最終概括如下
Z[1]=W[1]X+b[1]Z^{[1]}=W^{[1]}X+b^{[1]}

同樣,概括a如下
a[1]=[a1[1]a2[1]a3[1]a4[1]]=σ(z[1])a^{[1]}=\left[ \begin{array}{c}a^{[1]}_{1}\\ a^{[1]}_{2}\\ a^{[1]}_{3}\\ a^{[1]}_{4} \end{array} \right] = \sigma(z^{[1]})

我們把本例中NN向量化公式彙總如下
在這裏插入圖片描述

對於神經網絡的第一層(隱藏層),給予一個輸入X,得到a[1],a[0]可以作爲輸入特徵向量X的別名。通過相似的推導你會發現,下一層的表示同樣可以寫成類似的形式,得到a[2],即NN的預測結果y^=a[2]\hat y=a^{[2]}

總結:
爲了計算輸出或者說預測y^\hat y,當你有一個單隱層(淺層)NN,你需要在代碼中實現的就是計算上圖右邊的4個等式,這是一個向量化的計算過程。其中前2個等式是用來計算隱藏層的邏輯迴歸,而後2個等式是用來計算輸出層的邏輯迴歸。

本節介紹了輸入單個特徵向量(單樣本)如何通過4個公式計算得到雙層NN預測結果。

3.4 多樣本向量化 Vectorizing across multiple examples

本節將介紹如何將不同訓練樣本向量化並計算出預測結果。該過程與你在邏輯迴歸中所做類似。
在這裏插入圖片描述

上圖是上一節的4個公式。對於單個訓練樣本,你可以用它們生成一個預測結果a[2]=y^a^{[2]}=\hat y

如果你有m個訓練樣本,你需要重複這個過程。

用第一個訓練樣本x(1)來計算得到y^(1)\hat y^{(1)}。這是對第一個樣本的預測。
用第二個訓練樣本x(2)來計算得到y^(2)\hat y^{(2)}。這是對第二個樣本的預測。
依次類推
用第m個訓練樣本x(m)來計算得到y^(m)\hat y^{(m)}。這是對第m個樣本的預測。

用激活函數表示法,把它們寫成
a[2](1)=y^(1)a^{[2](1)}=\hat y^{(1)}
a[2](2)=y^(2)a^{[2](2)}=\hat y^{(2)}
依次類推
a[2](m)=y^(m)a^{[2](m)}=\hat y^{(m)}

符號約定
所以,a[2](i)a^{[2](i)}圓括號中的i表示第i個樣本,方括號[2]表示第二層。

在這裏插入圖片描述

如果用for循環遍歷m個訓練樣本,那麼方法如上圖。

下面將介紹用向量化方法計算。
定義矩陣X,把訓練樣本橫向堆到各列。這是 n x m 維的矩陣。
X=[x(1)x(2)x(m)]X=\left[ \begin{array}{c} \vdots & \vdots & \vdots & \vdots\\ x^{(1)} & x^{(2)} & \cdots & x^{(m)}\\ \vdots & \vdots & \vdots & \vdots\\ \end{array} \right]
定義矩陣Z[1],同樣也是把所有z[1]向量以列向量橫向堆疊起來。
Z[1]=[z[1](1)z[1](2)z[1](m)]Z^{[1]}=\left[ \begin{array}{c} \vdots & \vdots & \vdots & \vdots\\ z^{[1](1)} & z^{[1](2)} & \cdots & z^{[1](m)}\\ \vdots & \vdots & \vdots & \vdots\\ \end{array} \right]
定義矩陣A[1],同樣也是把所有a[1]向量以列向量橫向堆疊起來。
A[1]=[a[1](1)a[1](2)a[1](m)]A^{[1]}=\left[ \begin{array}{c} \vdots & \vdots & \vdots & \vdots\\ a^{[1](1)} & a^{[1](2)} & \cdots & a^{[1](m)}\\ \vdots & \vdots & \vdots & \vdots\\ \end{array} \right]
類似的,還可以定義矩陣Z[2]和A[2]

現在我們可以得到神經網絡多樣本情況向量化的計算公式如下
在這裏插入圖片描述

矩陣Z[1],A[1],Z[2]和A[2]中的元素

  • 橫向表示不同訓練樣本,從左向右掃描,可以遍歷整個訓練集。
  • 豎向表示NN中每一層的不同節點

例如,矩陣的最左上角元素,它是位於第一個訓練樣本上的第一個隱藏單元。它的下方的元素(第一列,第二行)對應於第一個訓練樣本上的第二個隱藏單元。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章