1 ReLU激活函數提出的背景
1)降低計算量。
早期使用的sigmoid函數,算激活函數時(指數運算),計算量大,反向傳播求誤差梯度時,求導涉及除法,計算量相對大,而採用Relu激活函數,整個過程的計算量節省很多;
2)解決梯度消失的問題
對於深層網絡,sigmoid函數反向傳播時,很容易就會出現 梯度消失 的情況(在sigmoid接近飽和區時,變換太緩慢,導數趨於0,這種情況會造成信息丟失),從而無法完成深層網絡的訓練;
3)緩解過擬合
因爲ReLU會使一部分神經元的輸出爲0,這樣就照成了網絡的稀疏性,並且減少了參數的相互依存關係,可以緩解過擬合問題的發生。
2 ReLU基本概念
那麼什麼是ReLU呢?ReLU(rectified linear unit)修正線性單元,ReLU起源於神經科學的研究:2001年,Dayan,Abott從生物學角度模擬出腦神經元接受信號更精準的激活模型,如下圖:
爲此,抽象出來了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,是將前半段設成,而不是0,通常a = 0.01。這樣,Leaky Relu的圖像如下:
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
先看看激活函數體:
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