# 深度學習 02:Overfitting/梯度消失/梯度爆炸 ###### tags: `Deep Learning` ## Overfitting 1. **Dropout** 隨機省略特定比例神經元 2. **L1, L2**  假設只有兩個特徵要學,藍色線代表 loss function,每一條藍線的誤差都一樣,橘色線代表額外加入的正規項,目標就是讓 loss function 最小化,也就是藍色及橘色線的交點。 - **$L_1$ 正規化** $$L_1 = \sum\limits_{i=1}^n{θ_i}$$ $L_1$ 正規化就是在 loss function 之後加入每個參數的值,如上圖所示,很可能在尋求最小誤差時只保留住 $θ_1$ 的特徵,導致網路權重矩陣稀疏。**故 $L_1$ 常用於特徵篩選**。 此外由於 $L_1$ 的邊是直線,每個邊上的 loss 都差不多,因此會造成 **$L_1$ 的解不穩定**(邊上的白點誤差都差不多)。 - **$L_2$ 正規化** $$L_2 = \sum\limits_{i=1}^n{θ_i}^2$$ $L_2$ 正規化就是在 loss function 之後加入每個參數的平方值,常用於**降低整體參數的大小**。且 $L_2$ 的解也比 $L_1$ 穩定許多。 3. **Batch size** - 大 batch size: - 訓練時間較少 - Loss 下降方向較準 - 泛化能力下降 - 小 batch size: - 訓練時間較長 - 泛化能力上升 - 增加了噪音,有助於逃離局部最小值 4. **增加資料** 增加資料或資料擴充。 5. **減少模型複雜度** 過於複雜的模型會讓模型強制擬合數據點。 6. **Early stopping**  在調參集準確度開始下降時停止。 7. **Bagging** 用不同的模型擬合不同部分的訓練集。以隨機森林為例,就是訓練了一堆互不關聯的決策樹。 8. **Boosting** 既然訓練複雜神經網絡比較慢,那我們就可以只使用簡單的神經網絡(層數、神經元數限制等)。通過訓練一系列簡單的神經網絡,加權平均其輸出。 --- ## 梯度消失/梯度爆炸 1. **權重初始化** 若權重使用常態分佈,容易造成梯度消失或表現力受限,故須使用 Xavier 或 He 等權重預設值。 3. **Activation function**  Sigmoid 的微分如下:  最大值只有 1/4,最小值為 0,當反向傳播連乘時會越乘越小,導致梯度消失。 而 ReLU 如下:  微分後如下:  雖然改善了部分梯度消失,卻有可能讓神經元死亡,可用 leaky ReLU 取代。 7. **Batch Normalization** 經過多層激活函數後,輸入值會越來越偏向激活函數的上下界,Batch Normalization 將資料輸入值強行拉回至平均是 0,標準差是 1 的常態分佈。 8. **Layer Normalization** --- ## 梯度消失專用 1. **LSTM** LSTM 的梯度是由三個閘門相加組成,可以大幅減少 RNN 梯度消失的機率。 **註 1:時間方向的梯度消失在 RNN 實際上是一個假議題。RNN 相同的權重參數 W 會在各個時間步復用,最終 W 的梯度g = g1 + g2 + ... + gT,即各個時間步的梯度之和。即使網絡中存在梯度消失,那也是逐層發生的,也就是說 g1/g2 這樣的靠前的層梯度較小,而 gT 等靠後的層梯度較大,因此他們的總和 g 仍然是不會消失的,只是被靠後的 gT 主導了而已。因此,總梯度不會消失,不必處理 —— 當然這麼做可能帶來的後果是,網絡只能學到近距離的依賴,難以學到遠距離的依賴。** **註 2:反之梯度爆炸則是被靠前的梯度 g1 主導。且 LSTM 無法解決梯度爆炸。** 2. **殘差連結** LSTM 僅改善時間方向的梯度消失,深度方向的梯度消失則需藉由殘差連結改善。 --- ## 梯度爆炸專用 1. **梯度裁剪(gradients clipping)** $$if \space ||\hat g|| \geq threshold:$$ $$\hat g = \frac{threshold}{||\hat g ||} \hat g$$ 當梯度的 L2 norm 超過閥植,則按照上面的方式修正梯度。 --- ## reference 1. 精通機器學習,使用 Scikit-Learn, Keras 與 Tensorflow-Aurelien Greon 2. Deep Learning:用 Python 進行深度學習的基礎理論實作 - 齋藤康毅 3. Deep Learning 2:用 Python 進行自然語言處理的基礎理論實作 - 齋藤康毅 4. [梯度消失问题为什么不通过 gradient scaling 来解决?](https://www.zhihu.com/question/275856902) 5. [机器学习中用来防止过拟合的方法有哪些?](https://www.zhihu.com/question/59201590) 6. [batch normalization为什么可以防止过拟合?](https://www.zhihu.com/question/275788133) 7. [深度学习技巧之Early Stopping(早停法)](https://blog.csdn.net/df19900725/article/details/82973049)
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.