激活函數ReLU

ReLU

  Relu(Rectified Linear Unit)函數也可謂是一個里程碑式的激活函數。我們之前已經談到過sigmoid函數和tanh函數的缺點,我們接下來就看relu如何迴避這些不利之處,同時又會帶來什麼新的問題。
  先看relu的函數表達式,relu(x)=max(x,0)relu(x)=max(x,0),或者寫成分段函數的表達式relu(x)={xif x00if x<0relu(x)=\left\{\begin{matrix} x & if\ x\geq 0& \\ 0 & if\ x<0 & \end{matrix}\right.。這是一個非常簡單的函數,但是對於深度學習性能的提升卻是非常大的。
Relu函數和導函數圖像,來源與網絡
  x>0的時候,函數的導數直接就是1,不存在梯度衰減的問題。雖然ReLU函數緩解了梯度消失的問題,但是同時也帶來另外一個問題,就是梯度死亡問題。可以看到在x<0的時候,函數是硬飽和的,這個時候導數直接爲0了,一旦輸入落進這個區域,那麼神經元就不會更新權重了,這個現象稱爲神經元死亡。稍微值得欣慰的一點就是通過良好的初始化和學習率設置可以使得神經元死亡的概率不那麼大。
  ReLU的另一個優點就是計算非常簡單,只需要使用閾值判斷即可,導數也是幾乎不用計算。基於以上兩個優點,ReLU的收斂速度要遠遠快於sigmoid和tanh。
  ReLU的第三大優點就是可以產生稀疏性,可以看到小於0的部分直接設置爲0,這就使得神經網絡的中間輸出是稀疏的,有一定的Droupout的作用,也就能夠在一定程度上防止過擬合。
  從函數圖像上,我們可以很直觀的知道ReLU函數同樣是不以0位中心的,儘管這種設置爲減慢訓練速度,但是瑕不掩瑜。ReLU的使用非常廣泛。但是追求完美的心理使得算法設計人孜孜不倦的優化,爲了解決ReLU帶來的以上缺點,演變出來許多ReLU函數的變體。

PReLU(Parametric)

  以上分析可見ReLU的最大缺點在於x<0部分會導致神經元死亡,如果想讓神經元不死亡,就得讓這一部分的函數能夠產生梯度,也就是這部分的函數需要是變換的。既然大於0的部分f(x)=xf(x)=x的效果很好,能不能讓x<0的時候f(x)=xf(x)=x呢?這個問題之前談到過,顯然是不行的,因爲激活函數要爲神經元提供非線性,這樣就是線性函數了,非線性能力就失去了。但是一個線性函數不行,可以把兩個線性函數複合。
  PReLU的形式是f(x)=max(ax,x)f(x)=max(ax,x),分段表達式形式prelu(x)={xif x0axif x<0prelu(x)=\left\{\begin{matrix} x & if\ x\geq 0& \\ ax & if\ x<0 & \end{matrix}\right.只要a不等於1,這樣就既保證了非線性,又保證了神經元不會死亡。這裏的超參數aa是可以學習的,但是一般直接設置一個比較小的數字。
PReLU函數和導函數圖像,圖片來源於網絡
  如果我們固定設置超參數aa,PReLU就退化得到Leaky Relu,注意到上述圖像中x<0的時候,f(x)和f’(x)分別略微小於0,和略微大於0。

E(Exponential)LU

  看這個名字,我們就知道應該是在線性單元中加入了指數部分,使用exe^x來替換x<0的部分,但是這樣的話函數就不連續了,更不存在可導的情況,爲了避免出現這種階躍的形式,將兩個分段函數拼接爲連續的。ex=1x=0e^x=1|_{x=0},我們可以將函數向下平移,得到f(x)=ex1f(x)=e^x-1,但是可能exe^x還是在x<0的部分向左下降太快,乾脆我們再乘一個因子,來減緩這種下降。f(x)=a(ex1)f(x)=a(e^x-1),來看完整的分段函數表達式prelu(x)={xif x0a(ex1)if x<0prelu(x)=\left\{\begin{matrix} x & if\ x\geq 0& \\ a(e^x-1) & if\ x<0 & \end{matrix}\right.。函數圖像見下圖,其中a=1。
a=1的時候,ELU的函數圖像,圖片來源於網絡
  ELU因爲左側採用指數下降的策略,容易證明左側是軟飽和的,一定程度上提升了噪聲魯棒性。對ELU函數求導之後很容易得出當x<0的時候f(x)=f(x)+af'(x)=f(x)+a。可見導函數的計算也是非常之簡單。但是天下沒有免費的午餐,指數的計算計算量就會大一些。
  除了普通的ELU函數外,針對ELU函數的改進也有很多,如S(Scaled)ELU函數,通過線性縮放超參數λλ來是得激活函數具有自歸一化的能力,但是沒有深入瞭解。還有一個激活函數叫GELU前面的GE叫是高斯誤差的意思(Gaussian Error),和ELU沒有什麼太大聯繫。
  對這幾種ReLU相關的激活函數做個總結,儘管ReLU會在x<0的時候神經元死亡,但是帶來一定的稀疏性,而後兩者爲了避免神經元的死亡,擴充了函數的x<0部分的函數值,引入了f(x)<0f(x)<0的部分,可以讓激活均值更接近於0,事實證明避免神經元的死亡比稀疏性更重要。
  當然相關的研究中還有很多我沒整理到由Relu衍生出來的激活函數,大家可以自行查閱相關資料。

系列文章:

神經網絡中的激活函數總述
sigmoid激活函數
tanh激活函數
ReLU系列激活函數
maxout激活函數
Swish激活函數
激活函數發展的新里程——EvoNorms

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