常見的激活函數


1. 什么是激活函數

  在神經網絡中,我們經常可以看到對於某一個隱藏層的節點,該節點的激活值計算一般分為兩步
  (1)輸入該節點的值為 x1,x2x1,x2 時,在進入這個隱藏節點后,會先進行一個線性變換,計算出值 z[1]=w1x1+w2x2+b[1]=W[1]x+b[1]z[1]=w1x1+w2x2+b[1]=W[1]x+b[1] ,上標 11 表示第 11 層隱藏層。
  (2)再進行一個非線性變換,也就是經過非線性激活函數,計算出該節點的輸出值(激活值) a(1)=g(z(1))a(1)=g(z(1)) ,其中 g(z)g(z) 為非線性函數。


2. 常用的激活函數

  在深度學習中,常用的激活函數主要有:sigmoid函數,tanh函數,ReLU函數。下面我們將一一介紹。

2.1 sigmoid函數

  在邏輯回歸中我們介紹過sigmoid函數,該函數是將取值為 (,+)(−∞,+∞) 的數映射到 (0,1)(0,1) 之間。sigmoid函數的公式以及圖形如下:

 

g(z)=11+ezg(z)=11+e−z

 

  對於sigmoid函數的求導推導為:

  sigmoid函數作為非線性激活函數,但是其並不被經常使用,它具有以下幾個缺點
   (1)當 zz 值非常大或者非常小時,通過上圖我們可以看到,sigmoid函數的導數 g(z)g′(z) 將接近 00 。這會導致權重 WW 的梯度將接近 00 ,使得梯度更新十分緩慢,即梯度消失。下面我們舉例來說明一下,假設我們使用如下一個只有一層隱藏層的簡單網絡:

   對於隱藏層第一個節點進行計算,假設該點實際值為 aa ,激活值為 a[1]a[1] 。於是在這個節點處的代價函數為(以一個樣本為例): $$ J^{[1]}(W) = \frac{1}{2} (a{[1]}-a)2 $$
   而激活值 a[1]a[1] 的計算過程為:

 

z[1]=w11x1+w12x2+b[1]z[1]=w11x1+w12x2+b[1]

 

 

a[1]=g(z[1])a[1]=g(z[1])

 

   於是對權重 w11w11 求梯度為:

 

ΔJ[1](W)Δw11=(a[1]a)(a[1])=(a[1]a)g(z[1])x1ΔJ[1](W)Δw11=(a[1]−a)⋅(a[1])′=(a[1]−a)⋅g′(z[1])⋅x1

 

   由於 $ g'(z^{[1]}) =g(z{[1]})(1-g(z{[1]})) ,當 z^{[1]} $ 非常大時,g(z[1])11g(z[1])0g(z[1])≈1,1−g(z[1])≈0 因此, g(z[1])0,ΔJ[1](W)Δw110g′(z[1])≈0,ΔJ[1](W)Δw11≈0。當 z[1]z[1] 非常小時,g(z[1])0g(z[1])≈0 ,亦同理。(本文只從一個隱藏節點推導,讀者可從網絡的輸出開始,利用反向傳播推導)
   (2)函數的輸出不是以0為均值,將不便於下層的計算,具體可參考引用1中的課程。
  sigmoid函數可用在網絡最后一層,作為輸出層進行二分類,盡量不要使用在隱藏層。

2.2 tanh函數

  tanh函數相較於sigmoid函數要常見一些,該函數是將取值為 (,+)(−∞,+∞) 的數映射到 (1,1)(−1,1) 之間,其公式與圖形為:

 

g(z)=ezezez+ezg(z)=ez−e−zez+e−z

 

  tanh函數在 00 附近很短一段區域內可看做線性的。由於tanh函數均值為 00 ,因此彌補了sigmoid函數均值為 0.50.5 的缺點。
  對於tanh函數的求導推導為:

  tanh函數的缺點同sigmoid函數的第一個缺點一樣,當 z很大或很小時,g(z)g′(z) 接近於 00 ,會導致梯度很小,權重更新非常緩慢,即梯度消失問題

2.3 ReLU函數

  ReLU函數又稱為修正線性單元(Rectified Linear Unit),是一種分段線性函數,其彌補了sigmoid函數以及tanh函數的梯度消失問題。ReLU函數的公式以及圖形如下:

 

g(z)={z,0,if z>0 if z<0g(z)={z,if z>0 0,if z<0

 

  對於ReLU函數的求導為:

 

g(z)={1,0,if z>0 if z<0g′(z)={1,if z>0 0,if z<0

 

  ReLU函數的優點
   (1)在輸入為正數的時候(對於大多數輸入 zz 空間來說),不存在梯度消失問題。
   (2) 計算速度要快很多。ReLU函數只有線性關系,不管是前向傳播還是反向傳播,都比sigmod和tanh要快很多。(sigmod和tanh要計算指數,計算速度會比較慢)
  ReLU函數的缺點
   (1)當輸入為負時,梯度為0,會產生梯度消失問題。

2.4 Leaky ReLU函數

  這是一種對ReLU函數改進的函數,又稱為PReLU函數,但其並不常用。其公式與圖形如下:

 

g(z)={z,az,if z>0 if z<0g(z)={z,if z>0 az,if z<0

 

  其中 aa 取值在 (0,1)(0,1) 之間。
  Leaky ReLU函數的導數為:

 

g(z)={1,a,if z>0 if z<0g(z)={1,if z>0 a,if z<0

 

  Leaky ReLU函數解決了ReLU函數在輸入為負的情況下產生的梯度消失問題


3. 為什么要用非線性激活函數?

  我們以這樣一個例子進行理解。
  假設下圖中的隱藏層使用的為線性激活函數(恆等激活函數),也就是說 g(z)=zg(z)=z 。

  於是我們可以得出:

 

z[1]=W[1]x+b[1]z[1]=W[1]x+b[1]

 

 

a[1]=g(z[1])=z[1]a[1]=g(z[1])=z[1]

 

 

z[2]=W[2]a[1]+b[2]=W[2](W[1]x+b[1])+b[2]z[2]=W[2]a[1]+b[2]=W[2](W[1]x+b[1])+b[2]

 

 

a[2]=g(z[2])=z[2]=W[2](W[1]x+b[1])+b[2]=W[1]W[2]x+W[2]b[1]+b[2]a[2]=g(z[2])=z[2]=W[2](W[1]x+b[1])+b[2]=W[1]W[2]x+W[2]b[1]+b[2]

 

 

y^=a[2]=W[1]W[2]x+W[2]b[1]+b[2]y^=a[2]=W[1]W[2]x+W[2]b[1]+b[2]

 

  可以看出,當激活函數為線性激活函數時,輸出 y^y^ 不過是輸入特征 xx 的線性組合(無論多少層),而不使用神經網絡也可以構建這樣的線性組合。而當激活函數為非線性激活函數時,通過神經網絡的不斷加深,可以構建出各種有趣的函數。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM