TensorFlow神經網絡中的激活函數

激活函數是人工神經網絡的一個極其重要的特徵。它決定一個神經元是否應該被激活,激活表明神經元接收的信息與給定的信息有關。html

0fdecb5364e140738f05324691e72c88

激活函數對輸入信息進行非線性變換。 而後將變換後的輸出信息做爲輸入信息傳給下一層神經元。算法

激活函數的做用網絡

當咱們不用激活函數時,權重和誤差只會進行線性變換。線性方程很簡單,但解決複雜問題的能力有限。沒有激活函數的神經網絡實質上只是一個線性迴歸模型。激活函數對輸入進行非線性變換,使其可以學習和執行更復雜的任務。咱們但願咱們的神經網絡可以處理複雜任務,如語言翻譯和圖像分類等。線性變換永遠沒法執行這樣的任務。架構

激活函數使反向傳播成爲可能,由於激活函數的偏差梯度能夠用來調整權重和誤差。若是沒有可微的非線性函數,這就不可能實現。機器學習

總之,激活函數的做用是可以給神經網絡加入一些非線性因素,使得神經網絡能夠更好地解決較爲複雜的問題。函數

在最新版本的TensorFlow 1.4.0(https://www.tensorflow.org/)中包含的激活函數:sigmoidsoftmax,relu,elu,selu,softplus,softsign,tanh,hard_sigmoid,linear,serialize,deserialize等,具體介紹以下:學習

Sigmoid函數以下:做用是計算 x 的 sigmoid 函數。具體計算公式爲 y=1/(1+exp(−x)),將值映射到[0.0 , 1.0]區間翻譯

    當輸入值較大時,sigmoid將返回一個接近於1.0的值,而當輸入值較小時,返回值將接近於0.0.htm

   優勢:在於對在真實輸出位於[0.0,1.0]的樣本上訓練的神經網絡,sigmoid函數可將輸出保持在[0.0,1.0]內的能力很是有用.blog

   缺點:在於當輸出接近於飽和或者劇烈變化是,對輸出返回的這種縮減會帶來一些不利影響.

   當輸入爲0時,sigmoid函數的輸出爲0.5,即sigmoid函數值域的中間點

函數圖像以下所示:

image

softmax函數也是一種sigmoid函數,但它在處理分類問題時很方便。sigmoid函數只能處理兩個類。當咱們想要處理多個類時,該怎麼辦呢?只對單類進行「是」或「不是」的分類方式將不會有任何幫助。softmax函數將壓縮每一個類在0到1之間,併除以輸出總和。它實際上能夠表示某個類的輸入機率。

好比,咱們輸入[1.2,0.9,0.75],當應用softmax函數時,獲得[0.42,0.31,0.27]。如今能夠用這些值來表示每一個類的機率。

softmax函數最好在分類器的輸出層使用。

其定義爲:

image


tanh函數以下:將值映射到[-1,1]區間

image

tanh與sigmoid很是接近,且與後者具備相似的優缺點, sigmoid和tanh的主要區別在於tanh的值爲[-1.0,1.0]

優勢在於在一些特定的網絡架構中,可以輸出負值的能力十分有用.

缺點在於注意tanh值域的中間點爲0.0,當網絡中的下一層期待輸入爲負值或者爲0.0時,這將引起一系列問題.

1-14062415032MW

Relu(Rectified Linear Units修正線性單元)函數以下:relu函數是目前用的最多也是最受歡迎的激活函數。

relu在x<0時是硬飽和。因爲當x>0時一階導數爲1。因此,relu函數在x>0時能夠保持梯度不衰減,從而緩解梯度消失問題,還能夠更快的去收斂。可是,隨着訓練的進行,部分輸入會落到硬飽和區,致使對應的權重沒法更新。咱們稱之爲「神經元死亡」。

公式和函數圖像以下

417f598b58914ed6a46a714c05b79f6f

elu函數relu激活函數的改進版本,解決部分輸入會落到硬飽和區,致使對應的權重沒法更新的問題。計算激活函數relu,即max(features, 0),全部負數都會歸一化爲0,因此的正值保留爲原值不變

    優勢:在於不受」梯度消失」的影響,且取值範圍在[0,+oo)

    缺點:在於使用了較大的學習速率時,易受達到飽和的神經元的影響

公式和圖像以下:左邊縮小方差,右邊保持方差;方差總體仍是縮小的,而均值得不到保障。

image

image

selu函數:

    左邊縮小方差,右邊放大方差,適當選取參數alpha和lambda,使得總體上保持方差與指望。若是選取:

    lambda=1.0506,alpha=1.67326,那麼能夠驗證若是輸入的x是服從標準正態分佈,那麼SELU(x)的指望爲0,方差爲1.

image

image


softplus函數:能夠看做是relu函數的平滑版本,公式和函數圖像以下:

image

image


線性函數linear

   咱們看到了step函數的問題,梯度爲零,在反向傳播過程當中不可能更新權重和誤差。此時,咱們能夠用線性函數來代替簡單的step函數。函數表達式:

f(x)=ax+b,


image

如何選擇激活函數?

激活函數好或壞,不能憑感受定論。然而,根據問題的性質,咱們能夠爲神經網絡更快更方便地收斂做出更好的選擇。

用於分類器時,Sigmoid函數及其組合一般效果更好。

因爲梯度消失問題,有時要避免使用sigmoid和tanh函數。

ReLU函數是一個通用的激活函數,目前在大多數狀況下使用。

若是神經網絡中出現死神經元,那麼PReLU函數就是最好的選擇。

請記住,ReLU函數只能在隱藏層中使用。

一點經驗:你能夠從ReLU函數開始,若是ReLU函數沒有提供最優結果,再嘗試其餘激活函數。

梯度知識補充

在微積分裏面,對多元函數的參數求∂偏導數,把求得的各個參數的偏導數以向量的形式寫出來,就是梯度。好比函數f(x,y), 分別對x,y求偏導數,求得的梯度向量就是(∂f/∂x, ∂f/∂y)T,簡稱grad f(x,y)或者▽f(x,y)。對於在點(x0,y0)的具體梯度向量就是(∂f/∂x0, ∂f/∂y0)T.或者▽f(x0,y0),若是是3個參數的向量梯度,就是(∂f/∂x, ∂f/∂y,∂f/∂z)T,以此類推。

    那麼這個梯度向量求出來有什麼意義呢?它的意義從幾何意義上講,就是函數變化增長最快的地方。具體來講,對於函數f(x,y),在點(x0,y0),沿着梯度向量的方向就是(∂f/∂x0, ∂f/∂y0)T的方向是f(x,y)增長最快的地方。或者說,沿着梯度向量的方向,更加容易找到函數的最大值。反過來講,沿着梯度向量相反的方向,也就是 -(∂f/∂x0, ∂f/∂y0)T的方向,梯度減小最快,也就是更加容易找到函數的最小值。

    

在機器學習算法中,在最小化損失函數時,能夠經過梯度降低法來一步步的迭代求解,獲得最小化的損失函數,和模型參數值。反過來,若是咱們須要求解損失函數的最大值,這時就須要用梯度上升法來迭代了。

    梯度降低法和梯度上升法是能夠互相轉化的。好比咱們須要求解損失函數f(θ)的最小值,這時咱們須要用梯度降低法來迭代求解。可是實際上,咱們能夠反過來求解損失函數 -f(θ)的最大值,這時梯度上升法就派上用場了。

關於更多梯度降低,梯度上升的信息,參考http://www.javashuo.com/article/p-cnkzgeoo-eg.html

相關文章
相關標籤/搜索