Deep Learning 激活函數總結

 

 

引入激活函數的意義:

    激活函數是用來加入非線性因素的,提高神經網絡對模型的表達能力,解決線性模型所不能解決的問題(比如線性不可分的問題)。
    

    激活函數的作用:

          在沒有激活函數的神經網絡中所有的變換都是線性的,所以無論網絡結構如何輸出總是輸入的線性組合

        用多個感知機來進行組合, 獲得更強的分類能力

è¿éåå¾çæè¿°

 所以在面對線性不可分的數據時一般有兩種辦法: 引入激活函數引入核函數

    引入核函數:將在低維空間的線性不可分數據通過核函數映射到線性可分的高維空間中找到一個超平面進行分割,本質上使用的還是線性分類器。

    引入激活函數:將線性分類器轉化爲非線性分類器

 

 常見的激活函數:

    Sigmoid & tanh

從數學上來看,非線性的Sigmoid函數對中央區的信號增益較大,對兩側區的信號增益小,在信號的特徵空間映射上,有很好的效果。

從神經科學上來看,中央區酷似神經元的興奮態,兩側區酷似神經元的抑制態,因而在神經網絡學習方面,可以將重點特徵推向中央區,將非重點特徵推向兩側區。

無論是哪種解釋,看起來都比早期的線性激活函數(y=x),階躍激活函數(-1/1,0/1)高明瞭不少。

 

 Sigmoid 

sigmoid function在歷史上流行過一段時間因爲它能夠很好的表達“激活”的意思,未激活就是0,完全飽和的激活則是1。

而現在sigmoid已經不怎麼常用了,主要是因爲它有三個缺點:

  1.  Sigmoids saturate and kill gradients. Sigmod導致的梯度消失問題是致命的,將會導致學習無法進行。當輸入非常大或者非常小的時候(saturation),這些神經元的梯度是接近於0的,從圖中可以看出梯度的趨勢。
  2. Sigmoids outputs are not zerocentered.  Sigmoid函數輸出不是0均值的,會導致梯度全部爲正或全部爲負
  3. Exp() is a bit compute expensive. 因爲有指數運算導致運算消耗較大

 

 

    使用BN(Batch Normalization )能同時緩解前兩個問題。個人理解BN就是通過一定的規範化手段,把每層神經網絡任意神經元這個輸入值的分佈強行拉回到均值爲0方差爲1的標準正態分佈。

tanh   

tanh解決了sigmoid的第二個問題但依然有梯度消失的危險同時依然有指數運算。tanh是sigmoid的變種:

                                                                    tanh(x)=2sigmoid(2x)−1

 

RELU

è¿éåå¾çæè¿°

 

近年來,ReLU 變的越來越受歡迎。它的數學表達式是: f(x)=max(0,x)

看到這裏大家一定有個疑問:relu明明是線性分段函數,爲什麼使用relu會增加非線性元素?

鄒博老師的解釋是:relu構成的神經網絡雖然對每個樣本都是線性變換,但是不同樣本之間經歷的線性變換M並不一樣,所以整個樣本空間在經過relu構成的網絡時其實是經歷了非線性變換的。

 

relu的優點

  1. 梯度下降速度快速提升,比tanh快了6倍: 因爲relu爲線性不飽和函數,在反向傳播算法中下降梯度等於  下降敏感度乘以前一層的輸出值,所以前一層輸出越大,下降的梯度越多。該優點解決了sigmod的問題1的一部分問題。
  2. relu不用計算指數,計算簡單,速度快

 

relu的缺點:神經元死亡

    由於relu在x<0時梯度爲0, 導致負的梯度在這個relu被置零,而且再也不會被任何數據激活。如果這種情況發生了,那麼神經元之後的梯度就永遠是0了, 也就是relu的神經元壞死,不會對任何數據有所響應。學習率(learning rate)設置的太高,網絡中大約40%的神經元將會死亡(整個訓練過程中都不會激活)

     針對以上的缺點,人們提出了LRelu(Leaky-Relu), PRelu(Parametric ReLU),  RRelu(Randomized Leaky Relu)三種拓展激活函數。

 

Leaky Relu

 ReLU是將所有的負值都設爲零,相反,Leaky ReLU是給所有負值賦予一個非零斜率。以數學的方式我們可以表示爲:

 

α是(0,1)區間內的固定參數。這裏的 α 是一個很小的常數。這樣,即修正了數據分佈,又保留了一些負軸的值,使得負軸信息不會全部丟失。 

 

Parametric ReLU

對於 Leaky ReLU 中的ai,通常都是通過先驗知識人工賦值的。 
然而可以觀察到,損失函數對ai的導數我們是可以求得的,可不可以將它作爲一個參數進行訓練呢? 
Kaiming He的指出,不僅可以訓練,而且效果更好。推導公式:

 

Randomized Leaky Relu

“隨機糾正線性單元”RReLU也是Leaky ReLU的一個變體。在RReLU中,負值的斜率在訓練中是隨機的,在之後的測試中就變成了固定的了。RReLU的亮點在於,在訓練環節中,aji是從一個高斯分佈U(I,u)中隨機抽取的數值,然後再測試過程中進行修正(有點像dropout的用法)。 

 

Maxout

Maxout是深度學習網絡中的一層網絡,就像池化層、卷積層一樣等,我們可以把maxout 看成是網絡的激活函數層

同時Maxout可以看成一個激活函數,但又與之前學習的激活函數不同,是對Relu和leaky Relu的一般化歸納

傳統激活函數:

  1. maxout激活函數並不是一個固定的函數,不像Sigmod、Relu、Tanh等函數,是一個固定的函數方程。
  2. 它是一個可學習的激活函數。
  3. 它是一個分段線性函數。

然而任何一個凸函數,都可以由線性分段函數進行逼近近似。其實我們可以把以前所學到的激活函數:relu、abs激活函數,看成是分成兩段的線性函數,如下示意圖所示:

maxout的擬合能力是非常強的,它可以擬合任意的的凸函數。最直觀的解釋就是任意的凸函數都可以由分段線性函數以任意精度擬合(學過高等數學應該能明白),而maxout又是取k個隱隱含層節點的最大值,這些”隱隱含層"節點也是線性的,所以在不同的取值範圍下,最大值也可以看做是分段線性的

作者Goodfellow從數學的角度上也證明了這個結論,即只需2個maxout節點就可以擬合任意的凸函數了(相減),前提是”隱隱含層”節點的個數可以任意多,如下圖所示:

   

可以說relu和Leaky-relu都是maxout的特殊情況,這樣maxout神經元就擁有relu單元的所有優點(線性不飽和)而沒有它的缺點(死亡的relu單元),但是使用maxout網絡會使參數數量成倍增長。

 

Elu

 ELU(Exponential Linear)是“指數線性單元”,它試圖將激活函數的平均值接近零,從而加快學習的速度。同時,它還能通過正值的標識來避免梯度消失的問題。根據一些研究,ELUs分類精確度是高於ReLUs的.

 

SElu

SElu是Elu的改進版

其中超參 α 和 λ 的值是 證明得到 的(而非訓練學習得到):

α = 1.6732632423543772848170429916717
λ = 1.0507009873554804934193349852946

SElu相比於Elu的優點:

  1. 不存在死區

  2. 存在飽和區(負無窮時, 趨於 - αλ

  3. 輸入大於零時,激活輸出對輸入進行了放大

 

總結:

  •  PReLU中的ai是根據數據變化的;
  • Leaky ReLU中的ai是固定的;
  • RReLU中的aji是一個在一個給定的範圍內隨機抽取的值,這個值在測試環節就會固定下來。
  •  maxout的擬合能力是非常強的,但參數多

 

 

參考文獻:

  1. https://blog.csdn.net/fire_light_/article/details/79542602
  2. https://blog.csdn.net/bojackhosreman/article/details/69372087
  3. https://blog.csdn.net/qq_23304241/article/details/80300149
  4. https://blog.csdn.net/u013230189/article/details/82799469
  5. https://www.cnblogs.com/tornadomeet/p/3428843.html
  6. https://www.cnblogs.com/lzida9223/p/10972783.html
  7. https://blog.csdn.net/hduxiejun/article/details/70815620
  8. https://www.jianshu.com/p/3a43a6a860ef

 

 

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