Neural Networks and Deep Learning Week 3
將上一週的 Logistic Regression 多個堆疊起來,即可以形成 Neural Network 。圖中每個圓圈是一個節點,代表一個 Logistic Regression ,且前一層的輸出為下一層的輸入。
上標中括號內的數字代表第幾層。上圖為兩層的 NN ,在講幾層時並不會包含最一開始的輸入層。
圖中 W^[1] 為 (4, 3) 的矩陣,代表此層有四個 Logistic Regression 的節點,並且每個單元皆輸入三個特徵值。
一樣可以透過向量化的方式,一次計算多個樣本的結果。
Logistic Regression 最後一步是用 Sigmoid Function 將數值限制在零和一之間。在 Neural Network 中,此種函數稱為 Activation Function ,控制每一個節點最後要輸出的值是什麼。
建置 Neural Network 的時候,每個節點可以選擇不同的 Activation Function 。除了 Sigmoid 外,常見的尚有圖中的另外三種: tanh 、 ReLU 、 Leaky ReLU 。
tanh 的好處是平均值為零,會讓 Neural Network 更好訓練(之後的課程才會解釋)。
ReLU 和 Leaky ReLU 的好處是,在極大值時,微分值仍很大,不像 Sigmoid 和 tanh 幾近於零,這樣的性質,可使 Gradient Descent 更好運作而讓訓練加快。
因此預設多使用 ReLU 或 Leaky ReLU 當作節點的 Activation Function 。而 Sigmoid 則多使用在當輸出須限制在零和一之間時。
如做二元分類的時候:最後一層節點會用 Sigmoid ,來讓輸出是零與一。而前面層的節點則大多數人會用 ReLU 。
對於 Neural Network 而言,多數節點使用 Activation Function 是必要的。因為 Activation Function 為非線性的函數,如此才能使得 Neural Network 適應更複雜的問題。
假設沒有 Activation Function ,則 Neural Network 將會成為一堆線性迴歸的線性組合,仍是一個線性模型,無法解決非線性問題。
在初始化 W 時需注意與 Logistic Regression 不同,不能夠設定其為零。由於 Neural Network 可想像成多個 Logistic Regression 堆疊在一起,若皆將 W 初始為零,則同一層的節點都將得到同樣的 Gradient ,每個節點輸出的東西都一樣,如此就失去多個節點的意義。
W = np.random.randn(n[i], n[i-1])*0.01
因此在初始化 W 時,要使用亂數來決定,讓不同的節點一開始就有不同的性質。同時初始化的數值不要過大過小,避免算出來的值過高或過低,當值越極端時,則在 Activation Function 的 Gradient 會過小(如 tanh 的兩端斜率接近於零),導致訓練效率降低。所以如上式會再乘上 0.01 。
b 在初始化時仍可以設定為零。
Note on Implementation of HW
現有資料集如上圖,分成紅藍兩類。並根據 X Y 座標預測屬於哪一類。
使用 Logistic Regression 的結果如上圖, X Y 座標落在紅色區域內的預測是紅色類別、藍色區域內的則預測為藍色類別。
由於 Logistic Regression 為線性模型,因此只能夠在此空間上切出一條直線來分類。準確度僅 47% 。
使用如最上方圖的兩層 Neural Network 。可以在此空間切出更多分法,讓模型能適應較複雜的問題。準確度為 90% 。