1. 程式人生 > >機器學習10:Tips of DNN——啟用函式選擇

機器學習10:Tips of DNN——啟用函式選擇

一、Training和Testing情形

overfitting:Training Data上表現良好,Testing Data表現不好。

Training失敗:梯度消失等情形。

如下的例子屬於Training失敗,並非overfitting:

雖然層數增加導致訓練結果變差,但測試集得到同樣的結果,所以並沒有過度學習訓練集的特徵,其實是沒有訓練好;

二、調整方案

Training表現不好時,應該調整學習模型和策略,Training表現好而Testing表現不好時,考慮採用Dropout、regularization、Early Stopping

三、Training失敗舉例

早期手寫字母辨識採用sigmod函式作為啟用函式,該模型採用更多層時,反而會被Training壞,如下圖所示:

問題可以歸結於梯度消失:使用sigmod函式,在模型很深的情況下,靠近輸入的幾個層的微分對整個Loss Function的作用比較小,越靠近輸出的層的微分對Loss Function的影響較大。造成靠近輸出的層引數更新較快,靠近輸入的層引數更新慢,當靠近輸出的層已經收斂的時候,輸入層還處於隨機更新引數的狀態。最終,造成區域性最優。這也是由sigmod函式的特性決定的,每一層的梯度通過sigmod函式之後會變得很小,而通過很多層之後,會導致這個梯度變得特別小,導致改一次引數或者調整輸入之後,系統的輸出會特別小。

四、改善方法

1、使用ReLU作為啟用函式,使得每一層都能夠得到單獨的訓練,不會造成梯度消失。

使用ReLU的時候,有些neural會變成0,有些neural會變成線性的,如圖:

去掉0的neural,模型會變成一個瘦長的線性模型:

可以看出該模型會避免梯度消失,但是簡單的線性模型疊加不會導致模型的效能變得很弱嗎?

答案:模型依然是非線性模型,當輸入變化很小的情況下,整個模型還處於同一個線性模型;但是,當輸入變化較大是,會使得神經元改變(有些神經元變成0,另外的卻變成了線性)。因此,模型會在各種不同的線性模型中切換,整個模型依然是非線性的

2、ReLU變種

3、Maxout

通過Maxout,可以自己學出啟用函式,Maxout同樣可以學出ReLU,因此ReLU是Maxout的一個特例。

類似於Pooling,只是將Pooling放到了每一個neural。

Maxout與ReLU的關係如下

左圖:ReLU在直線z=wx+b(藍色)大於零的部分取ax,小於0的部分取0,得到綠色線的情形;而Maxout在z2=0(紅色)的情況下,就會取z1=wx+b(藍色)這條線,此時與ReLU一致

右圖:當z1和z2的引數都是可調整時,就會出現右圖(綠色)可變化的啟用函式,所以稱它是可學習的啟用函式

Maxout模型對於每一組輸入,最終得到的依然是瘦長的線性模型,與ReLU類似,不同輸入最終組合成了非線性模型,在Training的過程中,將max的輸出乘以對應的斜率即可。

五、總結

1、隨著DNN層數的增加,sigmod函式會出現梯度下降的情形,導致Training結果變差,此時,引入ReLU作為啟用函式,使得Training結果得到改善。

2、為了得到更好的效果,衍生出變種的ReLU函式,模型引數因此會增加。

3、進一步衍生出可以自己學習的啟用函式Maxout,但模型的引數又進一步增加。

綜合以上分析:對於部分分類,當不需要使用特別深層的模型時,sigmod函式就可以達到好的效果;而對於淺層模型無法達到恨到的Training效果時,考慮使用ReLU函式,甚至使用Maxout,視訓練情況而定。