算法基礎---ReLU激活函數及其變種

1 ReLU激活函數提出的背景

1)降低計算量。

早期使用的sigmoid函數,算激活函數時(指數運算),計算量大,反向傳播求誤差梯度時,求導涉及除法,計算量相對大,而採用Relu激活函數,整個過程的計算量節省很多;

2)解決梯度消失的問題

對於深層網絡,sigmoid函數反向傳播時,很容易就會出現 梯度消失 的情況(在sigmoid接近飽和區時,變換太緩慢,導數趨於0,這種情況會造成信息丟失),從而無法完成深層網絡的訓練;

3)緩解過擬合

因爲ReLU會使一部分神經元的輸出爲0,這樣就照成了網絡的稀疏性,並且減少了參數的相互依存關係,可以緩解過擬合問題的發生。

2 ReLU基本概念

那麼什麼是ReLU呢?ReLU(rectified linear unit)修正線性單元,ReLU起源於神經科學的研究:2001年,Dayan,Abott從生物學角度模擬出腦神經元接受信號更精準的激活模型,如下圖:

fig1

爲此,抽象出來了ReLU激活函數的形式,表現如下:

è¿éåå¾çæè¿°

ReLU函數具有如下的特點:

1)分段線性函數,所有的負數爲0,正值不變。這種成爲單側抑制的操作,使神經網絡中的神經元具備了稀疏激活性。在CNN中,當模型增加N層之後,理論上ReLU神經元的激活率會下降2的N次方倍;正是因爲稀疏性,可以有效緩解過擬合問題的產生;

2)ReLU的非線性體現在“轉折點”的位置,其表達能力更強。ReLu由於非負區間的梯度爲常數,依次不存在梯度消失的問題,使得模型的收斂速度維持在一個穩定的狀態。

sigmoid和tanh的梯度在飽和區域變大非常平緩,接近於0,這就容易造成梯度消失,減緩收斂速度。而ReLU的梯度是一個常數,有助於解決深度網絡的收斂問題。

3 ReLU激活函數的變種

3.1 變種的原因:

ReLU雖然有上面提到的“降低計算量”,“解決梯度消失問題”,“緩解過擬合問題”這三個重要的特點,但是,在實際使用過程中,會有如下的一些問題:

1)輸出不是zero-centered

2)Dead ReLU Problem,指的是某些神經元可能永遠不會被激活,導致相應的參數永遠不能被更新。

有兩個主要原因可能導致這種情況產生:

    (1) 非常不幸的參數初始化,這種情況比較少見

    (2) learning rate太高導致在訓練過程中參數更新太大,不幸使網絡進入這種狀態。

解決方法是可以採用Xavier初始化方法,以及避免將learning rate設置太大或使用adagrad等自動調節learning rate的算法。
 

爲了解決ReLU函數的這些問題,有些人對ReLU函數做了一些變種。

3.2 Leaky ReLU函數

Leaky Relu函數的提出是爲了解決Dead ReLU problem,是將前半段設成\small \alpha x,而不是0,通常a = 0.01。這樣,Leaky Relu的圖像如下:

\small LeakyRelu(x) = \left\{\begin{matrix} x (x\geq 0) & \\ \alpha x (x<0))& \end{matrix}\right.

3.3 PReLU

Parameter-ReLU,簡稱PReLU,是對LReLU的改進,PReLU的出發點是不將a = 0.01,而是根據數據來定,可以自適應地從數據中學習參數。PReLU具有收斂速度快,錯誤率低的特點。PReLU可以用於反向傳播的訓練,可以與其他層同時優化。

3.4 RReLU

Randomized ReLU,簡稱RReLU,是對LReLU的另一種改進。在訓練的時候a保持在給定範圍內取樣的隨機變量,而在之後測試中就變成了固定值。PReLU在一定程度上能起到正則效果。

3.5 LReLU,PReLU和RReLU對比

在論文Empirical Evaluation of Rectified Activations in Convolution Network中,作者對比了RReLU、LReLU、PReLU、ReLU 在CIFAR-10、CIFAR-100、NDSB網絡中的效果。

3.6 Bounded ReLU

這個是我在閱讀armnn的文檔中,知道支持了Bounded ReLU。這個概念出現的論文是:Convolutional Deep Belief Networks on CIFAR-10。http://www.cs.utoronto.ca/~kriz/conv-cifar10-aug2010.pdf

先看看激活函數體:

\small BReLU(x)=\left\{\begin{matrix} 0 & & x<0 \\ x & & 0\leq x \leq n\\ n & & x > n \end{matrix}\right.

n值是可以調整的,比如上面這個我們就稱爲Bounded ReLU-N。在TensorFlow中提供了BReLU-6,或是直接寫成了ReLU6。https://www.tensorflow.org/api_docs/python/tf/nn/relu6

爲什麼是6呢,論文中提到:

1)最多取3位(最多8位),爲.f保留4/5位

2)鼓勵模型更早地學習稀疏特性。

3)相當於想象每個ReLU單位只由6個複製的偏置伯努利單位組成,而不是含影射量。

4)使網絡爲定點推理做好準備是很有用的。如果你解開上限,你會丟失太多的位到Q和Q.f數。

From Paper:

 First, we cap the units at 6, so our ReLU activation function is y = min(max(x, 0), 6). In our tests, this encourages the model to learn sparse features earlier. In the formulation of [8], this is equivalent to imagining that each ReLU unit consists of only 6 replicated bias-shifted Bernoulli units, rather than an infinute amount. We will refer to ReLU units capped at n as ReLU-n units.

4 ReLU函數的用法

現在主流的做法,會在做完relu之後,加一步batch normalization,儘可能保證每一層網絡的輸入具有相同的分佈[1]。而最新的paper[2],他們在加入bypass connection之後,發現改變batch normalization的位置會有更好的效果。大家有興趣可以看下。

 

 

 

參考文獻

【1】各種激活函數的比較https://blog.csdn.net/piaodexin/article/details/77162766

【2】https://blog.csdn.net/cherrylvlei/article/details/53149381

【3】https://blog.csdn.net/tyhj_sf/article/details/79932893 

【4】https://www.cnblogs.com/bmsl/p/9005431.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章