學習筆記:ReLU的各種變形函數

  • 2020 年 3 月 12 日
  • 筆記

ReLU函數代表的的是「修正線性單元」,即Rectified Linear Unit。其表達式如下所示。可以看到ReLU函數是一個分段線性函數,當x為負值時,輸出均為0;當x為正值時,輸出保持不變。這種單側抑制的操作,使神經網路中的神經元具備了稀疏激活性。此外,從運算角度看,因為只用判斷輸入是否大於0,所以,計算速度是非常快的。

ReLU函數及其一階導數的影像如下圖所示。

在ReLU函數的基礎上,又出現了幾種變形函數。這裡我們暫且不討論這些函數作為激活函數的優勢與不足。

Leaky ReLU函數

Leaky ReLU函數的表達式如下所示。Leaky是「泄漏」的意思,不難理解,與ReLU函數相比,當x為負值時,輸出不再為0,也就是有「泄漏」。這裡a通常取值為0.01。

採用Python描述Leaky ReLU非常方便,如下圖所示。這裡用到了numpy中的maximum函數。

下圖給出了ReLU、a為0.01時的Leaky ReLU和a為0.99時的Leaky ReLU的函數影像。

PReLU函數

Parameter-ReLU,簡稱PReLU,是對Leaky ReLU的改進,PReLU的出發點是不將a 設置為0.01,而是根據數據來定,這樣就可以自適應地從數據中學習參數。

RReLU函數

Randomized ReLU,簡稱RReLU,是對Leaky ReLU的另一種改進。在訓練時,a是給定範圍內取樣的隨機變數,而測試時a變為固定值。其表達式如下所示。這裡a服從均勻分布,且滿足0≤a<1。

為了模擬RReLU的特徵,我們用Python建模,如下圖所示。這裡仍然使用上文Python描述的Lrelu,區別在於參數a服從均勻分布,且取值為大於等於0小於1的值,如程式碼第8行所示。

上述Python程式碼可獲得如下影像。這裡需要注意的是當x小於0時,每一個xji對應的aji是個隨機變數,而非固定值。

進一步對比,我們把ReLU、Leaky ReLU、PReLU和RReLU的函數影像描繪出來,如下圖所示。

Bounded ReLU函數

Bounded ReLU函數簡稱BReLU,其表達式如下所示。

n值是可以調整的,在TensorFlow中提供了BReLU-6,或是直接寫成ReLU6。採用Python描述程式碼如下圖所示,可以看到,程式碼非常簡潔。

當n為6時,BReLU也就是ReLU6的函數影像如下圖所示。

至此,我們可以看到,除了ReLU外,還存在Leaky ReLU、PReLU、RReLU和BReLU等激活函數。