# Week 3 Note-1 ###### tags: `WIDM Study Group` ## ML 9: Tips for Deep Learning ### Recipe of Deep Learning * 在模型訓練完後,檢查模型效果: * 確認模型在訓練資料集的效果是否良好(誤差穩定下降、輸出結果正常)。 * 若在訓練資料集上有問題,則回頭檢視建立模型的步驟是否出錯。 * 接著會利用測試(驗證)資料集測試模型效果。 * 若在測試(驗證)資料集測試發現誤差上升、輸出結果異常,則有可能發生過適。 ![](https://i.imgur.com/jCqploE.png) ### Do not always blame Overfitting 而模型效果不好,也不單單是過適所造成。 若模型的深度越深(層數越多),會增加模型參數校調難度,進而影響模型效果。 ![](https://i.imgur.com/GRBNWxy.png) ### Recipe of Deep Learning 如何改善DL模型訓練效果呢? * 對於訓練資料的調整有以下兩種方法: * 使用其他激活函數 * 使用適合的學習率 ![](https://i.imgur.com/vJwVy40.png) ### Vanishing Gradient Problem 所謂梯度消失問題,就是在模型剛開始訓練、神經元參數皆是random時,靠近輸入層的Layer無法獲得較大的更新梯度(對loss的微分很小),而輸出層就藉由輸入層的隨機參數胡亂更新,遺下就達到收斂。 ![](https://i.imgur.com/qPmSVGF.png) 會造成此原因是因為Sigmoid函數會將輸入縮小至0到1之間,這樣的設計會使輸入層無法獲得較大的梯度。 ![](https://i.imgur.com/nUuyuHs.png) ### ReLU 而ReLU的出現解決了梯度消失的問題 * ReLU Function: * input z、output a * if z > 0,a = z * else a = 0 ![](https://i.imgur.com/JXULwhM.png) 若neuron為零,則對整個網路是沒有影響的,可以拿掉,即變成一個瘦長的網路。 ![](https://i.imgur.com/SH5R2yI.png) ![](https://i.imgur.com/9XlKmkq.png) Leaky ReLU & Parametric ReLU解決了輸入為零無法更新neuron的問題。 ![](https://i.imgur.com/tGcoW6E.png) ### Maxout 即在一個Layer上做MaxPooling,將未輸入激活函式的輸出分組,並選出最大者。 ![](https://i.imgur.com/JTZxfSS.png) 而ReLU是Maxout的一個特例。 若權重w,b的值與ReLU相同,則Maxout的輸出就會與ReLU一樣。 ![](https://i.imgur.com/04tykMn.png) 而Maxout也是一個可學習的激活函數,透過不同的權重可學習到不同的激活函數。 ![](https://i.imgur.com/LCdnr2N.png) ![](https://i.imgur.com/mwDPK7N.png) ### Maxout-Training 選擇最大的進行線性輸出,較小者則可以拿掉,只對輸出較大的neuron更新。 而neuron對於不同的輸入會有不同的輸出,故最大者會交互輪替,不會有無法更新到另一neuron。 ![](https://i.imgur.com/dwXJF2Q.png) ### Adaptive Learning Rate #### Adagrad Adagrad強調每個參數都有不同的學習率,以η除上過去梯度的平方和開根號。 ![](https://i.imgur.com/HodvDXc.png) ##### Adagrad Problem 在真實的情況下,誤差的狀況往往是複雜且糟糕的。 ![](https://i.imgur.com/kuAWth8.png) #### RMSProp RMSProp加入了超參數α,調控過去與現在的參數。 ![](https://i.imgur.com/yXcdXiF.png) #### Local Minima Problem 在 DeepLearning 中會因微分為0而有區域最佳解問題。 ![](https://i.imgur.com/L0QJULe.png) #### Momentum Momentum運用運動慣性的特性,使參數更新方向還要加入原移動方向。 ![](https://i.imgur.com/ARLjz1t.png) 而Momentum也使更新有機會達到全域最佳解。 ![](https://i.imgur.com/J8he9GT.png) 而Adam就是RMSProp與Momentum的結合。 ![](https://i.imgur.com/DfmWC34.png) ### Early Stopping 因測試資料與訓練資料的分布不同,很可能訓練到後面訓練誤差持續降低,測試(驗證)誤差卻持續升高。故我們可將模型訓練階段停止在測試誤差最低的狀態。 ![](https://i.imgur.com/oUG5XtO.png) ### Regularization 正規化的目的在於使誤差曲線更平滑。 L2正規化將正規化項||θ||以平方和計算。 在參數更新時我們可將參數更新公式整理成$w^t-η\dfrac{∂L'}{∂w}=(1−ηλ)w^t−η\dfrac{∂L}{∂w}$,$η$,學習率、$λ$,正規化超參數皆會設置很小,故$(1−ηλ)$為一個接近1的值(<1),在模型不斷更新,參數也會漸漸趨近為0。 ![](https://i.imgur.com/f40oxW7.png) Regularization還有另一種稱為L1的正規化,不同於L2的部份在於||θ||所計算是參數的絕對值總合,而不是平方和。 ![](https://i.imgur.com/WnW8yYS.png) L1 V.S. L2 之 差異 * 參數更新 * L1減掉固定的值 * L2乘上一個小於1固定的值 * 收斂速度 * w愈大,於L2上更新的速度愈快 * 結果 * L1參數有大有小 * L2普遍參數都會接近於0 ## Dropout 在訓練時會隨機將特定比率( p )的neuron丟掉,不更新。 ![](https://i.imgur.com/1dqtdev.png) ![](https://i.imgur.com/HqQwxdb.png) 測試時因不會進行dropout,故DL模型運算時會多出p%的權重一起運算,故輸出*=(1-p) ![](https://i.imgur.com/aId8gL3.png) ![](https://i.imgur.com/AhqTBLf.png) Dropout 其實是 ensemble learning,將訓練集切成多個子集給不同的模型訓練。 測試時再將模型的輸出取平均。 ![](https://i.imgur.com/EkMfsUv.png) ![](https://i.imgur.com/qv9wHB2.png) 在Dropout中可視為將數據拆成多個batch訓練,且某些參數是共享的。 ![](https://i.imgur.com/1jPXmTa.png) ## 補充-Batch size對模型的影響 Smith, S. L., Kindermans, P. J., Ying, C., & Le, Q. V. (2017). Don't decay the learning rate, increase the batch size. ![](https://i.imgur.com/coXo7Py.png) ![](https://i.imgur.com/Zk2dOwn.png) ![](https://i.imgur.com/aLAjrRc.png) ![](https://i.imgur.com/ttvQCsR.png) ![](https://i.imgur.com/qSQEWJo.png)