深度學習之啟用函式詳解

2021-09-12 02:34:51 字數 1908 閱讀 4161

啟用函式是什麼

啟用函式,即activation function,有時候也稱作激勵函式。它是為了解決線性不可分的問題引出的。但是也不是說線性可分就不能用啟用函式,也是可以的。它的目的是為了使資料更好的展現出我們想要的效果。

啟用函式在**用?

比如乙個神經網路

為了更清晰的表示,我用紅色標出。比如像上面的網路z = w*x,這個線性運算就是上面節點白色的部分,另一部分當然就是f(z)了。則第一層隱層(除了輸入和輸出層,其他都為隱層,因為'看不見')輸出的就是f(z)。但是不是說所有層都要經過啟用函式。根據自己的情況而定。

為什麼要用啟用函式

這個用簡單的數學推導即可。

比如有兩層隱層網路:z_1 = w_1*x, z_2 = w_2*z_1  (x為輸入層,w_1, w_2為兩個隱層,z_2為輸出層)

則z_2 = w_2*z_1 = w_2*w_1*x = w*x

可以看出,無論經過多少次隱層,跟經過一層的是一樣的。簡單的應該看出來啟用函式的作用了吧。

啟用函式該怎麼用

就乙個乙個說說常用的吧。

sigmoid函式,範圍是(0,1)。如果你想要你的資料近可能的處在0或1上,或者你要進行二分類,就用這個函式吧。其他的情況盡量不要用。或者幾乎從來不用。因為,下面的這個函式幾乎在任何場合都比sigmoid更加優越。

tanh函式,範圍是(-1,1)。如果想讓資料盡可能在-1和1之間,就考慮這個吧。

但是,sogmoid和tanh有個很明顯的缺點:在z很大或者很小的時候,導數幾乎是零,也就是在梯度下降優化時幾乎更新不了。然而在機器學習中最受歡迎的莫過於修正線性單元

relu(rectified linear unit)。下面就是:

relu = max(0, z) 當z小於零時,導數為0,當z大於0時,導數為1。這個啟用函式幾乎變成預設的啟用函式,如果你不知道用什麼啟用函式的話。

雖然遇到向量z(0,0,0,0,0,0,0,0,...,0)的機率賊小,但是為了萬無一失,有人就提出了下面的relu版本:

leaky relu = max(0.01z, z) 叫做帶洩漏relu,0.01這個值是經驗值,在z小於0的時候有個特別特別緩的直線。這個比relu好用,但是實際用的真的不多。

relu和leaky relu的好處在於當z大於0時,導數和0差的很遠。所以在實際實踐中,用relu和leaky relu會使得神經網路學習速率快很多。雖然有z有小於0的可能,但是在實際中,有足夠多的隱層單元是的z大於0

啟用函式的導數

深度學習之啟用函式詳解

啟用函式是什麼?啟用函式,即activation function,有時候也稱作激勵函式.提到啟用函式,就不得不先說一下神經網路.神經網路中最基本的成分是神經元 neuron 模型,每個神經元與其他神經元相連.如果某神經元的電位超過了乙個 閾值 threshold 那麼它就會被啟用,即 興奮 起來....

深度學習之啟用函式

sigmoid啟用函式 sigmoid將乙個實數輸入對映到 0,1 範圍內,如下圖 左 所示。使用sigmoid作為啟用函式存在以下幾個問題 梯度飽和。當函式啟用值接近於0或者1時,函式的梯度接近於0。在反向傳播計算梯度過程中 l w l t l 1 f z l 每層殘差接近於0,計算出的梯度也不可...

深度學習之啟用函式

啟用函式 activate function 在神經元中非常重要,為了增強網路的表示能力和學習能力,啟用函式需要具備以下幾點性質 1 連續並可導的非線性函式,以便於利用數值優化的方法來學習網路引數。2 啟用函式及其導數要盡可能簡單,以提高網路計算的效率。3 啟用函式的導函式的值域要在乙個合適的區間內...