在神經網路中,激活函數sigmoid和tanh除了閾值取值外有什麼不同嗎?
在神經網路中,激活函數sigmoid和tanh除了閾值取值外有什麼不同嗎?啥時選sigmoid,選tanh呢?
沒啥區別吧。兩個函數線性相關
而 neural network 的神經元之間是線性操作(矩陣相乘和相加),所以對 tanh 優化好的一套參數經過一個線性變換就能得用於 sigmoid 了:
硬要說點 motivation 的話,可以說早期 machine learning 里的 neural network 是受人的神經系統啟發的。所以每個「神經元」(neuron)自然要有一個「開關」效應。那麼最先想到的肯定是 step function. 但它根本不能求導(導函數在一點無窮大,其餘全為零),數值上有困難啊。那一個自然的想法就是用某個不那麼 abrupt 的「開關」,所以就有了 sigmoid 或者 tanh.
優化一個神經網路時用的 back propagation(wiki:Backpropagation - Wikipedia)方法涉及到對神經元做大量求導操作,用 sigmoid/tanh 有數值上的優點:
當然也有數值上的缺點:離 太遠時導數幾乎為零,gradient descent 就會更新不了了。
這個問題之前我也沒想太清楚,看了斯坦福 cs231n 的課程後,稍稍領會了一些,在這裡交流下:
從數學上看,這兩個函數可以通過線性變化等價,唯一的區別在於值域是 (0,1) 和 (-1, 1)。
作為激活函數,都存在兩端梯度彌散、計算量大的問題,sigmoid函數因為和生物上的神經元信號刺激的 firing rate 長得像,一度比較流行。。。
但是,作為非中心對稱的激活函數,sigmoid有個問題:輸出總是正數!!!
這意味著,神經網路的隱層每個節點的輸出(activation)總是正數(註:bias可以看做activation為+1),會導致什麼問題?看下圖(請忽略粗糙程度 ):
其中因為激活函數使用 sigmoid, a1&>0, a2&>0,對上圖應用鏈式法則求 w1、w2偏導:
得出結論,w1、w2的梯度方向均取決於同一個值,意味著,(w1,w2)梯度必須在第一和第三象限方向移動,如果生不逢時,初始值沒那麼幸運,優化路徑容易出現zigzag現象,匯總到 cs231 的一張ppt里,就是這樣:
最後,如果還想了解更多,可以看看視頻:斯坦福2017季CS231n深度視覺識別課程視頻(by Fei-Fei Li, Justin Johnson, Serena Yeung)(英文字幕)
bengio deep learning書6.3.2節:
When a sigmoidal activation function must be used, the tanh activation function typically performs better than the logistic sigmoid It resembles the identity function more closely.
大意是tanh更接近y=x,所以比sigmoid好。後面還有一句解釋,符號太多,大意是tanh過原點,而sigmoid不過,而且因為tanh在原點附近與y=x函數形式相近,所以當激活值較低時,可以直接進行矩陣運算,訓練相對容易。
原則上,在有bias的情況下,他們的表達能力一樣。然而,在實際運用中,因為sigmoid 相當於自帶了bias,需要實際的bias term去抵消它的影響,這對優化會造成影響。所以,tanh 被運用的更廣泛。(http://yann.lecun.com/exdb/publis/pdf/lecun-98b.pdf)即 隱層的時候 用tanh 應該可以較為確信地說 總是比sigmoid 好 (當然,這年頭用tanh的也不多了)。在output layer的時候,如果你需要 0-1 作為range,比如估計一個概率,那自然應該直接使用 sigmoid。
sigmoid(x) = 1/(1+exp(-x))
tanh(x)= 2/(1+exp(-x*2))-1
它倆能縮放平移互相重合,也就是一個能輕易變成另一個,但加減乘除在學術界太low,就保留著2個優美的名字。
需要0~1就提sigmoid,需要-1~1就提tanh。大家都這樣提,少費口舌。
如果不考慮物理上的解釋的話,比如lstm里的門函數輸出紙要在0到1之間,這兩個是沒啥區別,不過tanh因為沒有bias以及梯度值比sigmoid更大,會相對更容易優化
討論這兩個函數本身的話,除了平移和拉伸以外,本質上沒區別。但是不知道激活函數對這兩個操作是否敏感
推薦閱讀:
※你心中的deep learning(深度學習)領域世界十大名校是哪些?
※scikit learn 里沒有神經網路?
※神經網路中,bias有什麼用,為什麼要設置bias,當加權和大於某值時,激活才有意義?
※深度學習在自然語言處理中到底發揮了多大作用?有哪些不足或局限?
※什麼是 end-to-end 神經網路?
TAG:神經網路 |