這禮拜的社課主要會跟著上個星期的進度
對DNN進行改良、診斷
逼你們做上禮拜的程式練習
我們在最後遇到ㄌ Overfitting的問題
除了Regularization
這一個禮拜我們會嘗試別的方法解決
Dropout是一種可以減少overfitting的技術
它的想法相當簡單
(X
我們每次都隨機把幾個點從神經網路中去掉
i.e
在forward&back propagation時
讓這些節點失去功能!
要怎麼做咧(?
我們對每個點隨機一個數字
如果數字大於某個特定數字我們就把它去掉
記得np.random.rand()ㄇ
當我們透過\(Z^{[l]}\)計算出\(A^{[l]}\)後
我們就會使用dropout
對\(A^{[l]}\)裡的值隨機刪掉
設立一個新的矩陣\(D^{[l]}\)
\(D = np.random.rand(A.shape[0], A.shape[1]) <= keep\)
其中\(keep\)是我們要保留的機率
如果隨機的值 \(< keep\) 我們便會保留節點
反之就會捨棄節點
刪除節點時
我們直接讓
\(A = A*D\)
並且為了保持權重和大小一致
我們會讓
\(A\ /= keep\)
並且在做back propagation時
\(dA = dA*D\)
\(dA\ /= keep\)
其他都一樣w
import numpy as np
keep = 0.8
A = np.array([
[1, 3, 4],
[2, 1, 2]
])
dA = np.array([
[1, 3, 4],
[2, 1, 2]
])
D = np.random.rand(A.shape[0], A.shape[1]) < keep
A *= D
A /= keep
dA *= D
dA /= keep
對於Overfitting、Underfitting的問題
我們會希望有一個衡量的方法
所以我們可以先學一個英文單字w
Diagnose 診斷
我們要學習判別模型的運作情況!!!
所以我們可以再學兩個英文單字(茶
Bias 偏差
Variance 方差
聽起來很數學
實際上也很數學
但我們只要理解他所表達的意思就可以ㄌ
當模型過於符合數據:High variance, Low bias
當模型過於不符合數據:Low variance, High bias
我們會發現:
當bias提高,則variance下降
反之亦然
對於這ㄍ現象
我們都叫它
bias-variance tradeoff
High bias:
我們會對模型進行改良
High variance:
我們要如何很快ㄉ判斷bias和variance(?
把資料切塊
之前學ㄉ:Train(80%), Test(20%)
現在:Train(60%), Cross-validation(20%), Test(20%)
補充一下
這樣ㄉ資料分塊方式其實在目前不太適用
由於現今資料量大 e.g. \(m = 10^6\)
我們不會放那麼多ㄉ資料
在 CV(又稱Development, DEV) 和 Test 上
我們可能會用以下的分配方式:
Train(98%), CV(1%), Test(1%)
CV的功能是
透過它來測試模型的超參數值(hyperparameters)
e.g. \(\alpha,\ \lambda,\ keep\)
以達到診斷(diagnose)的作用
記得不要用 Test set 去做同樣的事情
因為Test set就是為了測試整個模型而存在ㄉ
並且請將資料分散好
避免Train的東東跟Test的東東完全不符合
具體來說
我們會繪製學習曲線(learning curve)
今天的東西主要延續上次上課ㄉ
所以可以先寫上禮拜我晚做的Colabㄛ