訓練、驗證、測試
劃分的量
- If size of the dataset is 100 to 1000000 ==> 60/20/20
- If size of the dataset is 1000000 to INF ==> 98/1/1 or 99.5/0.25/0.25
要保證數據來自一個分佈
誤差方差分析
若是存在high bias
- 嘗試用更大的網絡
- 嘗試換一個網絡模型
- 跑更長的時間
- 換不一樣的優化算法
若是存在high variance
- 收集更多的數據
- 嘗試正則化方法
- 嘗試一個不一樣的模型
通常來講更大的網絡更好git
正則化
正則化減小過擬合的intuition
太大會致使其爲0github
Dropout
- 原始的dropout
- Inverted Dropout
咱們稍微將 Dropout 方法改進一下,使得咱們只須要在訓練階段縮放激活函數的輸出值,而不用在測試階段改變什麼。這個改進的 Dropout 方法就被稱之爲 Inverted Dropout 。比例因子將修改成是保留機率的倒數,即
dropout分析
- 由於咱們不可以過度依賴一個特徵,dropout能夠必定程度將權重分出去
- 咱們能夠在不一樣的層設置不一樣的dropout
- 輸入層的dropout應該接近1,由於咱們須要從中學習信息
- CNN中dropout普遍應用
- dropout帶來的問題是調試困難,一般咱們須要關掉dropout調試,確認無誤再繼續用dropout
其它正則化方法
數據增長(data augmentation)
就是經過一些變換獲得新的圖片(這種實際上是在圖像領域最爲普遍應用,可是思想能夠推廣)算法
early stopping
就是在迭代中選擇驗證錯誤再也不下降的點
好處是不用調超參,壞處是it makes us think about something else more than optimize W's and b's.網絡
ensemble
訓練多個模型,組合
能夠帶來2%左右的提高,減小泛化偏差dom
歸一化輸入
歸一化能夠加速訓練
歸一化的步驟
- 計算均值
- 全部數據減去均值
- 計算方差
x/=variance
歸一化應該應用於:訓練、驗證、測試
梯度消失/爆炸
這是訓練深度學習難的一個點svg
權重初始化
是解決梯度消失/爆炸的一個部分的解決方案
對於sigmoid和tanh函數
np.random.rand(shape)*np.sqrt(1/n[l-1])
對於relu學習
np.random.rand(shape)*np.sqrt(2/n[l-1]) #n[l-1] In the multiple layers.
一個方差是
,另外一個是
測試
經過數值近似計算梯度
優化算法
mini-batch
- 爲了利用向量化,batch大小應該是2的指數
- 注意CPU/GPU內存大小
momentum
計算權重的指數加權平均
優化
RMSprop
Root mean square prop
使用這個算法能夠選擇較大的學習率
Adam
Adaptive Momentum Estimation。其實就是把rmsprop和momentem放一塊兒了,另加了一個糾正
其中推薦
,
,
深度神經網絡中的主要問題不是局部最小點,由於在高維空間中出現局部最優的可能性很小,可是很容易出現鞍點,鞍點會致使訓練很慢,因此上面的幾個方法會頗有用
調參
順序
Learning rate.
Mini-batch size.
No. of hidden units.
Momentum beta.
No. of layers.
Use learning rate decay?
Adam beta1 & beta2
regularization lambda
Activation functions
批規範化Batch Normalization
能夠加速訓練
和前面的對於輸入數據的處理不同,這裏考慮的是對於隱層,咱們可否對A[l]進行操做,使得訓練加快。
這裏
和
是參數
解決了梯度彌散的問題
批規範化其實作了一點正則化的工做,若是你但願減弱這種效果能夠增大批大小。
測試用須要估計均值和方差
Reference
https://github.com/mbadry1/DeepLearning.ai-Summary