一、激活函數定義
我們在研究一個神經元的時候(這裏指生物學中的神經元),我們知道其有軸突和樹突,可以傳導衝動,同時我們還知道,衝動在傳導的時候有一個閾值,低於某個值的衝動無法被傳導或者傳道的時候減弱了,所以其實神經衝動的傳導是一個非線性的過程,我們在這裏引入激活函數,也就是爲了模擬這個非線性的過程,使得我們最終得到的神經網絡是一個非線性的網絡。
我們常見的relu函數和這個過程基本一致,而別的sigmoid或者tanh與之有些區別,但是功能本質相同。
還記得在前文提到過,神經元的內部計算時是所有的輸入先經過了一個加權的求和,然後經過一個激活函數,最終得到輸出,這節課主要討論的也就是這個激活函數。
講了這麼多,卻還是沒講清楚激活函數究竟是一個什麼東西。可是我查了許多資料,最終也沒得到一個有關激活函數意義的定義,都是在說激活函數是什麼,有什麼用。但我在前面的blog中也提到過,所有的深度學習問題的學習中,經常會出現一些不知道具體的實際意義的東西,我們只要能都知道並且運用就行了。
二、四種激活函數
1、sigmoid函數
sigmoid函數也叫Logistic函數,用於隱層神經元輸出,取值範圍爲(0,1),它可以將一個實數映射到(0,1)的區間,可以用來做二分類。在特徵相差比較複雜或是相差不是特別大時效果比較好。Sigmoid作爲激活函數有以下優缺點:
優點:平滑、易於求導。
缺點:激活函數計算量大,反向傳播求誤差梯度時,求導涉及除法;反向傳播時,很容易就會出現梯度消失的情況,從而無法完成深層網絡的訓練。
Sigmoid函數由下列公式定義
其對x的導數可以用自身表示:
2、tanh函數
tanh是雙曲函數中的一個,tanh(x)爲雙曲正切。在數學中,雙曲正切“tanh”是由基本雙曲函數雙曲正弦和雙曲餘弦推導而來。
y=tanh x是一個奇函數,其函數圖像爲過原點並且穿越Ⅰ、Ⅲ象限的嚴格單調遞增曲線,其圖像被限制在兩水平漸近線y=1和y=-1之間。
其實tanh(x)=2*sigmoid(2*x)-1
雙曲正切函數的導數公式:
3、ReLU函數
y=max(0,x)
這個函數比上面的兩個看起來都要簡單,但據吳恩達所說,神經網絡世界處理使用的時候使用最多的還是這個看似簡單的函數。
這個函數是一個典型的非線性函數。
4、帶泄露的ReLU
y=max(0.01x,x)
這裏取了一個極小的係數0.01,這個可以讓上面那個函數在小於零的部分有一個接近於0但不是零的斜率,這樣可以讓他的表現更好,但是不使用這種方法一般也沒什麼影響
三、激活函數的選擇
一般來說我們傾向於使用relu函數,原因是在處理深度下降的時候,前兩個函數在數據特別大的時候導數較小,下降的較慢,學習時間變長,在實際使用的時候表現不是很好。而ReLU函數的導數始終是0或者1,這樣我們即使數據特別的大也可以有一個很好的學習效率,不會因爲數據的大小而受到影響。
所以一般來說所有的神經網絡的隱藏層中,我們一般使用ReLU函數。
對於輸出層來說,一般也是使用ReLU函數,不過對於一些特殊的情況,也可能採取別的激活函數。
對於logitic迴歸問題,因爲我們最終結果是一個0或者1,所有對輸出採用sigmoid激活函數,
而對於一些比如房價等問題,最終輸出的結果就是我們所需要的結果,所以也可以採用y=x恆等函數