---
# System prepended metadata

title: Week 3 Note-1
tags: [WIDM Study Group]

---

# 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)

