修正線性單元(Rectified linear unit,ReLU)
Rectified linear unit
在神經網絡中,常用到的激活函數有sigmoid函數f(x)=11+exp(?x)、雙曲正切函數f(x)=tanh(x),今天要說的是另外一種activation function,rectified linear function,f(x)=max(0,x),
The rectifier is, as of 2015, the most popular activation function for deep neural networks
它的特點是被認為是more biologically plausible than widely used logistic sigmoid or hyperbolic tangent(雙曲正切 tanh),就是說更加符合神經元信號激勵原理。采用了rectified linear function作為activation function的unit被稱為rectified linear unit。它的一個平滑解析函數為f(x)=ln(1+ex),被稱之為softplus function,softplus的微分就是logistic function:f′(x)=ex/(ex+1)=1/(1+e?x)。另外一種函數叫做softmax function或者normalized exponential是logistic function的一個泛化,如下:
the softmax function常被用來various probabilistic multiclass classification methods 比如multinomial logistic regression,multiclass linear discriminant analysis, naive Bayes classifiers and artificial neural networks等。在Andrew Ng的機器學習課程中,softmax regression中就用到了softmax function。這里點一下說明。當然本文的重點還是在rectified linear function上。
有幾種變體:
noisy ReLUs
可將其包含Gaussian noise得到noisy ReLUs,f(x)=max(0,x+N(0,σ(x))),常用來在機器視覺任務里的restricted Boltzmann machines中。
leaky ReLUs
允許小的非零的gradient 當unit沒有被激活時。
Advantages
- Biological plausibility:單邊,相比于反對稱結構(antisymmetry)的tanh
- Sparse activation:基本上隨機初始化的網絡,只有有一半隱含層是處于激活狀態,其余都是輸出為0
- efficient gradient propagation:不像sigmoid那樣出現梯度消失的問題
- efficient computation:只需比較、乘加運算。
使用rectifier 作為非線性激活函數使得深度網絡學習不需要pre-training,在大、復雜的數據上,相比于sigmoid函數等更加快速和更有效率。
標準的sigmoid輸出不具備稀疏性,需要通過懲罰因子來訓練一堆接近于0的冗余數據,從而產生稀疏數據,比如L1,L2或者student-t作為懲罰因子,進行regularization。而ReLU為線性修正,是purelin的折線版,作用是如果計算輸出小于0,就讓它等于0,否則保持原來的值,這是一種簡單粗暴地強制某些數據為0的方法,然而經實踐證明,訓練后的網絡完全具備適度的稀疏性,而且訓練后的可視化效果和傳統pre-training的效果很相似。這說明了ReLU具備引導適度稀疏的能力。
從函數圖形上看,ReLU比sigmoid更接近生物學的激活模型。
實際測量數據:縱坐標軸是神經元的放電速率(Firing Rate);橫軸是毫秒(ms)
基于生物學的數學規則化激活模型(LIF)
(Softplus是ReLU的圓滑版,公式為:g(x)=log(1+e^x),從上面的結果看,效果比ReLU稍差)
ReLU在經歷預訓練和不經歷預訓練時的效果差不多,而其它激活函數在不用預訓練時效果就差多了。ReLU不預訓練和sigmoid預訓練的效果差不多,甚至還更好。
相比之下,ReLU的速度非常快,而且精確度更高。
因此ReLU在深度網絡中已逐漸取代sigmoid而成為主流。
ReLU導數(分段):
x <= 0時,導數為0
x > 0時,導數為1
早期多層神經網絡如果用sigmoid函數或者hyperbolic tangent作為激活函數,如果不進行pre-training的話,會因為gradient vanishing problem而無法收斂。
而預訓練的用處:規則化,防止過擬合;壓縮數據,去除冗余;強化特征,減小誤差;加快收斂速度。而采用ReLu則不需要進行pre-training。
實踐應用
在應用中,把除了最外層輸出用的sigmoid函數的其他所有用到sigmoid函數的地方全都改為ReLu函數,同時梯度也改為ReLu的,然后把學習速率調低。