哦哦哦哦
是第一周的中文筆記
哦哦哦哦哦哦
Setting up your machine learning application
Train / Dev / Test sets
Review: 各種Hyperparameter
- learning rate ()
- number of iterations
- number of hidden layers (L)
- number of hidden units ()
- choice of activation function
其他 Hyperparameters
- momentem
- mini batch size
- regularization parameters
關於Cross validations
- K-fold Cross Validation
將資料集分成K分, 其中一份為測試集, 其餘K-1份為訓練集, 重複K次, 每份資料都會成為一次測試集。
- Holdout Cross Validation
資料集隨機分成兩份, 一份為訓練集, 一份為測試集, 故又稱為2-fold Cross Validation, 但嚴格來說這不能算Cross Validation
training set / development set / testing set
以往來說 60/20/20 最佳
又或者沒有development set(驗證資料)的話, 70/30也可
現在來說 資料量越來越大, 假設有100萬筆資料, 也許你只需要1萬筆的development set和1萬筆的testing set, 即98%train, 1%dev, 1%test,又或者dev和test甚至可以更少。
重要的是, 確定train,dev,test是from同樣的distribution
沒有testing set也許是可以的, 這時候人們會稱dev set為test set, 因為這個做法就像Holdout Cross Validation一樣, 這樣使用這個方法不太好, 因為會導致 overfitting to the test set(在評估準確度時只會以testing set為考量)。
Bias / Variance
可參考 中文 Bias vs Variance, Underfitting vs Overfitting
- 文中的 過擬合 即Overfitting, 欠擬合 即Underfitting
可以將error和 base error 做比較, 以決定你的Classifier成效好不好。
如何評估base error? 若目前以人類的能力沒辦法有很好的Accuracy又或者沒有其他系統能夠做得很好,那麼這個problem的 base error 就會比較高。
Basic Recipe for Machine Learning
看圖
What to do if High bias
- 使用規模更大的network(更多hidden layers 或者 更多hidden units)
- 可以減少bias又不太增加variance
- train 更久
- 訓練更久並不總是有用, 但也不太會有損失
- 試試更多 optimization algorithms
- 找個新的, 更適合的 neural network architecture
What to do if Low bias but High variance
- 取得更多data
- 可以減少variance又不太增加bias
- regularization
- 找個新的, 更適合的 neural network architecture 同樣有可能降低variance
bias variance tradeoff
一般的machine learning 想要減少bias就容易增加variance, 反之亦然, 因此需要在bias和variance之間做權衡。 然而deep learning的特性, 可以使得減少bias或variance其中之一的同時, 又不太影響到另外一項。
Regularizing your neural network
Regularization
終於啊好久沒看到中文字幕了
以邏輯回歸為例:
Review
原本的 Lost Function
L2 Regularization (最常見的正則化)
Lost Function
也就是新增了此項
L2 norm of w
即
L1 Regularization (較不常用)
Lost Function
新增項改為
L1 norm of w
L1 Regularization會使得w矩陣很稀疏(sparse, 即矩陣內部有大量值為0), 有些人認為有助於壓縮模型, 但講者認為L1 Regularization 效益不大。
Summary
- 稱為 regularization parameter, 要調整這個參數通常會使用development set或者cross validation來做驗證。
- 是我們要調整的一個 hyperparameter
以 Neural Network 為例
Regularization 之後
Lost Function
Review: w維度
Frobenius norm
- , 即矩陣中所有元素的平方和
Review: Back Propagation
正則化之後的 Back Propagation
這個正則化後的 Back Propagation 其實是讓w矩陣再減去 乘上w本身。 故L2 Regularization又被稱為weight decay(權重衰減)
dw怎麼出來的 為啥啊
Why regularization reduces overfitting?
- 很大的時候, 會使 Back Propagation 後許多w變得很小至將近0, 因此這個NN會變得很簡單, 就能防止Overfitting, 但也會趨向 Hight bias, 因此要將 調控得剛好。
- Regularization是讓w變小的方法, 在很小的時候, 也會變很小(因 ), 假設 activation function() 現在是或者是 sigmoid function, 則在z很小的時候, g(z)的表現會趨近於linear function, 也就是會有許多hidden unit的表現會是單純的linear regression, 故這個NN沒辦法計算出過於複雜的model, 也就可以防止Overfitting。
- 缺點:需要嘗試各種 值, 計算代價龐大
Dropout regularization
將各hidden units的輸出以一定的機率歸零
可以參考這筆記
implementing dropout (inverted dropout)
假設我們希望有0.2的機率將hidden units歸零
keep_prob = 0.8 # 1 - 0.2 = 0.8
d= np.random.rand(a.shape[0], a.shape[1]) < keep_prob # dropout矩陣, 內容數值會有0.8的機率為1, 0.2的機率為0
a = np.multiply(a, d) # 將各個hidden units output乘上dropout矩陣數值
a = a / keep_prob # dropout之後, a的期望值會變為原本的0.8倍, 為了傳遞到下一層時保持原本的期望值, 故將輸出除以keep_prob
dropout code: 這個 github 直接把整個 deep neural network 實作出來了o_o
只需要在training時使用dropout, testing時不用dropout(為啥 ???)
最後一段影片也沒看懂
Understanding dropout
較不擔心overfitting的layer, keep_prob 可以設得比較高, 較擔心overfitting的layer(通常會是w矩陣較大的layer), keep_prob設得較低。
the downside is ?????
常用於電腦視覺, 因為input feature非常多, 但資料量又不夠多
每次的迭代, 都會將那層的hidden units隨機抹消, 因此Cost Function(J)再也不是可以明確定義、計算出的值。所以難以確認真正的Cost Function是不是在每次迭代後單調遞減。
Other regularization methods
參考這
- Data Augmentation
ex: 將圖片翻轉、鏡像、稍微放大後,label仍然一樣(是貓的圖片仍然是貓,不是貓的圖片仍然不是貓),但資料量擴增數倍。
- Early Stopping
- 缺點:無法分開解決"最小化Cost Function" 和 "避免Overfitting"
Setting up your optimization problem
Normalizing inputs
讓平均值變為0
標準差變為1
以 Gradient Descent 來說, Normalize 後的 data 可以設定比較高的 learning rate
Vanishing / Exploding gradients
假設
- activation function
- bias
那麼 這時候若 w > I , 梯度會爆炸; 若 w < I 梯度會消失
Weight Initialization for Deep Networks
把w初始化成 平均值為 0, 變異數為 1/n (經實驗發現2/n較佳), 則可以"改善"(非解決)梯度爆炸或梯度消失。
- Xavier initialization