1. 程式人生 > >深度學習基礎--loss與啟用函式--Relu(Rectified Linear Units)

深度學習基礎--loss與啟用函式--Relu(Rectified Linear Units)

ReLu(Rectified Linear Units),即修正線性單元

  它是不飽和的、線性的函式。可以認為是一種特殊的maxout。

Relu的優點

  1)採用sigmoid和tanh等函式,算啟用函式時(指數運算),計算量大,反向傳播求誤差梯度時,求導涉及除法,計算量相對大;而採用Relu啟用函式,整個過程的計算量節省很多。
  2)對於深層網路,sigmoid函式反向傳播時,很容易就會出現梯度消失的情況(在sigmoid接近飽和區時,梯度變化太緩慢,導數趨於0,這種情況會造成資訊丟失),減緩收斂速度。vanishing gradient在網路層數多的時候尤其明顯,是加深網路結構的主要障礙之一。相反,Relu的gradient大多數情況下是常數,有助於解決深層網路的收斂問題。
  3)Relu會使一部分神經元的輸出為0,這樣就造成了網路的稀疏性,並且減少了引數的相互依存關係,緩解了過擬合問題的發生(以及一些人的生物解釋balabala)。

ReLU 的缺點

  訓練的時候很”脆弱”,很容易就”die”了。
  舉個例子:一個非常大的梯度流過一個 ReLU 神經元,更新過引數之後,這個神經元再也不會對任何資料有啟用現象了,即這個神經元的梯度就永遠都會是0。
  實際操作中,如果你的learning rate 很大,那麼很有可能你網路中的40%的神經元都”dead”了。 當然,如果你設定了一個合適的較小的learning rate,這個問題發生的情況其實也不會太頻繁。
  後來就有了各種的變種,Leaky-ReLU、P-ReLU、R-ReLU。

Relu、sigmoid和tanh的比較

  sigmoid和tanh是飽和的、非線性的函式,導致了它們與relu的gradient特性不同,最終導致relu效果更好。
  飽和其實就是看函式自變數x很大的時候其函式值如果變動很小,那麼就稱其為飽和。
  sigmoid和tanh的缺點之一是計算所耗時間比較長,在CIFAR-10資料集上,訓練到25%的錯誤率,ReLU的速度是tanh的6倍。還有一個缺點是對於該層輸入的資料最好是要做歸一化,否則當逐層累積後輸入資料可能會變得很大,導致激勵函式的輸出值變動不大,非線性的性質被削弱。而ReLU則沒有這種問題。

具體應用

  把除了最外層輸出用的sigmoid函式的其他所有用到sigmoid函式的地方全都改為ReLu函式,然後把學習速率調低。