# 深度學習 02:Overfitting/梯度消失/梯度爆炸 ###### tags: `Deep Learning` ## Overfitting 1. **Dropout** 隨機省略特定比例神經元 2. **L1, L2** ![](https://i.imgur.com/azW2Hpi.jpg) 假設只有兩個特徵要學,藍色線代表 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** ![](https://i.imgur.com/33rGRjw.png) 在調參集準確度開始下降時停止。 7. **Bagging** 用不同的模型擬合不同部分的訓練集。以隨機森林為例,就是訓練了一堆互不關聯的決策樹。 8. **Boosting** 既然訓練複雜神經網絡比較慢,那我們就可以只使用簡單的神經網絡(層數、神經元數限制等)。通過訓練一系列簡單的神經網絡,加權平均其輸出。 --- ## 梯度消失/梯度爆炸 1. **權重初始化** 若權重使用常態分佈,容易造成梯度消失或表現力受限,故須使用 Xavier 或 He 等權重預設值。 3. **Activation function** ![](https://i.imgur.com/2PaS4TQ.png) Sigmoid 的微分如下: ![](https://i.imgur.com/Ze2gtkP.png) 最大值只有 1/4,最小值為 0,當反向傳播連乘時會越乘越小,導致梯度消失。 而 ReLU 如下: ![](https://i.imgur.com/D5Hg8tB.png) 微分後如下: ![](https://i.imgur.com/zZZkV0f.png) 雖然改善了部分梯度消失,卻有可能讓神經元死亡,可用 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)