# Tips for Deep Learning  :::info ### Not good on traning-data 模型沒有被適度訓練,兩種解決方法。 * [1]更換activation function :::spoiler 梯度消失問題(Vanishing Gradient Problem on Sigmoid) 由於Sigmoid的特性,***輸入值的變化會被壓縮***,所以經過deep network後,gradient會逐漸變小,導致learning緩慢,參數幾乎停留在random。  * 此時模型效率很差,因為後面的neural幾乎base on random值。 ::: * ReLU ReLU為線性函數,可以解決梯度消失問題,同時input<0時等同於放棄神經元。  * Maxout  :::spoiler Maxout的activation function會隨w,b改變(learnable),一個Group如果有n個點,則對應的activation function會有n-1個轉折點。  訓練時,選定最大值,就將activation function視為線性,進行微分運算。  ::: * [2]調整learning rate * RMSProp替代Adagrad 藉由調整$\alpha$的值,可以使得最近的梯度影響較大,適應同方向快速變動的梯度。  :::spoiler 原理 Adagrad方法,每一個gradient的權重都相同(平均)  藉由調整權重,在下圖中可以更快適應同方向的梯度變化。  ::: * Momentum (動量) 每一次權重更新,不只考慮gradient,同時考慮上次權重移動的慣性。 v1=$\lambda$*v0+$\eta$*gradient  :::spoiler 原理 現實中,球滾落高地時,會帶有動量,可以突破local minimum。  ::: ::: :::warning ### Not good on testing data * Early Stopping 防止過度擬合  * Rrgularization * L2 Regularization 每次更新weight都相當於乘上小於1的數,最後weight會趨近於0(不一定等於0,會在前後項間平衡)。  * L1 Regularization 每次更新weight都加減1個數(>0為減,<0為加),會使得權重趨近於0,或是一個很大的數(加減1沒辦法使大數歸零)。  :::spoiler 原理 * 初始化的weight都接近0,但每次的訓練會把weight推離0,通過正規化防止過度訓練。 * 模擬人腦運作,拋棄不必要的神經元。  ::: * Dropout 每次訓練,有p%的機率不使用神經元。而實際使用時,使用所有神經元,但將各項weight乘上(1-p)%  :::spoiler 原理 * 每次訓練時,都會有不同神經元被啟用,可以看做設計了一大把network,再將計算的總合作平均。  * 實際上只有activation function為線性時,能視為一堆模型。因此Dropout對ReLU/Max-Out之類的線性函式進步較大。  ::: ::: ###### tags: `ML2020`
×
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