Tips for Deep Learning === ###### tags: `李宏毅` [TOC] ## 課程資訊 * [pdf](https://drive.google.com/file/d/162G90-sKE5jY0bVQyNsyXV9zY09DzKRm/view?usp=sharing) * [youtube](https://www.youtube.com/watch?v=xki61j7z-30&ab_channel=Hung-yiLee) ## DNN Tips 1. 先看 Training Set 的正確率好不好 * 如果這邊就不好代表可能是卡在 Saddle Point、Local Minimum,不是 Overfitting * 如果 20 層的 NN 在 Training Set 的表現比 50 層好,代表模型沒訓練好Overfitting 2. 才看 Testing Set 的正確率 * 如果不好就是 Overfitting  所以以上就有兩個階段的問題,分別是在 Training Data 就爛掉,還是在 Testing Data 才爛掉,兩者分別有不同的解決方法。  ### Adaptive Learning Rate Adagrad 沒辦法處理複雜的 Model,因為 Training Data 的分布不一定那麼單純,可能在緩和的區域需要小的 Learning Rate,在陡峭的地方又需要大的 Learning Rate。  有個方法 RMSProp,原來的 Adagrad 是直接把 g 平方和開根號,而 RMSProp 可以根據問題調整不同的參數給 Gradient。  另個方法 Momentum,會考慮前面的 Gradient。每次的 Gradient 會加上之前的 Gradient,有機會跳離 Local Minimum。  再一個方法 Adam,它就是 RMSProp + Momentum。 ### New Activation Function 舉例來說1980 年代常用的是 Sigmoid Function,而使用這個 Activation Function 有個問題,就是 Vanishing Gradient Problem。 因為每經過一次 Sigmoid Function,輸入與輸出的差異就會縮小,所以層數越多,前面的 Weight 的 Gradient 就會變小。  後來的解決方法是使用 ReLU,Input 小於 0 Output 就是 0,Input 大於 0 Output 就等於 Input。好處是運算速度快、生物上的理由(?)、ReLU 是無窮多個 Sigmoid 疊加的結果、可以解決 Vanishing Gradient Problem。  如此一來,很多沒用的 Neural 可能會消失,變成瘦長的 Linear Network。不過並不是真的變 Linear,而是根據 Input 的差異而變 Linear 或 Nonlinear。微分的部分則是,在小於 0 的時候微分為 0,大於 1 為分為 1,等於 0 不會發生別管XD。  ReLU 還有變形,例如 Leaky ReLU,它在 Input 小於 0 時還是會乘以一個參數,只是斜率比較小。又例如 Parametric ReLU,它的斜率的參數也是訓練出來的。  更進階的方法是 Maxout,自己調整 Activation Function。Maxout 就是在 Neural 中不放 Activation Function,而是幫每個 Output 分組,然後從每組 Output 選出最大的當 Output。  所以其實 ReLU 就變成 Maxout 的 Special Case。舉例來說,如果同組裡面其中一個 Neural 總是 Output 0,那經過 Maxout 的結果就跟 ReLU 一樣。  但是 Maxout 能做的又比 ReLU 多,所以稱 Maxout 是 Learnable Activation Function。  Maxout 不能微分怎麼辦,實際上微分後的斜率就會是 Output 最大的 Neural 的斜率,而其他的 Neural 就沒用了,因此這個模型會變成一個細長的 Linear Network。也不需要擔心參數會少訓練到,因為給了不同 Input 就會產生不同的 Maxout。  ### Dropout Dropout 實作上就是在 Training 的時候,每次更新參數之前都捨棄一些 Neural,這些 Neural 就不再被更新,每個 Neural 都會有 p% 的機率被丟棄。會這樣做的原因,直覺上是讓一些不做事的 Neural 丟掉,讓剩下的做事。所以在測試時有時會發現 Loss 變大。  在 Testing 的時候仍然會使用所有 Neural。  Weight 在 Testing 時要乘以 (1-p)%。直覺的理由是在訓練時假設丟掉了 p=0.5 的 Neural,然後 Output 為 z;那在 Testing 時同個 Input 如果因為 Neural 都還在,那輸出可能會變成 2z,所以要幫每個 Weight 乘以 1-p=0.5。  正式解釋 Dropout 的觀點很多,其中一個是 Dropout 其實就是在做 Ensemble。Ensemble 的概念就是訓練很多個 Model,在 Testing 時把 Input 丟入每個 Model 後把所有 Output 平均。  因此把 Weight 乘以 (1-p)% 跟把所有 Model 產生的 Output 平均是接近的。  ### Regularization 原本有個 Loss Function,再加 Regularization,也就是 $λ\dfrac{1}{2}|w|^2$。因為加 Regularization 的目的是讓 Function 更平滑,所以通常不考慮 Bias。  所以在做偏微分時,只要在會後面補個 $λw$ 就好。不過在 DL 中,Regularization 其實沒有到很重要,因為 Regularization 的目的是讓 w 別離 0 太遠,那 Early Stopping 也可以達到同個效果。比較需要 Regularization 的是類似 SVM 沒辦法 Early Stopping 的演算法。  Regularization 也有各種變化,例如上面用的是 L2 Regularization,不過也有 L1 Regularization,就是不要把 w 平方。那 L1 不能微分怎麼辦? 大於 0 的部分微分就是 1,小於 0 就是 -1,等於 0 不要管它,所以這個步驟可以用 sgn(w) 表示。  ### Early Stopping 隨著訓練越多,Loss 照理說會變少。所以會藉由 Validation Set 來判斷要不要提早停下來。 
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up